1、二级 C 语言-241 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:46,分数:100.00)1.以下叙述中错误的是_。(分数:2.00)A.C 语言的可执行程序是由一系列机器指令构成的B.用 C 语言编写的源程序不能直接在计算机上运行C.通过编译得到的二进制目标程序需要连接才可以运行D.在没有安装 C 语言集成开发环境的机器上不能运行 C 源程序生成的.exe 文件2.以下叙述中正确的是_。(分数:2.00)A.C 程序中的注释只能出现在程序的开始位置和语句的后面B.C 程序书写格式严格,要求一行内只能写一个语句C.C 程序书写格式自由,一个语句可以写在多行上D
2、.用 C 语言编写的程序只能放在一个程序文件中3.C 语言源程序名的后缀是_。(分数:2.00)AexeBcCobjDcp4.以下叙述中正确的是_。(分数:2.00)A.C 语言程序将从源程序中第一个函数开始执行B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C.C 语言规定必须用 main 作为主函数名,程序将从此开始执行,在此结束D.main 可作为用户标识符,用以命名任意一个函数作为主函数5.以下 C 语言用户标识符中,不合法的是_。(分数:2.00)A._1B.AaBcC.a_bD.a-b6.以下选项中不能用作 C 程序合法常量的是_。(分数:2.00)A.1,23
3、4B./123C.123D.“/x7G“7.有以下定义语句,编译时会出现编译错误的是_。(分数:2.00)A.char a=“a“;B.char a=“/n“;C.char a=“aa“;D.char a=“/x2d“;8.有以下程序: #includestdio.h main() char a30,b30; scanf(“%s“,a); gets(b); printf(“%s%s“,a,b); 程序运行时若输入: how are you? I am fine回车 则输出结果是_。(分数:2.00)A.how are you?I am fineB.howare you? I am fineC.
4、how are you? I am fineD.how are you?9.有以下程序: #includestdio.h main() int a1,a2; char c1,c2; scanf(“%d%c%d%c“, printf(“%d,%c,%d,%c“,a1,c1,a2,c2); 若想通过键盘输入,使得 a1 的值为 12,a2 的值为 34,c1 的值为字符 a,c2 的值为字符 b,程序输出结果是:12,a,34,b。正确的输入格式是(以下 代表空格,CR代表回车)_。 A12a34bCR B C12,a,34,bCR D (分数:2.00)A.B.C.D.10.有以下程序段: in
5、t j;float y;char name50; scanf(“%2d%f%s“, 当执行上述程序段,从键盘上输入 55566 7777abc 后,y 的值为_。(分数:2.00)A.55566.0B.566.0C.7777.0D.566777.011.有以下程序: #includestdio.h main() char a,b,c,d; scanf(“%c%c“, c=getchar();d=getchar(); printf(“%c%c%c%c/n“,a,b,c,d); 当执行程序时,按下列方式输入数据(从第 1 列开始,CR代表回车,注意:回车也是一个字符): 12CR 34CR 则输出
6、结果是_。(分数:2.00)A.1234B.12C.123D.123412.若变量已正确定义,在 if(W)printf(“%d/n“,k);中,以下不可替代 W 的是_。(分数:2.00)A.ab+cB.ch=getchar()C.a=b+cD.a+13.已知字母 A 的 ASCII 码为 65,若变量 kk 为 char 型,以下不能正确判断出 kk 中的值为大写字母的表达式是_。(分数:2.00)A.kk=“A“ else k=c; else if(bc)k=b; else k=c; 以下选项中与上述 if 语句等价的语句是_。(分数:2.00)A.k=(ab)?a: b;k=(bc)?
7、b:c;B.k=(ab)?(bc)?a: b):(bc)?b:c);C.k=(ab)?(ac)?a:c):(bc)?b:c);D.k=(ab)?a:b;k=(ac)?a:c;16.若有表达式(w)?(-x):(+y),则其中与 w 等价的表达式是_。(分数:2.00)A.w=1B.w=0C.w!=1D.w!=017.有以下程序: #includestdio.h main() int a=1,b=2; while(a6)b+=a;a+=2;b%=10; printf(“%d,%d/n“,a,b); 程序运行后的输出结果是_。(分数:2.00)A.5,11B.7,1C.7,11D.6,118.若变
8、量已正确定义,有以下程序段: i=0; do printf(“%d,“,i);while(i+); printf(“%d/n“,i); 其输出结果是_。(分数:2.00)A.0,0B.0,1C.1,1D.程序进入无限循环19.若 i 和 k 都是 int 类型变量,有以下 for 语句: for(i=0,k=-1;k=1;k+)printf(“*“); 下面关于语句执行情况的叙述中正确的是_。(分数:2.00)A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环20.有以下程序: #includestdio.h main() int i,j; for(i=3;i=1;i-
9、) for(j=1;j=2;j+)printf(“%d“,i+j); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.2 3 43 4 5B.4 3 25 4 3C.2 33 44 5D.4 53 42 321.以下叙述中错误的是_。(分数:2.00)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次就返回多个函数值C.用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式22.下面的函数调用语句中 func 函数的实参个数是_。 func
10、(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8);(分数:2.00)A.3B.4C.5D.823.有以下程序: #includestdio.h int fun(int x,int y) if(x=y)return(x); else return(x+y)/2); main() int a=4,b=5,c=6; printf(“%d/n“,fun(2*a,fun(b,c); 程序运行后的输出结果是_。(分数:2.00)A.3B.6C.8D.1224.设有如下函数定义: int fun(int k) if(k1)return 0; else if(k=1)return 1;
11、 else return fun(k-1)+1; 若执行调用语句:n=fun(3);,则函数 fun 总共被调用的次数是_。(分数:2.00)A.2B.3C.4D.525.在一个 C 源程序文件中所定义的全局变量,其作用域为_。(分数:2.00)A.所在文件的全部范围B.所在程序的全部范围C.所在函数的全部范围D.由具体定义位置和 extern 说明来决定范围26.有以下程序: #includestdio.h #includestring.h struct A int a; char b10; double c; void f(struct A t); main() struct A a=10
12、01,“ZhangDa“,1098.0; f(a);printf(“%d,%s,%6.1f/n“,a.a,a.b,a.c); void f(struct A t) t.a=1002;strcpy(t.b,“ChangRong“);t.c=1202.0; 程序运行后的输出结果是_。(分数:2.00)A.1001,ZhangDa,1098.0B.1002,ChangRong,1202.0C.1001,ChangRong,1098.0D.1002,ZhangDa,1202.027.有以下程序: #includestdio.h void fun(int*a,int n)/*fun 函数的功能是将 a
13、所指数组元素从大到小排序*/ int t,i,j; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj)t=ai;ai=aj;aj=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; fun(c+4,6); for(i=0;i10;i+)printf(“%d,“,ci); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.1,2,3,4,5,6,7,8,9,0,B.0,9,8,7,6,5,1,2,3,4,C.0,9,8,7,6,5,4,3,2,1,D.1,2,3,4,9,8,7,6,5,0,28.下列定义数组的语
14、句中,正确的是_。(分数:2.00)A.int N=10;int xN;B.#define N 10int xN;C.int x010;D.int x;29.若有定义语句:int m=5,4,3,2,1,i=4;,则下面对 m 数组元素的引用中错误的是_。(分数:2.00)A.m-iB.m2*2C.mm0D.mmi30.下面是有关 C 语言字符数组的描述,其中错误的是_。(分数:2.00)A.不可以用赋值语句给字符数组名赋字符串B.可以用输入语句把字符串整体输入给字符数组C.字符数组中的内容不一定是字符串D.字符数组只能存放字符串31.若有定义语句:char s10=“1234567/0/0“
15、;,则 strlen(s)的值是_。(分数:2.00)A.7B.8C.9D.1032.有以下程序(strcat 函数用于连接两个字符串): #includestdio.h #includestring.h main() char a20=“ABCD/0EFG/0“,b=“IJK“; strcat(a,b);printf(“%s/n“,a); 程序运行后的输出结果是_。(分数:2.00)A.ABCDE/0FG/0IJKB.ABCDIJKC.IJKD.EFGIJK33.以下程序段完全正确的是_。(分数:2.00)A.int*p;scanf(“%d“,B.int*p;scanf(“%d“,p);C.
16、int k,*p=scanf(“%d“,p);D.int k,*p;*p=scanf(“%d“,p);34.设有定义语句 int(*f)(int);,则以下叙述正确的是_。(分数:2.00)A.f 是基类型为 int 的指针变量B.f 是指向函数的指针变量,该函数具有一个 int 类型的形参C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返回值是基类型为 int 类型的地址35.有以下程序: #includestdio.h main() int a=1,2,3,4,y,*p= -p; y=*p; printf(“y=%d/n“,y); 程序的运行结果是_。(分数:2.0
17、0)A.y=0B.y=1C.y=2D.y=336.设有定义:char p=“1“,“2“,“3“,*q=p;,以下不能计算出一个 char 型数据所占字节数的表达式是_。(分数:2.00)A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p0)37.下列语句组中正确的是_。(分数:2.00)A.char*s;s=“Olympic“;B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;38.有以下程序(字母 A 的 ASCII 码是 65): #includestdio.h v
18、oid fun(char*s) while(*s) if(*s%2) printf(“%c“,*s); s+; main() char a=“BYTE“; fun(a);printf(“); 程序运行后的输出结果是_。(分数:2.00)A.BYB.BTC.YTD.YE39.有以下程序: #includestdio.h void fun(char*a,char*b) while(*a=“*“) a+; while(*b=*a) b+;a+; main() char*s=“*a*b*,t80; fun(s,t); puts(t); 程序的运行结果是_。(分数:3.00)A.*a*bB.a*bC.a
19、*b*D.ab40.以下关于宏的叙述中正确的是_。(分数:3.00)A.宏名必须用大写字母表示B.宏定义必须位于源程序中所有语句之前C.宏替换没有数据类型限制D.宏调用比函数调用耗费时间41.若程序中有宏定义行:#define N 100,则以下叙述中正确的是_。(分数:3.00)A.宏定义行中定义了标识符 N 的值为整数 100B.在编译程序对 C 源程序进行预处理时用 100 替换标识符 NC.对 C 源程序进行编译时用 100 替换标识符 ND.在运行时用 100 替换标识符 N42.有以下程序: #includestdio.h #define S(x)4*(x)*x+1 main()
20、int k=5,j=2; printf(“%d“,S(k+j); 程序运行后的输出结果是_。(分数:3.00)A.197B.143C.33D.2843.设有宏定义:#define IsDIV(k,n)(k%n=1)? 1:0),且变量 m 已正确定义并赋值,则宏调用:IsDIV(m,5)char h;T; 以下叙述中正确的是_。(分数:3.00)A.可用 S 定义结构体变量B.可用 T 定义结构体变量C.S 是 struct 类型的变量D.T 是 struct S 类型的变量45.以下关于 typedef 的叙述错误的是_。(分数:3.00)A.用 typedef 可以增加新类型B.typed
21、ef 只是将已存在的类型用一个新的名字来代表C.用 typedef 可以为各种类型说明一个新名,但不能用来为变量说明一个新名D.用 typedef 为类型说明一个新名,通常可以增加程序的可读性46.下面结构体的定义语句中,错误的是_。(分数:3.00)A.struct ordint x;int y;int z;struct ord a;B.struct ordint x;int y;int z;struct ord a;C.struct ordint x;int y;int z;a;D.structint x;int y;int z;a;二级 C 语言-241 答案解析(总分:100.00,做
22、题时间:90 分钟)一、选择题(总题数:46,分数:100.00)1.以下叙述中错误的是_。(分数:2.00)A.C 语言的可执行程序是由一系列机器指令构成的B.用 C 语言编写的源程序不能直接在计算机上运行C.通过编译得到的二进制目标程序需要连接才可以运行D.在没有安装 C 语言集成开发环境的机器上不能运行 C 源程序生成的.exe 文件 解析:解析 C 语言程序生成的.exe 文件是二进制的可执行文件,它不需要 C 语言集成开发环境的支持,可以直接运行。2.以下叙述中正确的是_。(分数:2.00)A.C 程序中的注释只能出现在程序的开始位置和语句的后面B.C 程序书写格式严格,要求一行内只
23、能写一个语句C.C 程序书写格式自由,一个语句可以写在多行上 D.用 C 语言编写的程序只能放在一个程序文件中解析:解析 在 C 语言中,注释可以加在程序中的任何位置,选项 A 错误。C 程序可以分模块写在不同的文件中,编译时再将其组合在一起,选项 D 错误。C 程序的书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。所以正确答案为选项 C。3.C 语言源程序名的后缀是_。(分数:2.00)AexeBc CobjDcp解析:解析 C 语言中,源程序文件的后缀为“.c”,经过编译生成后缀为“.obj”的目标文件,再经过与 C 语言提供的各种库函数连接,生成后缀为“.exe”的可
24、执行文件。故本题答案为 B。4.以下叙述中正确的是_。(分数:2.00)A.C 语言程序将从源程序中第一个函数开始执行B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C.C 语言规定必须用 main 作为主函数名,程序将从此开始执行,在此结束 D.main 可作为用户标识符,用以命名任意一个函数作为主函数解析:解析 main 是主函数的函数名,表示这是一个主函数。每一个 C 源程序都必须有且只能有一个主函数。程序要从 main 函数开始执行,最后在 main 函数中结束。本题选 C。5.以下 C 语言用户标识符中,不合法的是_。(分数:2.00)A._1B.AaBcC.a_
25、bD.a-b 解析:解析 标识符由字母、下划线、数字组成,开头必须是字母或下划线。6.以下选项中不能用作 C 程序合法常量的是_。(分数:2.00)A.1,234 B./123C.123D.“/x7G“解析:解析 选项 A 中的 1,234 在两侧加双引号才是 C 程序的合法常量。7.有以下定义语句,编译时会出现编译错误的是_。(分数:2.00)A.char a=“a“;B.char a=“/n“;C.char a=“aa“; D.char a=“/x2d“;解析:解析 aa 是字符串,不用加上单引号。8.有以下程序: #includestdio.h main() char a30,b30;
26、scanf(“%s“,a); gets(b); printf(“%s%s“,a,b); 程序运行时若输入: how are you? I am fine回车 则输出结果是_。(分数:2.00)A.how are you?I am fineB.howare you? I am fineC.how are you? I am fine D.how are you?解析:解析 这道题主要考查的是 scanf 函数和 gets 函数在输入字符串时的差别。scanf 函数在以格式字符 s 输入字符串时,当遇到字符“/0”时,表示输入字符串结束。而函数 gets(b)是从键盘读入一行字符串放入字符数组 b
27、 中,所以当从键盘输入 how are you? I am fine回车时,把字符串 how 存入字符数组 a 中,把其余的字符存入字符数组 b 中,因而正确答案为选项 C。9.有以下程序: #includestdio.h main() int a1,a2; char c1,c2; scanf(“%d%c%d%c“, printf(“%d,%c,%d,%c“,a1,c1,a2,c2); 若想通过键盘输入,使得 a1 的值为 12,a2 的值为 34,c1 的值为字符 a,c2 的值为字符 b,程序输出结果是:12,a,34,b。正确的输入格式是(以下 代表空格,CR代表回车)_。 A12a34
28、bCR B C12,a,34,bCR D (分数:2.00)A. B.C.D.解析:解析 当输入整数或实数等数值型数据时,输入的数据之间必须用空格、回车、制表符等间隔符号隔开,间隔符个数不限。但整数和字符之间不用空格隔开,因为空格会被当做一个字符读入。因此,本题答案为 A。10.有以下程序段: int j;float y;char name50; scanf(“%2d%f%s“, 当执行上述程序段,从键盘上输入 55566 7777abc 后,y 的值为_。(分数:2.00)A.55566.0B.566.0 C.7777.0D.566777.0解析:解析 本题考查通过 scanf 函数输入数据
29、时的格式控制问题。变量 j 的格式控制为“%2d”,即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量 y 中,因为 y 为浮点型数据,所以输出结果为选项 B。11.有以下程序: #includestdio.h main() char a,b,c,d; scanf(“%c%c“, c=getchar();d=getchar(); printf(“%c%c%c%c/n“,a,b,c,d); 当执行程序时,按下列方式输入数据(从第 1 列开始,CR代表回车,注意:回车也是一个字符): 12CR 34CR 则输出结果是_。(分数:2.00)A.1234B.12C.123 D.1
30、234解析:解析 程序根据用户输入分别给字符型变量 a、b、c、d 赋值为“1“、“2“、“CR“、“3“,因此输出到屏幕得到选项 C 中的格式。12.若变量已正确定义,在 if(W)printf(“%d/n“,k);中,以下不可替代 W 的是_。(分数:2.00)A.ab+c B.ch=getchar()C.a=b+cD.a+解析:解析 在 C 语言中,表示不等于不能用“”,而只能使用“!=”。其他选项均满足题目的要求。13.已知字母 A 的 ASCII 码为 65,若变量 kk 为 char 型,以下不能正确判断出 kk 中的值为大写字母的表达式是_。(分数:2.00)A.kk=“A“ e
31、lse k=c; else if(bc)k=b; else k=c; 以下选项中与上述 if 语句等价的语句是_。(分数:2.00)A.k=(ab)?a: b;k=(bc)?b:c;B.k=(ab)?(bc)?a: b):(bc)?b:c);C.k=(ab)?(ac)?a:c):(bc)?b:c); D.k=(ab)?a:b;k=(ac)?a:c;解析:解析 嵌套的 if 语句功能是将 k 赋值为 a、b、c 中的最小值,选项 A 中没有比较 a、c 的大小,选项 B 中语句“(bc)?a:b):(bc)?b:c)”错误,选项 D 中没有比较 b、c 的大小。16.若有表达式(w)?(-x):
32、(+y),则其中与 w 等价的表达式是_。(分数:2.00)A.w=1B.w=0C.w!=1D.w!=0 解析:解析 条件运算符组成条件表达式的一般形式为:表达式 1?表达式 2:表达式 3。其求值规则为:如果表达式 1 的值为真,则以表达式 2 的值作为条件表达式的值,否则以表达式 3 的值作为条件表达式的值。本题中需要获得表达式 w 的逻辑值,即 w 是否为 0,不为 0 则为“真”,为 0 则为“假”。因此正确答案为 D。17.有以下程序: #includestdio.h main() int a=1,b=2; while(a6)b+=a;a+=2;b%=10; printf(“%d,%
33、d/n“,a,b); 程序运行后的输出结果是_。(分数:2.00)A.5,11B.7,1 C.7,11D.6,1解析:解析 第一次循环后 b 为 3,a 为 3;第二次循环后 b 为 6,a 为 5;第三次循环后执行 b+=a,所以 b 为 11;执行 a+=2,所以 a 为 7;执行 b%=10,所以 b 为 1。18.若变量已正确定义,有以下程序段: i=0; do printf(“%d,“,i);while(i+); printf(“%d/n“,i); 其输出结果是_。(分数:2.00)A.0,0B.0,1 C.1,1D.程序进入无限循环解析:解析 对于 dowhile 循环,程序会先执
34、行一次循环体,再判断循环是否继续。本题先输出一次i 的值“0”,再接着判断表达式 i+的值,其值为 0,所以循环结束。此时变量 i 的值经过自加已经变为1,程序再次输出 i 的值“1”。故本题答案为 B。19.若 i 和 k 都是 int 类型变量,有以下 for 语句: for(i=0,k=-1;k=1;k+)printf(“*“); 下面关于语句执行情况的叙述中正确的是_。(分数:2.00)A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环 解析:解析 循环退出的条件不是判断语句而是一个赋值语句,所以循环一直执行,从而构成一个无限循环。20.有以下程序: #incl
35、udestdio.h main() int i,j; for(i=3;i=1;i-) for(j=1;j=2;j+)printf(“%d“,i+j); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.2 3 43 4 5B.4 3 25 4 3C.2 33 44 5D.4 53 42 3 解析:解析 该题目主要考查 for 嵌套循环,要注意循环变量 i 和 j 的取值范围。输出结果为变量 i 和j 的和。21.以下叙述中错误的是_。(分数:2.00)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次就返回多
36、个函数值 C.用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式解析:解析 在函数中允许有多个 return 语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值。22.下面的函数调用语句中 func 函数的实参个数是_。 func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8);(分数:2.00)A.3 B.4C.5D.8解析:解析 C 语言函数定义中,参数列表之间使用逗号分隔。该题目中 func 函数的列表中使用两个逗号,将 3 个参数分隔开。23.有以下程序: #inc
37、ludestdio.h int fun(int x,int y) if(x=y)return(x); else return(x+y)/2); main() int a=4,b=5,c=6; printf(“%d/n“,fun(2*a,fun(b,c); 程序运行后的输出结果是_。(分数:2.00)A.3B.6 C.8D.12解析:解析 函数 fun 的功能是求两个整数的平均值,返回值仍为整数。5 和 6 的平均取整后为 5,8 和5 的平均取整后为 6。因此,本题答案为 B。24.设有如下函数定义: int fun(int k) if(k1)return 0; else if(k=1)ret
38、urn 1; else return fun(k-1)+1; 若执行调用语句:n=fun(3);,则函数 fun 总共被调用的次数是_。(分数:2.00)A.2B.3 C.4D.5解析:解析 本题考查了函数的递归调用,当执行调用语句 n=fun(3)时,返回 n=fun(2)+1,再执行fun(2),返回 n=fun(1)+1+1,而 fun(1)等于 1,所以最后 n 的值等于 3。而函数 fun 总共被调用了 3 次。即 fun(3),fun(2),fun(1)。25.在一个 C 源程序文件中所定义的全局变量,其作用域为_。(分数:2.00)A.所在文件的全部范围B.所在程序的全部范围C.
39、所在函数的全部范围D.由具体定义位置和 extern 说明来决定范围 解析:解析 全局变量是在函数外部定义的,它的作用域是从变量的定义位置开始,到本程序文件的末尾。对于多文件构成的程序,若使用 extern 来声明全局变量,则可以在一个文件中引用另一个文件中的全局变量。故本题答案为 D。26.有以下程序: #includestdio.h #includestring.h struct A int a; char b10; double c; void f(struct A t); main() struct A a=1001,“ZhangDa“,1098.0; f(a);printf(“%d,
40、%s,%6.1f/n“,a.a,a.b,a.c); void f(struct A t) t.a=1002;strcpy(t.b,“ChangRong“);t.c=1202.0; 程序运行后的输出结果是_。(分数:2.00)A.1001,ZhangDa,1098.0 B.1002,ChangRong,1202.0C.1001,ChangRong,1098.0D.1002,ZhangDa,1202.0解析:解析 该函数的调用为传值调用,故不会改变任何值。27.有以下程序: #includestdio.h void fun(int*a,int n)/*fun 函数的功能是将 a 所指数组元素从大到
41、小排序*/ int t,i,j; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj)t=ai;ai=aj;aj=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; fun(c+4,6); for(i=0;i10;i+)printf(“%d,“,ci); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.1,2,3,4,5,6,7,8,9,0,B.0,9,8,7,6,5,1,2,3,4,C.0,9,8,7,6,5,4,3,2,1,D.1,2,3,4,9,8,7,6,5,0, 解析:解析 在本题中,主函数在调用 f
42、un()函数进行排序时,传递的参数是 c+4 和 6,fun 函数实现的功能是将从数组 c 的第 5 个元素开始的 6 个元素进行从大到小排列。排序之后,数组 c 的内容变为1,2,3,4,9,8,7,6,5,0,。故本题答案为 D。28.下列定义数组的语句中,正确的是_。(分数:2.00)A.int N=10;int xN;B.#define N 10int xN; C.int x010;D.int x;解析:解析 A 中的 N 是一个变量,不可以用变量来定义数组,所以选项 A 错误。C 中把所有的下标均列出,不正确,此处只需指明数组长度即可。D 中在定义时没有指明数组长度,不正确,如果不指
43、明长度就应在定义时对数组元素进行赋值,而此选项没有,所以错误。故本题答案为 B。29.若有定义语句:int m=5,4,3,2,1,i=4;,则下面对 m 数组元素的引用中错误的是_。(分数:2.00)A.m-iB.m2*2C.mm0 D.mmi解析:解析 数组 m 下标从 0 到 4 计算,共 5 个元素,选项 C 中 m0=5,则 mm0为 m5中,超出了数组 m 的下标范围。因此正确答案为 C。30.下面是有关 C 语言字符数组的描述,其中错误的是_。(分数:2.00)A.不可以用赋值语句给字符数组名赋字符串B.可以用输入语句把字符串整体输入给字符数组C.字符数组中的内容不一定是字符串D
44、.字符数组只能存放字符串 解析:解析 字符数组中的内容既可以是字符,也可以是字符串,选项 D 的说法不正确。31.若有定义语句:char s10=“1234567/0/0“;,则 strlen(s)的值是_。(分数:2.00)A.7 B.8C.9D.10解析:解析 strlen(s)即求字符串 s 的长度,遇到“/0“时结束统计。因此选项 A 为正确答案。32.有以下程序(strcat 函数用于连接两个字符串): #includestdio.h #includestring.h main() char a20=“ABCD/0EFG/0“,b=“IJK“; strcat(a,b);printf(
45、“%s/n“,a); 程序运行后的输出结果是_。(分数:2.00)A.ABCDE/0FG/0IJKB.ABCDIJK C.IJKD.EFGIJK解析:解析 char *strcat(char *dest,char *src)的功能是:把 src 所指字符串添加到 dest 结尾处(覆盖 dest 结尾处的“/0“)并添加“/0“。因为“/0“是字符串的结束标志,所以 a 数组中存放的字符串为“ABCD”,所以将两个字符串拼接后结果为“ABCDIJK”。33.以下程序段完全正确的是_。(分数:2.00)A.int*p;scanf(“%d“,B.int*p;scanf(“%d“,p);C.int
46、k,*p=scanf(“%d“,p); D.int k,*p;*p=scanf(“%d“,p);解析:解析 A 选项输入的是指针型变量 p 的地址,变量一定义就已分配好地址不能再指定了,所以 A错误。B 选项有指定指针 p 应该指向的变量,没给变量赋初值。D 选项中,p 是地址,*p 是地址内存放的数据,它把整型变量 k 的地址赋给*p,所以错误。34.设有定义语句 int(*f)(int);,则以下叙述正确的是_。(分数:2.00)A.f 是基类型为 int 的指针变量B.f 是指向函数的指针变量,该函数具有一个 int 类型的形参 C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返回值是基类型为 int 类型的地址解析:解析 本题考查的是指向函数的指针。语句“int(*f)(int);”是对一个函数的声明,其中 f 是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。故答案选 B。35.有以下程序: #includestdio.h main() int a=1,2,3,4,y,*p= -p; y=*p; printf(