中南大学现代远程教育课程考试复习试题及参考答案
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",aj);的输出结果是:
A 1
B 0
C 8 D都不对
6.表达式 j/i+a%i+x 的值是:
A 6
B 4.5
C 6.0
D 5.5
7.表达式 b||a+i&&i A 不确定 B 0.0 C 1 D 0 8.若执行语句 a=b+=3*j+(int)x;则b的值为: A 1 B 8 C 0 D 8.5 9. 若执行语句 a=b>j ?++i : i++;则a与i的值分别为: C x= D x= 1a≥b 1 a 11.将字符串“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、A B、B C、D D、E 13.下列关于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=36 B、36 C、result=11 D、11 16. 若#define squ(x) (x)*(x) 执行语句printf(“result=%d”,squ(i+j));结果为: A、result=36 B、result=17 C、result=11 D、result=25 17.C语言对宏命令叙述正确的是 A、宏替换占用运行时间 B、编译程序对宏命令的处理是在对源程序中其它成分编译之前进行的 C、宏命令的处理是在程序执行时进行的 D、宏命令的处理是在程序连接时进行的 18. 若执行语句a- =a+=a*=10;a的值为: A、0 B、-10 C、-100 D、100 19.若执行语句p=arr; printf(“%d”,*(p+i));输出结果为 A、0 B、2 C、3 D、1 20.若执行printf(“%s”,ch);结果为: A、’abc’ B、abc C、abcd D、abc\0d 21.若对数组进行初始化:char carr[ ]={’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、int B、float C、double D、char 26.若要动态申请一个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*5 C、float(i/j) 与 float i/j D、0 30.表达式(m&1)==(m%2)的值是 A、 0 B、无法确定 C、 1 D、以上都不对 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、1 B、0 C、不确定 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>0 36. 若x=y=z=1;表达式(x--||++y)&&(z++)执行后,x,y,z的值分别为: A. 0,1,1 B. 0,1,2 C. 0,2,1 D. 0,2,2 37.下列变量的初始化,不正确的是: 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. x B. !x C. x==1 D. x!=1 39.有关函数参数,下列说法不正确的是: A. 实参和形参是不同的变量; B. 实参可以将数据传给形参; C. 形参可以将数据传给实参; D. 实参和形参必须个数相等,类型一致。 40.为避免嵌套的条件语句if-else的二义性,C语言规定else与if的配对原则是: A. 同一行上的未配对if B. 缩排位置相同的未配对if C. 它之前最近的未配对的if D. 它之后最近的未配对if 41.对于一个二维数组,以下几种方法中,不能正确表示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. _out2 B. 12abc C. while D. stu&3