C语言习题
一、选择题部分
1、若有定义:int x=5,y=6;则表达式x=(y==6)的值为(B) A.5 B.1 C.6 D.0
2、若有定义:int a=1,b=2,c=3;则语句++a||++b&&++c;运行后b的值为(C) A.1 B.0 C.2 D.3
3、若一个外部变量的定义形式为static int x,其中static的作用是(D) A.将变量存放在静态存储区,使x的值可以永久保留 B.使变量x可以由系统自动初始化 C.使x的值可以永久保留 D.使x只能在本文件内引用
4、以下变量定义中合法的是(A)
A.short a=2.1e-1; B. double b=1+5e0.5; C.long do=0xffe D. float 3_end=1-e3; 5、C语言中的函数( B)
A.可以嵌套定义 B.嵌套调用和递归调用均可
C.不可以嵌套调用 D.可以嵌套调用但不可以递归调用 6、以下说法中正确的是(C)。
A. C语言程序总是从第一个的函数开始执行
B. 在C语言程序中,要调用的函数必须在main()函数中定义 C. C语言程序总是从main()函数开始执行
D. C语言程序中的main()函数必须放在程序的开始部分
7、凡是函数中未指定存储类别的局部变量,其隐含的存储类别是(A) A.auto B.static C.extern D.register 8、下列描述中不正确的是(C)。 A.字符型数组中可存放字符串。
B.可以对字符型数组进行整体输入、输出。 C.可以对整型数组进行整体输入、输出。
D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 9、若定义:int x=2; y=3; float i;则以下符合C语言语法的表达式是(B) A、x=x* 3=2 B、x=(y= = 1) C、i=float(x) D、i%(-3) 10、若有定义:char str[6]=“abcdm”,*ps,*str2=“abcdef”;正确的是(B) A.stycpy(str1,str2); B.表达式strcmp(str1,str2)的值>0 C.str1=str2; D.表达式strlen(str1)的值为6
11、设有如下定义typedef int *INTEGER;INTEGER P,*q;则(C)是正确的表述 A.P是int型变量 B.q是基类型为int的指针变量
C.P是基类型为int的指针变量 D.程序中可用INTEGER代替int类型名。 12、C语言对于计嵌套语句的规定:else总是与(B)配对 A.第一个if B.之前最近且尚未配对 C.缩进位置相同的if D之前最近的if
13、对于基类型相同的两个指针变量之间,不能进行的运算是(C) A.< B.= C.﹢ D.﹣
1
14、若函数fun的函数头为:int fun(int i,int j)且函数指针变量P定义如下:int (*P)(int i,int j);则要使指针P指向函数fun的赋值语句是(B) A. P=*fun B. P=fun; C. P=fun(i,j) D. P=&fun 15、对于整型变量x,与while(!x)等价的是(B)
A.while(x!=0) B.while(x==0) C.while(x!=1) D.while(x==1)
16、设有以下定义语句:struct student {int num;char name[10];float score;}wang,zhang;的变量wang所占的内存字节是(B)
A.14 B.16. C.18 D.9
17、设有以下定义语句:struct student {int num char name[10];float score;}wang,zhang;则不正确的叙述是(C)
A.struct 是结构体类型的关键字 B.zhang是结构体变量名
C.wang是结构体类型名 D.num,name,score都是结构体类型student的成员名 18、以下(D)是正确的变量名
A.a.bee B.-P11 C.int D.P_11 19、以下叙述中,正确的是(A)
A、宏展开不占用运行时间,只占用编译时间 B、预编译处理命令行必须以分号结束
C、一个源程序只能有一个预编译处理命令行
D、使用带参数的宏定义时,应该说明每个参数的数据类型 20、若有以下类型说明,叙述正确的是(A) typedef sturct { int num; char *name; int score;
} STU, *PSTU
A、STU是变量名 B、PSTU是变量名
C、PSTU是指向结构体类型STU的指针类型名 D、类型说明语句有错误 21、以下叙述正确的是(D)
A、C语言中的文件是流式文件,因此只能顺序存取数据
B、打开一个已存在的文件进行了写操作后,原有文件中的全部数据必定被覆盖
C、在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第一个数据
D、当对文件的写操作完成之后,必须将它关闭,否则可能导致数据丢失 22、设有如下定义语句: union u-type
{int i;double x;float f;}; struct str-type {char str[100]; union u_type u[2]; };
则语句“
printf(“%d”, sizeof(struct str-type) );”的输出结果是(B) A、100 B、116 C、120 D、200 23、标准函数fgets(s,n,f)的功能是(D)
2
A、从文件f中读取长度为n的字符串存入指针s所指的内存; B、从文件f中读取长度不超过n-1的字符串存入指针s所指的内存 C、从文件f中读取几个字符存入指针s所指的内在
D、从文件f中读取长度为n-1的字符串存入指针s所指的内存
24、若希望当a的值为奇数时,表达式的值为“真”,a的值为偶数时,表达式的值为“假”.则不能满足要求的表达式是( C )
A.a%2==1 B.!(a%2==0) C.!(a%2) D.a%2
25、若x和y为整数,以下表达式中不能正确表示数字关系|x-y|<10的是(C) A.abs(x-y)<10 B.(x-y)>-10&&(x-y)<10 C.!(x-y)<-10||!(y-x)>10 D.(x-y)*(x-y)<100
二、改错题部分
第一套卷:
cmody011.c
#include
{ char str1[100], t[200]; int i, j;
/**/ i = 0; /**/ j=0 clrscr();
strcpy(str1, \ for (i = 0; i /**/ if ((str1[i] %2== 0) && (i%2!=0)) /**/ if ((str1[i] %2== 0) && (i%2==0)) { t[j] = str1[i]; j++; } } t[j] = '\\0'; printf(\ printf(\ Result string: %s\\n\ 3 cmody012.c #include for(i=1;;i++) { /**/ if((i<10)&&(i%3==0)) /**/ if((i>10)&&(i%3==0)) { /**/ y+=1/i; /**/ y+=1.0/i; j++; } if(j==n) break; } return y; } void main() { clrscr(); printf(\} 第二套卷 cmody021.c #include /**/ int i; j; /**/ int i, j;(概念错误) for (i=1;i<=5;i++) { for (j=1;j<=10-2*i;j++) printf(\ /**/ for (j=1;j<=5;j++) /**/ for (j=1;j<=2*i-1;j++) printf(\ printf(\ 4 *号的位置 } } cmody022.c #include /**/int fun();/**/ int fun()(概念错误) { int hen,cock,chicken,n=0; clrscr(); for(cock=0;cock<=50;cock+=1) for(hen=0;hen<=100;hen=hen+1) { chicken=2*(100-hen-2*cock); /**/ if(cock+hen+chicken=100) /**/ if(cock+hen+chicken==100) if后面关系表达式 { n++; printf(\ if(n==20) getch(); } } return n; } void main() { int num; num=fun(); printf(\ getch(); } 第三套卷 cmody031.c #include { int m,n,result,flag=0; /**/ char ch, /**/ char ch;(概念错误) clrscr(); printf(\ scanf(\ /**/ switch ch /**/ switch (ch) 5 { case '+': result=m+n; break; case '-': result=m-n; break; case '*': result=m*n; break; case '%': result=m%n; break; case '/': result=m/n; break; default: { printf(\ } if (!flag) printf(\ getch(); } cmody032.c #include printf(\ getch(); } int fun() { int m,i,k,n=0; for(m=201; m<=300;m+=2) { k=sqrt(m+1); for(i=2;i<=k;i++) /**/ if(m/i==0) /**/ if(m%i==0) break; /**/ if(i==k) /**/ if(i>=k) { printf(\ n++;; if(n==0) printf(\ } } return n; } 模拟卷 evsum.c #include /**/ int sum=1,i; /**/ int sum=0,i 6 for(i=100; i>1; i--) /**/ if(i%2=0) sum+=i; /**/ if(i%2==0) sum+=i; printf(\} dafsum.c #include /**/ for(i=100;i=999;i++) /**/ for(i=100;i<=999;i++) { a=i/100; /**/ b=i/10; /**/ b=i/10; c=i; /**/ if i==a*a*a+b*b*b+c*c*c /**/ if(i==a*a*a+b*b*b+c*c*c) printf(\ } } 三、填空题部分 第一套卷 ccon011.c #include int x; /**/ float f ; /**/ printf(\ scanf(\ f = /**/ (fabs(x)-2)/(x*x+1) /**/ ; printf(\} ccon012.c #include 7 for(i=1;i<=10001;i+=2) { pi+=1.0*sign/i; sign=/**/ -sign; /**/; 题义中是正负交替的 } pi*=/**/ 4 /**/; 前面一个系数 printf(\} ccon013.c #include void find_max_min(int *p,int n) { int *q; max=min=*p; for(q=p; q**/ p+num /**/; q++) 指针从p开始,向下移动,直到结束p+num if(/**/ max<*q /**/ ) max=*q; 从下列语句可以推出该式子 else if(min>*q) min=*q; } void main() { int i,num[10]; printf(\ for(i=0;i<10;i++) scanf(\ find_max_min(/**/ num /**/,10); 将主函数中的数组值[指针]传递给子函数 printf(\ } 第二套卷 ccon021.c #include int a,b,k; int plu = /**/ 403 /**/; for(a=1; a<10; a++) for(b=1; b<10; b++) { 8 k = (a*10+b) * /**/(b*10+a ) /**/ ; if(k==plu) printf(\ } } ccon022.c #include int n,a,b; /**/ a=0,b=0; /**/ scanf(\ while(/**/ n /**/) { if(n>0) a++; else /**/ b++; /**/ scanf(\ } printf(\} ccon023.c #include for(k=2; k<=n/2+1; k++) if (n%k==0) { flag=/**/ 0 /**/ ; break;} return flag; } void main() { int num, a; clrscr(); do { printf(\ scanf(\ }while(num<=6||num%2==1); for(a=2;a<=num/2+1;a++) 9 if(prime(a) && prime(/**/( num-a) /**/)) printf(\} 第三套卷 ccon031.c #include /**/ main() /**/ { float x,x0,f,f1; x=1.5; do { x0=x; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x=x0-f/f1; }/**/ while /**/(fabs(x-x0)>=1e-6); printf(\} ccon032.c #include printf(\ for(i=0;((s[i]=getchar())!='\\n')&&(i<80);i++); s[i]='\\0'; for(i=0;s[i]!='\\0';/**/ i++ /**/) { if(s[i]>='a'&&s[i]<='z') s[i]=s[i]-32; else if(/**/ s[i]>='A'&&s[i]<='Z' /**/) s[i]=s[i]+32; printf(\ } } ccon033.c #include 10 float average(int *pa,int n) { int k; /**/ float avg=0; /**/ for(k=0;k avg = avg+/**/ pa /**/; avg = avg/n; return avg; } void main() { int a[5]={20,30,45,64,23}; float m; m=average(/**/ a /**/, 5); printf(\} 模拟卷 calfun.c #include int x; /**/ float f; /**/ printf(\ scanf(\ f = /**/ (abs(x)-2.0)/(x*x+1.0) /**/ ; printf(\ getch(); } intsum.c #include int n,a,b; /**/ a=0,b=0; /**/ scanf(\ 11 while(/**/n /**/) { if(n%2==0) a+=n; /**/ else b+=n /**/ scanf(\ } printf(\} fac.c #include double s,fac; /**/ s=0, fac=1; /**/ scanf(\ for(i=1;i<=n;i++) { fac=/**/ fac/i /**/; s=s+fac; } printf(\} 四、编程题部分 第一套卷 cprog011.c #include f=(1+sin(x)+exp(x))/(1+x); return f; /**/ } void main() { 12 clrscr(); printf(\ printf(\ printf(\} cprog012.c #include int fun2(int a[],int n,int b[],int c[]) { /**/ int nb=0; int i,j=0,temp; for(i=0;i if(a[i]>-20) {b[j]=a[i];nb++;j++;} for(i=0;i temp=c[j]; c[j]=c[j+1]; c[j+1]=temp; } return nb; /**/ } void main() { int n = 10, i, nb; int aa[10] = {12, -10, -31, -18, -15, 50, 17, 15, -20, 20}; int bb[10], cc[10]; clrscr(); printf(\ printf(\ for(i=0; i nb = fun2(aa, n, bb, cc); 13 printf(\ for (i=0; i printf(\ for(i=0; i printf(\} 第二套卷 cporg021.c #include f=(exp(x) +fabs(x-6)) / (x+1.3); return f;/**/ } void main() { clrscr(); printf(\ printf(\ printf(\} cprog022.c #include void fun2(char a[],char b[],char c[]) { /**/ if(strcmp(a,b)>0) {strcpy(temp,a);strcpy(a,b); strcpy(b,temp);} if(strcmp(a,c)>0) {strcpy(temp,a);strcpy(a,c); strcpy(c,temp);} if(strcmp(b,c)>0) {strcpy(temp,b);strcpy(b,c); strcpy(c,temp);}/**/ 14 } void main() { char str1[15]=\ clrscr(); fun2(str1,str2,str3); printf(\ getch(); } 第三套卷 cprog031.c #include /**/ double f; if(x<3) f=1.2; else if(x==3) f=10; else f=2*x+1; return f;/**/ } void main() { clrscr(); printf(\ printf(\ printf(\} cprog032.c #include for(i=0 ; s[i]!='\\0';i++) if(s[i]==' ') n++; 15 return n;/**/ } void main() { char str[255]; gets(str); printf(\} 模拟卷 section.c #include printf(\ scanf(\ /**/ if(x<=1) y=x+5; else if(x<=10) y=2*x; else y=3/(x-10);/**/ printf(\} sort.c #include /**/k=i; for(j=i+1;j {t=a[i];a[i]=a[k];a[k]=t;} /**/ } void main( ) { int a[10]={6,3,12,0,2,10},i; sort(a,6); printf(\ for(i=0;i<6;i++) printf(\ printf(\ 16 附录 1、打开程序Cprog042.C,完成其中的fun( )函数,使函数打印出Fibonacci数列的前20个数。该数列(1,1,2,3,5,8,13,…)的第1、第2个数为1,从第3个数开始每个数等于前2个数之和。 #include /**/ int i; a[0]=a[1]=1; for(i=2;i<20;i++) a[i]=a[i-1]+a[i-2]; /**/ } void main() { int a[20],i; fun(a,20); for(i=0; i<20; i++) printf(\ printf(\ getch(); } 2、打开程序Cprog052.C,完成其中的fun( )函数,使其判断一个矩阵是否为对称矩阵,若矩阵对称返回1,不对称返回0。说明:矩阵a使一个二维数组,若其中的第k行第j列的元素与第j行第k列的元素相同,则称其为对称矩阵,否则为非对称矩阵。 如 输入:6 3 12 如 输入:6 9 12 3 18 8 3 18 8 12 8 7 34 8 22 输出:Yes 输出:No #include int b=1; int i,j; for(i=0;i for(j=0;j return b;/**/ 17 } void main() { int a[3][3],i,j; int b; fun(a,20); for(i=0; i<3; i++) for(j=0; j<3; j++) scanf(\ b = fun(a,3); if( b == 1 ) printf(\ else printf(\ getch(); } 3、打开程序Cprog062.C,完成其中的fun( )函数,使其实现四则运算的功能。 如:输入:3.2 2.1 输出:3.20+2.10=5.3 3.2-2.10=1.10 3.20*2.10=6.72 3.20/2.10=1.52 #include float fun(float a,char flag,float b) { /**/ float f; switch(flag) { case ‘+’: f=a+b; break; case ‘-’: f=a-b; break; case ‘*’: f=a*b; break; case ‘/’: f=a/b; break; } return f; /**/ } void main() { float a,b; printf(\ scanf(\ printf(\ 18 printf(\ printf(\ printf(\ getch(); } 4、打开程序Cprog051.C,完成其中的f( )函数,使其计算: ?5.8?x?cos(x)?2.1f(x)???1;??x?700x??700 如 输入:0.4 输出:f(0.40)=0.82 输入:1.5 输出:f(1.50)=1.24 输入:780 输出:f(780.00)=-1.00 #include /**/double f; if(fabs(x)<700) f=(sqrt(5.8+fabs(x)))/(cos(x)+2.1); else f=-1.0; return f;/**/ } void main() { float x; double y; printf(\ scanf(\ y = f(x); printf(\ getch(); } 5、打开程序Cprog061.C,完成其中的f( )函数,使其计算: x?x?300?lg(|x|?2.6);f(x)???1;x??300??3 如:输入:0.8 输出:f(0.80)=0.96 输入:4.5 输出:f(4.50)=107.05 输入:725 输出:f(725.00)=-1.00 #include 19 /**/double f; if(fabs(x)<300) f=pow(x,3) /log10(fabs(x)+2.6); else f=-1.0; return f;/**/ } void main() { float x; double y; printf(\ scanf(\ y = f(x); printf(\ getch(); } 20