当前位置:文档之家› C语言考试复习试题及参考答案

C语言考试复习试题及参考答案

中南大学现代远程教育课程考试复习试题及参考答案C语言程序设计一、单项选择题若以下各题所有库函数都可以合法使用,且变量定义如下:int m=5, i=3,j=2,*p, a=8,b=0;int arr[10]={0,1,2,3,4,5,6,7,8,9},td[ ][3]={1,2,3,4,5,6};float x=2.5,y=3.0;double z=0; long n=1;char c=’A’,ch[20]={’a’,’b’,’c’,’\0’,’d’,’\0’};struct student{ int num;char name[20];float score;struct student *next;}st1,st2,*ps;FILE *fp;1.若将3和10从键盘输入给变量a、x,输入语句为scanf(“a=%d,x=%f”,&a,&x);正确的键盘输入是(↙表回车):A a=3,x=10↙B 3,10↙C 3 10↙D 3,10.0↙2. 以下不是死循环的语句是:A for ( ;;y+=i++);B while(a) y+=i++ ;C do{ y+=i++}while (a>0);D for (b=0;(c=getchar()!=’\n’);)b++;3.若p=arr;正确的语句是:A *p=arr[10];B *p=arr[2*a];C p=arr[5];D p[i]=arr[0];4.若ps=&st1;则下面描述正确的是:A ps->num与st1->num等价。

B ps.num与st1.num等价。

C ps->num与num等价。

D ps->num与st1.num等价。

