Bootstrap

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语言期末考试 刷题(十三)数组专题二

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


目录

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

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

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

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

五、程序改错   共2题 (共计10分)

六、程序设计   共2题 (共计10分)


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

第1题

int x=2;z=x++-1; 则z的值为【1】.

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

1

第2题

int x=2,y=3,z=4; 则表达式!x+y>z的值为【1】.

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

0

第3题

C语言中的字符变量用保留字【1】来说明.

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

char

第4题

k=(a=2,b=3,a*b),则k 的值为【1】.

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

6

第5题

int x=2,y=3,z=4; 则表达式!(x+y)>z的值为【1】.

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

0

第6题

输入整型变量a的值

int a;
scanf("%d", 【1】);

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

&a

第7题

int x=4,y=z=2;z=x==(y=z); 则z的值为【1】.

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

0

第8题

已知a=12,写出表达式 (0<a)&&(a<2) 的值是【1】.

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

0

第9题

a=3,b=2,c=1;时,执行以下程序段后 c=【1】.

if (a > b) a = b;
if (b > c) b = c;
else c = b;
c = a;

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

2

第10题

a=3,b=2,c=1;时,执行以下程序段后 b=【1】.

if (a > b) a = b;
if (b > c) b = c;
else c = b;
c = a;

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

1

第11题

下面程序的运行结果是【1】 .

#include<stdio.h>
void main()
{
	int y, a;
	y = 2; a = 1;
	while (y-- != -1)
	{
		do
		{
			a *= y; a++;
		} while (y--);
	}
	printf("%d,%d", a, y);
}

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

1,-2

第12题

int i=10;,则执行下列程序后,变量 i 的正确结果是【1】.       

switch (i)
{
case 9:i += 1;
case 10:i += 1;
case 11:i += 1;
default:i += 1;
}

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

13

第13题

为了避免嵌套条件语句的二义性,C语言规定else与其前面最近的并没有与其他else配过对的【1】语句配对.

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

if

第14题

下面程序的运行结果是【1】

#include<stdio.h>
int a = 5; int b = 7;
void main()
{
	int a = 4, b = 5, c;
	c = plus(a, b);
	printf("A+B=%d\n", c);
}
plus(int x, int y)
{
	int z;
	z = x + y;
	return(z);
}

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

A+B=9

第15题

以下程序的输出结果是【1】 .

#include<stdio.h>
int x = 3;
void incre();
void main()
{
	int i;
	for (i = 1; i < x; i++)
		incre();
}
void incre()
{
	static int x = 1;
	x *= x + 1;
	printf("%d", x);
}

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

26

第16题

函数调用语句func((e1,e2),(e3,e4,e5))中含有【1】个实参.

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

2

第17题

以下程序输出的结果是【1】 .

#include<stdio.h>
int func(int a, int b)
{
	return(a + b);
}
void main()
{
	int x = 2, y = 5, z = 8, r;
	r = func(func(x, y), z);
	printf("%d\n", r);
}

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

15

第18题

函数的【1】调用是一个函数直接或间接地调用它自身.

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

递归

第19题

以下程序可求出所有水仙花数(提示:所谓水仙花数是指一个3位正整数,其各位数字的立方之和等于该正整数.如407=4*4*4+0*0*0+7*7*7,故407是一个水仙花数).请填空.

#include<stdio.h>
void main()
{
	int x, y, z, a[8], m, i = 0;
	printf("the special number are(in the arrange of 1000):\n");
	for (【1】; m++)
	{
		x = m / 100;
		y = 【2】;
		z = m % 10;
		if (x * 100 + y * 10 + z = = x * x * x + y * y * y + z * z * z)
		{
			【3】; i++;
		}
	}
	for (x = 0; x < i; x++)
		printf("%6d", a[x]);
}

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

m=100;m<1000

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

m/10%10

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

m%100/10

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

(m-m/100*100)/10

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

m/10-m/100*10

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

a[i]=m

第20题

