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分)

二、单选   共40题 (共计40分)

三、程序填空   共1题 (共计10分)

四、程序改错   共1题 (共计10分)

五、程序设计   共1题 (共计15分)


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

第1题 (1.0分)

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

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

char

第2题 (1.0分)

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

#include<stdio.h>
void main()
{
	int i = 560, h, m;
	h = i / 60;
	m = i - 60 * h;
	printf("%d分钟<=>%d小时%d分钟\n", i, h, m);
}

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

560分钟<=>9小时20分钟

第3题 (1.0分)

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

#include "stdio.h"
main()
{
	int a = 010, j = 10;
	printf("%d,%d\n", ++a, j--);
}

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

9,10

第4题 (1.0分)

int a=1,b=2;  c语言表达式(a&b)||(a|b) 的值是【1】

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

1

第5题 (1.0分)

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

#include<stdio.h>
void main()
{
	int i = -200, j = 25;
	printf("%d %d", i, j);
	printf("i=%d,j=%d\n", i, j);
}

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

-200 25i=-200,j=25

第6题 (1.0分)

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

#include<stdio.h>
void main()
{
	int a = 4, b = 3, c = 5, t = 0;
	if (a < b)t = a; a = b; b = t;
	if (a < c)t = a; a = c; c = t;
	printf("%d %d %d\n", a, b, c);
}

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

5 0 3

第7题 (1.0分)

C语言的三种基本结构是【1】结构、选择结构、循环结构.

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

顺序

第8题 (1.0分)

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

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

if

第9题 (1.0分)

下面程序段中循环体的执行次数是【1】 .

a = 10;
b = 0;
do {
	b += 2;
	a -= 2 + b;
} while (a >= 0);

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

3

第10题 (1.0分)

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

#include<stdio.h>        
void main()
{
	int a, s, n, count;
	a = 2; s = 0; n = 1; count = 1;
	while (count <= 7)
	{
		n = n * a;
		s = s + n;
		++count;
	}
	printf("s=%d", s);
}

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

s=254

第11题 (1.0分)

下面程序的运行结果是【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);
}

int plus(int x, int y)
{
	int z;
	z = x + y;
	return(z);
}

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

A+B=9

第12题 (1.0分)

表达式pow(2.8,sqrt(fabs(x))值的数据类型为【1】.

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

double

第13题 (1.0分)

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

#include<stdio.h>
int f(int n)
{
	if (n == 1)return 1;
	else return f(n - 1) + 1;

}

void main()
{
	int i, j = 0;
	for (i = 1; i < 3; i++)
		j += f(i);
	printf("%d\n", j);
}

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

3

第14题 (1.0分)

预处理命令行都必须以【1】号开始.

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

#

第15题 (1.0分)

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

#include<stdio.h>
void main()
{
	int x = 10;
	func(int x);
	func(x);
	printf("%d\n", x);
}

func(int x)
{
	x = 20;
}

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

10

第16题 (1.0分)

若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};,则初始化后,a[1][2]得到的初值是【1】  ,a[2][1]得到的初值是 【2】 .

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

0

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

6

第17题 (1.0分)

求字符串长度的库函数是【1】,只写函数名即可.

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

strlen

第18题 (1.0分)

在C语言中,二维数组元素在内存中的存放顺序是【1】.

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

按行优先存储

第19题 (1.0分)

执行语句char str[81]="abcdef";后,字符串str结束标志存储在str[【1】]

 (在括号内填写下标值)中.

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

6

第20题 (1.0分)

C语言中,数组元素的下标下限为【1】.

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

0

第21题 (1.0分)

程序运行时若依次输入25,3,40,则输出结果是【1】.

#include<stdio.h>
main()
{
	int* p1, * p2, * p3;
	int i, j, k, t;
	scanf("%d%d%d", &i, &j, &k);
	p1 = &i;
	p2 = &j;
	p3 = &k;
	if (*p1 < *p2)
	{
		t = *p1; *p1 = *p2; *p2 = t;
	}
	if (*p1 < *p3)
	{
		t = *p1; p1 = *p3; *p3 = t;
	}
	if (*p2 < *p3)
	{
		t = *p2; *p2 = *p3; *p3 = t;
	}
	printf("%d\n", *p2);
}

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

