1、二级 C 语言-279 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.结构化程序设计的 3 种结构是_。(分数:2.50)A.顺序结构、选择结构、转移结构B.分支结构、等价结构、循环结构C.多分支结构、赋值结构、等价结构D.顺序结构、选择结构、循环结构2.对线性表进行二分法检索,其前提条件是_。(分数:2.50)A.线性表以顺序方式存储,并按关键码值排好序B.线性表以顺序方式存储,并按关键码的检索频率排好序C.线性表以链式方式存储,并按关键码值排好序D.线性表以链式方式存储,并按关键码的检索频率排好序3.C 语言中的简单数据类型有
2、_。(分数:2.50)A.整型、实型、逻辑型B.整型、实型、字符型C.整型、字符型、逻辑型D.整型、实型、逻辑型、字符型4.已定义了以下函数: fff(float x) print(“%d/n“, x*x); 该函数的类型是_。(分数:2.50)A.与参数 x 的类型相同B.void 类型C.int 类型D.无法确定5.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是_。(分数:2.50)A.数据库系统B.文件系统C.人工管理D.数据项管理6.设有如图所示二叉树,对此二叉树前序遍历的结果为_。 (分数:2.50)A.ZBTYCPXAB.A
3、TBZXCYPC.TZBACYXPD.ATBZXCPY7.链表不具有的特点是_。(分数:2.50)A.不必事先估计存储空间B.可随机访问任意元素C.插入、删除不需要移动元素D.所需空间与线性表长度成正比8.C 语言中,字符(char)型数据在微机内存中的存储形式是_。(分数:2.50)A.反码B.补码C.EBCDIC 码D.ASCII 码9.C 语言可执行程序的开始执行点是_。(分数:2.50)A.包含文件中的第一个函数B.程序中第一个函数C.程序中的 main()函数D.程序中第一条语句10.在 C 语言程序中可用作用户标识符的是_。(分数:2.50)A.void123BBNB.aa_abc
4、casC.as+b3-123IfD.6fDoSIG11.以下选项中不正确的实型常量是_。(分数:2.50)A.2.607E-1B.0.8103e 2C.-77.77D.456e-212.若变量 a、i 已正确定义,且 i 已正确赋值,合法的语句是_。(分数:2.50)A.a=1B.+iC.a=a+=5D.a=int(i)13.若 a 为 int 类型,且其值为 3,则执行完表达式 a+=a-=a*a 后,a 的值是_。(分数:2.50)A.-3B.9C.-12D.614.若有定义“int a=5, b=7;”,则表达式 a%=(b%2)运算后,a 的值为_。(分数:2.50)A.0B.1C.1
5、1D.315.若执行以下程序时从键盘上输入 9,则输出结果是_。 main() int n; scanf(“%d“, if(n+10) printf(“%d/n“, n); else printf(“%d/n“, n-); (分数:2.50)A.11B.10C.9D.816.设 a、b、c、d、m、n 均为 int 型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=ab)do printf(“%d“, x-); while(!x); 该程序的执行结果是_。(分数:2.50)A.321B.23C.不输出任何内容D.陷入死循环18.若变量 c 为 char 类型,能正确
6、判断出 c 为小写字母的表达式是_。(分数:2.50)A.“a“=c=“z“B.(c=“a“)|(c=“z“)C.(“a“=c)and(“z“c)D.(c=“a“)B.char c20=“goodmorning“;C.char c=“a“, “b“, “c“, “d“;D.char c=“ffgoodmorning“;21.下列程序的输出结果是_。 #includestdio.h void p(int*x) printf(“%d“, +*x); void main() int y=3; p( (分数:2.50)A.3B.4C.2D.522.有以下程序: #includestdio.h main
7、() int y=10; for(; y0; y-)if(y%3=0) printf(“%d“, -y); continue; 程序的输出结果是_。(分数:2.50)A.741B.852C.963D.87542123.以下程序的输出结果是_。 main() int num=0; while(num=2) num+; printf(“%d/n“, num); (分数:2.50)A.1 2 3 4B.1 2 3C.1 2D.124.以下函数返回 a 所指数组中最小的值所在的下标值: fun(int*a, int n) int i, j=0, p; p=j; for(i=j; in; i+) if(
8、aiaj)_return(p); 在下划线处应填入的是_。(分数:2.50)A.i=pB.ap=aiC.p=jD.p=i25.有如下程序段: int a=14, b=15, x; char c=“A“; x=(a 执行该程序后,x 的值为_。(分数:2.50)A.trueB.falseC.0D.126.以下程序的输 m 结果是_。 main() int i, a44=1, 3, 5, 2, 4, 6, 3, 5, 7; printf(“%d%d%d%d/n“, a03, a12, a21, a30; (分数:2.50)A.0650B.1470C.5430D.输出值不定27.下列程序中函数 so
9、rt()的功能是对数组 a 中的数据进行由大到小的排序。 #includestdio.h void sort(int a, int n) int i, j, t; for(i=0; in-1; i+) for(j=i+1+1; jn; j+) if(aiaj) t=ai; ai=aj; aj=t; main() int a10=1, 2, 3, 4, 5. 6, 7, 8, 9, 10, i; sort( for(i=0; i10; i+)printf(“%d, “, ai); 程序运行后的输出结果是_。(分数:2.50)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,
10、5,4,3,2,1,C.1,8,7,6,5,4,3,2,9,10,D.1,2,10,9,8,7,6,5,4,3,28.若 a 和 b 均是正整型变量,正确的 switch 语句是_。(分数:2.50)A.switch(pow(a, 2)+pow(b, 2)(注:调用求幂的数学函数) case 1: case 3: y=a+b; break;ease 0: ease 5: y=a-b;B.switch(a*a+b*b); ease 3:ease 1: y=a+b; break;case 0: y=b-a; break;C.switch adefault:x=a+b;case 10: y=a-b;
11、 break;case 11: x=a*d; break;D.switch(a+b) ease10: x=a+b; break;ease11: y=a-b; break;29.有如下程序: main() int n5=0, 0, 0, i, k=2; for(i=0; i ); 该程序的输出结果是_。(分数:2.50)A.不确定的值B.2C.1D.030.当执行下面的程序时,如果输入 ABC,则输出结果是_。 #includestdio.h #includestring.h main() char ss10=“1, 2, 3, 4, 5“; gets(ss); strcat(ss, “6789
12、“); printf(“%s/n“, ss); (分数:2.50)A.ABC6789B.ABC67C.12345ABC6D.ABC45678931.以下程序的输出结果是_。 #define M(x, y, z)x*y+Z main() int a=1, b=2, c=3; printf(“%d/n“, m(a+b, b+c, c+a); (分数:2.50)A.19B.17C.15D.1232.有以下程序: main() int k=5, n=0; do switch(k) case 1: case 3: n+=1; k-; break; defalut: n=0; k-; case 2: ca
13、se 4: n+=2; k-; break; printf(“%d“, n); while(k0 程序运行后的输出结果是_。(分数:2.50)A.235B.0235C.02356D.235633.下面 for 语句的循环次数为_。 for(x=1, y=0; (y!=19) x+);(分数:2.50)A.是无限循环B.循环次数不定C.最多执行 6 次D.最多执行 5 次34.以下叙述中正确的是_。(分数:2.50)A.a 是实型变量,C 允许进行赋值 a=10,但不可以这样说:实型变量中允许存放整型值B.在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式C.执行表达式 a=b 后,在内存
14、中 a 和 b 存储单元中的原有值都将被改变,a 的值已由原值改变为 b 的值,b 的值由原值变为 0D.已有 a=3,b=5,当执行了表达式 a=b,b=a 之后,使 a 中的值为 5,b 中的值为 335.下列程序的输出结果是_。 #includestdio.h main() int i, s=0; for(i=1; i10; i+) if(!(i%2) printf(“%d/n“, s); (分数:2.50)A.4B.39C.45D.636.有以下程序: void fun2(char a, char b) printf(“%c%c“, a, b); char a=“A“, b=“B“;
15、void fun1()a=“C“; b=“D“; main() fun1(); printf(“%c%c“, a, b); fun2(“E“, “F“); 程序的运行结果是_。(分数:2.50)A.CDEFB.ABEFC.ABCDD.CDAB37.有以下程序: #includestdio.h main() char c1=“1“, c2=“2“; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); 当程序运行时输入 a回车后,下列叙述中正确的是_。(分数:2.50)A.变量 c1 被赋予字符 a,c2 被赋予回车符B.程序将等待用户输入第
16、 2 个字符C.变量 c1 被赋予字符 a,c2 中仍是原有字符 2D.变量 c1 被赋予字符 a,c2 中将无确定值38.下述程序的输出结果是_。 #define N 20 void fun(int a, int n, int m) int i, j; for(i=m; in; i-) ai+1=ai; main() int i, aN=1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10; fun(a, 2, 9); for(i=0; i5; i+) printf(“%d“, ai); (分数:2.50)A.10234B.12344C.12334D.1223439.有下列程序:
17、 fun(int x, int y) static int m=0, i=2; i+=m+1; m=i+x+y; return m; main() int j=1, m=1, k; k=fun(j, m); printf(“%d, “, k); k=fun(j, m); printf(“%d/n“, k); 执行后的输出结果是_。(分数:2.50)A.5,5B.5,11C.11,11D.11,540.下列叙述中错误的是_。(分数:2.50)A.在 C 语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值B.在 C 语言中,在调用函数时,实参和对应形参在类型上只须赋值兼容C.在 C 语言中,
18、外部变量的隐含类型是自动存储类别D.在 C 语言中,函数形参的存储类型是自动(auto)类型的变量二级 C 语言-279 (1)答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.结构化程序设计的 3 种结构是_。(分数:2.50)A.顺序结构、选择结构、转移结构B.分支结构、等价结构、循环结构C.多分支结构、赋值结构、等价结构D.顺序结构、选择结构、循环结构 解析:解析 结构化程序设计的基本要点:采用自顶向下、逐步求精的程序设计方法;任何程序都可由顺序、选择和循环 3 种基本控制结构构造。2.对线性表进行二分法检索,其前提条件是_。(分数:2
19、.50)A.线性表以顺序方式存储,并按关键码值排好序 B.线性表以顺序方式存储,并按关键码的检索频率排好序C.线性表以链式方式存储,并按关键码值排好序D.线性表以链式方式存储,并按关键码的检索频率排好序解析:解析 对线性表进行二分法检索,要求线性表是按顺序方式存储的,并按关键码值的大小排好序。3.C 语言中的简单数据类型有_。(分数:2.50)A.整型、实型、逻辑型B.整型、实型、字符型 C.整型、字符型、逻辑型D.整型、实型、逻辑型、字符型解析:解析 整(数)型(长、短)、实(数)型(长、短)、字符型这 3 种是最常用,也是最简单的数据类型。4.已定义了以下函数: fff(float x)
20、print(“%d/n“, x*x); 该函数的类型是_。(分数:2.50)A.与参数 x 的类型相同B.void 类型C.int 类型 D.无法确定解析:解析 函数返回值类型由函数头部的返回值类型决定,特别地,如果函数头部没有显示的说明返回值类型,则在 C 中一般是默认当作返回 int 型,本题中 fff(float x),则返回值类型为 int 型。因此正确答案为 C。5.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是_。(分数:2.50)A.数据库系统 B.文件系统C.人工管理D.数据项管理解析:解析 数据库系统的一个重要目标就是
21、使程序和数据真正分离。数据独立性包括数据的物理独立性和数据的逻辑独立性。相对文件系统人工管理和数据项管理而言,数据库系统的数据独立性大大增加。6.设有如图所示二叉树,对此二叉树前序遍历的结果为_。 (分数:2.50)A.ZBTYCPXAB.ATBZXCYP C.TZBACYXPD.ATBZXCPY解析:解析 后序遍历首先访问左子树,然后右子树,最后根结点,即左右根。故该二叉树的前序遍历结果为“ATBZXCYP”。后序遍历和中序遍历的结果分别为“ZBTYCPXA”和“TZBACYXP”。7.链表不具有的特点是_。(分数:2.50)A.不必事先估计存储空间B.可随机访问任意元素 C.插入、删除不需
22、要移动元素D.所需空间与线性表长度成正比解析:解析 链表采用的是链式存储结构,它的结点空间可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,插入、删除不需要移动数据元素。但是链式存储结构也有不足之处:每个结点中的指针域须额外占用存储空间。它是一种非随机存储结构。8.C 语言中,字符(char)型数据在微机内存中的存储形式是_。(分数:2.50)A.反码B.补码C.EBCDIC 码D.ASCII 码 解析:解析 其他 3 个是用来进行数值处理的。9.C 语言可执行程序的开始执行点是_。(分数:2.50)A.包含文件中的第一个函数B.程序中第一个函数C.程序中的 main()函数 D.
23、程序中第一条语句解析:解析 每个 C 程序有且只有一个主函数 main(),且程序必须从 main()函数开始执行,并在 main()函数中结束。10.在 C 语言程序中可用作用户标识符的是_。(分数:2.50)A.void123BBNB.aa_abccas C.as+b3-123IfD.6fDoSIG解析:解析 C 语言规定,标识符由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线,不能使用关键字和数字,A 中 void,C 中 If,D 中 Do,都属于关键字。11.以下选项中不正确的实型常量是_。(分数:2.50)A.2.607E-1B.0.8103e 2 C.-77.77
24、D.456e-2解析:解析 科学计数法表示实数要求小数部分不能小于 1,所以 B 项不是正确的实型常量,实型常量分指数常量和小数常量,A 项和 D 项都是指数常量,C 项为小数常量。12.若变量 a、i 已正确定义,且 i 已正确赋值,合法的语句是_。(分数:2.50)A.a=1B.+i C.a=a+=5D.a=int(i)解析:解析 选项 A 为表达式,因此不正确。选项 C 中“a+”本身就是表达式,无须再赋值。选项 D 中,在强制类型转换时,类型名应用括号括起来,故选择 B 选项。13.若 a 为 int 类型,且其值为 3,则执行完表达式 a+=a-=a*a 后,a 的值是_。(分数:2
25、.50)A.-3B.9C.-12 D.6解析:解析 在表达式中,其+=,-=的优先级相同,按从右到左的结合方向运算,而*的优先级最高,表达式写成 a=a+(a-(a*a),代入 3 可得-12。14.若有定义“int a=5, b=7;”,则表达式 a%=(b%2)运算后,a 的值为_。(分数:2.50)A.0 B.1C.11D.3解析:解析 本题考查“%”运算符的使用。运算符“%”是整数除法的余数。本题中表达式 a%=(b%2)等价于 a=a%(b%2)=5%(7%2)=5%1=0。15.若执行以下程序时从键盘上输入 9,则输出结果是_。 main() int n; scanf(“%d“,
26、if(n+10) printf(“%d/n“, n); else printf(“%d/n“, n-); (分数:2.50)A.11B.10 C.9D.8解析:解析 当 n 为 9 时,此时 if 语句成立,执行 n+后,n 为 10,因此输出 n 的值为 10,故选择 B 选项。16.设 a、b、c、d、m、n 均为 int 型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=ab)do printf(“%d“, x-); while(!x); 该程序的执行结果是_。(分数:2.50)A.321B.23 C.不输出任何内容D.陷入死循环解析:解析 本题考查 do-w
27、hile 语句,当 x=23 时,执行 do 后的语句,x-的表达式值为 x=x-1,此时x 的值为 22,而!x 为 0,因此 while 循环不成立,退出,故选择 B 选项。18.若变量 c 为 char 类型,能正确判断出 c 为小写字母的表达式是_。(分数:2.50)A.“a“=c=“z“B.(c=“a“)|(c=“z“)C.(“a“=c)and(“z“c)D.(c=“a“) B.char c20=“goodmorning“;C.char c=“a“, “b“, “c“, “d“;D.char c=“ffgoodmorning“;解析:解析 本题考查 2 个概念:用单引号括起来的一个字
28、符常量只能存放一个字符;C 语言中没有字符串变量,只能用字符数组来存储字符串。21.下列程序的输出结果是_。 #includestdio.h void p(int*x) printf(“%d“, +*x); void main() int y=3; p( (分数:2.50)A.3B.4 C.2D.5解析:解析 本题考查函数调用时的参数传递。在函数调用时,形参是指向实参的指针变量,则 printf的执行结果为+x;x=3,则 3+1=4。22.有以下程序: #includestdio.h main() int y=10; for(; y0; y-)if(y%3=0) printf(“%d“, -
29、y); continue; 程序的输出结果是_。(分数:2.50)A.741B.852 C.963D.875421解析:解析 进行循环,若 y 能被 3 整除,则输出-y,如: y=9,满足 y%3=0,输出-y,也就是 8 y=8,不满足 y%3=0 y=7,不满足 y%3=0 y=6,满足 y%3=0,输出-y,也就是 5 依次类推 结果为 852,因此正确选项为 B。23.以下程序的输出结果是_。 main() int num=0; while(num=2) num+; printf(“%d/n“, num); (分数:2.50)A.1 2 3 4B.1 2 3 C.1 2D.1解析:解
30、析 while 的执行过程是:先计算条件表达式的值,若成立则执行循环体,重复上述过程,直到条件表达式的值为”假”(值为零)时,退出循环,并转下一语句去执行。本题在输出 num 的值为 3 之后,再判断 while 的循环条件 3=2,不成立,所以不再输出 num 的值,故本题应该选 B。24.以下函数返回 a 所指数组中最小的值所在的下标值: fun(int*a, int n) int i, j=0, p; p=j; for(i=j; in; i+) if(aiaj)_return(p); 在下划线处应填入的是_。(分数:2.50)A.i=pB.ap=aiC.p=jD.p=i 解析:解析 该程
31、序先判断 aiap,如果条件为真,则 ai比当前设定的最小值小(p 保留的当前最小元素的下标),那么将 i 赋给 p,即将比较过的最小元素标保留在 p 中,作为下面判断的标准。25.有如下程序段: int a=14, b=15, x; char c=“A“; x=(a 执行该程序后,x 的值为_。(分数:2.50)A.trueB.falseC.0D.1 解析:解析 在 C 语言中,当表达武成立时用 1 表示,不成立时用 0 表示,即 x=(a printf(“%d%d%d%d/n“, a03, a12, a21, a30; (分数:2.50)A.0650 B.1470C.5430D.输出值不定
32、解析:解析 当所赋的值不够其列的宽度时,系统在其后自动补 0,因此 a03=0,a12=6,a21=5,a30=0,故选择 A 选项。27.下列程序中函数 sort()的功能是对数组 a 中的数据进行由大到小的排序。 #includestdio.h void sort(int a, int n) int i, j, t; for(i=0; in-1; i+) for(j=i+1+1; jn; j+) if(aiaj) t=ai; ai=aj; aj=t; main() int a10=1, 2, 3, 4, 5. 6, 7, 8, 9, 10, i; sort( for(i=0; i10; i
33、+)printf(“%d, “, ai); 程序运行后的输出结果是_。(分数:2.50)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.1,8,7,6,5,4,3,2,9,10, D.1,2,10,9,8,7,6,5,4,3,解析:解析 本程序中的函数 sort(int a,int n)实现的功能是将数组 a 中的前 n 个数进行从大到小排序。sort( break;ease 0: ease 5: y=a-b; B.switch(a*a+b*b); ease 3:ease 1: y=a+b; break;case 0: y=b-a; break;
34、C.switch adefault:x=a+b;case 10: y=a-b; break;case 11: x=a*d; break;D.switch(a+b) ease10: x=a+b; break;ease11: y=a-b; break;解析:解析 B 中 switch(a*a+b*b);后面不应该有分号,C 中应为 switch(a)。29.有如下程序: main() int n5=0, 0, 0, i, k=2; for(i=0; i ); 该程序的输出结果是_。(分数:2.50)A.不确定的值B.2C.1D.0 解析:解析 本题 for 循环中,当 i=0 时,判断条件 i g
35、ets(ss); strcat(ss, “6789“); printf(“%s/n“, ss); (分数:2.50)A.ABC6789 B.ABC67C.12345ABC6D.ABC456789解析:解析 当执行 gets(ss)后,ss 数组中的元素为 ABC,再执行 strcat(ss,“6789“),strcat 的作用是把 6789 连接到 ss 数组后面,执行完后 ss 数组为 ABC6789,故选择 A 选项。31.以下程序的输出结果是_。 #define M(x, y, z)x*y+Z main() int a=1, b=2, c=3; printf(“%d/n“, m(a+b,
36、 b+c, c+a); (分数:2.50)A.19B.17C.15D.12 解析:解析 M(a+b,b+c,c+a)=a+b*b+c+c+a=1+2*2+3+3+1=12,注意 x*y+z 而不是(x)*(y)+z。32.有以下程序: main() int k=5, n=0; do switch(k) case 1: case 3: n+=1; k-; break; defalut: n=0; k-; case 2: case 4: n+=2; k-; break; printf(“%d“, n); while(k0 程序运行后的输出结果是_。(分数:2.50)A.235B.0235 C.02
37、356D.2356解析:解析 本题考查分支语句用法。因为变量的初始值分别为 k=5、n=0,所以程序第 1 次进入循环时,执行 default 语句,输出 0,k 减 1;这时 n=0、k=4,程序进行第 2 次循环,执行 case 4:这个分支,结果是 n=2、k=3,打印出 2;这时 n=2、k=3,break 跳出,程序进行第 3 次循环,执行 case 3:这个分支,结果是 n=3、k=2,打印出 3;这时 n=3、k=2,break 跳出,程序然后进行第 4 次循环,执行 case 2:case 4:这个分支,结果是 n=5、k=1,打印出 5,break 跳出,这时因为 n=5 不
38、满足 n5 的循环条件,因此循环结束。33.下面 for 语句的循环次数为_。 for(x=1, y=0; (y!=19) x+);(分数:2.50)A.是无限循环B.循环次数不定C.最多执行 6 次D.最多执行 5 次 解析:解析 本题考查 for 循环的使用。根据条件考虑 x 的取值变化,x 从 1 取到 5,可以循环 5 次,但并不知道 y 如何变化,有可能出现 y=19 提前跳出循环的情况,所以最多执行 5 次。34.以下叙述中正确的是_。(分数:2.50)A.a 是实型变量,C 允许进行赋值 a=10,但不可以这样说:实型变量中允许存放整型值 B.在赋值表达式中,赋值号左边既可以是变
39、量也可以是任意表达式C.执行表达式 a=b 后,在内存中 a 和 b 存储单元中的原有值都将被改变,a 的值已由原值改变为 b 的值,b 的值由原值变为 0D.已有 a=3,b=5,当执行了表达式 a=b,b=a 之后,使 a 中的值为 5,b 中的值为 3解析:解析 C 语言中语法上规定实型变量是不能存放整型类型的数据的,整型数据也不能存放实型数据。是为了避免类型转换之间可能会发生的错误。35.下列程序的输出结果是_。 #includestdio.h main() int i, s=0; for(i=1; i10; i+) if(!(i%2) printf(“%d/n“, s); (分数:2
40、.50)A.4B.39C.45D.6 解析:解析 if 语句的条件是当 i 既是 3 的倍数又是 2 的倍数时成立,所以此程序实现的功能是将 10以内既是 3 的倍数又是 2 的倍数的数相加。36.有以下程序: void fun2(char a, char b) printf(“%c%c“, a, b); char a=“A“, b=“B“; void fun1()a=“C“; b=“D“; main() fun1(); printf(“%c%c“, a, b); fun2(“E“, “F“); 程序的运行结果是_。(分数:2.50)A.CDEF B.ABEFC.ABCDD.CDAB解析:解析
41、 在函数 fun1()之前定义了全局字符变量 a 和 b。这两个变量的作用域是从其定义处开始到整个程序末结束。在函数 fun1()之内定义了两个变量 a 和 b,并且分别初始化为字符“C“和“D“。37.有以下程序: #includestdio.h main() char c1=“1“, c2=“2“; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); 当程序运行时输入 a回车后,下列叙述中正确的是_。(分数:2.50)A.变量 c1 被赋予字符 a,c2 被赋予回车符 B.程序将等待用户输入第 2 个字符C.变量 c1 被赋予字符 a
42、,c2 中仍是原有字符 2D.变量 c1 被赋予字符 a,c2 中将无确定值解析:解析 本题考查 getchar()函数,从终端读入一个字符作为函数值。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入回车键时,读入才开始执行。所以当输入 a回车后,变量 c1被赋予字符 a,而变量 c2 被赋予回车符。38.下述程序的输出结果是_。 #define N 20 void fun(int a, int n, int m) int i, j; for(i=m; in; i-) ai+1=ai; main() int i, aN=1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10
43、; fun(a, 2, 9); for(i=0; i5; i+) printf(“%d“, ai); (分数:2.50)A.10234B.12344 C.12334D.12234解析:解析 函数 fun()的功能是从数组 a 中依次将当前值赋给一个元素,所以当函数 fun(a,2,9)执行后,数组 a=1,2,3,4,4,5,6,7,8,9,10,由题意依次取该数组前 5 个元素,所以选项 B正确。39.有下列程序: fun(int x, int y) static int m=0, i=2; i+=m+1; m=i+x+y; return m; main() int j=1, m=1, k;
44、 k=fun(j, m); printf(“%d, “, k); k=fun(j, m); printf(“%d/n“, k); 执行后的输出结果是_。(分数:2.50)A.5,5B.5,11 C.11,11D.11,5解析:解析 子函数 fun(int x,int y),将变量 m 和 i 声明为局部静态变量,因此第 1 次调用主函数后,局部静态变量 m 和 i 的值分别为 5 和 3,第 1 次函数调用结束时,它们的值不释放保持不变,所以第2 次调用时,局部静态变量 m 和 i 的初始值分别为 5 和 3,即在执行“i+=m+1”时,i 的值为 9,因此最终m 的值为 11。40.下列叙述中错误的是_。(分数:2.50)A.在 C 语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值 B.在 C 语言中,在调用函数时,实参和对应形参在类型上只须赋值兼容C.在 C 语言中,外部变量的隐含类型是自动存储类别D.在 C 语言中,函数形参的存储类型是自动(auto)类型的变量解析:解析 如果是 static 修饰的静态变量,不是每次调用都赋初值。