下列程序的输出结果是【1】 .

#define N 20
fun(int a[], int n, int m)
{
	int i, j;
	for (i = m; i > n; i--)
		a[i + 1] = a[i];
}

void main()
{
	int i, a[N] = { 1,2,3,4,5,6,7,8,9,10 };
	fun(a, 2, 9);
	for (i = 0; i < 5; i++)
		printf("%d", a[i]);
}

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

1 2 3 4 4

第21题

复制字符串的库函数是【1】,只写函数名即可.

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

strcpy

第22题

从键盘输入 1 2 3 4 5 6 7 8 9 执行后输出的结果是【1】.

main()
{
	int a[3][3], i, sum = 0;
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
			scanf("%d", &a[i][j]);
	printf("\n");
	for (i = 0; i < 3; i++)
		sum = sum + a[i][i];
	printf("%d\n", sum);
}

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

15

第23题

C语言中,二维数组在内存中的存放方式为按【1】优先存放

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

第24题

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

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

地址

第25题

若有以下定义和语句:

int a[4] = { 0,1,2,3 }, * p;
p = &a[2];

则*--p的值是【1】.

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

1

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

第1题

在C程序中,语句之间必须要用分号";"分隔.

答案:Y

第2题

关系运算符<= 与 == 的优先级相同.

答案:N

第3题

在C语言中,4种基本数据类型的存储空间长度的排列顺序为:char<int<=float<double.

答案:Y

第4题

for(i = 0, k = -1; k = 1; k++, i++)
	printf("*\n");

循环体一次也不执行.

答案:N

第5题

while 和for循环都是先判断表达式的值,后执行循环体语句.

答案:Y

第6题

函数的定义和函数的调用均可以嵌套.

答案:N

第7题

若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义,所以此宏定义是错误的.

答案:N

第8题

当调用函数时,实参是一个数组名,则向函数传送的是数组的首地址.

答案:Y

第9题

int n; scanf("%d",&n); int a[n]; 是不合法的.

答案:Y

第10题

数组说明 int a[3][3]={1,2,3,4,5,6,7} ;是正确的.

答案:Y

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

第1题

C语言程序一行写不下时,应该().

A:用回车换行

B:在任意空格处换行

C:用分号换行

D:用逗号换行

答案:B

第2题

以下叙述不正确的是().

A:一个C源程序可由一个或多个函数组成

B:一个C源程序必须包含一个main()函数

C:C程序的基本组成单位是函数

D:在C程序中,注释说明只能位于一条语句的后面

答案:D

第3题

以下叙述中正确的是().

A:构成C程序的基本单位是函数

B:可以在一个函数中定义另一个函数

C:main()函数必须放在其它函数之前

D:所有被调用的函数一定要在调用之前进行定义

答案:A

第4题

C语言中标识符只能由字母、数字和下划线3种字符组成,且第一个字符().

A:必须为字母

B:必须为下划线

C:必须为字母或下划线

D:可以是字母、数字和下划线中任意一种字符

答案:C

第5题

C语言的注释定界符是().

A:{  }

B:[  ]

C:\*    *\

D:/*    */

答案:D

第6题

若变量x、y、z均为double类型且已经正确赋值,不能正确表示x/(y×z)的C语言表达式是().

A:x/y*z

B:x*(1/(y*z))

C:x/y*1/z

D:x/y/z

答案:A

第7题

以下选项中合法的实型常数是().

A:5E2.0

B:E-3

C:.2E0

D:1.3E

答案:C

第8题

若变量a与i已正确定义,且i已正确赋值,合法的语句是().

A:a==1

B:++i;

C:a=a++=5;

D:a=int(i);

答案:B

第9题

以下程序不用第三个变量,实现将两个数进行对调的操作,请填空().

#include<stdio.h>
main()
{
	int a, b;
	scanf("%d%d", &a, &b);
	printf("a=%d b=%d", a, b);
	a = a + b; b = a - b; a = _____;
	printf("a=%d b=%d\n", a, b);
}
A:a=b

