C语言计算机2级/C语言期末考试题(14)指针专题

 2024-03-13 01:05:03  阅读 0

祝大家在计算机二级和期末考试中取得好成绩。

系列文章:

C语言计算机2级/C语言期末考试题(一)

C语言计算机2级/C语言期末考试题(2)

C语言计算机2级/C语言期末考试题(3)

C语言计算机2级/C语言期末考试题(4)

C语言计算机2级/C语言期末考试题(5)

C语言计算机2级/C语言期末考试题(6)

C语言计算机2级/C语言期末考试题(7)

C语言计算机2级/C语言期末考试题(8)

C语言计算机2级/C语言期末考试题(9)

C语言计算机二级/C语言期末考试题(10)函数专题

C语言计算机二级/C语言期末考试题(11)数据类型与输入输出专题

C语言计算机二级/C语言期末考试题(12)数组题目1

C语言计算机二级/C语言期末考试题(13)数组专题2

目录

1.填空,共5题(共5分)

问题1

在C程序中,可以通过三个操作来移动指针,它们是[1]、[2]、[3]。

=======(答案1)=======

自我增值

========= 或 =========

++

=======(答案2)=======

减少

========= 或 =========

--

=======(答案3)========

p+n

========= 或 =========

n

========= 或 =========

加或减一个常数

问题2

假设P是指向A的指针,Y是整型变量,A=5,A的地址为EFO3; B=6,B的地址为EFO4; 执行语句P=&A后P的结果是[1]。

=======(答案1)=======

EFO3

问题3

c语言选择填空题题库_c语音选择题题库_c语言二级选择题题库

执行下面的语句后,*(p+1)的值为[1]。

char s[3]="ab",*p;

p=s;

=======(答案1)=======

问题4

在C程序中,只有NULL和[1]值可以分配给指针。

=======(答案1)=======

地址

问题5

变量的指针指向变量的[1]。

=======(答案1)=======

地址

2、判断:共5题(共5分)

问题1

将一维双精度实数数组x中下标i的变量地址赋给指针变量p的语句为:

*p,x[10];int i=5;p=&x[i];

答案:是

问题2

字符 (*p)[6]; 如果p值为1000,则p++; 那么p值为1006。

答案:是

问题3

指针是变量的地址。

答案:是

问题4

如果有int a[10],*p;p=&a[5];,那么p[-1]是合法的。

答案:是

问题5

将函数fun的入口地址赋给指针变量p的语句为p=fun;

答案:是

3、单选题共15道(共15分)

问题1

若有 int a[][2]={{1,2},{3,4}}; 则*(a+1)和*(*a+1)的含义分别为()。

A:非法,2
B:&a[1][0],2
C:&a[0][1],3
D:a[0][0],4

答案:B

问题2

如果有描述:int i,j=2,*p=&i;,那么可以完成i=j赋值函数的语句就是()。

A:i=*p;
B:*p=*&j;
C:i=&j;
D:i=**p;

答案:B

c语音选择题题库_c语言二级选择题题库_c语言选择填空题题库

问题3

如果以数组名作为实参,以指针变量作为形参,则函数调用中传递给形参的实参为()。

A:数组的长度
B:数组第一个元素的值
C:数组所有元素的值
D:数组第一个元素的地址

答案:D

问题4

如果有定义:char *p1, *p2, *p3, *p4, ch;,则不能正确赋值的程序语句是()。

A:p1=&ch; scanf("%c",p1);
B:p2=(char *)malloc(1);scanf("%c",p2);
C:*p3=getchar();
D:p4=&ch;*p4=getchar();

答案:C

问题5

int a[10]={1,2,3,4,5,6,7,8};int *p;p=&a[5];p[-3]的值为()。

A:2
B:3
C:4
D:不一定

答案:B

问题6

如果有 int *p=(int *)((int)); 那么申请存储整数123的内存空间的语句是()。

A:scanf("%d",p);
B:scanf("%d",&p);
C:scanf("%d",*p);
D:scanf("%d",**p);

答案:A

问题7

已知p和p1是指针变量,a是数组名,j是整型变量。 下列赋值语句中,错误的是()。

A:p=&j,p=p1;
B:p=a;
C:p=&a[j];
D:p=10;

答案:D

问题8

下列定义语句中,错误的是()。

A:int a[]={1,2};
B:char *a[3];
C:char s[10]="test";
D:int n=5,a[n];

答案:D

问题9

char *s1="你好",*s2;s2=s1;then()。

A:s2指向不确定的内存单元
B:不能访问"hello"
C:puts(s1);与puts(s2);结果相同
D:s1不能再指向其它单元

答案:C

问题10

若有 int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a; 则输出结果不为5的语句为()。

A:printf("%d",*(a+5));
B:printf("%d",p[5]);
C:printf("%d",*(p+5));
D:printf("%d",*p[5]);

