1、50道 C 语言知识题 1.以下叙述中正确的是 A)用 C 程序实现的算法必须要有输入和输出操作 B)用 C 程序实现的算法可以没有输出但必须要有输入 C)用 C 程序实现的算法可以没有输入但必须要有输出 D)用 C 程序实现的算法可以既没有输入也没有输出 2.下列可用于 C 语言用户标识符的一组是 A)void, define, WORD B)a3_3,_123,Car C)For, -abc, IF Case D)2a, DO, sizeof 3.以下选项中可作为 C 语言合法常量的是 A)-80 B)-080 C)-8e1.0 D)-80.0e 4.若有语句 :char *line5;,
2、以下叙述中正确的是 A) 定义 line 是一个数组 ,每个数组元素是一个基类型为 char为指针变量 B) 定义 line 是一个指针变量 ,该变量可以指向一个长度为 5的字符型数组 C) 定义 line 是一个指针数组 ,语句中的 *号称为间址运算符 D) 定义 line 是一个指向字符型函数的指针 5.以下定义语句中正确的是 A)int a=b=0; B)char A=65+1,b=b; C)float a=1,*b= D)double a=0 0;b=1.1; 6.有以下程序段 char ch; int k; ch=a; k=12; printf(“%c,%d,“,ch,ch,k);
3、printf(“k=%d n“,k); 已知字符 a 的 ASCII码值为 97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符 ,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 7.有以下程序 main() int i,s=1; for (i=1;i=2 c=a; if(c!=a) c=b; printf(“%d,%d,%dn“,a,b,c); 其输出结果是 A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 10.有以下程序 #include main() int x=1,y=0,a=0
4、,b=0; switch(x) case 1: switch(y) case 0:a+; break; case 1:b+; break; case 2:a+; b+; break; case 3:a+; b+; printf(“a=%d,b=%dn“,a,b); 程序的运行结果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1 11.下列程序 的输出结果是 #include “stdio.h“ main() int i,a=0,b=0; for(i=1;i0;j+=2) s=10*s+pij-0; printf(“%dn“,s); 该程序的输出结果是 A)69
5、825 B)63825 C)6385 D)693825 16.有定义语句 :char s10;,若要从终端给 s 输入 5个字符 ,错误的输入语句是 A)gets( B)scanf(“%s“,s+1); C)gets(s); D)scanf(“%s“,s1); 17.以下叙述中错误的是 A)在程序中凡是以 “#“开始的语句行都是预处理命令行 B)预处理命令行的最后不能以分号表示结束 C)#define MAX 是合法的宏定义命令行 D)C 程序对预处理命令行的处理是在程序执行的过程中进行的 18.设有以下说明语句 typedef struct int n; char ch8; PER; 则下面
6、叙述中正确的 是 A)PER 是结构体变量名 B)PER 是结构体类型名 C)typedef struct 是结构体类型 D)struct 是结构体类型名 19.以下叙述中错误的是 A)gets 函数用于从终端读入字符串 B)getchar函数用于从磁盘文件读入字符 C)fputs 函数用于把字符串输出到文件 D)fwrite 函数用于以二进制形式输出数据到文件 20.以下能正确定义一维数组的选项是 A)int a5=0,1,2,3,4,5; B)char a=0,1,2,3,4,5,0; C)char a=A,B,C; D)int a5=“0123“; 21.有以下程序 #include m
7、ain() char p=a, b, c,q10= a, b, c; printf(“%d%dn“,strlen(p),strlen(q); 以下叙述中正确的是 A) 在给 p和 q数组置初值时 ,系统会自动添加字符串结束符 ,故输出的长度都为 3 B) 由于 p数组中没有字符串结束符 ,长度不能确定 ,但 q数组中字符串长度为3 C) 由于 q数组中没有字符串结束符 ,长度不能确定 ,但 p数组中字符串长度为3 D) 由于 p和 q数组中都没有字符串结束符 ,故长度都不能确定 22.有以下程序 #include #include void fun(char *s,int n) char *t
8、; int i,j; for(i=0;istrlen(sj) t=si;si:sj;sj=t; main() char *ss=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“; fun(ss,5); printf(“%s,%sn“,ss0,ss4); 程序的运行结果是 A)xy,aaaacc B)aaaacc,xy C)bcc,aabcc D)aabcc,bcc 23.有以下程序 #include int f(int x) int y; if(x=0|x=1) return(3); y=x *x-f(x-2); return y; main() int z; z=f(3)
9、; printf(“%dn“,z); 程序的运行结果是 A)0 B)9 C)6 D)8 24.下面程序段的运行结果是 char str=“ABC“,*p=str; printf(“%dn“,*(p+3); A)67 B)0 C)字符 C的地址 D)字符 C 25.若有以下定义 : struct link int data; struct link *next; a,b,c,*p,*q; 且变量 a 和 b之间已有如下图所示的链表结构 : 26.指针 p指向变量 a,q指向变量 c。则能够把 c 插入到 a 和 b 之间并形成新的链表的语句组是 : A)a.next=c; c.next=b; B
10、)p.next=q; q.next=p.next; C)p-next= q-next=p-next; D)(*p).next=q; (*q).next= 27.对于下述程序 ,在方式串分别采用 “wt“和 “wb“运行时 ,两次生成的文件 TEST 的长度分别是 #include void main() FILE *fp=fopen(“TEST“,); fputc(A,fp);fputc(n,fp); fputc(B,fp);fputc(n,fp); fputc(C,fp); fclose(fp); A)7字节、 7字节 B)7字节、 5字节 C)5字节、 7字节 D)5字节、 5字节 28.
11、变量 a 中的数据用二进制表示的形式是 01011101,变量 b中的数据用二进制表示的形式是 11110000。若要求将 a 的高 4位取反 ,低 4位不变 ,所要执行的运算是 A)ab B)a|b C)a,若要从终端给 s 输入 5个字符 ,错误的输入语句是 A)gets( B)scanf(“%s“,s+1); C)gets(s); D)scanf(“%s“,s1); 48.有以下程序 #include #define N 5 #define M N+1 #define f(x) (x*M) main() int i1,i2; i1=f(2); i2=f(1+1); printf(“%d
12、%dn“,i1,i2); 程序的运行结果是 A)12 12 B)11 7 C)11 11 D)12 7 49.若有以下说明和定义 union dt int a; char b; double c;data; 以下叙述中错误的是 A)data 的每个成员起始地址都相同 B)变量 data 所占内存字节数与成员c 所占字节数相等 C)程序段 :data.a=5;printf(“%fn“,data.c);输出结果为 5.000000 D)data 可以作为函数的实参 50.有以下程序 #include main() FILE *fp;int k,n,a6=1,2,3,4,5,6; fp=fopen(
13、“d2.dat“,“w“); fprintf(fp,“%d%d%dn“,a0,a1,a2); fprintf(fp,“%d%d%dn“,a3,a4,a5); fclose(fp); fp=fopen(“d2.dat“,“r“); fscanf(fp,“%d%d“,printf(“%d%dn“,k,n); fclose(fp); 程序运行后的输出结果是 A)1 2 B)1 4 C)123 4 D)123 456 答案 1 2 3 4 5 6 7 8 9 10 C B A A B D D B B D 11 12 13 14 15 16 17 18 19 20 B B A C B C D D B B 21 22 23 24 25 26 27 28 29 30 B A A C B D B A C A 31 32 33 34 35 36 37 38 39 40 D B B A A D B B B B 41 42 43 44 45 46 47 48 49 50 B B C A C D D B D D