B:a-b

C:b*a

D:a/b

答案:B

第10题

设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为().

A:不定值

B:4

C:3

D:1

答案:C

第11题

有定义语句:int a =1 ,b =2,c =3,x;,则以下选项中各程序段执行后,x的值不等于3的是().

A:
if (c < a) x = 1;
else if (b < a) x = 2;
else x = 3;

B:
if (a < 3) x = 3;
else if (a < 2) x = 2;
else x = 1;

C:
if (a < 3) x = 3;
if (a < 2) x = 2;
if (a < 1) x = 1;

D:
if (a < b) x = b;
if (b < c) x = c;
if (c < a) x = a;

答案:C

第12题

以下程序的执行结果是().

main()
{
	int num = 0;
	while (num <= 2)
	{
		num++;
		printf("%d,", num);
	}
}
A:0,1,2

B:1,2,

C:1,2,3,

D:1,2,3,4,

答案:C

第13题

执行语句 for(i=1;i++<4;); 后变量 i 的值是().

A:3

B:4

C:5

D:不定

答案:C

第14题

C语言中while和do—while循环的主要区别是().

A:While的循环控制条件比dowhile的循环控制条件严格

B:dowhile的循环体至少无条件执行一次

C:dowhile允许从外部转到循环体内

D:dowhile循环体不能是复合语句

答案:B

第15题

以下for循环的执行次数是().

for (x = 0, y = 0; (y = 123) && (x < 4); x++);
A:是无限循环

B:循环次数不定

C:4次

D:3

答案:C

第16题

以下程序中,while循环的循环次数是().

main()
{
	int i = 0;
	while (i < 10)
	{
		if (i < 1)continue;
		if (i == 5)break;
		i++;
	}
}
A:1

B:4

C:6

D:死循环,不能确定次数

答案:D

第17题

判断两个字符串是否相等,正确的表达方式是().

A:while(s1= =s2)

B:while(s1=s2)

C:while(strcmp(s1,s2)= =0)

D:while(strcmp(s1,s2)=0)

答案:C

第18题

int a = 1, b = 2, c = 3;
if (a > c)b = a; a = c; c = b;

则c的值为().

A:1

B:2

C:3

D:不一定

答案:B

第19题

以下程序的运行结果是().

main()
{
	int i = 1, sum = 0;
	while (i < 10)
		sum = sum + 1; i++;
	printf("i=%d,sum=%d", i, sum);
}
A:i=10,sum=9

B:i=9,sum=9

C:i=2,sum=1

D:无限循环(死循环)

答案:D

第20题

下面程序段的输出结果是().

a = 1; b = 2; c = 2;
while (a < b < c)
{
	t = a;
	a = b;
	b = t;
	c--;
}
printf("%d,%d,%d", a, b, c);
A、1,2,0

B、2,1,0

C、1,2,1

D、2,1,1

答案:A

第21题

表达式18/4*sqrt(4.0)/8值的数据类型为().

A:int

B:float

C:double

D:不确定

答案:C

第22题

为了提高程序的运行速度,在函数中对于整型或指针可以使用()型的变量.

A:auto

B:register

C:static

D:extern

答案:B

第23题

C语言程序中,当调用函数时().

A:实参和虚参各占一个独立的存储单元

B:实参和虚参可以共用存储单元

C:可以由用户指定是否共用存储单元

D:计算机系统自动确定是否共用存储单元

答案:A

第24题

以下程序的输出结果为().

main()
{
	int a = 1, b = 2, c = 3, d = 4, e = 5;
	printf("%d\n", func((a + b, b + c, c + a), (d + e)));
}

int func(int x, int y)
{
	return(x + y);

}
A:15

B:13

C:9

D:函数调用出错

答案:B

第25题

凡是函数中未指定存储类别的局部变量,其隐含的存储类别为().

A:自动(auto)

B:静态(static)

C:外部(extern)

