1、二级 C 语言-16-1 及答案解析(总分:78.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.结构化程序所要求的基本结构不包括_。(分数:1.00)A.顺序结构B.GOTO 跳转C.选择(分支)结构D.重复(循环)结构2.一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是_。(分数:1.00)A.1:1 联系B.1:m 联系C.m:1 联系D.m:n 联系3.C 语言中运算对象必须是整型的运算符是_。(分数:1.00)A.%B./C.!D.*4.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是_。(分数:1.00
2、)A.C 语言程序仅可以编译执行B.C 语言程序仅可以解释执行C.C 语言程序既可以编译执行又可以解释执行D.以上说法都不对5.以下选项中可用作 C 程序合法实数的是_。(分数:1.00)A1e0B.3.0e0.2CE9D.9.12E6.下面描述中错误的是_。(分数:1.00)A.软件系统总体结构图支持软件系统的详细设计B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD 图是软件详细设计的表示工具7.负责数据库中查询操作的数据库语言是_。(分数:1.00)A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言8.下列叙述中正确的是_。(
3、分数:1.00)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结点的数据结构不一定是线性结构C.循环链表是非线性结构D.双向链表是非线性结构9.有三个关系 R、S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B c 3 T C 1 由关系 R 和 S 得到关系 T 的操作是_。(分数:1.00)A.自然连接B交C除D并10.定义无符号整数类为 UInt,下面可以作为类 UInt 实例化值的是_。(分数:1.00)A.-369B.369C.0.369D.整数集合1,2,3,4,511.C 语言中的简单数据类型有_。(分数:1.00)A.整型、实型、
4、逻辑型B.整型、实型、字符型C.整型、字符型、逻辑型D.整型、实型、逻辑型、字符型12.以下叙述中错误的是_。(分数:1.00)A.C 语言的可执行程序是由一系列机器指令构成的B.用 C 语言编写的源程序不能直接在计算机上运行C.通过编译得到的二进制目标程序需要连接才可以运行D.在没有安装 C 语言集成开发环境的机器上不能运行 C 源程序生成的.exe 文件13.以下选项中不能用作 C 语言程序合法常量的是_。(分数:1.00)A.1,234B.“/123“C.123D.“/x7G”14.冒泡排序在最坏情况下的比较次数是_。(分数:1.00)A.n(n+1)/2B.nlog2nC.n(n-1)
5、/2D.n/215.若有定义语句:“int a=3, b=2, c=1;”,以下选项中错误的赋值表达式是_。(分数:1.00)A.a=(b=4)=3;B.a=b=c+1;C.a=(b=4)+c;D.a=1+(b=c=4);16.if 语句基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是_。(分数:1.00)A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值17.设有定义:“double x10, *p=x;”,以下能给数组 x 下标为 6 的元素读入数据的正确语句是_。(分数:1.00)A.scanf(“%f“, B.scanf(“%1f“, *(x+6
6、);C.scanf(“%1f“, p+6);D.scanf(“%1f“, p6);18.有以下程序: #includestdio.h main() int x=011; printf(“%d/n“, +x); 程序运行后的输出结果是_。(分数:1.00)A.12B.11C.10D.919.有以下程序: #includestdio.h main() int s; scanf(“%d“, while(s0) switch(s) case 1: printf(“%d“, s+5); case 2: printf(“%d“, s+4); break; case 3: printf(“%d“, s+3)
7、; default: (“%d“, s+1); break; scanf(“%d“, 运行时,若输入 1 2 3 4 5 0回车,由输出结果是_。(分数:1.00)A.6566456B.66656C.66666D.666665620.有以下程序: #includestdio.h main() unsigned char a=8, c; c=a3; printf(“%d/n“, c); 程序运行后的输出结果是_。(分数:1.00)A.32B.16C.1D.021.有以下程序: #includestdio.h main() char s=“012xy/08s34f4w2“; int i; n=0;
8、 for(i=0; si!=0; i+) if(si=“0“ printf(“%d/n“, n); 程序运行后的输出结果是_。(分数:1.00)A.0B.3C.7D.822.设 fp 已定义,执行语句“fp=fopen(“file“, “w“);”后,以下针对文本文件 file 操作叙述的选项中正确的是_。(分数:1.00)A.写操作结束后可以从头开始读B.只能写不能读C.可以在原有内容后追加写D.可以随意读和写23.有以下程序: #includestdio.h main() char b, c; int i; b=“a“; c=“A“; for(i=0; i6; i+) if(i%2) pu
9、tchar(i+b); else putchar(i+c); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.ABCDEFB.AbCdEfC.aBcDeFD.abcdef24.有以下程序: #includestdio.h int fun(int x, int y) if(x!=y) return(x+y)/2); else return(x); main() int a=4, b=5, c=6; printf(“%d/n“, fun(2*a, fun(b, c); 程序运行后的输入结果是_。(分数:1.00)A.3B.6C.8D.1225.若有定义语句:“char
10、s310, (*k)3, *p;”,则以下赋值语句正确的是_。(分数:1.00)A.p=s;B.p=k;C.p=s0;D.k=s;26.有以下程序段 #includestdio.h main() while(getchar()!=“/n“); (分数:1.00)A.此 while 语句将无限循环B.getchar()不可以出现在 while 语句的条件表达式中C.当执行此 while 语句时,只有按回车键程序才能继续执行D.当执行此 while 语句时,按任意键程序就能继续执行27.有以下程序: #includestdio.h main() int x=1, y=0; if(!x)y+; el
11、se if(x=0) if(x)y+=2; else y+=3; printf(“%d/n“, y); 程序运行后的输出结果是_。(分数:1.00)A.3B.2C.1D.028.有以下程序(说明:字母 A 的 ASCII 码值是 65): #includestdio.h void fun(char*s) while(*s) if(*s%2) printf(“%c“, *s); s+; main() char a=“BYTE“; Fun(a); printf(“n“); 程序运行后的输出结果是_。(分数:1.00)A.BYB.BTC.YTD.YE29.有以下程序: #includestdio.h
12、 void fun(char*c) while(*c) if(*c=“a“ c+; main() char s81; gets(s); fun(;) puts(s); 当执行程序时从键盘输入 Hello Beijing回车,则程序的输出结果是_。(分数:1.00)A.hello beijingB.Hello BeijingC.HELLO BEIJINGD.hELLO Beijing30.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #includestdio.h #define N 10 void fun(int xN) int i=0; while(iN)scanf(“%d“
13、, _); 在程序中下划线处应填入的是_。(分数:1.00)A.x+iB. scanf(“%s“, a); gets(b); printf(“%s/n%s/n“, a, b); 程序运行时若输入: how are you?I am fine回车 则输出结果是_。(分数:1.00)A.how are you?I am fineB.howare you? I am fineC.how are yon? I am fineD.how are you?32.设有如下函数定义: int fun(int k) if(k1)return 0; else if(k=1) return 1; else retu
14、rn fun(k-1)+1; 若执行调用语句:“n=fun(3);”,则函数 fun 总共被调用的次数是_。(分数:1.00)A.2B.3C.4D.533.有以下程序段: char name20; int num; scanf(“name=%s mum=%d“, name, 当执行上述程序段,并从键盘输入:name=Lili num=1001回车后,name 的值为_。(分数:1.00)A.LiliB.name=LiliC.Lili num=D.name=Lili num=100134.有以下程序: #includestdio.h int fun() static int x=1; x*=2;
15、 return x; main() int i, s=1; for(i=1; i=3; i+)s*=fun(); printf(“%d/n“, s); 程序运行后的输出结果是_。(分数:1.00)A.0B.10C.30D.6435.有以下程序: #includestdio.h #define S(x)4*(x)*x+1 main() int k=5, j=2; printf(“%d/n“, S(k+j); 程序运行后的输出结果是_。(分数:1.00)A.197B.143C.33D.2836.设有定义:“struct char markp12; int num1; double num2; t1
16、, t2;”,若变量均已正确赋初值,则以下语句中错误的是_。(分数:1.00)A.t1=t2;B.t2.num1=t1.num1;C.t2.mark=t1.mark;D.t2.num2=t1.num2;37.有以下程序: #includestdio.h struct ord int x, y; dt2=1, 2, 3, 4; main() struct ord *p=dt; printf(“%d, “, +(p-x); printf(“%d/n“, +(p-y); 程序运行后的输出结果是_。(分数:1.00)A.1,2B.4,1C.3,4D.2,338.有以下程序: #includestdio
17、.h struct S int a, b; data2=10, 100, 20, 200; main() struct S p=data1; printf(“%d/n“, +(p.a); 程序运行后的输出结果是_。(分数:1.00)A.10B.11C.20D.2139.有以下程序段: int i, n; for(i=0; i8; i+) n=rand()%5; switch(n) case 1: case 3: printf(“%d/n“, n); break; case 2: case 4: printf(“%d/n“, n); continue; case 0: exit(0); prin
18、tf(“%d/n“, n); 以下关于程序段执行情况的叙述,正确的是_。(分数:1.00)A.for 循环语句固定执行 8 次B.当产生的随机数 n 为 4 时结束循环操作C.当产生的随机数 n 为 1 和 2 时不做任何操作D.当产生的随机数 n 为 0 时结束程序运行40.若 i 和 k 都是 int 类型变量,有以下 for 语句: for(i=0, k=-1; k=1; k+)printf(“*/n“); 下面关于语句执行情况的叙述中正确的是_。(分数:1.00)A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环二、程序填空题(总题数:1,分数:18.00)41
19、.请补充函数 proc(),该函数的功能是计算下面公式 S N 的值: (分数:18.00)三、程序改错题(总题数:1,分数:2.00)42.下列给定程序中,函数 proc()的功能是根据整型形参 n,计算如下公式的值: y=1-1/(22)+1/(33)-1/(44)+(-1)(n+1)/(nn) 例如,n 中的值为 10,则应输出 0.817962。 请修改程序中的错误,使它能得出正确结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdlib.h #includeconio.h #includestdio.h double p
20、roc(int n) double y=1.0; /*found* int j=1; int i; for(i=2; i=n; i+) j=-1*j; /*found* y+=1/(i*i); return(y); void main() int n=10; system(“CLS“); printf(“/nThe result is %1f/n“, proc(n); (分数:2.00)_四、程序设计题(总题数:1,分数:18.00)43.编写一个函数,从传入的 M 个字符中找出最长的一个字符串,并通过形参指针 max 传回该串地址(用*作为结束输入的标志)。 注意:部分源程序给出如下: 请勿
21、改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdio.h #includestring.h #includeconio.h char*proc(char(*a)81, int num) void main() char ss1081, *max; int n, i=0; printf(“输入若干个字符串:“); gets(ssi); puts(ssi); while(! stremp(ssi, “*“)=0) i+; gets(ssi); puts(ssi); n=i; max=proc(ss, n); p
22、rintf(“/nmax=%s/n“, max); (分数:18.00)_二级 C 语言-16-1 答案解析(总分:78.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.结构化程序所要求的基本结构不包括_。(分数:1.00)A.顺序结构B.GOTO 跳转 C.选择(分支)结构D.重复(循环)结构解析:解析 结构化程序包含的基本结构为顺序结构、循环结构、分支结构。2.一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是_。(分数:1.00)A.1:1 联系B.1:m 联系C.m:1 联系D.m:n 联系 解析:解析 由于一个老师能教多门课程,而
23、一门课程也能有多个老师教,所以是多对多的关系,也就是 m:n 的联系。3.C 语言中运算对象必须是整型的运算符是_。(分数:1.00)A.% B./C.!D.*解析:解析 %既然求余数,运算对象必须是整数。4.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是_。(分数:1.00)A.C 语言程序仅可以编译执行 B.C 语言程序仅可以解释执行C.C 语言程序既可以编译执行又可以解释执行D.以上说法都不对解析:解析 解释执行是计算机语言的一种执行方式。由解释器现场解释执行,不生成目标程序。如BASIC 便是解释执行。一般解释执行效率较低,低于编译执行。而 C 语言程序是经过
24、编译生成目标文件然后执行的,所以 C 语言程序是编译执行。5.以下选项中可用作 C 程序合法实数的是_。(分数:1.00)A1e0 B.3.0e0.2CE9D.9.12E解析:解析 C 语言中实数的指数计数表示格式为字母 e 或者 E 之前必须有数字,且 e 或 E 后面的指数必须为整数。所以选项 A 正确。6.下面描述中错误的是_。(分数:1.00)A.软件系统总体结构图支持软件系统的详细设计 B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD 图是软件详细设计的表示工具解析:解析 软件系统的总体结构图是软件架构设计的依据,不支持软件的详细设计
25、。7.负责数据库中查询操作的数据库语言是_。(分数:1.00)A.数据定义语言B.数据管理语言C.数据操纵语言 D.数据控制语言解析:解析 负责数据库中查询操作的数据库语言是数据操纵语言。8.下列叙述中正确的是_。(分数:1.00)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结点的数据结构不一定是线性结构 C.循环链表是非线性结构D.双向链表是非线性结构解析:解析 只有一个根节点的数据结构不一定是线性结构。9.有三个关系 R、S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B c 3 T C 1 由关系 R 和 S 得到关系 T 的操作是_。(
26、分数:1.00)A.自然连接B交C除 D并解析:解析 由图可知,其中 C 中只有一个属性,是除操作。10.定义无符号整数类为 UInt,下面可以作为类 UInt 实例化值的是_。(分数:1.00)A.-369B.369 C.0.369D.整数集合1,2,3,4,5解析:解析 其中 A 选项是有符号的,C 选项是小数,D 选项是结合并不是类的实例化对象,只有 B 选项完全符合。11.C 语言中的简单数据类型有_。(分数:1.00)A.整型、实型、逻辑型B.整型、实型、字符型 C.整型、字符型、逻辑型D.整型、实型、逻辑型、字符型解析:解析 整(数)型(长、短)、实(数)型(长、短)、字符型是 C
27、 语言中最常用的并且是最简单的数据类型。12.以下叙述中错误的是_。(分数:1.00)A.C 语言的可执行程序是由一系列机器指令构成的B.用 C 语言编写的源程序不能直接在计算机上运行C.通过编译得到的二进制目标程序需要连接才可以运行D.在没有安装 C 语言集成开发环境的机器上不能运行 C 源程序生成的.exe 文件 解析:解析 EXE 文件是可执行文件,Windows 系统都能直接运行 EXE 文件,而不需要安装 C 语言集成开发环境。13.以下选项中不能用作 C 语言程序合法常量的是_。(分数:1.00)A.1,234 B.“/123“C.123D.“/x7G”解析:解析 A 选项中逗号是
28、一个操作符。14.冒泡排序在最坏情况下的比较次数是_。(分数:1.00)A.n(n+1)/2B.nlog2nC.n(n-1)/2 D.n/2解析:解析 对 n 个结点的线性表采用冒泡排序,在最坏情况下,需要经过 n/2 次的从前往后的扫描和n/2 次的从后往前的扫描,需要的比较次数为 n(n-1)/2。15.若有定义语句:“int a=3, b=2, c=1;”,以下选项中错误的赋值表达式是_。(分数:1.00)A.a=(b=4)=3; B.a=b=c+1;C.a=(b=4)+c;D.a=1+(b=c=4);解析:解析 由等式的规则可知,A 选项错误。先对括号的 b 进行等式运算,得出 b=4
29、,然后计算得出a=4=3,所以会导致错误。答案选择 A。16.if 语句基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是_。(分数:1.00)A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值 解析:解析 考查 if 循环语句。if(表达式)语句,其中表达式是一个条件,条件中可以是任意的合法的数值。17.设有定义:“double x10, *p=x;”,以下能给数组 x 下标为 6 的元素读入数据的正确语句是_。(分数:1.00)A.scanf(“%f“, B.scanf(“%1f“, *(x+6);C.scanf(“%1f“, p+6); D.scan
30、f(“%1f“, p6);解析:解析 由题中给出数组要给下标为 6 的数组赋值,其中 x6实际上是第 6 个数,下标为 5,因为数组是从 0 开始计算,所以正确的表示方法为 C。18.有以下程序: #includestdio.h main() int x=011; printf(“%d/n“, +x); 程序运行后的输出结果是_。(分数:1.00)A.12B.11C.10 D.9解析:解析 考查简单的 C 语言程序,题目中 x=011;而输出函数中+x,说明是先加 1,所以为 10,答案选择 C。19.有以下程序: #includestdio.h main() int s; scanf(“%d
31、“, while(s0) switch(s) case 1: printf(“%d“, s+5); case 2: printf(“%d“, s+4); break; case 3: printf(“%d“, s+3); default: (“%d“, s+1); break; scanf(“%d“, 运行时,若输入 1 2 3 4 5 0回车,由输出结果是_。(分数:1.00)A.6566456 B.66656C.66666D.6666656解析:解析 根据题意,当 s=1 时,输出 65;当 s=2 时,输出 6;当 s=3 时,则输出 64;当 s=4 时,输出 5;当 s=5 时,输出
32、 6;当 s=0 时,程序直接退出。所以最后答案为 6566456,A 选项正确。20.有以下程序: #includestdio.h main() unsigned char a=8, c; c=a3; printf(“%d/n“, c); 程序运行后的输出结果是_。(分数:1.00)A.32B.16C.1 D.0解析:解析 题中定义了无符号数,c=a3;是指右移 3 位,然后输出。结果为 C。21.有以下程序: #includestdio.h main() char s=“012xy/08s34f4w2“; int i; n=0; for(i=0; si!=0; i+) if(si=“0“
33、printf(“%d/n“, n); 程序运行后的输出结果是_。(分数:1.00)A.0B.3 C.7D.8解析:解析 考查简单的 C 语言程序数组和循环。for 循环是指 i=0,如果 si!=0,则 i 自动加 1。if循环指的是 si中的元素大于等于 0 且小于等于 9,则 n 加 1,所以答案为 B。22.设 fp 已定义,执行语句“fp=fopen(“file“, “w“);”后,以下针对文本文件 file 操作叙述的选项中正确的是_。(分数:1.00)A.写操作结束后可以从头开始读B.只能写不能读 C.可以在原有内容后追加写D.可以随意读和写解析:解析 考查基础知识,fp=fope
34、n(“file“, “w“);指的是写操作之后不可以读。所以答案为 B。23.有以下程序: #includestdio.h main() char b, c; int i; b=“a“; c=“A“; for(i=0; i6; i+) if(i%2) putchar(i+b); else putchar(i+c); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.ABCDEFB.AbCdEf C.aBcDeFD.abcdef解析:解析 此题考查的是 putchar()函数,此函数是字符输出函数,并且输出的是单个字符。所以答案为 B。24.有以下程序: #includ
35、estdio.h int fun(int x, int y) if(x!=y) return(x+y)/2); else return(x); main() int a=4, b=5, c=6; printf(“%d/n“, fun(2*a, fun(b, c); 程序运行后的输入结果是_。(分数:1.00)A.3B.6 C.8D.12解析:解析 此题考查的是函数 fun(),fun(b,c)=5,然后 fun(2*a,5)=fun(8,5)=6。25.若有定义语句:“char s310, (*k)3, *p;”,则以下赋值语句正确的是_。(分数:1.00)A.p=s;B.p=k;C.p=s0
36、; D.k=s;解析:解析 答案 c 的意思是*p 指向数组的第一个值。26.有以下程序段 #includestdio.h main() while(getchar()!=“/n“); (分数:1.00)A.此 while 语句将无限循环B.getchar()不可以出现在 while 语句的条件表达式中C.当执行此 while 语句时,只有按回车键程序才能继续执行 D.当执行此 while 语句时,按任意键程序就能继续执行解析:解析 主要是考查 while 和 getchar 函数,getchar 函数是输入字符函数,while 是循环语句,所以当输入的字符为换行符时将执行。27.有以下程序:
37、 #includestdio.h main() int x=1, y=0; if(!x)y+; else if(x=0) if(x)y+=2; else y+=3; printf(“%d/n“, y); 程序运行后的输出结果是_。(分数:1.00)A.3B.2C.1D.0 解析:解析 因为 x!=0,所以不执行外分支语句,最后结果为 0。28.有以下程序(说明:字母 A 的 ASCII 码值是 65): #includestdio.h void fun(char*s) while(*s) if(*s%2) printf(“%c“, *s); s+; main() char a=“BYTE“;
38、Fun(a); printf(“n“); 程序运行后的输出结果是_。(分数:1.00)A.BYB.BTC.YTD.YE 解析:解析 fun()函数的意思是当*s%2=0 的时候就输出并且 s 自加 1 次,然后判断。所以可知只有第2 和第 4 个位置上的才符合要求,所以答案为 D。29.有以下程序: #includestdio.h void fun(char*c) while(*c) if(*c=“a“ c+; main() char s81; gets(s); fun(;) puts(s); 当执行程序时从键盘输入 Hello Beijing回车,则程序的输出结果是_。(分数:1.00)A.
39、hello beijingB.Hello BeijingC.HELLO BEIJING D.hELLO Beijing解析:解析 此程序是进行将小写字母变成大写字母的操作,所以答案为 C。30.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #includestdio.h #define N 10 void fun(int xN) int i=0; while(iN)scanf(“%d“, _); 在程序中下划线处应填入的是_。(分数:1.00)A.x+iB. scanf(“%s“, a); gets(b); printf(“%s/n%s/n“, a, b); 程序运行时若输入:
40、 how are you?I am fine回车 则输出结果是_。(分数:1.00)A.how are you?I am fineB.howare you? I am fine C.how are yon? I am fineD.how are you?解析:解析 此题主要考查 scanf 函数和 gets 函数的区别。答案为 B。32.设有如下函数定义: int fun(int k) if(k1)return 0; else if(k=1) return 1; else return fun(k-1)+1; 若执行调用语句:“n=fun(3);”,则函数 fun 总共被调用的次数是_。(分数
41、:1.00)A.2B.3 C.4D.5解析:解析 此题考查简单的循环,当执行 n=fun(3)时,则函数 fun 执行 3 次。33.有以下程序段: char name20; int num; scanf(“name=%s mum=%d“, name, 当执行上述程序段,并从键盘输入:name=Lili num=1001回车后,name 的值为_。(分数:1.00)A.Lili B.name=LiliC.Lili num=D.name=Lili num=1001解析:解析 考查简单的 C 语言程序。由题可知,程序中输入 name 的值为 Lili,所以输出的必定是Lili,答案选择 A。34.
42、有以下程序: #includestdio.h int fun() static int x=1; x*=2; return x; main() int i, s=1; for(i=1; i=3; i+)s*=fun(); printf(“%d/n“, s); 程序运行后的输出结果是_。(分数:1.00)A.0B.10C.30D.64 解析:解析 函数 fun()是 2 的次方的运算,而 s*=fun(),所以答案为 64。35.有以下程序: #includestdio.h #define S(x)4*(x)*x+1 main() int k=5, j=2; printf(“%d/n“, S(k
43、+j); 程序运行后的输出结果是_。(分数:1.00)A.197B.143 C.33D.28解析:解析 此程序考查带参数的宏定义,S(k+j)展开后即 4*(k+j)*k+j+1,所以结果为 143,答案为B。36.设有定义:“struct char markp12; int num1; double num2; t1, t2;”,若变量均已正确赋初值,则以下语句中错误的是_。(分数:1.00)A.t1=t2;B.t2.num1=t1.num1;C.t2.mark=t1.mark; D.t2.num2=t1.num2;解析:解析 结构体不能通过结构体名字整体赋值,通过结构体名、成员名的方式赋值
44、。所以 C 选项错误。37.有以下程序: #includestdio.h struct ord int x, y; dt2=1, 2, 3, 4; main() struct ord *p=dt; printf(“%d, “, +(p-x); printf(“%d/n“, +(p-y); 程序运行后的输出结果是_。(分数:1.00)A.1,2B.4,1C.3,4D.2,3 解析:解析 p-x 的值为 1,+(p-x)作用是取 p-x 的值加 1 作为表达式的值即值为 2,同理+(p-y)的值为 3。所以选 D。38.有以下程序: #includestdio.h struct S int a,
45、b; data2=10, 100, 20, 200; main() struct S p=data1; printf(“%d/n“, +(p.a); 程序运行后的输出结果是_。(分数:1.00)A.10B.11C.20D.21 解析:解析 考查结构体的应用,答案为 21。39.有以下程序段: int i, n; for(i=0; i8; i+) n=rand()%5; switch(n) case 1: case 3: printf(“%d/n“, n); break; case 2: case 4: printf(“%d/n“, n); continue; case 0: exit(0); printf(“%d/n“, n); 以下关于程序段执行情况的叙述,正确的是_。(分数:1.00)A.for 循环语句固定执行 8 次 B.当产生的随机数 n 为 4 时结束循环操作C.当产生的随机数 n 为 1 和 2 时不做任何操作D.当产生的随机数 n 为 0 时结束程序运行解析:解析 程序中的 for。循环是固定地执行 8 次,属于计数器,程序是从中随机抽取一个数,然后对 5 进行求余再输出,共抽取 8 个数。所以答案为 A。40.若 i 和 k 都是 int 类型变量,有以下 for 语句: for(i=0, k=-1; k=1;