5.语句printf(“%d",a<i>j);的输出结果是:A 1B 0C 8 D都不对6.表达式 j/i+a%i+x 的值是:A 6B 4.5C 6.0D 5.57.表达式 b||a+i&&i<j 的值是:A 不确定B 0.0C 1D 08.若执行语句 a=b+=3*j+(int)x;则b的值为:A 1B 8C 0D 8.59. 若执行语句 a=b>j ?++i : i++;则a与i的值分别为:C x=D x=1a≥b 1 a<b11.将字符串“Wan Ming”输入数组ch中,正确的是:A、scanf(“%s”,ch)B、scanf(“%s”,&ch)C、ch=“Wan Ming”D、gets(ch)12. 执行语句printf(“%c”,td[1][0]+’A’)的结果是:A、AB、BC、DD、E13.下列关于main()函数说法正确的是A、C语言程序总是从main()开始执行B、C语言程序可以没有main()函数C、C语言程序可以包含多个main()函数,但必须在不同的模块中D、C语言程序中main()函数不能有形式参数14.下列关于函数说法正确的是A、C语言程序的函数内还可定义其他的函数B、C语言程序的函数内不可再定义其他的函数C、C语言程序的函数不能自己调用自己D、C语言程序中只有同一源文件中的函数才能有调用与被调用关系15.若#define squ(x) x*x 执行语句printf(“result=%d”,squ(i+j));结果为:A、result=36B、36C、result=11D、1116. 若#define squ(x) (x)*(x) 执行语句printf(“result=%d”,squ(i+j));结果为:A、result=36B、result=17C、result=11D、result=25 17.C语言对宏命令叙述正确的是A、宏替换占用运行时间B、编译程序对宏命令的处理是在对源程序中其它成分编译之前进行的C、宏命令的处理是在程序执行时进行的D、宏命令的处理是在程序连接时进行的18. 若执行语句a- =a+=a*=10;a的值为:A、0B、-10C、-100D、100 19.若执行语句p=arr; printf(“%d”,*(p+i));输出结果为A、0B、2C、3D、120.若执行printf(“%s”,ch);结果为:A、’abc’B、abcC、abcdD、abc\0d21.若对数组进行初始化:charcarr[ ]={’s’,’t’,’u’,’d’,’e’,’n’,’t’},barr[ ]=”student ”;则正确的是A、carr与barr长度相同B、carr比barr长C、carr与barr相同D、carr比barr短22.若有说明语句int (*p)[N];则p是A、N个指向整型变量的指针B、可指向有N个整型元素的一维数组的指针C、指向N个整型变量的函数指针D、有N个指针元素的一维指针数组23.若有说明语句int *f( );则函数f是A、f是一个指向整型变量的数组指针B、f返回一个整型数据C、f是一个指向整型变量的函数指针D、f 返回一个整型指针,指向函数本身24.若函数f定义如下:void f(char *d, char *s){ while ( *d++=*s++);}函数f的功能是:A、串比较B、串复制C、求串长D、串反向25.表达式100+a+’a’+x*z的值的数据类型为A、intB、floatC、doubleD、char26.若要动态申请一个double型内存单元,正确的语句是A、pd=double malloc(sizeof(double))B、pd=( *double)malloc(sizeof(double))C、pd=double * malloc(sizeof(double))D、pd=(double*)malloc(sizeof(double))27.若要从键盘上输入67892到变量n中,正确的语句是A、scanf(“%lf”,&n);B、scanf(“%ld ”,&n);C、scanf(“%lf ”,n);D、scanf(“%d ”,&n); 28.判断字符变量c是否不为小写英文字母的正确表达式是A、’a’<=c <=’z’B、c>= ‘a’ && c<=’z’C、’a’≤c ≤’z’D、c<’a’ || c>’z’ 29.下列每组表达式被执行后,结果完全等价的是A、!(b= =0)与!(!b )B、b=(a=4,4*5) 与 b=a=4,4*5C、float(i/j) 与 float i/jD、0<x<100 与 x>0 && x<10030.表达式(m&1)==(m%2)的值是A、 0B、无法确定C、 1D、以上都不对31.数学式ln2x+asin(60°)的C语言表达式是A、log(2*x)+a*sin(60)B、ln(2*x) +a*sin(60/180*3.14)C、ln(2*x) +a*sin(60)D、log(2*x)+a*sin(3.14*60/180)32. 要打开一个已经存在的非空文件file用于修改,则正确的语句是A、fopen(“file”,”r+”)B、fopen(“file”,”w”)C、fopen(“file”,”a+”)D、fopen(“file”,”r”)33. 若打开文件时发生错误,则fopen()函数的返回值是A、1B、0C、不确定D、没有返回值34. 调用函数fseek(fp,-25L,2),其操作结果是A、文件位置指针从文件开始处前移25字节B、文件位置指针从文件结尾处后移25字节C、文件位置指针从文件当前位置处前移25字节D、文件位置指针从文件当前位置处后移25字节35. 能正确表示a和b同时为正或同时为负的逻辑表达式是A、(a>=0||b>=0)&&(a<0||b<0)B、(a>=0&&b>=0)&&(a<0&&b<0)C、(a*b>0&&(a*b<=0)D、a*b>036. 若x=y=z=1;表达式(x--||++y)&&(z++)执行后,x,y,z的值分别为:A. 0,1,1B. 0,1,2C. 0,2,1D. 0,2,237.下列变量的初始化,不正确的是:A. int x,y=5;B. float x=y=3.5;C. char s[]=”a”;D. int a[][3]={{1},{},{0,9}};38. 可以代替while(x!=0)中的条件x!=0的是:A. xB. !xC. x==1D. x!=139.有关函数参数,下列说法不正确的是:A. 实参和形参是不同的变量;B. 实参可以将数据传给形参;C. 形参可以将数据传给实参;D. 实参和形参必须个数相等,类型一致。

40.为避免嵌套的条件语句if-else的二义性,C语言规定else与if的配对原则是:A. 同一行上的未配对ifB. 缩排位置相同的未配对ifC. 它之前最近的未配对的ifD. 它之后最近的未配对if41.对于一个二维数组,以下几种方法中,不能正确表示i行j列元素的是:A.td[i][j]B. *(td[i]+j)C. *(*(td+i)+j)D.*(td+i+j)42.下面语句段不是死循环的是:A. for(i=1;;i++)B. k=0;s=s+i; do{ k++;}while(k>0);C. i=0;D. a=1;while(1) while(a<10){ i++; { if(a>5) continue;if(i==20) break; } a++; }43.下列字符串中,可以用作变量名的是:A. _out2B. 12abcC. whileD. stu&344. 表达式0<a<5和0<a&&a<5的值分别为:A. 0和0B. 0和1C. 1和0D. 1和145.下列常数中,符合C语法规则的是:A. ‘\’B. .5e2C. 018D. e346.以下为合法的整型常量的是:A. 027aB. 0.0C. 0x4e3D. 3×10247.以下为合法的整型常量的是:A.‘3’ B. 281 C. 5af D. ‘\101’48.以下为合法的实型常量的是:A. 1.5×102B. 1e-5C. 1e1.5D. E+549.以下为合法的实型常量的是:A. πB. .5C. 025.3D. 050.以下为合法的字符型常量的是:A. "A"B. 64C. '啊'D. '\n'51. 以下为非法的字符型常量的是:A. ‘ok’B. ‘*’C. ‘A’D.‘\111’52.以下为合法的变量定义的是:A.#define N 10B. int a=12,b,c; floatx,y,a=1.5;int a[3*N];C. int m,f(x);D. char c,*pc=&c,n;53.以下为非法的变量定义的是:A. char 21cn; B. int k=0,*p=&k;C. int a=b=c=21; D. static char[4]=”Good”;54.以下是合法的表达式的是:A. y=m nB. (x+y)++C. x+y=8D. putchar('A ')55. 以下是非法的表达式的是:A. a+=b*cB. i=0,k=k++C. k==0D. !a||m≤n &&7 56.以下是合法赋值语句的是:A.a+b=0 B. pc=&xC. ps->name=”Tan Jing”D. staticchar[4]=’G’,’o’,’o’,’d’57.若要从键盘上输入327680到变量n中,正确的语句是:A. scanf(“%lf” ,&n);B. scanf(“%d “,&n);C. scanf(“%ld”,n);D. scanf(“%ld”,&n);58. 若有宏定义#define y 9则表达式’y’==’9’的值为:A. ‘y’B. ‘9’C. 0D. 1二、程序理解题(指出程序执行的结果)1. #include <stdio.h>main( ){ int i,j,x=0;for (i=0;i<2;i++){ x++;for (j=0;j<3;j++) { if (j%2 ) continue;x++;}x++;}printf(“x=%d\n”,x);}2. #include <stdio.h>main( ){ int k=0,j,x=0;while (k<2){ ++x;for (j=0;j<3;j++){ if (j%2 ) break;x++;}k++; ++x;}pr intf(“x=%d\n”,x);}3.#include <stdio.h>main(){int a=2,b=7,c=5;switch (a>0){case 1:switch (b<0){ case 1: printf(“$”);break;case 2: printf(“!”); break;}case 0: switch (c= =5){ case 0: printf(“*”);break;case 1:printf(“#”);break;default: printf(“%”);}default: printf(“&”);} printf(“\n”);}4. main(){ int i,sum=0;for (i=1;i<=50;i++){ sum+=i;if (sum>10) break;printf(“sum=%-5d\n”,sum);}}5. 若输入字符串program时,下列程序输出为:#include <stdio.h>main(){ char str[80];void prochar(char *str,char ch);scanf(“%s”,str);prochar(str,’r’);puts(str);}void prochar(char *str,char ch){ char *p;for (p=str;*p!='\0';p++)if (*p==ch){*str=*p;(*str)++;str++;}*str='\0';}6. #include <stdio.h>#include <string.h>main(){ int i,j,temp,d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1} ,{1,2,3,4}};for (i=0;i<4;i++)for (j=0;j<i;j++)if (d[i][j]>d[j][i]) d[j][i]=d[i][j];for (i=0;i<4;i++){ printf("\n");for (j=0;j<4;j++)if (j>=i)printf("%6d",d[i][j] ) ;else printf("%6c",' ') ;}}7. #include<stdio.h>main(){ int k;printf("\n");for (k=1;k<10;k++)switch(k%2){case 0: printf("#");break;case 1: k+=2;printf("*");defalt: printf("\n");}}8. int d=1;fun(int p){ static int d=5;d+=p;printf("(f)%-4d",d);return (d);}main(){int a=3;printf("\n(m)%d",fun(a*fun(d)));}9. #include <stdio.h>main(){char a[2][6]={"sun","moon"};int j,i,len[2];for(i=0;i<2;i++){ for (j=0;j<6;j++)if (a[i][j]=='\0'){ len[i]=j;break;}printf("%8s:%d\n",a[i],len[i]);}10. int x=2,y=4;f1(int x){ x++;y++;printf(“f1:x=%d,y=%d\n”,x,y);}f2(int *y){ x++;(*y)++;printf(“f2:x=%d,y=%d\n”,x,*y);}main(){ int y=6;f1(x);f2(&y);printf(“main:x=%d,y=%d”,x,y);}三、程序填空题1.从键盘输入两个整数,按由大到小输出,程序如下:main( ){ int a,b;scanf(“%d,%d”,&a,&b);if ( ) swap( );printf(“%d,%d”,a,b);}void swap(int * x,int * y){ ;t= *x; ; *y=t;}2.输入任意多个十进制正整数,将其对应的二进制数的各位反序,形成新的十进制数输出。

相关主题