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语言期末考试 刷题(十四)指针专题


目录

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

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

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

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

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

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


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

第1题

运行如下程序:     

#include <stdio.h>
void main()
{
	int a, b, c;
	scanf("%d,%d,%d", &a, &b, &c);
	printf("%d,%d,%d", a, b, c);
}

 运行时,输入3,4,5,输出的值为【1】.

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

3,4,5

第2题

若有定义int m=5,y=2;则执行表达式y+=y-=m*=y后y的值为【1】.

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

-16

第3题

已知a=13,b=6,则表达式a/b的十进制数值为【1】.

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

2

第4题

设x、y、z均为int型变量,请写出描述"x或y中至少有一个小于z"的表达式【1】.

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

x<z||y<z

第5题

若a是int型变量,则执行表达式a=25/3%3后a的值是【1】.

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

2

第6题

结构化程序所规定的3种基本控制结构是【1】结构、【2】结构和【3】结构.

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

顺序

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

{{无序}}

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

循环

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

选择

第7题

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

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

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

3

第8题

从函数的形式上看,函数分为无参函数和【1】两种类型.

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

有参函数

第9题

下面程序的输出是【1】 .

#include<stdio.h>
fun(int x)
{
	static int a = 3;
	a += x;
	return(a);
}
void main()
{
	int k = 2, m = 1, n;
	n = fun(k);
	n = fun(m);
	printf("%d", n);
}

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

6

第10题

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

#include<stdio.h>
void main()
{
	char s[] = "abcdef";
	s[3] = '\0';
	printf("%s\n", s);
}

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

abc

第11题

若有定义:char s[ ]="china";

 则VC++系统为数组s开辟【1】个字节的内存单元.

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

6

第12题

下列程序的运行结果为【1】.

main()
{
	int x, * p, ** q;
	x = 10;
	p = &x;
	q = &p;
	printf("%d\n", **q);
}

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

10

第13题

在C程序中,指针变量的值增1,表示指针变量指向下一个存储单元,指针变量中具体增加的字节数由系统自动根据指针变量的【1】决定.

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

所指对象数据类型

第14题

C语言中,【1】是程序的基本组成部分.

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

函数

第15题

C语言中一个函数由函数首部和【1】两部分组成.

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

函数体

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

第1题

int a = 7, b = 9, t; t = (a > b) ? a : b;

t 的值为7.

答案:N

第2题

在C语言中,变量必需先定义后使用.

答案:Y

第3题

for (i = 4; i > 1; i--)for (j = 1; j < i; j++)putchar('#');

输出为######.

答案:Y

第4题

s = 6; do s -= 2; while (!s);

能循环三次.

答案:N

第5题

实参和形参之间,数据的传递采用值传送的方法.

答案:Y

第6题

在一个C程序中,main函数必须出现在所有函数之前.

答案:N

第7题

char a1[] = "LiMing", a2[10]; strcpy(a2, a1); puts(a2);

能将a1串赋给a2并输出.

答案:Y

第8题

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

答案:N

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

第1题

C语言程序的基本单位是().

A:函数

B:过程

C:子程序

D:子例程

答案:A

第2题

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

A:必须为字母

B:必须为下划线

C:必须为字母或下划线

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

答案:C

第3题

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

#include <stdio.h>
void main()
{
	int a = 2, b = 5;
	printf("a=%%d,b=%%d\n", a, b);
}
A:a=%2,d=%5

B:a=2,b=5

C:a=%%d,b=%%5

D:a=%d,b=%d

答案:D

第4题

判断char型变量cl是否为小写字母的正确表达式是().

A:'a'<=cl<='z'

B:(cl>=a)&&(cl<=z)

C:('a'>=cl)||('z'<=cl)

D:(cl>='a')&&(cl<='z')

答案:D

第5题

以下选项中不正确的实型常量是().

A:123

B:1e4

C:3.640E-1

D:0.35

答案:A

第6题

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

A:while(s1= =s2)

B:while(s1=s2)

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

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

答案:C

第7题

在以下给出的表达式中,与 do--while(E)语句中的(E)不等价的表达式是().

A:(!E==0)

B:(E>0||E<0)

C:(E==0)

D:(E!=0)

答案:C

第8题

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

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

第9题

以下语句中,循环次数不为10次的语句是().

A: for (i = 1; i < 10; i++);

B: i = 1; do { i++; } while (i <= 10);

C: i = 10; while (i > 0) { --i; }

