1、C 语言等级考试复习资料 题型一 单项选择题 考点 1:运算符与表达式 1. 已知 int i=10; 表达式 “5 void main() enum color Black=1,Red,Blue,Green; enum color c1,c2; c1=Red; c2=Blue; printf(“%d,%dn“,c1,c2); 函数 fun 的功能是 :求出无符号十进制数 n 中包含 0 的个数 ,及各位数字的最大值 (A) 2,3 (B) 1,2 (C) 1,1 (D) 0,-1 16. 根据下面的结构体类型及其结构数组的定义,值等于 A的表达式是( D )。 struct season c
2、har name10; int day; ; struct season s4=“ Spring” ,90,” Summer” ,91,” Autumn” ,92,” Winter” ,92; (A) s3.name0 (B) s3.name (C) s2.name (D) s2.name0 按照程序算得 17.对于如下枚举类型定义,枚举量 Pasica 的值为( C )。 enum languageBasic=3,Assembly=6,Ada=100,COBOL,Pasica A) 4 B) 7 C) 102 D) 103 18.设有以下定义: union data int d1; floa
3、t d2; demo; 则以下叙述中,错误的是( D )。 A) 变量 demo 与成员变量 d2 所占的内存字节数相同 B) 变量 demo 中各成员的地址相同 C) 变量 demo 和 各成员的地址相同 D) 若给变量 demo.d1 赋 89 后, demo.d2 中的值是 89.0 赋值后其中的值应为 90 19.设有如下说明 typedef struct int n; char c; double x; STD; 则以下选项中,能正确定义结构体数组并赋初值的语句是( A)。 A)STD s2=1,A,62,2,B,75; B)STD s2=1,“A“,62,2,“,75; 格式错位
4、C)struct s2=1,A,2,B; D)struct s2=1,“A“,62.5,2,“B“,75.0 20.若有以下说明和定义 union dt int a; char b; double c; data; 以下叙述中,错误的是( C)。 A)data 的每个成员起始地址相同 B)变量 data 所占的内存字节数与成员 C 所占字节数相等 C)程序段: data.a=5;printf(“%fn“,data,c);输出结果为 5.000000 正确结果应为 5 D)data 可以作为函数的实参 21.设有如下枚举类型定 义: enum language Basic=3,Assemble,
5、Ada=100,COBOL,Fortran; 则枚举量 Fortran 的值为( A )。 A) 102 B) 103 C) 4 D) 7 考点 4:宏定义 22. 以下程序的输出结果是( D )。 # include # define f(x) x*x void main() int a=6,b=2,c; c=f(a+b)/f(a-b); printf(“%dn“,c); (A) -2.5 (B) -2 (C) 64 (D) 4 23. 运行以下程序的输出结果为( B )。 #include “stdio.h“ #define R 1+2 #define S(r) r*r #define V
6、(r) S(r)*R void main() int r1=1+2; printf(“%d“,V(r1); 通过程序要求算得 (A) 27 (B) 11 (C)9 (D)7 24.运行以下的程序,输出结果为( D )。 #define M 3*2 #define N M+2 #define S(r) M*N*r/2 #inlcude void main() int a=4; printf(“%d“,S(a); A) 96 B) 144 C) 22 D) 40 25.以下程序的输出结果是( A )。 #define MAX(x,y) (x)(y)?(x):(y) void main() int
7、a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf(“%dn“,t); , 的优先级比赋值 =的优先级高的 A) 7 B) 6 C) 5 D) 没有答案 26.运行下面程序的输出结果为( D )。 #define X 5 #define Y X+1 #define Z Y*X/2 int main(void) int a; a=Y; printf(“ %d,%dn” ,Z,-a); 输出等于 a+b*b+c-c+a =1+2*2+3-3+1 =6 ( A) 15,6 ( B) 15,5 ( C) 12,5 ( D) 7,5 考点 5:文件操作 27. C
8、语言中 fscanf 函数的正确调用形式是 ( D ) (A) fscanf(文件指针,格式字符串,输出列表 ); 顺序错误 (B) fscanf(格式字符串,输出列表,文件指针 ); (C) fscanf(格式字符串,文件指针,输入列表 ); (D) fscanf(文件指针,格式字符串,输入列表 ); 考点 6:选择结构 28. 设有定义: int a=1,b=2,c=3; ,以下语句中执行效果与其它三个不同的是( C )。 (A) if(ab) c=a,a=b,b=c; (B) if(ab) c=a,a=b,b=c; (C) if(ab) c=a;a=b;b=c; (D) if(ab) c
9、=a;a=b;b=c; C 的结果为 3 29. 以下选项中与 if(a=1)a=b; else a+; 语句功能不同的 switch 语句是 ( B ) 。 (A) switch(a) (B) switch(a=1) case 1: a=b;break; case 0: a=b;break; default:a+; case 1:a+; (C) switch(a) (D) switch(a=1) default:a+;break; case 1:a=b;break; case 1: a=b; case 0:a+; 30. 有如下程序 #include “stdio.h“ void main(
10、) int a=2,b=-1,c=2; if(a1); 结果应为 10+3 所以等于 13 (A) 1 (B) 13 (C) 12 (D) 5 35.表达式 15|127 的值是( B )。 A) 15 B) 127 C) 0 D) 1 考点 9:常用函数 36. 以下程序的输出结果是( C )。 #include void main() char p20=a,b,c,d,q=“abc“,r=“abcde“; strcpy(p+strlen(q),r); strcat(p,q); printf(“%d %dn“,sizeof(p),strlen(p); (A) 20 9 (B) 9 9 (C)
11、20 11 (D)11 11 37.以下程序的输出结果是( C)。 #include void main() char p=1,2,3,q=“123“; printf(“%d,%dn“,sizeof(p),sizeof(q); 指针存放的也就是内存地址,在 32 位系统下,内存地址是 32 位的,也就是 4 个字节。 所以 32 位系统下,指针始终占用 4 个字节。 所以结果为 4 A) 4,4 B) 3,3 C) 3,4 D) 4,3 38.以下程序段的运行结果是( C )。 char a10=” abcd” ; strcpy(a+2,” ABCD” ); printf(“ %sn” ,a)
12、; ( A) ABCD ( B) aABCD ( C) abABCD ( D) abcABCD 39.运行下面程序的输出结果为( C )。 int main(void) char s20=” CLanguage.” ; printf(“ %d,%d” ,sizeof(s),strlen(s); 数组定义 ( A) 10,11 ( B) 10,10 ( C) 20,10 ( D) 10,20 考点 10:数组 40. 下列对 C 语言字符数组的描述中错误的是( C )。 (A) 字符数组可以存放字符串 (B) 字符数组的字符串可以整体输入、输出 (C) 可以在程序中用赋值运算符“ =”对字符数组
13、进行整体赋值 (D) 不可以用关系运算符对字符数组中的字符串进行比较 可以在程序中用赋值运算符“ =”对字符数组进行整体赋值 41.以下不能对二维数组 a 进行正确初始化的语句是 ( A ) 。 (A) int a 2 3 =1,2,3,4,5,6; (B) int a 3 =1,2,0; (C) int a 2 3 =0; (D) int a 3 =1,2,3,4,5,6; 其中 不能省略 42.若有以下声明和语句: int a=1,2,3,4,5,6,*p; p=a; 则下列说法正确的是( B )。 A) 数组 a 中值为 6 的元素的地址可用表达式 p+6 表示 B) 表达式 p4和 a
14、4的值相等 两表达式算出的结果都为同一个值 C) p+和 a+都是正确的表达式 D) 表达式 则对 arr 数组元素的正确引用是( D)。 A) arr55 B) a00 C) arr1,3 D) arr1+10 arr1+10 44.以下能对二维数组 a 进行正确初始化的语句是( C )。 ( A) int a2 =1,0,1,5,2,3; 未能满足省略的条件 ( B) int a24=1,2,3,4,5,6; ( C) int a 3=1,2,3,4,5,6; ( D) int a =1,0,1,1,1; 考点 11:指针 45.以下程序的运行结果是( A )。 #include void
15、 main() int a10=1,2,3,4,5,6,7,8,9,10,*p= printf(“%dn“,*p+*q); A) 14 B) 15 C) 8 D) 9 输出 1,6.因为本身数组名也是一种指针,其指针类型与数组类型相同 。 46.若有说明: int i,j=5,*p=则与 i=j;等价的语句是( D )。 A) i=*p; B) *p=* C) i= D) i=*p; 47.若有以下定义和语句: int a10=1,2,3,4,5,6,7,8,9,10,*p= p=p+2; 则 printf(“%d“,*p);的输出结果是( A)。 1 处的索引号地址给指针 q, 1 处的索引
16、号处的值为 2 printf(“%dn“,*p+*q); A) 6 B) 5 C) 4 D) 3 48.设有以下语句 struct st int n; struct st *next; static struct st a3=5, p= 则表达式的值为 6 的是( D )。 ( A) p+-n ( B) p-n+ ( C) (*p).n+ ( D) +p-n 考点 12:变量的作用域和生存期 49.以下叙述中正确的是( B)。 ( A)全局变量的作用域一定比局部变量的作用域范围大 ( B)静态( static)变量的生存期贯穿于整个程序的运行期间 ( C)函数的形参都属于全局变量 ( D)未在定义语句中赋初值的 auto 变量和 static 变量的初值都是随机值 静态( static)变量的生存期贯穿于整个程序的运行期间 考点 13:函数的定义与调用 50.以下不正确的函数首部是( B )。 ( A) f(int a) ( B) fun(float a5) 字符出错 ( C) function(double *a) ( D) fun(int *a10)