收集了一些经典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;}
若有错误或疑问,欢迎评论区留言讨论。