D: i = 1; m:if (i <= 10) { i++; goto m; }

答案:A

第10题

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

#include <stdio.h>
void main()
{
	int a = -1, b = 4, k;
	k = (++a < 0) && !(b-- <= 0);
	printf(" %d%d%d \n", k, a, b);
}
A:104

B:103

C:003

D:004

答案:D

第11题

关于return语句,下列正确的说法是().

A:可以在同一函数中出现多次

B:在主函数中不能出现

C:必须在每个函数中出现

D:只能在除主函数之外的函数中出现一次

答案:A

第12题

若使用一维数组名作函数实参,则以下正确的说法是().

A:必须在主调函数中说明此数组的大小

B:实参数组类型与形参数组类型可以不匹配

C:在被调用函数中,不需要考虑形参数组的大小

D:实参数组名与形参数组名必须一致

答案:A

第13题

以下不正确的说法是:C语言规定().

A:实参可以是常量,变量或表达式

B:形参可以是常量,变量或表达式

C:实参可以为任何类型

D:形参应与其对应的实参类型一致

答案:B

第14题

执行下面程序后,输出结果是().

#include<stdio.h>
int max(int x, int y)
{
	int z;
	if (x > y) z = x;
	else z = y;
	return(z);
}

int main()
{
	int a = 45, b = 27, c = 0;
	c = max(a, b);
	printf("%d\n", c);
	return 0;
}
A:45

B:27

C:18

D:72

答案:A

第15题

下列定义不正确的是().

A:#define PI 3.141592

B:#define S 345

C:int max(x,y);  int x,y; {  }

D:static char c;

答案:C

第16题

若输入ab,程序运行结果为().

main()
{
	static  char  a[3];
	scanf("%s", a);
	printf("%c,%c", a[1], a[2]);
}
A:a,b

B:a,

C:b,

D:程序出错

答案:C

第17题

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

A:&t[3][2]

B:t[3]

C:&t[1]

D:t[2]

答案:D

第18题

有定义:char*p1,*p2;则下列表达式中正确合理的是().

A:p1/=5

B:p1*=p2

C:p1=&p2

D:p1+=5

答案:C

第19题

字符串指针变量中存入的是().

A:字符串

B:字符串的首地址

C:第一个字符

D:字符串变量

答案:B

第20题

具有相同类型的指针变量p与数组a,不能进行的操作是().

A:p=a;

B:*p=a[0];

C:p=&a[0];

D:p=&a;

答案:D

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

第1题

题目:函数fun的功能是:统计长整数n的各位上出现数字1、2、3的次数,并用
     外部(全局)变量c1、c2、c3返回主函数。

例如:当n=123114350时,结果应该为:c1=3  c2=1  c3=2。
#include <stdio.h>
int c1, c2, c3;
void fun(long n)
{
	c1 = c2 = c3 = 0;
	while (n)
	{
		switch (【 ? 】)
		{
		case 1:
			c1++; 【 ? 】;
		case 2:
			c2++; 【 ? 】;
		case 3:
			c3++;
		}
		n /= 10;
	}
}

main()
{
	long n = 123114350L;
	fun(n);
	printf("\nThe result: \n");
	printf("n=%ld c1=%d c2=%d c3=%d\n", n, c1, c2, c3);
}

答案:

=======(答案1)=======
n % 10

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

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

第2题

功能:输入一个整数,计算它可能是哪两个整数的平方和,并打印
     结果数据。

     如:34是5和3或3和5的平方和。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main(void)
{
	int given;
	int row, column;
	int count;
	char line[100];
	printf("\nRepresenting a Given Number as the Sum of Two Squares");
	printf("\n=====================================================\n");
	printf("\nAn integer Please ---> ");
	gets(line);
	given = atoi(line);
	printf("\nCount      X      Y");
	printf("\n-----  -----  -----");
	row = 1;
	column = (int)(sqrt((double)given) + 0.5);
	count = 0;
	while (row <= given && column > 0)
		if (row * row + column * column == given)
		{
			【 ? 】;
			printf("\n%5d%7d%7d", count, row, column);
			row++;
			column--;
		}
		else if (row * row + column * column > given)
			【 ? 】;
		else
			【 ? 】;
	if (count == 0)
		printf("\n\nSorry, NO ANSWER found.");
	else
		printf("\n\nThere are %d possible answers.", count);
}

答案:

=======(答案1)=======
count++
=========或=========
++count
=========或=========
count=count+1

