c语言题目及答案(共15页).doc
精选优质文档-倾情为你奉上考试题型一、单项选择题(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,&b); 后使a为'A', b为'B',从键盘上的正确输入是 。A'A' 'B' B'A','B' CA=A,B=B Da=A,b=B5已知int x=12, y=3;执行下述程序后,变量x的值是_。do x/=y-;while(x>y);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<=50;y+) if (x>=10 ) break; 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) 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宏定义:#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以下合法的数组定义是 。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中。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;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,"",21,"",10,""struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是 。A(p+)->num Bp->num C(*p).num Dstu3.age二、填空题1设a=3,b=2,c=1,则a>b的值为 ,a>b>c的值为 。2若w, x, y, z, m均为int型变量,则执行下面程序段后的m值是 。 w= 1; x = 2; y= 3; z=4; m=(w<y)?w:x; m= (m<y)? m:y; m=(m<z)?m:Z;3下面程序的输出结果是_。#include <stdio.h>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下面程序的输出结果是_。#include <stdio.h>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 <stdio.h>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 <stdio.h>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 S(r) r/r int a=4,b=3,area; 则表达式area=S(a+b)的值为_。三、程序完善题1以下程序的功能是计算分段函数y的值。请完善程序。#include <stdio.h>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; 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语句说给条件,填写switch语句,使它完成相同的功能。(假设score的取值在1100之间。) if语句: if(score<60) k=1; else if(score<70) k=2; else if(score<80) k=3; else if(score<90) 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个整数,输出它们的最小公倍数和最大公约数。请完善程序。 #include <stdio.h> 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是回文数,个位与万位相同,十位与千位相同。请完善程序。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进制数并输出。参考答案: 一、选择题12345678910ACBDDACBAD11121314151617181920DBBCCACCCD二、填空题 1、 1 0 2、 1 3、 a=1,b=2 4、 25 67 5、 21 6、 3 2 1 7、 7 三、程序完善题1、 x<0 x/10 x<40 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 <stdio.h>void main() float x,y; scanf(“%f”,&x); if(x>0) 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、#include<stdio.h>void main() unsigned n;char str10,t;int k,i,j;printf(“please input:”);scanf(“%u”,&n);for(i=0;n!0;i+) stri=n%2+0; n/=2;stri=0;printf(“the result is :”);for(k=0,j=i-1;k<j;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);Cscanf("%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循环的主要区别是 。Ado-while的循环体至少无条件执行一次Bwhile的循环控制条件比do-while的循环控制条件严格Cdo-while允许从外部转到循环体内Ddo-while的循环体不能是复合语句7设x和y均为int型变量,则执行下面的循环后,y的值为 。for (y=1,x=1;y<=50;y+) if (x>=10 ) break; if (x%2=1) x+=5;continue; x - =3;A2 B4 C6 D88在C语言中,函数的数据类型是指_。A函数返回值的数据类型 B函数形参的数据类型C调用该函数时的实参的数据类型 D任意指定的数据类型9在C语言中以下不正确的说法是_ _。A 实参可以是常量、变量或表达式B 形参可以是常量、变量或表达式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若有以下数组说明,则数值最小和最大的元素下标分别是 。 int 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中后再将字符串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; 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).data.a B(*p).a Cp->data.a Dp.data.a二、填空题1设a=3,b=2,c=1,则a>b的值为 ,a>b>c的值为 。2设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为 。3以下程序段的输出结果是 。 int a=10,b=50,c=30;if(a>b)a=b;b=c;c=a;printf("a=%d b=%d c=%dn",a,b,c);4以下程序的输出结果是 。#include <stdio.h>void main() int x= 2,y=-1,z=2;if(x<y) if(y<0) z= 0; else z+ =1;printf("%dn",z);5下面程序的输出结果是_。#include <stdio.h>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 <stdio.h>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*(x-1)#include<stdio.h>void main()int a=1,b=2; pirntf(“%dn”,MA(1+a+b);三、程序完善题1下列程序计算并输出方程 X2+Y2+Z2=1989 的所有整数解。请完善程序。 #include <stdio.h> 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);填空完成下述程序,使之与上述程序的功能完全相同。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(score<60) k=1; else if(score<70) k=2; else if(score<80) k=3; else if(score<90) k=4; else if(score<=100) k=5; switch语句: switch( (1) ) case 0 ,1,2,3,4,5: k=1; break; (2) :k=2; break;case 7:k=3; break; (1) :k=4; break;default:k=5; 4输入2个整数,输出它们的最小公倍数和最大公约数。请完善程序。 #include <stdio.h> 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用递归实现将输入小于32768的整数按逆序输出。如输入12345,则输出54321。请完善程序。#include"stdio.h"void 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担货,大马一匹驮担,中马一匹驮担,小马两匹驮担。试编写程序计算大、中、小马的数目。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 case 8 4、 “%d %d”,&m,&n gbs%n!=0 m*n/gbs 5、 m/2 k m%i=0 i<=k 6、 &n m%10 m/10 m>0 四、程序设计题1、#include<stdio.h>Void 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<stdio.h> Void main() int i,j,a10,temp; for(i=0;i<10;i+) scanf(“%d”,&ai); For(i=0,j=9;i<j;i+,j-) temp=ai; ai=aj; aj=temp; for(i=0;i<10;i+) printf(“%d ”, ai);3、#include <stdio.h>#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;i<SIZE;i+) 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;i<SIZE;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;i<SIZE;i+)scanf("%s%d%d%s",studi.name,&studi.num, &studi.age,studi.addr); save(); display();专心-专注-专业