25

第22题 (1.0分)

在C程序中,只能给指针变量赋【1】值和【2】值.

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

地址

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

确定地址

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

NULL

第23题 (1.0分)

设char *s="\ta\017bc";则该指针变量s指向的字符串所占的字节数是【1】.

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

6

第24题 (1.0分)

设有如下宏定义:

#define SWAP(z, x, y) { z = x, x = y, y = z }

以下程序段通过宏调用实现变量A)b内容的交换.请填空将语句补充完整.

int a=5,b=16,c;

SWAP(【1】 ,a,b);

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

c

第25题 (1.0分)

程序运行时若依次输入2,3,40,则输出结果是【1】.

#include<stdio.h>
main()
{
	int* p1, * p2, * p3;
	int i, j, k, t;
	scanf("%d%d%d", &i, &j, &k);
	p1 = &i;
	p2 = &j;
	p3 = &k;
	if (*p1 < *p2)
	{
		t = *p1; *p1 = *p2; *p2 = t;
	}
	if (*p1 < *p3)
	{
		t = *p1; *p1 = *p3; *p3 = t;
	}
	if (*p2 < *p3)
	{
		t = *p2; *p2 = *p3; *p3 = t;
	}
	printf("%d\n", *p1);
}

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

40

二、单选   共40题 (共计40分)

第1题 (1.0分)

C语言源程序文件经过C编译程序编译连接之后生成一个后缀为()的可执行文件. 

A:.c

B:.obj

C:.exe

D:.bas

答案:C

第2题 (1.0分)

在一个C程序中().

A:main函数必须出现在所有函数之前

B:main函数可以在任何地方出现

C:main函数必须出现在所有函数之后

D:main函数必须出现在固定位置

答案:B

第3题 (1.0分)

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

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

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

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

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

答案:D

第4题 (1.0分)

C语言程序中必须有的函数是().

A:#include "stdio.h"

B:main

C:printf

D:scanf

答案:B

第5题 (1.0分)

任何一个C语言的可执行程序都是从()开始执行的.

A:程序中的第一个函数

B:main()函数的入口处

C:程序中的第一条语句

D:编译预处理语句

答案:B

第6题 (1.0分)

下列运算符中是C语言关系运算符的是().

A:~

B:!

C:&

D:!=

答案:D

第7题 (1.0分)

下列语句的结果是().

#include<stdio.h>
main()
{
	int j;
	j = 3;
	printf("%d,", ++j);
	printf("%d", j++);
}
A:3,3

B:3,4

C:4,3

D:4,4

答案:D

第8题 (1.0分)

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

#include<stdio.h>
main()
{
	int i = 010, j = 10;
	printf("%d,%d\n", ++i, j--);

}
A:11,10

B:9,10

C:010,9

D:10,9

答案:B

第9题 (1.0分)

已知int a;int b;float c;double d;,

则表达式a*b==c-d结果为()型.

A:Double

B:int

C:float

D:char

答案:B

第10题 (1.0分)

设以下变量均为int类型,则值不等于7的表达式是().

A:(x=y=6,x+y,x+1)

B:(x=y=6,x+y,y+1)

C:(x=6,x+1,y=6,x+y)

D:(y=6,y+1,x=y,x+1)

答案:C

第11题 (1.0分)

已知year为整型变量,不能使表达式(year%4==0&&year%100!=0)||year%400==0的值为"真"的数据是().

A:1990

B:1992

C:1996

D:2000

答案:A

第12题 (1.0分)

若以下变量均是整型,且num=sum=7;则计算表达式sum=num++,sum++,++num后sum的值为().

A:7

B:8

C:9

D:10

答案:B

第13题 (1.0分)

对于条件表达式(M)?(a++):(a--),其中表达式M等价于().

A:M==0

B:M==-1

C:M!=0

D:M!=1

答案:C

第14题 (1.0分)

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

#include<stdio.h>
main()
{
	float x = 3.6;
	int i;
	i = (int)x;
	printf("x=%f,i=%d\n", x, i);
}
A:x=3.600000,i=4