=======(答案2)=======
column--
=========或=========
--column
=========或=========
column=column-1

=======(答案3)=======
row++
=========或=========
++row
=========或=========
row= row + 1

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

第1题

题目:下列给定程序中函数fun的功能是:
     计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。
     其中x和y的值不相等,z和y的值不相等。

例如:当x的值为9,y的值为11,z的值为15时,函数值为-3.50。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define FU(m,n) ((m/n))
float fun(float a, float b, float c)
{
	float value;
	value = FU(a + b, a - b) + FU(c + b, c - b);
	Rteurn(Value);
}

main()
{
	float x, y, z, sum;
	printf("Input  x  y  z:  ");
	scanf("%f%f%f", &x, &y, &z);
	printf("x=%f,y=%f,z=%f\n", x, y, z);
	if (x == y || y == z)
	{
		printf("Data error!\n");
		exit(0);
	}
	sum = fun(x, y, z);
	printf("The result is : %5.2f\n", sum);
}

答案:

=======(答案1)=======
#define FU(m,n)  (m)/(n)

=======(答案2)=======
return (value);

第2题

题目:fun函数的功能是:先从键盘上输入一个3行3列矩阵的各
     个元素的值,然后输出主对角线上的元素之和sum。

     请改正程序中的错误,使它能得出正确的结果。
#include "stdio.h"
int fun()
{
	int a[3][3], sum;
	int i, j;
	sum = 0;
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
			scanf("%d", &a[i][j]);
	for (i = 0; i < 3; i++)
		sum = sum + a[i][j];
	printf("sum=%f\n", sum);
}

main()
{
	fun();
}

答案:


=======(答案1)=======
sum=sum+a[i][i];
=========或=========
sum+=a[i][i];

=======(答案2)=======
printf("sum=%d\n",sum);

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

第1题

题目:公式e=1+1/1!+1/2!+1/3!+......,求 e 的近似值,精度为10的-6次方。
#include <stdio.h>
//函数功能:计算e,精度为f;
double fun(double f)
{
	double e = 1;
	double jc = 1;//求阶乘,并存入jc中
	/**********Program**********/





	/**********  End  **********/
	return e;
}

void main()
{
	printf("e=%f\n", fun(10e-6));
}

答案: 

int i = 1;
while (1 / jc >= f)
{
	e = e + 1 / jc;
	i++;
	jc = jc * i;
}

第2题

题目:主函数main()中字符串a,b为测试数据,字符串a中字符已
      按ASCII码值降序排列,将字符串b中ASCII码为偶数的字符
      依次插入到字符串a中,使字符串a中字符仍按ASCII码值降
      序排列。再删除字符串a中的重复字符,使相同字符只出现
      一次。

编写程序:
     1、编写void insert(char a[],char b[])函数,按上述规
        则将字符串b中字符插入到字符串a中。
     2、编写 void del(char a[])函数,删除字符串a中的重复
        字符,使相同字符只出现一次。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include<math.h>
void insert(char a[], char b[])
{
	/**********Program**********/




	/**********  End  **********/
}
void del(char a[])
{
	/**********Program**********/




	/**********  End  **********/
}

void main() {
	char a[30] = "9777532";
	char b[10] = "987645231";
	FILE* fp;
	if ((fp = fopen("data.txt", "w")) == NULL)
	{
		printf("File open error\n");
		exit(0);
	}
	insert(a, b);
	fprintf(fp, "After insterting:");
	printf("After insterting:");
	fprintf(fp, "%s\n", a);
	printf("%s\n", a);
	del(a);
	fprintf(fp, "After deleting:");
	printf("After deleting:");
	fprintf(fp, "%s\n", a);
	printf("%s\n", a);
	fclose(fp);
}

答案:

void insert(char a[], char b[])
{
	int i, j;
	int n = 0;
	while (a[n]) n++;
	for (i = 0; b[i] != '\0'; i++)
	{
		if (b[i] % 2) continue;
		j = n;
		while (a[j - 1] < b[i] && j>0)
		{
			a[j] = a[j - 1];
			j--;
		}
		a[j] = b[i];
		n++;
		a[n] = '\0';
	}
}

void del(char a[])
{
	int i = 0, j, k;
	for (j = 1; a[j] != '\0'; j++)
		if (a[j] != a[i])
		{
			i++;
			a[i] = a[j];
		}
	a[++i] = '\0';
}

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

;