C语言计算机二级/C语言期末考试 刷题(十四)指针专题

收集了一些经典C语言计算机二级和C语言期末考试题库

整理不易,大家点赞收藏支持一下

祝大家计算机二级和期末考试都高分过

系列文章:

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

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

C语言计算机二级/C语言期末考试 刷题(三)

C语言计算机二级/C语言期末考试 刷题(四)

C语言计算机二级/C语言期末考试 刷题(五)

C语言计算机二级/C语言期末考试 刷题(六)

C语言计算机二级/C语言期末考试 刷题(七)

C语言计算机二级/C语言期末考试 刷题(八)

C语言计算机二级/C语言期末考试 刷题(九)

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

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

C语言计算机二级/C语言期末考试 刷题(十二)数组专题一

C语言计算机二级/C语言期末考试 刷题(十三)数组专题二

目录

一、填空   共5题 (共计5分)

二、判断   共5题 (共计5分)

三、单选   共15题 (共计15分)

四、程序填空   共2题 (共计20分)

五、程序改错   共1题 (共计20分)

六、程序设计   共1题 (共计25分)


一、填空   共5题 (共计5分)

第1题

在C程序中,可以通过三种运算来移动指针,它们是【1】,【2】,【3】.

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

自增

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

++

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

自减

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

--

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

p+n

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

p-n

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

加减一个常量

第2题

设P是指向A的指针,Y为整形变量,A=5,A的地址为EFO3;B=6,B的地址为EFO4;执行语句P=&A后P的结果是【1】.

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

EFO3

第3题

执行下列语句后,*(p+1)的值是【1】.

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

 p=s;

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

b

第4题

在c程序中,只能给指针赋NULL值和【1】值.

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

地址

第5题

变量的指针,其含义是指该变量的【1】.

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

地址

二、判断   共5题 (共计5分)

第1题

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

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

答案:Y

第2题

char (*p)[6]; 若p值为1000,则p++;后p值为1006.

答案:Y

第3题

指针就是一个变量的地址.

答案:Y

第4题

若有int a[10],*p;p=&a[5];则p[-1]是合法的.

答案:Y

第5题

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

答案:Y

三、单选   共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

第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 *)malloc(sizeof(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="hello",*s2;s2=s1;则().

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;以下正确的程序段是().

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

四、程序填空   共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 <stdlib.h>
#include <stdio.h>
#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

五、程序改错   共1题 (共计20分)

第1题

功能:输入一个字符串,过滤此串,滤掉字母字符,并统计新生
     成串中包含的字符个数。

例如:输入的字符串为ab234$df4,则输出为:
     The new string is 234$4
     There are 5 char in the new string.
#include <stdio.h>
#include <conio.h>
#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);

六、程序设计   共1题 (共计25分)

第1题

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

例如:当a=45,b=12,调用该函数后c=4251。
#include <stdio.h>
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;

若有错误或疑问,欢迎评论区留言讨论。

猜你喜欢

转载自blog.csdn.net/qq_57342311/article/details/129891648
今日推荐