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

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

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

目录

一、填空,共20题 (共计20分)

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

三、程序填空 共2题 (共计15分)

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

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


一、填空,共20题 (共计20分)

第1题 (1.0分)

若有以下定义,则计算表达式y+=y-=m*=y后的y值是【1】.

 int m=5,y=2;

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

-16

第2题 (1.0分)

在C语言中,格式化输入操作是由库函数 【1】完成的,格式化输出操作是由库函数【2】完成的.

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

scanf

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

printf

第3题 (1.0分)

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

#includevoid main(){ int y=3,x=3,z=1;printf("%d%d\n",(++x,y++),z+2); }

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

33

第4题 (1.0分)

int x=2,y=3,z=4;

则表达式x+y&&(x=y)的值为【1】.

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

1

第5题 (1.0分)

下列程序的输出是【1】

main(){ int a=011; printf("%d\n",++a);}

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

10

第6题 (1.0分)

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

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

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

3

第7题 (1.0分)

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

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

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

2

第8题 (1.0分)

若所用变量都已经正确定义,请填写以下程序段的输出结果【1】.

s=7;while ( --s );s -= 2;printf("%d\n",s);

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

-2

第9题 (1.0分)

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

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

顺序

第10题 (1.0分)

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

#include "stdio.h"main(){ int x=2,y=4,z=40; x*=3+2; x=y=z; pritnf("%d\n",x);}

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

40

第11题 (1.0分)

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

#includeint 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

第12题 (1.0分)

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

#includedouble sub(double x,double y,double z){y-=1.0; z=z+x; return z;}void main(){double a=2.5,b=9.0; printf("%f\n",sub(b-a,a,a));}

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

9.000000

第13题 (1.0分)

函数的定义不可以嵌套,但函数的调用【1】嵌套.

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

可以

第14题 (1.0分)

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

#define MIN(x,y) (x)<(y)?(x):(y)void main(){int i,j,k; i=10;j=20; k=2*MIN(i,j); printf("%d\n",k);}

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

20

第15题 (1.0分)

有如下程序:

#includeint max(int x,int y){int z; if(x>y) z=x; elsez=y; return(z);}void main(){int a=3,b=5; printf("%d\n",max(a,b));}

运行结果为【1】 .

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

5

第16题 (1.0分)

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

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

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

1,2,6,8,10,12,7,8,9,10,

第17题 (1.0分)

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

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

0

第18题 (1.0分)

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

#define N 20fun(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

第19题 (1.0分)

程序运行结果是【1】.

main(){int oddadd(int pt[],int n);static int a[10]={1,2,3,4,5,6,7,8,9,10};int total;total=oddadd(a+1,9);printf("%d\n",total);}oddadd(int pt[],int n){int i,sum=0; for(i=0;i<n;i+=2) sum=sum+pt[i]; return(sum);}

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

30

第20题 (1.0分)

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

#includevoid main(){char s[ ]="abcdef"; s[3]='\0'; printf("%s\n",s);}

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

abc

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

第1题 (1.0分)

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

A:#include "stdio.h"B:mainC:printfD:scanf

答案:B

第2题 (1.0分)

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

A:C语言比其他语言高级B:C语言可以不用编译就能被计算机识别执行C:C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D:C语言出现的最晚,具有其他语言的一切优点

答案:C

第3题 (1.0分)

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

A:C语言程序总是从第一个定义的函数开始执行B:在C语言程序中,要调用的函数必须在main()函数中定义C:C语言程序总是从main()函数开始执行D:C语言程序中的main()函数必须放在程序的开始部分

答案:C

第4题 (1.0分)

一个C语言程序总是从()开始执行的.

A:主过程B:主函数C:子程序D:主程序

答案:B

第5题 (1.0分)

一个C语言程序是由().

A:一个主程序和若干子程序组成B:函数组成C:若干过程组成D:若干子程序组成

答案:B

第6题 (1.0分)

以下数据中,不正确的数值或字符常量是().

A:8.9e1.2B:10C:0xff00D:82.5

答案:A

第7题 (1.0分)

设a为整型变量,初值为12,执行完语句a+=a-=a*a后,a的值是().

A:552B:144C:264D:-264

答案:D

第8题 (1.0分)

下列四个选项中,均是C语言关键字的选项是().

A:auto enum includeB:switch typedef continueC:signed union scanfD:if struct type

答案:B

第9题 (1.0分)

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