B:x=3,i=3

C:x=3.600000,i=3

D:x=3 i=3.600000

答案:C

第15题 (1.0分)

printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出按方式().

A:从左起输出该字符串,右补空格

B:按原字符长从左向右全部输出

C:右对齐输出该字串,左补空格

D:输出错误信息

答案:B

第16题 (1.0分)

下面的程序().

#include <stdio.h>
void main()
{
	int x = 3, y = 0, z = 0;
	if (x = y + z)
		printf(" * * * *");
	else
		printf("# # # #");
}
A:有语法错误不能通过编译

B:输出 * * * *

C:可以通过编译,但是不能通过连接,因而不能运行

D:输出# # # #

答案:D

第17题 (1.0分)

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

#include <stdio.h>
void main()
{
	int n = 9;
	while (n > 6)
	{
		n--;
		printf("%d", n);
	}
}
A:987

B:876

C:8765

D:9876

答案:B

第18题 (1.0分)

语句while(!E);中的表达式!E等价于().

A:E==0

B:E!=1

C:E!=0

D:E==1

答案:A

第19题 (1.0分)

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

#include <stdio.h>
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

第20题 (1.0分)

以下程序中,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

第21题 (1.0分)

有以下程序段

int n = 0, p;
do
{
	scanf("%d", &p);
	n++;
} while (p != 12345 && n < 3);

此处do-while循环的结束条件是().

A:p的值不等于12345并且n的值小于3

B:p的值等于12345并且n的值大于等于3

C:p的值不等于12345或者n的值小于3

D:p的值等于12345或者n的值大于等于3

答案:D

第22题 (1.0分)

结构化程序的三种控制结构分别是().

A:循环、分支、递归

B:顺序、循环、嵌套

C:循环、递归、选择

D:顺序、选择、循环

答案:D

第23题 (1.0分)

为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定:else子句总是与()配对.

A:缩排位置相同的if

B:其之前最近的if

C:其之后最近的if

D:同一行上的if

答案:B

第24题 (1.0分)

在C语言中,if语句后的一对原括号中,用以决定分支的流程的表达式().

A:只能用逻辑表达式

B:只能用关系表达式

C:只能用逻辑表达式或关系表达式

D:可用任意表达式

答案:D

第25题 (1.0分)

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

则a的值为().

A:3

B:2

C:1

D:0

答案:C

第26题 (1.0分)

在C语言中,调用函数除函数名外,还必须有().

A:函数预说明

B:实际参数

C:()

D:函数返回值

答案:C

第27题 (1.0分)

以下说法中正确的是().

A:宏替换是在程序编译时进行的

B:函数调用是在程序编译时进行的

C:宏替换时,如果实参是表达式,应先求表达式的值,再替换

D:函数调用时,如果实参是表达式,应将表达式的值传递给形参

答案:D

第28题 (1.0分)

以下正确的函数形式是().

A:
double fun(int x, int y)
{
	z = x + y;
	return z;
}

B:
fun(int x, y)
{
	int z;
	return z;
}

C:
fun(x, y)
{
	int x, y;
	double z;
	z = x + y;
	return z;
}

D:
double fun(int x, int y)
{
	double z;
	z = x + y;
	return z;
}

答案:D

第29题 (1.0分)

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

A:函数中的自动变量可以赋初值,每调用一次,赋一次初值

B:在调用函数时,实参和对应形参的类型要一致

C:全局变量的隐含类别是自动存储类别

D:函数形参可以说明为register变量

答案:C

第30题 (1.0分)

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

A:自动(auto)

B:静态(static)

C:外部(extern)

D:寄存器(register)

答案:A

第31题 (1.0分)

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

#include <stdio.h>
f(int b[], int m, int n)
{
	int i, s = 0;
	for (i = m; i < n; i = i + 2) s = s + b[i];
	return s;
}

void main()
{
	int x, a[] = { 1,2,3,4,5,6,7,8,9 };
	x = f(a, 3, 7);
	printf("%d\n", x);
}
A:10

B:18

C:8

D:15

答案:A

第32题 (1.0分)

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

