1、二级 C 语言-11-2 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.数据流程图(DFD)是_。(分数:1.00)A.软件概要设计的工具B.软件详细设计的工具C.结构化方法的需求分析工具D.面向对象方法的需求分析工具2.软件(程序)调试的任务是_。(分数:1.00)A.诊断和改正程序中的错误B.尽可能多地发现程序中的错误C.发现并改正程序中的所有错误D.确定程序中错误的性质3.以下选项中正确的实型常量是_。(分数:1.00)A.0B.3.1415C.0.329102D.8714.在学生管理的关系数据库中,存取一个学生信息的数据单位是_。
2、(分数:1.00)A.文件B.数据库C.字段D.记录5.若有定义:int x,*pb;则正确的赋值表达式是_。(分数:1.00)A.pb= scanf(“%c%c“, c=getchar(); d=getchar(); printf“%c%c%c%c/n“, a, b, c, d; 当执行程序时,按下列方式输入数据(从第 1 列开始,CR代表回车,注意:回车也是一个字符) 12CR 34CR 则输出结果是_。(分数:1.00)A.1234B.12C.123D.123416.有以下程序: #includestdio.h int f(int t, int n); main() int a4=1,
3、2, 3, 4, s; s=f(a, 4); printf(“%d/n“, s); int f(int t, int n) if(n0) return tn-1+f(t, n-1); else return 0; 程序运行后的输出结果是_。(分数:1.00)A.4B.10C.14D.617.下列选项中,能正确定义数组的语句是_。(分数:1.00)A.int num02008;B.int num;C.int N=2008;int numN;D.#define N 2008int numN;18.若 a 是数值类型,则逻辑表达式(a=1)|(a!=1)的值是_。(分数:1.00)A.1B.0C.2
4、D.不知道 a 的值,不能确定19.有如下嵌套的 if 语句: if(ab) if(ac) k=a; else k=c; else if(bc) k=b; else k=c; 以下选项中与上述 if 语句等价的语句是_。(分数:1.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;20.有以下程序: #includestdio.h main() int i, j, m=1; for(i=1; i3; i+) for(j=3;
5、 j0; j-) if(i*j3) break; m*=i+j; printf(“m=%d/n“, m); 程序运行后的输出结果是_。(分数:1.00)A.m=6B.m=2C.m=4D.m=321.有以下程序: #includestdio.h main() int a=1, b=2; for(; a8; a+)b+=a; a+=2; printf(“%d, %d/n“, a, b); 程序运行后的输出结果是_。(分数:1.00)A.9,18B.8,11C.7,11D.10,1422.有以下程序,其中 k 的初值为八进制数: #includestdio.h main() int k=011; p
6、rintf“%d/n“, k+; 程序运行后的输出结果是_。(分数:1.00)A.12B.11C.10D.923.若有定义:“double a=22; int i=0, k=18;”,则不符合 C 语言规定的赋值语句是_。(分数:1.00)A.a=a+, i+;B.i=(a+k)=(i+k);C.i=a%11;D.i=!a;24.下列语句组中,正确的是_。(分数:1.00)A.char*s; s=“Olympic“;B.char s7; s=“Olympic“;C.char*s; s=“Olympic“;D.char s7; s=“Olympic“;25.有以下程序: #includestdi
7、o.h #define SUB(a)(a)-(a) main() int a=2, b=3, c=5, d; d=SUB(a+b)*c; printf(“%d/n“, d); 程序运行后的输出结果是_。(分数:1.00)A.0B.-12C.-20D.1026.有以下程序: #includestdio.h void fun(char*c, int d) *c=*c+1, d=d+1; printf(“%c, %c“, *c, d); main() char b=“a“, a=;A“; fun( printf(“%c, %c/n“, b, a); 程序运行后的输出结果是_。(分数:1.00)A.b
8、,B,b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B27.有以下程序: #includestdio.h main() FILE*fp; char str10; fp=fopen(“myfile, dat“, “ “); fputs(“abc“, ip); fclose(fp); fp=fopen(“myfile.dat“, “a*“); fprintf(fp, “%d“, 28); rewind(fp); fscanf(fp, “%s“, str); puts(str); fclose(fp); 程序运行后的输出结果是_。(分数:1.00)A.abcB.28cC.abc28D.内
9、类型不一致而出错28.设有定义“double a10, *s=a;”,以下能够代表数组元素 a3的是_。(分数:1.00)A.(*s)3B.*(s+3)C.*s3D.*s+329.有以下程序: #includestdio.h main() int a5=1, 2, 3, 4, 5, b5=0, 2, 1, 3, 0, i, s=0; for(i=0; i5; i+) s=s+abi; printf(“%d/n“, s); 程序运行后的输出结果是_。(分数:1.00)A.6B.10C.11D.1530.有以下程序: #includestdio.h main() int b33=0, 1, 2,
10、0, 1, 2, 0, 1, 2), i, j, t=1; for(i=0; i3; i+) for(j=1; j=i; j+)t+=bibji; printf(“%d/n“, t); 程序运行后的输出结果是_。(分数:1.00)A.1B.3C.4D.031.若有以下定义和语句: char s 10=“abcd!“, *s2=“/n123/“; printf(“%d %d/n“, strlen(s1), strlen(s2); 则输出结果是_。(分数:1.00)A.5 5B.10 5C.10 7D.5 832.有以下程序: #includestdio.h #define N 8 void fu
11、n(int*x, int i) *x=*(x+i); main() int aN=1, 2, 3, 4, 5, 6, 7, 8, i; fun(a, 2); for(i=0; iN/2; i+) printf(“%d“, ai); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.1313B.2234C.3234D.123433.以下 C 语言用户标识符中,不合法的是_。(分数:1.00)A._1B.AaBcC.a_bD.a-b34.有以下程序: #includestdio.h int fun() static int x=1; x*=2; return x; mai
12、n() int i, s=1; for(i=1; i=2; i+) s=fun(); printf%d/n“, s; 程序运行后的输出结果是_。(分数:1.00)A.0B.1C.4D.835.以下选项中与“if(a=1)a=b; else a+;”语句功能不同的 switch 语句是_。(分数:1.00)A.switch(a) case 1: a=b; break;default: a+;B.switch(a=1) case 0: a=b; break;case 1: a+;C.switch(a)default: a+; break;case 1: a=b;D.switch(a=1) case
13、 1: a=b; break;case 0: a+;36.设有定义: struct complex int real, unreal; datal=1, 8, data2; 则以下赋值语句中错误的是_。(分数:1.00)A.data2=data1;B.data2=2, 6;C.data2.real=datal.real;D.data2.real=datal.unreal;37.有以下程序: #includestdio.h #includestring.h struct A int a; char b10; double c; ; void f(struct A t); main() struc
14、t A a=“1001, “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; 程序运行后的输出结果是_。(分数:1.00)A.1001, ZhangDa, 1098.0B.1002, ChangRong, 1202.0C.1001, ChangRong, 1098. 0D.1002, ZhangDa, 1202. 038.有以下定义和语句: struct workers int
15、num; char name20; char c; struct int day; int month; int year; s; ; struct workers w, *pw; pw= 能给 w 中 year 成员赋 1980 的语句是_。(分数:1.00)A.*pw.year=1980;B.year=1980;C.pw-year=1980D.s.year=1980;39.有以下程序: #includestdio.h main() int a=2, b=2, c=2; printf(“%d/n“, a/b 程序运行后的输出结果是_。(分数:1.00)A.0B.1C.2D.340.若有定义“
16、int(*pt)3;”,则下列说法正确的是_。(分数:1.00)A.定义了基类型为 int 的三个指针变量B.定义了基类型为 int 的具有三个元素的指针数组 ptC.定义了一个名为*pt、具有三个元素的整型数组D.定义了一个名为 pt 的指针变量,它可以指向每行有三个整数元素的二维数组二、程序填空题(总题数:1,分数:18.00)41.给定程序的功能是计算 score 中 m 个人的平均成绩 aver,将低于 aver 的成绩放在 below 中,通过函数名返回人数。 例如,当 score=10,20,30,40,50,60,70,80,90,m=9 时,函数返回的人数应该是4,below=
17、10,20,30,40。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #includestring.h int fun(int score, int m, int below) int i, j=0; float aver=0. 0; for(i=0; im; i+) aver+=scorei; aver/=(float)m; for(i=0; im; i+) if(scoreiaver) belowj+= 1; return j; void main() int i, n,
18、 below9; int score9=10, 20, 30, 40, 50, 60, 70, 80, 90; n=fun(score, 9, 2); printf(“/n Below the average score are:%d/n“, n); for(i=0; in; i+) printf(“%d“, 3); (分数:18.00)三、程序改错题(总题数:1,分数:24.00)42.下列给定程序中函数 fun()的功能是:用递归算法计算斐波拉契数列中第 n 项的值。从第 1 项起,斐波拉契数列为:1,1,2,3,5,8,13,21, 例如,若给 n 输入 7,则该项的斐波拉契数值为 13
19、。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h long fun(int g) /*found* switch(g); case 0: return 0; /*found* case 1: case 2: return 1; return(fun(g-1)+fun(g-2); void main() long fib; int n; printf(“Input n:“); scanf(“%d“, printf(“n=%d/n“, n); fib=fun(n); printf(“f
20、ib=%d/n/n“, fib); (分数:24.00)_四、程序设计题(总题数:1,分数:18.00)43.某学生的记录由学号、8 门课程成绩和平均分组成,学号和 8 门课程的成绩已在主函数中给出,请编写函数,其功能是:求出该学生的平均分,并放入记录的 ave 成员中。 例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为 78.875。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 fun()部位中填入你编写的若干语句。 试题程序: #includestdio.h #define N 8 typede
21、f struet char nnm10; double sN; double ave; STREC; void fun(STREC*a) void main() STREC s=“GA005“, 85.5, 76, 69.5, 85, 91, 72, 64.5, 87.5; int i; fun( printf(“The%s“s student data:/n“, s.num); for(i=0; iN; i+) printf(“%4.1fkn“, s.si); printf(“/nknave=%7.3fkn“, s.ave); printf(“/n“); (分数:18.00)_二级 C 语言
22、-11-2 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.数据流程图(DFD)是_。(分数:1.00)A.软件概要设计的工具B.软件详细设计的工具C.结构化方法的需求分析工具 D.面向对象方法的需求分析工具解析:解析 数据流程图是一种结构化分析描述模型,用来对系统的功能需求进行建模。2.软件(程序)调试的任务是_。(分数:1.00)A.诊断和改正程序中的错误 B.尽可能多地发现程序中的错误C.发现并改正程序中的所有错误D.确定程序中错误的性质解析:解析 调试的目的是发现错误或导致程序失效的错误原因,并修改程序以修正错误。调试是测试之后的活动
23、。3.以下选项中正确的实型常量是_。(分数:1.00)A.0B.3.1415 C.0.329102D.871解析:解析 实型常量又称实数或浮点数。在 C 语言中可以用两种形式表示一个实型常量。一是小数形式。二是指数形式。因此正确答案为 B。4.在学生管理的关系数据库中,存取一个学生信息的数据单位是_。(分数:1.00)A.文件B.数据库C.字段D.记录 解析:解析 一个数据库由一个文件或文件集合组成,这些文件中的信息可分解成一个个记录,属于数据库设计的概念设计阶段。5.若有定义:int x,*pb;则正确的赋值表达式是_。(分数:1.00)A.pb=”和“return(表达式);”。其中,re
24、turn 是关键字。该语句有两种格式:不带返回值格式和带返回值格式。该语句用在被调用函数中,在被调用函数中执行到该语句时,将结束对被调用函数的执行,并把控制权返回给调用函数,继续执行调用函数后边的语句。在带有返回值的情况下,将 return 语句所带的表达式的值返回给调用函数,作为被调用函数的值。在被调用函数中,可以用 return 语句,也可以不用 return 语句。如果要求被调用函数有返回值,则一定要用 return 语句,采用 return(表达式);格式。如果被调用函数不需要返回值,并且当被调用函数的所有语句执行完后进行返回,则被调用函数可以不用 return 语句。15.有以下程序
25、: #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 则输出结果是_。(分数:1.00)A.1234B.12C.123 D.1234解析:解析 当程序调用 getchar 时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。如用户在按回车之前输入了不止一个字符
26、,其他字符会保留在键盘缓存区中,等待后续 getchar 调用读取。也就是说,后续的 getchar 调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。因此,程序中 c 的值为输入的第一个回车符。16.有以下程序: #includestdio.h int f(int t, int n); main() int a4=1, 2, 3, 4, s; s=f(a, 4); printf(“%d/n“, s); int f(int t, int n) if(n0) return tn-1+f(t, n-1); else return 0; 程序运行后的输出结果
27、是_。(分数:1.00)A.4B.10 C.14D.6解析:解析 本题考查了函数的调用,并且使用了嵌套。17.下列选项中,能正确定义数组的语句是_。(分数:1.00)A.int num02008;B.int num;C.int N=2008;int numN;D.#define N 2008int numN; 解析:解析 通过 define 进行宏定义,将 N 赋值为 2008,然后定义一个数组,整型长度为 2008,所以本题答案为 D。18.若 a 是数值类型,则逻辑表达式(a=1)|(a!=1)的值是_。(分数:1.00)A.1 B.0C.2D.不知道 a 的值,不能确定解析:解析 由于
28、a=1 和 a!=1 两者互斥,即总有一个为真,因此二者的“或”也必定为真。19.有如下嵌套的 if 语句: if(ab) if(ac) k=a; else k=c; else if(bc) k=b; else k=c; 以下选项中与上述 if 语句等价的语句是_。(分数:1.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;解析:解析 条件运算符(?:)是 C 语言中唯一的一个三目运算符,它是对第一个表达式做真/假检测,
29、然后根据结果返回两个表达式中的一个作为运算的结果。表达式 1?表达式 2:表达式 3。在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式 2 的值;如果为假,则返回表达式 3 的值。20.有以下程序: #includestdio.h main() int i, j, m=1; for(i=1; i3; i+) for(j=3; j0; j-) if(i*j3) break; m*=i+j; printf(“m=%d/n“, m); 程序运行后的输出结果是_。(分数:1.00)A.m=6 B.m=2C.m=4D.m=3解析:解析 本题考查了多重 for 循环。当(i*j)3 时,跳出循
30、环,本题中 i=1,j=3,i*j 后值为 3,所以执行下边语句:m*=i+j,也可写成 m=m*i+j,这时要注意优先级,所以 m 的值为 6。21.有以下程序: #includestdio.h main() int a=1, b=2; for(; a8; a+)b+=a; a+=2; printf(“%d, %d/n“, a, b); 程序运行后的输出结果是_。(分数:1.00)A.9,18B.8,11C.7,11D.10,14 解析:解析 第一次执行循环前,a=1,满足 a8,执行循环后,b=3,a=3。执行完 a+操作后,a=4。由于 a8,执行第二次循环后,b=7,a=6,执行完 a
31、+操作后,a=7。由于 a8,执行第三次循环后,b=14,a=9,执行完 a+操作后 a=10。此时不满足 a8,跳出循环。22.有以下程序,其中 k 的初值为八进制数: #includestdio.h main() int k=011; printf“%d/n“, k+; 程序运行后的输出结果是_。(分数:1.00)A.12B.11C.10D.9 解析:解析 八进制数 k=011 的十进制值为 9,因此题中输出的是 k 的十进制值,输出完成后才执行 k+操作。23.若有定义:“double a=22; int i=0, k=18;”,则不符合 C 语言规定的赋值语句是_。(分数:1.00)A
32、.a=a+, i+;B.i=(a+k)=(i+k);C.i=a%11; D.i=!a;解析:解析 运算符%要求两个运算对象都为整型。选项 C 中 a 为 double 型,不符合要求。24.下列语句组中,正确的是_。(分数:1.00)A.char*s; s=“Olympic“; B.char s7; s=“Olympic“;C.char*s; s=“Olympic“;D.char s7; s=“Olympic“;解析:解析 给字符串数组赋值时,要先定义数组长度,然后再赋值。可以只给部分元素赋初值,当中值的个数少于元素个数时,只给前面部分元素赋值。数组的下标是从 0 开始的,所以 s7代表从 s
33、0到 s6七个元素。其格式可以写成:char 数组名常量=“字符“, “字符“, ;,也可写为 char 数组名常量=“字符串“;,或去掉写为:char 数组名常量=“字符串“。所以本题应选择 A 选项。25.有以下程序: #includestdio.h #define SUB(a)(a)-(a) main() int a=2, b=3, c=5, d; d=SUB(a+b)*c; printf(“%d/n“, d); 程序运行后的输出结果是_。(分数:1.00)A.0B.-12C.-20 D.10解析:解析 本题调用参数,并考查了优先级。SUB(a+b)*c 调用后可写成(a+b)-(a+b
34、)*c,结果为 5-25=-20。26.有以下程序: #includestdio.h void fun(char*c, int d) *c=*c+1, d=d+1; printf(“%c, %c“, *c, d); main() char b=“a“, a=;A“; fun( printf(“%c, %c/n“, b, a); 程序运行后的输出结果是_。(分数:1.00)A.b,B,b,A B.b,B,B,AC.a,B,B,aD.a,B,a,B解析:解析 本题考查了函数的调用。首先主函数定义了两个字符型数据 b 和 a,给 b 赋值为字母 a,a赋值为字母 A,调用 fun( char str
35、10; fp=fopen(“myfile, dat“, “ “); fputs(“abc“, ip); fclose(fp); fp=fopen(“myfile.dat“, “a*“); fprintf(fp, “%d“, 28); rewind(fp); fscanf(fp, “%s“, str); puts(str); fclose(fp); 程序运行后的输出结果是_。(分数:1.00)A.abcB.28cC.abc28 D.内类型不一致而出错解析:解析 本题考查文件的操作,首先打开文件,进行写操作,把“abc”写入“myfile”文件,再打开“myfile.data”文件,输入 28,在
36、键盘上接收字符,输出并关闭文件。本题结果为 abc28。28.设有定义“double a10, *s=a;”,以下能够代表数组元素 a3的是_。(分数:1.00)A.(*s)3B.*(s+3) C.*s3D.*s+3解析:解析 用带下标的指针变量引用一维数组元素若有以下定义和语句:“int*p, s10, i; p=s;”,且 0i10,可以用 for(i=0; i5; i+) s=s+abi; printf(“%d/n“, s); 程序运行后的输出结果是_。(分数:1.00)A.6B.10C.11 D.15解析:解析 本题考查数组的使用。本题定义了两个数组,注意数组的下标是从 0 开始的,进
37、行第 1 次for 循环:当 i=0 时,b0为数组 b 中第 1 个元素,结果为 0,那么 a0也是数组 a 中第 1 个元素,结果为 1,所以 s 的值为 1。第 2 次循环:i 此时自加为 1,b1为数组的第 2 个元素,值为 2,所以可求出a2(数组中的第 3 个元素)的值为 3,s=s+3,所以 s 的值为 4。进入第 3 次 for 循环,依此类推,第 3次 for 循环结束时 s 的值为 6。第 4 次 for 循环,s 的值变为 10。第 5 次 for 循环时,此时 i 的值为4,s 的值变为 11,i=5 不符合题意,所以跳出循环,输出结果,所以本题答案为 C。30.有以下
38、程序: #includestdio.h main() int b33=0, 1, 2, 0, 1, 2, 0, 1, 2), i, j, t=1; for(i=0; i3; i+) for(j=1; j=i; j+)t+=bibji; printf(“%d/n“, t); 程序运行后的输出结果是_。(分数:1.00)A.1B.3C.4 D.0解析:解析 本题考查了两层 for 循环。外层循环增量 i 的值作为内层循环执行次数的值使用。31.若有以下定义和语句: char s 10=“abcd!“, *s2=“/n123/“; printf(“%d %d/n“, strlen(s1), strl
39、en(s2); 则输出结果是_。(分数:1.00)A.5 5 B.10 5C.10 7D.5 8解析:解析 /n 和/分别为转义字符,各占据一个字符的位置。32.有以下程序: #includestdio.h #define N 8 void fun(int*x, int i) *x=*(x+i); main() int aN=1, 2, 3, 4, 5, 6, 7, 8, i; fun(a, 2); for(i=0; iN/2; i+) printf(“%d“, ai); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.1313B.2234C.3234 D.1234
40、解析:解析 本题考查了宏定义与局部变量的区别,宏定义的作用范围为整个程序,而变量的作用范围只在定义它的函数体的部分,因此,主函数中定义的 i 与 fun()中的 i 互不相干。33.以下 C 语言用户标识符中,不合法的是_。(分数:1.00)A._1B.AaBcC.a_bD.a-b 解析:解析 标识符主要由英文字母、数字和下划线构成,并且首字符不能是数字,但可以是字母或者下划线。本题中,选项 A、B、C 均符合 C 语言标识符要求。选项 D 不合法,因为其虽然以字母为首字符,但中间的“-”(减号)不是 C 语言标识符的构成要素。34.有以下程序: #includestdio.h int fun
41、() static int x=1; x*=2; return x; main() int i, s=1; for(i=1; i=2; i+) s=fun(); printf%d/n“, s; 程序运行后的输出结果是_。(分数:1.00)A.0B.1C.4 D.8解析:解析 本题考查了 static 的用法。当 static 用于局部变量中,成为静态局部变量。静态局部变量有两个用法,记忆功能和全局生存期。当 static 用于全局变量,主要作用是限制此全局变量被其他的文件调用。当 static 用于类中的成员,表示这个成员是属于这个类,但是不属于类中任意特定对象。所以本题答案为 C。35.以下
42、选项中与“if(a=1)a=b; else a+;”语句功能不同的 switch 语句是_。(分数:1.00)A.switch(a) case 1: a=b; break;default: a+;B.switch(a=1) case 0: a=b; break;case 1: a+; C.switch(a)default: a+; break;case 1: a=b;D.switch(a=1) case 1: a=b; break;case 0: a+;解析:解析 题中当 a 的值为 1 时,关系表达式 a=1 的值为真,即 1,因此程序将跳转到 case 1 执行a+操作,与题干程序刚好相反
43、。36.设有定义: struct complex int real, unreal; datal=1, 8, data2; 则以下赋值语句中错误的是_。(分数:1.00)A.data2=data1;B.data2=2, 6; C.data2.real=datal.real;D.data2.real=datal.unreal;解析:解析 B 中的赋值方式仅限于在结构说明时,对每个变量成员初始化。在程序中对结构体成员赋值,或采用选项 A 中的整体赋值方式,或采用选项 C、D 中对结构成员依次赋值。37.有以下程序: #includestdio.h #includestring.h struct A
44、 int a; char b10; double c; ; void f(struct A t); main() struct A a=“1001, “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; 程序运行后的输出结果是_。(分数:1.00)A.1001, ZhangDa, 1098.0 B.1002, ChangRong, 1202.0C.1001, ChangRong,
45、1098. 0D.1002, ZhangDa, 1202. 0解析:解析 将结构变量作为形参,通过函数间形参与实参相结合的方式将整个结构传递给函数,这种传递方式是值传递。在被调用函数中,对结构形参变量值进行的任何修改都不会影响到调用函数中的结构变量。38.有以下定义和语句: struct workers int num; char name20; char c; struct int day; int month; int year; s; ; struct workers w, *pw; pw= 能给 w 中 year 成员赋 1980 的语句是_。(分数:1.00)A.*pw.year=1980;B.year=1980;C.pw-year=1980D.s.year=1980; 解析:解析 结构 workers 中的成员 s 是一个嵌套的结构类型定义,因此在给 year 赋值时,要用“.”运算在深入一层访问到最基本的成员 year,只有 D 项反映出了这一点。39.有以下程序: #includestdio.h main() int a=2, b=2, c=2; printf(“%d/n“, a/b 程序运行后的输出结果是_。(分数:1.00)A.0 B.1C.2D.3解析:解析 根据 C 语