《c语言题目及答案 .doc》由会员分享,可在线阅读,更多相关《c语言题目及答案 .doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、考试题型一、单项选择题(30分)二、填空题 (20分)三、阅读程序写结果(20分)四、编程序题(30)复习题一一、 选择题 1下列说法中正确的是 。AC语言程序由主函数和0个或多个函数组成BC语言程序由主程序和子程序组成CC语言程序由子程序组成DC语言程序由过程组成2执行语句“x=(a=3,b=a-)”后,x,a,b的值依次为 。A3,3,2 B3,2,2 C3,2,3 D2,3,23设有int i=010,j=10;则printf(%d,%dn,+i,j-); 的输出的是 。A11,10 B9,10 C010,9 D10,9 4设a、b为字符型变量,执行scanf(a=%c,b=%c,&a,
2、&b); 后使a为A, b为B,从键盘上的正确输入是 。AA B BA,B CA=A,B=B Da=A,b=B5已知int x=12, y=3;执行下述程序后,变量x的值是_。do x/=y-;while(xy);A1 B2 C3 D程序运行有错误6C语言中while和do-while循环的主要区别是 。Ado-while的循环体至少无条件执行一次Bwhile的循环控制条件比do-while的循环控制条件严格Cdo-while允许从外部转到循环体内Ddo-while的循环体不能是复合语句7设x和y均为int型变量,则执行下面的循环后,y的值为 。for (y=1,x=1;y=10 ) brea
3、k; if (x%2=1) x+=5;continue; x - =3;A2 B4 C6 D88以下正确的说法是_。A用户若需调用标准函数,调用前必须重新定义B用户可以重新定义标准库函数,若如此,该函数将失去原有含义C系统根本不允许用户重新定义标准函数D用户若需要调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调9若调用一个函数,且此函数中没有return语句,则关于该函数正确的说法是_ _。A 没有返回值B 能返回若干个系统默认值C 能返回一个用户所希望的函数值D 返回一个不确定的值10已知函数定义如下:float fun1(int x,int y) f
4、loat z;z=(float)x/y;return(z);主调函数中有int a=1,b=0;可以正确调用此函数的语句是_。Aprintf(%f,fun1(a,b); Bprintf(%f,fun1(&a,&b);Cprintf(%f,fun1(*a,*b); Dprintf(%f,fun1(b,a);11宏定义:#define PI 31.14159中,宏名PI代替_。A单精度 B双精度 C常量 D字符串12若有以下数组说明,则数值最小和最大的元素下标分别是 。 int a12 =1,2,3,4,5,6,7,8,9,10,11,12; A1,12 B0,11C1,11 D0,1213以下合
5、法的数组定义是 。Aint a3 =0,1,2,3,4,5; Bint a 3 =0,1,2,3,4;Cint a23=0,1,2,3,4,5,6; Dint a23=0,1,2,3,4,5,;14函数调用:strcat(strcpy (str1,str2),str3); 的功能是 。A将字符串str1复制到字符串str2中后再连接到字符串str3 之后。B将字符串str1连接到字符串str2之后再复制到字符串str3 之后。C将字符串str2复制到字符串str1中后再将字符串str3 连接到字符串str1之后。D将字符串str2连接到字符串str1之后再将字符串str1 复制到字符串str3
6、中。15设有二维数组定义如下,则不正确的数组元素引用是 。 int a34 =1,2,3,4,5,6,7,8,9,10,11,12;Aa23 Baa001 Ca7 Da2c-a16若用数组名作为函数调用时的实参,则实际上传递给形参的是 。A数组首地址 B数组的第一个元素值C数组中全部元素的值 D数组元素的个数17以下对指针变量进行操作的语句,正确的选项是 。Aint *p,*q; q=p; Bint a,*p,*q; q=&a; p=*q;Cint a=b=0,*p; p=&a; b=*p; Dint a=20,*p,*q=&a; p=q;18若有以下定义和语句:int s45,(*ps)5;
7、ps=s;则对s数组元素的正确引用形式是 。Aps+1 B*(ps+3) Cps02 D*(ps+1)+319当说明一个共用体变量时系统分配给它的存储容量是 。A共用体中最后一个成员所需的存储容量B共用体中第一个成员所需的存储容量C成员中占存储量最大者所需的存储容量D各成员所需存储容量的总和20有定义如下: struct student int age; char num8; stu3=20,200401,21,200402,10,200403;struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是 。A(p+)-num Bp-num C(*p).num Ds
8、tu3.age二、填空题1设a=3,b=2,c=1,则ab的值为 ,abc的值为 。2若w, x, y, z, m均为int型变量,则执行下面程序段后的m值是 。 w= 1; x = 2; y= 3; z=4; m=(wy)?w:x; m= (my)? m:y; m=(mz)?m:Z;3下面程序的输出结果是_。#include main() int a=1,b=0;do switch(a) case 1: b=1;break;case 2: b=2;break;default : b=0;b=a+b;while(!b);printf(a=%d,b=%d,a,b);4下面程序的输出结果是_。#i
9、nclude main() int x,i;for(i=1;i=100;i+) x=i;if(+x%2=0)if(+x%3=0)if(+x%7=0)printf(%d ,x);5下面程序的输出结果是_。#include int func(int a,int b) int c;c=a+b;return(c);void main() int x=6,y=7,z=8,r;r=func(x-,y+,x+y),z-);printf(%dn,r);6下面程序的输出结果是_。#include void main() int x=1; void f1(),f2();f1( );f2(x); printf(%d
10、n,x);void f1(void) int x=3; printf(%d ,x); void f2(x)int x; printf(%d ,+x); 7程序中有定义:#define S(r) r/r int a=4,b=3,area; 则表达式area=S(a+b)的值为_。三、程序完善题1以下程序的功能是计算分段函数y的值。请完善程序。#include void main() int x,c,m; float y; scanf(“%d”,&x); if( (1) ) c=-1; else c= (2) ; switch( c) case 1: y=0; break; case 0: y=x
11、; break;case 1: y=10; break; case 2: case 3: y=-0.5*x+20; break; default : y=-2;if( (3) ) printf(“y=%f”, y);else printf(“errorn”); 2有以下程序段:s=1.0;for(k=1;k=n;k+)s=s+1.0/(k*(k+1);printf(%fn,s);填空完成下述程序,使之与上述程序的功能完全相同。s=0.0;(1) ;k=0; do s=s+d;(2) ;d=1.0/(k*(k+1);while( (3) );printf(%fn,s);3根据以下嵌套的if语句说
12、给条件,填写switch语句,使它完成相同的功能。(假设score的取值在1100之间。) if语句: if(score60) k=1; else if(score70) k=2; else if(score80) k=3; else if(score90) k=4; else if(score=100) k=5; switch语句: switch( (1) ) (2) : k=1; break;case 6:k=2; break;case 7:k=3; break;case 8:k=4; break; (3) :k=5; 4输入2个整数,输出它们的最小公倍数和最大公约数。请完善程序。 #in
13、clude void main( ) int m,n,gbs,gys; scanf((1)); for(gbs=m; (2) ; gbs=gbs+m); gys= (3) ; printf(“gbs=%dtgys=%dn”, gbs,gys); 5下面函数的功能是判断一个数是否为素数。请完善程序。void f(int m) int m,i,k;k=_(1)_;for(i=2;i=_(2)_;i+)if(_(3)_)break;if(_(4)_)printf(“是素数”);else printf(“非素数”);6一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同
14、。请完善程序。void fun(long x) long ge,shi,qian,wan; wan= (1) ;qian=_(2)_;shi=_(3)_;ge=x%10;if (_(4)_) printf(this number is a huiwenn);else printf(this number is not a huiwenn);四、程序设计题1编写程序计算分段函数y值。2编写程序,输入一个字符串,求该字符串的有效长度。要求不能使用系统函数。3编写程序实现,将键盘输入的一个十进制整数转换为2进制数并输出。参考答案: 一、选择题12345678910ACBDDACBAD11121314
15、151617181920DBBCCACCCD二、填空题 1、 1 0 2、 1 3、 a=1,b=2 4、 25 67 5、 21 6、 3 2 1 7、 7 三、程序完善题1、 x0 x/10 x40 2、 d=1 k+ k=n 3、 score/10 case 0,1,2,3,4,5: default 4、 “%d %d”,&m,&n gbs%n!=0 m*n/gbs 5、 m/2 k m%i=0 i=k 6、 x/10000 (x%10000)/1000 (x%100)/10 wan=ge & qian=shi 四、程序设计题1、 #include void main() float x
16、,y; scanf(“%f”,&x); if(x0) y=exp(-x); else if(x=0) y=1; else y=-exp(x); printf(“%f”,y);2、 #define max 20; void main()char strmax;int len;scanf(“%s”,str);for(len=0;strlen!=0;len+) ;printf(“%d”,len);3、#includevoid main() unsigned n;char str10,t;int k,i,j;printf(“please input:”);scanf(“%u”,&n);for(i=0;
17、n!0;i+) stri=n%2+0; n/=2;stri=0;printf(“the result is :”);for(k=0,j=i-1;kj;k+,j-) t=strk;strk=strj;strj=t;puts(str);复习题二一、选择题1字符串ABC在内存占用的字节数是 。A3 B4 C6 D82设整型变量m,n,a,b,c,d均为0,执行(m=a= =b)|(n=c= =d)后,m和n的值是 。A0,0 B0,1 C1,0 D1,13a是int类型变量,c是字符变量。下列输入语句中哪一个是错误的 。Ascanf(%d,%c,&a,&c); Bscanf(%d%c,a,c);Cs
18、canf(%d%c,&a,&c); Dscanf(d=%d,c=%c,&a,&c);4字符变量ch=A,int类型变量k=25,执行printf(%3d,%d3n,ch,k); 的输出为: 。A65,253 B65 253 C65,25 DA 255已知int i=1, j=0;执行下面语句后j的值是_。while(i)switch(i) case 1: i+=1;j+;break;case 2: i+=2;j+;break;case 3: i+=3;j+;break;default: i-;j+;break;A1 B2 C3 D死循环6C语言中while和do-while循环的主要区别是 。
19、Ado-while的循环体至少无条件执行一次Bwhile的循环控制条件比do-while的循环控制条件严格Cdo-while允许从外部转到循环体内Ddo-while的循环体不能是复合语句7设x和y均为int型变量,则执行下面的循环后,y的值为 。for (y=1,x=1;y=10 ) break; if (x%2=1) x+=5;continue; x - =3;A2 B4 C6 D88在C语言中,函数的数据类型是指_。A函数返回值的数据类型 B函数形参的数据类型C调用该函数时的实参的数据类型 D任意指定的数据类型9在C语言中以下不正确的说法是_ _。A 实参可以是常量、变量或表达式B 形参可
20、以是常量、变量或表达式C 实参可以为任意类型D. 形参应与其对应的实参类型一致10已知函数定义如下:float fun1(int x,int y) float z;z=(float)x/y;return(z);主调函数中有int a=1,b=0;可以正确调用此函数的语句是_。Aprintf(%f,fun1(a,b); Bprintf(%f,fun1(&a,&b);Cprintf(%f,fun1(*a,*b); Dprintf(%f,fun1(b,a);11宏定义的宏展开是在_阶段完成的。A第一遍编译 B第二遍编译C程序执行 D预编译12若有以下数组说明,则数值最小和最大的元素下标分别是 。 i
21、nt a12 =1,2,3,4,5,6,7,8,9,10,11,12; A1,12 B0,11C1,11 D0,1213以下合法的数组定义是 。Aint a3 =0,1,2,3,4,5; Bint a 3 =0,1,2,3,4;Cint a23=0,1,2,3,4,5,6; Dint a23=0,1,2,3,4,5,;14函数调用:strcat(strcpy (str1,str2),str3); 的功能是 。A将字符串str1复制到字符串str2中后再连接到字符串str3 之后。B将字符串str1连接到字符串str2之后再复制到字符串str3 之后。C将字符串str2复制到字符串str1中后再
22、将字符串str3 连接到字符串str1之后。D将字符串str2连接到字符串str1之后再将字符串str1 复制到字符串str3中。15设有二维数组定义如下,则不正确的数组元素引用是 。 int a34 =1,2,3,4,5,6,7,8,9,10,11,12;Aa23 Baa001 Ca7 Da2c-a16若用数组名作为函数调用时的实参,则实际上传递给形参的是 。A数组首地址 B数组的第一个元素值C数组中全部元素的值 D数组元素的个数17以下对指针变量进行操作的语句,正确的选项是 。Aint *p,*q; q=p; Bint a,*p,*q; q=&a; p=*q;Cint a=b=0,*p;
23、p=&a; b=*p; Dint a=20,*p,*q=&a; p=q;18若有以下定义和语句:int s45,(*ps)5;ps=s;则对s数组元素的正确引用形式是 。Aps+1 B*(ps+3) Cps02 D*(ps+1)+319当说明一个结构体变量时,系统分配给它的存储容量是 。A结构体中最后一个成员所需的存储容量B结构体中第一个成员所需的存储容量C成员中占存储量最大者所需的存储容量D各成员所需存储容量的总和20有定义如下:struct sk int a;float b;data ,*p;如果有: p=&data; 则对于结构体变量data的成员a的正确引用是_ _。A(*p).dat
24、a.a B(*p).a Cp-data.a Dp.data.a二、填空题1设a=3,b=2,c=1,则ab的值为 ,abc的值为 。2设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为 。3以下程序段的输出结果是 。 int a=10,b=50,c=30;if(ab)a=b;b=c;c=a;printf(a=%d b=%d c=%dn,a,b,c);4以下程序的输出结果是 。#include void main() int x= 2,y=-1,z=2;if(xy) if(y0) z= 0; else z+ =1;printf(%dn,z);5下面程序的输出结果是_。#in
25、clude int func(int a,int b) int c;c=a+b;return(c);void main() int x=6,y=7,z=8,r;r=func(x-,y+,x+y),z-);printf(%dn,r);6下面程序的输出结果是_。#include void main() int x=1; void f1(),f2();f1( );f2(x); printf(%dn,x);void f1(void) int x=3; printf(%d ,x); void f2(x)int x; printf(%d ,+x); 7以程序的输出结果是_。#define MA(x) x*
26、(x-1)#includevoid main()int a=1,b=2; pirntf(“%dn”,MA(1+a+b);三、程序完善题1下列程序计算并输出方程 X2+Y2+Z2=1989 的所有整数解。请完善程序。 #include void main() (1) ; for(i=-45;i=45;i+) for((2) ) for(k=-45;k=45;k+) if( (3) ) printf( “%4d%4d%4dn”, i,j,k); 2有以下程序段:s=1.0;for(k=1;k=n;k+)s=s+1.0/(k*(k+1);printf(%fn,s);填空完成下述程序,使之与上述程序的
27、功能完全相同。s=0.0;(1) ;k=0; do s=s+d;(2) ;d=1.0/(k*(k+1);while( (3) );printf(%fn,s);3根据以下嵌套的if语句说给条件,填写switch语句,使它完成相同的功能。(假设score的取值在1100之间。) if语句: if(score60) k=1; else if(score70) k=2; else if(score80) k=3; else if(score90) k=4; else if(score=100) k=5; switch语句: switch( (1) ) case 0 ,1,2,3,4,5: k=1; b
28、reak; (2) :k=2; break;case 7:k=3; break; (1) :k=4; break;default:k=5; 4输入2个整数,输出它们的最小公倍数和最大公约数。请完善程序。 #include void main( ) int m,n,gbs,gys; scanf((1)); for(gbs=m; (2) ; gbs=gbs+m); gys= (3) ; printf(“gbs=%dtgys=%dn”, gbs,gys); 5下面函数的功能是判断一个数是否为素数。请完善程序。void f(int m) int m,i,k;k=_(1)_;for(i=2;i=_(2)
29、_;i+)if(_(3)_)break;if(_(4)_)printf(“是素数”);else printf(“非素数”);6用递归实现将输入小于32768的整数按逆序输出。如输入12345,则输出54321。请完善程序。#includestdio.hvoid main() int n; printf(Input n : );scanf(%d, (1) );r(n);printf(n); void r(int m) printf(%d, (2) );m = (3) ;if( (4) ) r(m);四、程序设计题1 100匹马驮100担货,大马一匹驮担,中马一匹驮担,小马两匹驮担。试编写程序计算
30、大、中、小马的数目。2.编写程序,输入10个整数存入一个一维数组中,再按逆序重新存放后输出。3.从键盘输入4个学生数据信息(包括姓名 学号 年龄 住址),把他们转存到磁盘文件中。.参考答案:一、选择题12345678910BCBADACABD11121314151617181920DBBCCACCDB二、填空题1、 1 0 2、 1.0 3、 a=10 b=30 c=10 4、 2 5、 21 6、 3 2 1 7、 8 三、程序完善题1、 int i ,j,k j=-45;j=45;j+ x*x+y*y+z*z=1989 2、 d=1 k+ k=n 3、 score/10 case 6 ca
31、se 8 4、 “%d %d”,&m,&n gbs%n!=0 m*n/gbs 5、 m/2 k m%i=0 i0 四、程序设计题1、#includeVoid main() int big,mid; for(big=0;big=33;big+) for(mid=0;mid=50;mid+) if(big*3+mid*2+(100-big-mid)*0.5=100) printf(“%d,%d,%dn”,big,mid, 100-big-mid);2、 #include Void main() int i,j,a10,temp; for(i=0;i10;i+) scanf(“%d”,&ai); F
32、or(i=0,j=9;ij;i+,j-) temp=ai; ai=aj; aj=temp; for(i=0;i10;i+) printf(“%d ”, ai);3、#include #define SIZE 2struct student_type char name10; int num; int age; char addr15;studSIZE;void save() FILE *fp; int i; if(fp=fopen(d:fengyiexestu_dat,wb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+)
33、if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1) printf(file write errorn); fclose(fp);void display() FILE *fp; int i; if(fp=fopen(d:fengyiexestu_dat,rb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+) fread(&studi,sizeof(struct student_type),1,fp); printf(%-10s %4d %4d %-15sn,studi.name, studi.num,studi.age,studi.addr); fclose(fp);main() int i; for(i=0;iSIZE;i+)scanf(%s%d%d%s,studi.name,&studi.num, &studi.age,studi.addr); save(); display();