答案:D

问题11

如果有int i=3,*p;p=&i; 以下语句中,输出结果为3()。

A:printf("%d",&p);
B:printf("%d",*i);
C:printf("%d",*p);
D:printf("%d",p);

答案:C

问题12

如果有说明:int *p, m=5, n; 下列正确的程序段是()。

c语音选择题题库_c语言选择填空题题库_c语言二级选择题题库

A:
p = &n;
scanf("%d", &p);
B:
p = &n;
scanf("%d,*p);
C:
scanf("%d", &p);
*p = n;
D:
p = &n;
*p = m;

答案:D

问题13

char *match(char c) 是 ()。

A:函数定义的头部
B:函数预说明
C:函数调用
D:指针变量说明

答案:A

问题14

假设 char *s="\ta\017bc"; 则指针变量s指向的字符串所占用的字节数为()。

A:9
B:5
C:6
D:7

答案:C

问题15

假设变量定义为“int x, *p=&x;”,则&(*p)等价于()。

A:p
B:*p
C:x
D:*(&x)

答案:A

4.程序填空共2题(共20分)

问题1

题目:使用指向变量的指针编写交换两个变量值函数,按主调函数的调用形式编写。

void swap();
void main()
{
	int x, y;
	printf("输入两个整数 x,y \n");
	scanf("%d%d", &x, &y);
	swap(&x, &y);
	printf("x=%dy=%d", x, y);
}
void swap(int* p, int* q)
{
	int t;
	t = *p;
	【 ? 】;
	【 ? 】;
}

回答:

=======(答案1)=======
*p=*q
=======(答案2)=======
*q=t

问题2

题目:给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数
     放在形参a所指数组中(此数组在主函数中已置0)。

#include 
#include 
#define N  20
void fun(int* a)
{
	int i, x, j = 0;
	x = rand() % 20;
	while (j < 【 ? 】)
	{
		for (i = 0; i < j; i++)
			if (x == a[i])
				【 ? 】;
		if (i == 【 ? 】)
		{
			a[j] = x;
			j++;
		}
		x = rand() % 20;
	}
}
main()
{
	int x[N] = { 0 }, i;
	fun(x);
	printf("The result :  \n");
	for (i = 0; i < N; i++)
	{
		printf("%4d", x[i]);
		if ((i + 1) % 5 == 0)
			printf("\n");
	}
	printf("\n\n");
}

回答:

=======(答案1)=======
N
=========或=========
20
=======(答案2)=======
break
=======(答案3)=======
j

5、程序纠错:共1题(共20分)

问题1

功能:输入一个字符串,过滤此串,滤掉字母字符,并统计新生
     成串中包含的字符个数。
例如:输入的字符串为ab234$df4,则输出为:
     The new string is 234$4
     There are 5 char in the new string.

#include 
#include 
#define N 80
int fun(char* ptr)
{
	int i, j;
	for (i = 0, j = 0; *(ptr + i) != "\\0"; i++)
		if (*(ptr + i) > 'z' || *(ptr + i) < 'a' || *(ptr + i) > 'Z' || *(ptr + i) < 'A')
		{
			(ptr + j) = (ptr + i);
			j++;
		}
	*(ptr + j) = '\0';
	return(j);
}
main()
{
	char str[N];
	int s;
	printf("input a string:"); gets(str);
	printf("The original string is :"); puts(str);
	s = fun(str);
	printf("The new string is :"); puts(str);
	printf("There are %d char in the new string.", s);
}

回答:

=======(答案1)=======
for(i=0,j=0;*(ptr+i)!='\0';i++)
=======(答案2)=======
if(*(ptr+i)>'z'|| *(ptr+i)<'a'&&*(ptr+i)>'Z'||*(ptr+i)<'A')
=========或=========
if(*(ptr+i)<'A'|| *(ptr+i)>'Z'&&*(ptr+i)<'a'||*(ptr+i)>'z')
=======(答案3)=======
*(ptr+j)=*(ptr+i);

6. 编程共1题(共25分)

问题1

题目:编写函数fun,其功能是:将a、b两个两位正整数合并成一个新的整数放在c中。
     合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十
     位和个位数依次放在变量c的个位和百位上。
例如:当a=45,b=12,调用该函数后c=4251。

#include 
void fun(int a, int b, long* c)
{
	/**********Program**********/
	/**********  End  **********/
}
void main()
{
	int a, b; long c;
	printf("Input a, b:");
	scanf("%d%d", &a, &b);
	fun(a, b, &c);
	printf("The result is: %ld\n", c);
}

回答:

* c = b / 10 + (a % 10) * 10 + (b % 10) * 100 + (a / 10) * 1000;

如果有错误或者疑问,欢迎在评论区留言讨论。

标签: 答案 期末 指针

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码