2023年C语言试卷最新版.pdf
注意:试卷中 c 语言程序的开发环境是 vc+6.0 一、单项选择题(每题 2 分,共 30 分)1、正确的标识符是()。a)?hellokitty b)hellokitty=2 c)hellokitty.3 d)hellokitty _3 2、下列不正确的转义字符是()。a)b)”c)077 d)0 3、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()。a)形参的地址传递给实参 b)实参的值传递给形参 c)实参的地址传递给形参 d)形参的值传递给实参 4、指出下面正确的输入语句是()。a)scanf(“a=b=%d”,&a,&b);b)scanf(“a=%d,b=%f”,&m,&f);c)scanf(“%3c”,c);d)scanf(“%5.2f,&f);5、设整型变量 whu 的值为 66,则计算表达式 whu-whu 后表达式的值是()。a)0 b)1 c)2 d)表达式出错 6、合法的数组定义是()。a)int a=“wuhan university”;b)int a5=0,1,2,3,4,5;c)char a=“wuhan university”;d)char a=0,1,2,3,4,5 7、若有以下定义和语句,short x=1,2,3,4,5,*p,i;p=x;且 0=i5,则()是对数组元素地址的正确表示()。a)&(x+i)b)&pi c)xi d)&p 8、若要定义一个具有 7 个元素的整型数组,以下错误的定义语句是()。a)int m=5,dm;b)int b=0,0,0,0,0,0,0;c)int c2+5;d)int a7=0;9、设有如下定义,char a=“thankyou”;char b=t,h,a,n,k,y,o,u;则正确的叙述为()。a)数组 a 和数组 b 等价 b)数组 a 和数组 b 的长度相同 c)数组 a 的长度大于数组 b 的长度 d)数组 a 的长度小于数组 b 的长度 10、若有以下定义:char x,int y,float z,double w,则表达式 x*y+z-w值的类型为()。a)float b)int c)char d)double 11、不是 c 语言提供的合法关键字是()。a)switch b)char c)case d)default 12、若设 m,n,k 均为 int 型变量,执行完 for(m=0,n=10;m=n;m+,n-)k=m+n;循环后,k 的值为()。a)7 b)8 c)9 d)10 13、有以下定义:int x5,*p=x;则以下选项中错误的叙述是()。a)&x1 等价于 x+1 b)x+1 等价于 p+1 c)*(x+1)等价于 x1 d)x+等价于 p+14、若 y 是整型变量,则逻辑表达式(a!1)|(a=1)的值是()。a)0 b)1 c)2 d)不知道 a 的值,不能确定 15、在以下一组运算符中,优先级最高的运算符是()a)=b)=c)%d)&二、填空题(每题 2 分,共 20 分)1、若能表述“a-100或 3a16”的 c 语言表达式是 _。2、以下程序的功能是:将值为三位正整数的变量 iloveyou 中的数值按照百位、十位、个位的顺序拆分并输出。请填空。#include main()int iloveyou=520;printf(%d-%d-%dn,_,_,x%10);3、若在程序中用到“strcmp()”函数时,应在程序开头写上包含命令 _。4、一个 c 语言程序至少应该包含一个 _函数。5、break 语句可以用在 _和 _中。6、字符串 tabbbx53np104 的长度是 _。7、在内存中存储 a要占用 _个字节,存储 a要占用 _字节。8、在函数外声明的变量称为 _变量,其存储类别默认为 _。9、复合语句在语法上被认为是 _。空语句的形式是 _。10、结构化程序由顺序、_和 _三种基本结构组成。三、程序分析题(每题 3 分,共 30 分)(注意:每个程序都省略了 include)1、有以下程序 main()int a=2;if(a=3)printf(%dn,a+);else printf(%dn,a-);程序运行后的输出结果是:2、有以下程序 int x=1;int fun(int a)int x=2;return x+a;main()int a=2,b;b=fun(a)+x;printf(”%dn”,b);程序运行后的输出结果是:3、有以下程序 main()int x4=1,2,3,4,i;for(i=0;i4;i+)printf(x%d=%d n,i,*(x+i);printf(n);程序运行后的输出结果是:4、有以下程序 int fun(int n)static int f=1;f=f+n;return(f);main()int i;for(i=1;i15)printf(%d,a-5);if(a10)printf(%d,a);if(a5)printf(%dn,a+5);若程序运行时从键盘输入 11,则输出结果为:7、有以下程序 main()int a=1,b=2;while(a6)b+=a;a+=2;b=10;printf(”%d,%dn”,a,b);程序运行后的输出结果是:8、有以下程序 main()static int a3=9,7,5,3,1,2,4,6,8;int i,j,s1=0,s2=0;i,j,s1=0,s2=0;for(i=0;i3;i+)for(j=0;j3;j+)if(i=j)s1=s1+aij;if(i+j=2)s2=s2+aij;printf(“%dn%dn”,s1,s2);程序运行后的输出结果是:9、有以下程序 main()static char a=*,*,*,*,*;int i,j,k;for(i=0;i5;i+)printf(“n”);for(j=0;j5;j+)for(k=0;k5;k+)printf(“%c”,ak);程序运行后的输出结果是:10、有以下程序 main()int x,y;for(y=1,x=1;y=10)break;if(x%2=1)x+=5;continue;x-=3;printf(“%d”,y);程序运行后的输出结果是:四、程序设计题(每题 10 分,共 20 分)1、编写程序把 200 500 之间的能被 7 或 11 整除的数输出。2、请编写一个用户自定义函数 int searchletter(char*str),统计字符串 str 中的大写英文字母的个数,函数的返回值为这个字符串 str 中大写英文字母的个数。(同时请写一个主函数调用这个 searchletter 函数)答案如下:一、单项选择题 1-5,dcbba 6-10,abacd 11-15,cddbc 二、填空题(每题 2 分,共 20 分)1,0 99 2,x/100 x/10%10 3,0 4,main 5,循环体 6,8 7,(x%2=0)&(x%5=0)8,个数确定,类型相同的元素 9,一条语句;10,选择,循环 三、程序分析题(每题 3 分,共 30 分)1,3 2,5 3,x0=1 x1=2 x2=3 x3=4 4,1!=2 2!=4 3!=7 5,4 6,1116 7,7,1 8,1810 9,*10,6 四、程序设计题(每题 10 分,共 20 分)1,#include main()int n;for(n=200;n=500;n+)if(n%7=0|n%11=0)continue;printf(“%d”,n);2,#include int searchletter(char*str)int i,letternum=0;while(*str!=0)if(*str=a&*str=z)letternum+;str+;return letternum;main()char x20;gets(x);printf(”%d”,searchmax(x);一、选择题(共 20 小题,每小题 2 分,共 40 分)1.以下正确的 c 语言自定义标识符是 _a_。a)_1a b)2a_ c)do d)a.12 2.温度华氏和摄氏的关系是:c=(f-32)。已知:float c,f;由华氏求摄氏的正确计算的表达式是_b_。a)c=5/9(f-32)b)c=5*(f-32)/9 c)c=5/9*(f-32)d)三个表达式都正确 3.设 float x,由键盘输入:12.45,能正确读入数据的输入语句是 _c_。a)scanf(%5.2f,&x)b)scanf(%d,&x);c)scanf(%f,&x);d)scanf(%f,x);4.一个 c 程序的执行是从(a)a)main()函数开始,直到 main()函数结束 b)第一个函数开始,直到最后一个函数结束 c)第一个语句开始,直到最后一个语句结束 d)main()函数开始,直到最后一个函数结束 5.判断 char 型变量 c1 是否为数字的正确表达式为 _d_。a)0=c1=0&c1=9 c)0=c1=0&c1=9 6.switch(表达式)语句中的“表达式”,允许的类型是 _c_。a)float,int b)float,int,char c)int,char d)char,double 7.设 int i,j,x=0;for(i=5;i;i-)for(j=0;j4;j+)x+;则循环体结束后,x 的值为 _b_。a)5 b)20 c)25 d)死循环 8.设 x 和 y 均为 int 型变量,则执行下面的循环后,y 值为 _。for(y=1,x=1;y=10)break;if(x%2=1)x+=5;continue;x-=3;a)5 b)6 c)50 d)51 9.设有数组定义:int a5;则下列给数组元素赋值错误的是 _b_.a)a3=93;b)scanf(%c,a3);c)a3=a0+a1;d)a3=a+3;10.若用数组名作为函数调用时的实参,则实际上传递给形参的是 _a_。a)数组首地址 b)数组的第一个元素值 c)数组中全部元素的值 d)数组元素的个数 11.int a23=1,2,3;,则 a11 的值是 _d_。a)0 b)1 c)2 d)3 12.若定义数组并初始化 int b10=1,2,3,4,以下说法错误的是 _b_ a)b8 的值为 0 b)b1 的值为 1 c)b3 的值为整数 d)b10 不是 b 数组中的元素 13.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 _d_。a)函数调用可以作为独立的语句存在 b)函数调用可以作为一个函数的实参 c)函数调用可以出现在表达式中 d)函数调用可以作为一个函数的形参 14.在 c 语言中,下列错误的说法是 _c_。a)函数可以递归调用 b)不允许在函数定义中再定义函数 c)递归程序不可能用非递归算法实现 d)对于 continue 语句,可以通过改变程序的结构而不使用它 15.在一个源文件中定义的全局变量的作用域为(d)。a)本文件的全部范围。b)本程序的全部范围。c)本函数的全部范围。d)从定义该变量的位置开始至本文件结束 16.有以下程序 void main()int i,t3=9,8,7,6,5,4,3,2,1;for(i=0;i3;i+)printf(%d,t2-ii);程序执行后的输出结果是 _b_。a)753 b)357 c)369 d)751 17.若有说明 float*p,m=3.14;则能正确表示 p 指向 m的赋值语句是 _b_。a)p=m;b)p=&m;c)*p=m;d)*p=&m;18.若有下列定义:int a5,*p=a;则能正确表示 a 数组某个元素地址的是 _b_。a)&a b)p+2 c)a+d)&a5 19.若有以下说明,则*(a+a3)的值为 _c_。int a10=9,1,8,2,7,3,6,4,5,0;a)1 b)2 c)8 d)11 20.c 语言中,函数返回值的类型是由 _d_决定的。a)调用函数时动态决定的 b)return 语句中的表达式类型 c)调用该函数的主调函数类型 d)定义函数时,所指定的函数类型 二、填空题(共 7 小题 10 空,每空 2 分,共 20 分)1.已知 int x=5,y=1,z=2;执行语句 x%=y+z;后,x 的值是 _(1)_ 2 _。2.设 int a34=1,2,3,4,5,6,7,8,9;则表达式 a12+a23 的值是 _(2)_ 7_。3.学生成绩的字每等级和分数范围如下:字母等级 分数范圈 a 90100 b 8089 c 7079 d 6069 e 059 其它字母 输入错误 下列程序输入字母等级之后,输出相应的分数范围。#include void main()char score;scanf(%c,&score);switch(_(3)_ score _)case a:printf(a:90100n);break;case b:printf(b:8089n);break;case c:printf(c:7079n);break;case d:printf(d:6069n);break;case e:printf(e:059n);break;_(4)_default_:printf(输入错误 n);4.设 x 为 int 型变量,请写出一个关系表达式 _(5)_x%35=0_,用以判断 x 能同时被 3 和 5 整除时,关系表达式的值为真。5.对含有 10 个元素的数组 a 先按元素的存储次序倒序输入,再按其正序输出。#include#define n 10 void main()int i,an;for(i=n-1;_(6)_i=0_;i-)scanf(%d,&ai);for(i=0;in;i+)printf(%dt,ai);printf(n);6.下面程序的功能是显示具有 n 个元素的数组 s 中的最大元素。#define n 20 int fmax(int s,int n)int k=s0,i;for(i=1;ik_)k=si;return(k);void main()int i,an;for(i=0;i20|x-10)if(yx)printf(good);else printf(bad);如果输入 30,150,输出为()2.main()int a=0,i;for(i=0;i4;i+)switch(i)case 0:case 1:a+;case 2:a+=2;default:a+=3;printf(%dn,a);3.void main()int x,y;scanf(%d,&x);do y=x%10;printf(%d,y);x/=10;while(x);输入整数 12345 4.void main()int i=5;for(;ib)a-=b;while(ab)b-=a;printf(%dn,a);6.void main()int a33=1,2,3,4,5,6,i,j,s=0;for(i=1;i3;i+)for(j=0;j=i;j+)s+=aij;printf(s=%d,s);7.int f(int x)return x+3;void main()int a=1;while(f(a)10)a+;printf(“a=%dn”,a)8.int f(int b,int n)int i,r=1;for(i=0;i=n;i+)r=r*bi;return r;void main()int x,a=1,2,3,4,5,6;x=f(a,3);printf(%dn,x);9.funa(int a)int b=1;static int c=1;a+=c+b;b+;c+;return(a);void main()int i,k=0;for(i=1;i3;i+)k+=funa(i);printf(%dn,k);10.void main()int a=1,2,3,4,5,*p;p=a;(*(p+1)+;printf(%d,%dn,*p,*(p+1);四、编程题(共 2 小题,每小题 10 分,共 20 分)1.请编写程序计算并输出 n(包括 n)以内能被 3 或 5 整除的所有自然数的倒数之和,n 从键盘输入值。#include int mian()int n;float sum=0.0;for(i=3;i=n;i+)if(n%3=0|n%5=0)sum+=1.0/n;printf(“sum=%f”,sum);return 0;2.请编写函数 int primesum(int x,int n)求一组数 x 中所有质数的和,n 为这组数的个数,在主函数中输入数据并调用该函数。#include int primesum(int x,int n)int sum=0,i,j;for(i=0;i=n;i+)for(j=2;j=xj)sum+=xj;return sum;int mian()int a10,i;for(i=0;i10;i+)scanf(“%d”,&ai);printf(“sum=%d”,primesum(a,10);return 0;