D:寄存器(register)

答案:A

第26题

下列定义数组的语句中不正确的是().

A:static int a[2][3]={1,2,3,4,5,6};

B:static int a[2][3]={{1},{4,5}};

C:static int a[][3]={{1},{4}};

D:static int a[][]={{1,2,3},{4,5,6}};

答案:D

第27题

以下程序中函数sort()的功能是对数组a中的数据进行由大到小的排序.

#include<stdio.h>
void sort(int a[], int n)
{
	int i, j, t;
	for (i = 0; i < n - 1; i++)
		for (j = i + 1; j < n; j++)
			if (a[i] < a[j])
			{
				t = a[i]; a[i] = a[j]; a[j] = t;
			}
}

void main()
{
	int aa[10] = { 1,2,3,4,5,6,7,8,9,10 }, i;
	sort(&aa[3], 5);
	for (i = 0; i < 10; i++)
		printf("%d,", aa[i]);
	printf("\n");
}

程序运行后的输出结果是().

A:1,2,3,4,5,6,7,8,9,10

B:10,9,8,7,6,5,4,3,2,1

C:1,2,3,8,7,6,5,4,9,10,

D:1,2,10,9,8,7,6,5,4,3

答案:C

第28题

若有说明:int a[10];则对a数组元素的正确引用是().

A:a[10]

B:a[3,5]

C:a(5)

D:a[10-10]

答案:D

第29题

有下面的程序段:

char a[3], b[] = "china";
a = b;
printf("%s", a);

则().

A:运行后将输出china

B:运行后将输出ch

C:运行后将输出chi

D:编译出错

答案:D

第30题

以下程序段 char *alp[]={"ABC","DEF","GHI"}; int j; puts(alp[1]);的输出结果是().

A:A

B:B

C:D

D:DEF

答案:D

第31题

若有定义: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

第32题

若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是().

A:p=q;

B:*p=*q;

C:n=*q;

D:p=n;

答案:D

第33题

下面说明不正确的是().

A:char a[10]="china";

B:char a[10],*p=a;p="china"

C:char *a;a="china";

D:char a[10],*p;p=a="china"

答案:D

第34题

若有int *p,a; p=&a,下列说法不正确的是().

A:&*p==&a

B:*&a==a

C:(*p)++==a++

D:*(p++)==a++

答案:D

第35题

设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是().

A:c=*p1+*p2;

B:p2=c;

C:p1=p2;

D:c=*p1*(*p2);

答案:B

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

第1题

题目:函数fun的功能是:计算如“图片1”直到“图片2” 。
      若x=2.5,函数值为1.917915
#include<stdio.h>
#include<math.h>
double fun(double x)
{
	double f, t;
	int n;
	f = 1.0 + x;
	t = 【 ? 】;
	n = 1;
	do
	{
		n++;
		t *= (-1.0) * x / 【 ? 】;
		f += t;
	}
	/***********SPACE***********/
	while (【 ? 】 >= 1e-6);
	return f;
}

main()
{
	double x, y;
	x = 2.5;
	y = fun(x);
	printf("\nThe result is :\n");
	printf("x=%-12.6f y=%-12.6f\n", x, y);
}

答案:

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

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

=======(答案3)=======
fabs(t)

第2题