int a=7,b=9,t;t=a*=a>b?a:b;printf("%d",t);
A:7B:9C:63D:49

答案:C

第10题 (1.0分)

下列语句的结果是().

main(){int j;j=3;printf("%d,",++j);printf("%d",j++);}
A:3,3B:3,4C:4,3D:4,4

答案:D

第11题 (1.0分)

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

#include void main( ){int a =-1,b =4,k;k =(++a<0)&&!(b--<= 0);printf(" %d%d%d \n",k,a,b);}
A:104B:103C:003D:004

答案:D

第12题 (1.0分)

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

#includevoid main(){ int x=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%d,",--x);}}
A:7,4,2B:8,7,5,2C:9,7,6,4D:8,5,4,2

答案:D

第13题 (1.0分)

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

#includevoid main(){int x=10,y=10,i;for(i=0;x>8;y=++i)printf("%d %d",x--,y);}
A:10 19 2B:9 87 6C:10 99 0D:10 109 1

答案:D

第14题 (1.0分)

以下不正确的 if 语句形式是().

A:if(x>y&&x!=y);B:if(x==y) x+=y;C:if(x!=y) scanf("%d",&x) else scanf("%d",&y);D:if(x<y) {x++;y++;}

答案:C

第15题 (1.0分)

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

main(){int i=0;while(i<10){if(i<1) continue;if(i==5) break;i++;}}
A:1B:4C:6D:死循环,不能确定次数

答案:D

第16题 (1.0分)

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

A:全局变量的作用域一定比局部变量的作用域范围大B:静态(static)类别变量的生存期贯穿于整个程序的运行期间C:函数的形参都属于全局变量D:未在定义语句中赋初值的auto变量和static变量的初值都是随机值

答案:B

第17题 (1.0分)

C语言中的函数().

A:可以嵌套定义B:不可以嵌套调用C:可以嵌套调用,但不能调用自己D:嵌套调用和调用自己均可

答案:D

第18题 (1.0分)

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

A:宏替换是在程序编译时进行的B:函数调用是在程序编译时进行的C:宏替换时,如果实参是表达式,应先求表达式的值,再替换D:函数调用时,如果实参是表达式,应将表达式的值传递给形参

答案:D

第19题 (1.0分)

C语言允许函数值类型缺省定义,此时该函数值隐含的类型是().

A:float型B:int型C:long型D:double型

答案:B

第20题 (1.0分)

C语言规定:简单变量做实参时,它和对应形参之间的数据传递方式是().

A:地址传递B:单向值传递C:由实参传给形参,再由形参传回给实参D:由用户指定的传递方式

答案:B

第21题 (1.0分)

设有数组定义:char array[ ]=”China”;,则数组array所占的空间为().

A:4个字节B:5个字节C:6个字节D:7个字节

答案:C

第22题 (1.0分)

假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,

则数组x在内存中所占字节数是().

A:3B:6C:10D:20

答案:D

第23题 (1.0分)

以下能对二维数组a进行正确初始化的语句是().

A:int a[2][]={{1,0,1},{5,2,3}};B:int a[][3]={{1,2,3},{4,5,6}};C:int a[2][4]={{1,2,3},{4,5},{6}};D:int a[][3]={{1,0,1}{},{1,1}};

答案:B

第24题 (1.0分)

以下程序中函数reverse()的功能是将a所指数组中的内容进行逆置.

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

#includevoid reverse(int a[ ],int n){int i,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}void main(){int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf("%d\n",s);}
A:22B:10C:34D:30

答案:A

第25题 (1.0分)

下列程序执行后的输出结果是().

#includevoid main(){char arr[2][4];strcpy(arr,"you");strcpy(arr[1],"me");arr[0][3]='&';printf("%s\n",arr);}
A:you&meB:youC:meD:err

答案:A

三、程序填空 共2题 (共计15分)

第1题 (5.0分)

说明:下面程序的功能是打印出所有的“水仙花数”,请填写 程序所缺内容。注:水仙花数是指一个三位数的各位数字的立方和是这个数本身。
#include"stdio.h"voidf(int n){int i, j, k;i = n / 100;/***********SPACE***********/j = 【 ? 】;k = n % 10;/***********SPACE***********/if (【 ? 】){printf("%5d\n", n);}}void main(){void f(int n);int i;for (i = 100; i < 1000; i++)f(i);}

答案:

=======(答案1)=======n/10%10=========或=========(n/10)%10=======(答案2)=======i*100 + j*10 + k == i*i*i + j*j*j + k*k*k=========或=========n== i*i*i + j*j*j + k*k*k=========或=========i*i*i + j*j*j + k*k*k ==n

第2题 (10.0分)

功能:将十进制数转换成十六进制数。
#include #include "string.h"void c10_16(char p[], int b){int j, i = 0;/***********SPACE***********/while (【 ? 】){j = b % 16;if (j >= 0 && j = 0; i--)printf("%c", s[i]);printf("\n");}

答案:

=======(答案1)=======b>0=========或=========0<b=========或=========b!=0=========或=========0!=b=========或=========b=======(答案2)=======p[i]= j + '0'=========或=========p[i]= j + 48=========或=========*(p+i)= j + '0'=========或=========*(p+i)= j + 48=======(答案3)=======p[i]='\0'=========或=========p[i]=0=========或=========p[i]=NULL=========或=========*(p+i)='\0'=========或=========*(p+i)=0=========或=========*(p+i)=NULL=======(答案4)=======i=strlen(s)-1=========或=========i=-1+strlen(s)

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

第1题 (10.0分)

题目:下列给定程序的功能是:读入一个整数k(2≤k≤10000),输出它的所有质因子(即所有为素数的因子)。例如:若输入整数2310,则应输出:2,3,5,7,11。
#include#includeint IsPrime(itn n){int i, m;m = 1;for (i = 2; i < n; i++)if!(n % i){m = 0;break;}return(m);}main(){int j, k;printf("\nPlease enter an interger number between 2 and 10000: ");scanf("%d", &k);printf("\nThe prime factor(s) of %d is(are): ", k);for (j = 2; j < k; j++)if ((!(k % j)) && (IsPrime(j)))printf("%4d,", j);printf("\n");}

答案:

=======(答案1)=======IsPrime(int n)=======(答案2)=======if(!(n%i))

第2题 (10.0分)

题目:下列给定程序中,函数fun的功能是:求出数组中的最大数和次最大数,并把最 大数和a[0]中的数对调、次最大数和 a[1] 中的数对调。
#include#include#define N20void fun(int a, int n);{int i, m, t, k;for (i = 0; i < 2; i++){m = 0;for (k = i + 1; k  a[m])m = k;t = a[i];a[i] = a[m];a[m] = t;}}int main(){int b[N] = { 11,5,12,0,3,6,9,7,10,8 }, n = 10, i;system("CLS");for (i = 0; i < n; i++)printf("%d ", b[i]);printf("\n");fun(b, n);for (i = 0; i < n; i++)printf("%d ", b[i]);printf("\n");}

答案:

=======(答案1)=======void fun(int *a, int n)=========或=========void fun(int a[], int n)=======(答案2)=======m=i;

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

第1题 (10.0分)

题目:请编写函数fun,该函数的功能是:求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如:若二维数组中的值为: 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为61。注意:请勿改主动函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include#include#include#define M4#define N 5int fun(int a[M][N]){/**********Program**********//********** End **********/}void main(){int aa[M][N] = { {1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0} };int i, j, y;system("CLS");printf("The original data is :\n ");for (i = 0; i < M; i++){for (j = 0; j < N; j++)printf("%6d ", aa[i][j]);printf("\n ");}y = fun(aa);printf("\nThe sun: %d\n ", y);printf("\n ");}

答案:

int i, j, sum = 0;for (i = 0; i < M; i++)for (j = 0; j < N; j++)if (i == 0 || i == M - 1 || j == 0 || j == N - 1)sum = sum + a[i][j];return sum;

第2题 (10.0分)

题目:输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算: 输入一个正整数 n,输出 2/1+3/2+5/3+8/5+……前n项之和,保留2位小数。 (该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)输入输出示例:括号内是说明输入3 (repeat=3)1 (n=1)5 (n=5)20 (n=20)输出sum = 2.00 (第1项是2.00)sum = 8.39 (前5项的和是8.39)sum = 32.66 (前20项的和是32.66)
#include void main(){int i, n;int repeat, ri;double denominator, numerator, sum, temp;scanf("%d", &repeat);for (ri = 1; ri <= repeat; ri++){scanf("%d", &n);/**********Program**********//********** End **********/printf("sum = %.2f\n", sum);}}

答案:

numerator = 2;denominator = 1;sum = 0;for (i = 1; i <= n; i++){sum = sum + numerator / denominator;temp = numerator;numerator = numerator + denominator;denominator = temp;}

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