#include<stdio.h>
void main()
{
	int a[3][3] = { {1,2},{3,4},{5,6} }, i, j, s = 0;
	for (i = 1; i < 3; i++)
		for (j = 0; j < i; j++)
			s += a[i][j];
	printf("%d\n", s);
}
A:14

B:19

C:20

D:21

答案:A

第33题 (1.0分)

假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是().

A:3

B:6

C:10

D:20

答案:D

第34题 (1.0分)

若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是().

A:&t[3][2]

B:t[3]

C:&t[1]

D:t[2]

答案:D

第35题 (1.0分)

若二维数组a有m列,则在a[i][j]前的元素个数为().

A:j*m+i

B:i*m+j

C:i*m+j-1

D:i*m+j+1

答案:B

第36题 (1.0分)

以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是().

A:char s[10]="abcdefg";

B:char t[]="abcdefg",*s=t;

C:char s[10];s="abcdefg";

D:char s[10];strcpy(s,"abcdefg");

答案:C

第37题 (1.0分)

经过下列的语句 int j,a[10],*p;定义后,下列语句中合法的是().

A:p=p+2;

B:p=a[5];

C:p=a[2]+2;

D:p=&(j+2);

答案:A

第38题 (1.0分)

char *match(char c)是().

A:函数定义的头部

B:函数预说明

C:函数调用

D:指针变量说明

答案:A

第39题 (1.0分)

若有下列定义和语句,则对a数组元素的非法引用是().

int a[2][3], (*pt)[3]; pt=a;

A:pt[0][0]

B:*(pt+1)[2]

C:*(pt[1]+2)

D:*(a[0]+2)

答案:B

第40题 (1.0分)

若有语句int *point,a=4;和 point=&a;下面均代表地址的一组选项是().

A:a,point,*&a

B:&*a,&a,*point

C:*&point,*point,&a

D:&a,&*point,point

答案:D

三、程序填空   共1题 (共计10分)

第1题 (10.0分)

题目:以下程序的功能是打印以下图形。
#include<stdio.h>
int main()
{
	static char a[5][9];
	int i, j;
	for (i = 0; i < 5; i++)
		for (j = i; 【 ? 】; j++)
			a[i][j] = '*';
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 9; j++)
			printf("%c", 【 ? 】);
		【 ? 】;
	}
}

答案:

=======(答案1)=======
j< i + 5
=========或=========
i + 5 >j

=======(答案2)=======
a[i][j]

=======(答案3)=======
printf("\n")

四、程序改错   共1题 (共计10分)

第1题 (10.0分)

功能:计算并输出k以内最大的10个能被13或17整除的自然数之和。

      k的值由主函数传入。

例如:若k的值为500,则函数值为4622。
#include <stdio.h>
int fun(int k)
{
	int m = 0, mc = 0;
	while ((k >= 2) || (mc < 10))
	{
		if ((k % 13 = 0) || (k % 17 = 0))
		{
			m = m + k;
			mc++;
		}
		k++;
	}
	return ;
}

int main()
{
	printf("%d\n", fun(500));
}

答案:

=======(答案1)=======
while ((2<=k)&&(mc<10))
=========或=========
while ((k>=2)&&(mc<10))
=========或=========
while ((2<=k)&&(mc<=9))
=========或=========
while ((k>=2)&&(mc<=9))

=======(答案2)=======
if(!(k%17!=0||k%13!=0 ))
=========或=========
if(k%13==0||k%17==0)

=======(答案3)=======
k--;
=========或=========
k=k-1;
=========或=========
k-=1;

=======(答案4)=======
return  m;
=========或=========
return(m);

五、程序设计   共1题 (共计15分)

第1题 (15.0分)

题目:编程从键盘输入一个字符串和一个字符,统计该字符串中指定字符出现的次数。
#include <stdio.h>
#include <string.h>
void main()
{
	char str[100], c;
	int i = 0, count = 0;
	printf("请输入一个字符串:");
	gets(str);
	printf("请输入指定的查找字符:");
	scanf("%c", &c);
	/**********Program**********/



	/**********  End  **********/
	printf("%d\n", count);
}

答案:

while (str[i])//该循环扫描字符数组
{
	if (str[i] == c)
		count++;
	i++;
}

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

;