题目:输入一字符串,检查字符串是否满足以下条件:

     (1)字符串s中左括号“(”的个数与右括号“)”的个数相同;

     (2)从字符串s的首字符起顺序查找右括号“)”的个数在
          任何时候均不超过所遇到的左括号“(”的个数。若字
          符串同时满足上述两个条件,函数返回1,否则返回0
#include<stdio.h>
#include<string.h>
void main()
{
	int fun(char s[]);
	char s[80];
	int c;
	printf("Please input the string:");
	gets(s);
	c = fun(s);
	printf("c=%d\n", c);
}

int fun(char s[])
{
	int c1, c2, i;
	i = c1 = c2 = 0;
	while (s[i] != '\0')
	{
		if (s[i] == '(') c1++;
		else if (s[i] == ')')
		{
			c2++;
			if (【 ? 】) return(0);
		}
		i++;
	}
	return(【 ? 】);
}

答案:

=======(答案1)=======
c2>c1
=========或=========
c1<c2

=======(答案2)=======
c1==c2
=========或=========
c2==c1

五、程序改错   共2题 (共计10分)

第1题

功能:输入两个实数,按代数值由小到大输出它们,并在fun()
     函数中输出。(输出的数据都保留2位小数)
#include <stdio.h>
fun()
{
	float t;
	float a, b;
	scanf("%f %f", &a, &b);
	if (a < b)
	{
		t = a;
		a = b;
		b = t;
	}
	printf("%5.2f,%5.2f\n", &a, &b);
}
main()
{
	fun();
}

答案:

=======(答案1)=======
float t;

=======(答案2)=======
if(a>b)
=========或=========
if(a>=b)
=========或=========
if(b<a)
=========或=========
if(b<=a)

=======(答案3)=======
printf("%5.2f,%5.2f\n",a,b);

第2题

调用优化的sort函数,完成对数组a的冒泡降序排序。
下面给定的程序存在错误,请改正。
#include<stdio.h>
void sort(int[], int);
int main()
{
	int i, a[] = { 6,0,-3,9,4,-5,18,20 };
	int n = sizeof(a) / sizeof(a[0]);
	sort(n, a[n]);
	for (i = 0; i < n; i++)
		printf("%d\t", a[i]);
	printf("\n");
	return 0;
}
void sort(int a[], int n)
{
	int i, j, k, swap;
	for (i = 0; i < n - 1; i++)
	{
		swap = 0;
		for (j = n - 1; j > i; j++)
			if (a[j] > a[j - 1])
				k = a[j], a[j] = a[j - 1], a[j - 1] = k, swap = 1;
		if (swap)break;
	}
}

答案:

=======(答案1)=======
sort(a, n);
=========或=========
sort(&a[0], n);

=======(答案2)=======
for(j=n-1;j>i;j--)
=========或=========
for(j=n-1;j>i;--j)
=========或=========
for(j=n-1;j>i;j=j-1)

=======(答案3)=======
if(!swap)break;
=========或=========
if(swap ==0)break;

六、程序设计   共2题 (共计10分)

第1题

题目:输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
     输入一个正整数 n,计算12/33/54/75/9-6/11+……的前n项之和,
     输出时保留3位小数。

输入输出示例:括号内是说明

输入

3        (repeat=3)

1        (n=1)

3        (n=3)

5        (n=5)

输出

sum = 1.000

sum = 0.933

sum = 0.917
#include <stdio.h>
void main()
{
	int flag, i, n;
	int repeat, ri;
	double item, sum;
	scanf("%d", &repeat);
	for (ri = 1; ri <= repeat; ri++)
	{
		scanf("%d", &n);
		/**********Program**********/

		//只能用上述已定义的变量,如循环变量用变量i,正负符号用变量flag,
		//求和项用变量item等等



		/**********  End  **********/
		printf("sum = %.3f\n", sum);
	}
}

答案:

sum = 0;
flag = 1;
for (i = 1; i <= n; i++)
{
	item = flag * 1.0 * i / (2 * i - 1);
	sum = sum + item;
	flag = -flag;
}

第2题

请编写函数sum,其功能是:用for循环语句求1到n之间所有偶数之和(若n为偶数包括n)

并将结果返回给主函数。(n值由主函数传入)

运行程序后若输入:10,则输出为:sum=30
#include <stdio.h>
int sum(int n)
{
	/**********Program**********/


	/**********  End  **********/
}
void main()
{
	int n, s;
	scanf("%d", &n);
	s = sum(n);
	printf("sum=%d\n", s);
}

答案:

int i, s = 0;
for (i = 0; i <= n; i = i + 2)
s = s + i;
return s;

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

;