1、二级 C 语言笔试 97 及答案解析(总分:84.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.数据的存储结构是指( )。(分数:1.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构在计算机中的表示2.在一棵二叉树上第 5 层的结点数最多是( )。(分数:1.00)A.8B.16C.32D.153.以下叙述中正确的是( )。(分数:1.00)A.预处理命令行必须位于 C 源程序的起始位置B.在 C 语言巾,预处理命令行都以“#“开头C.每个 C 程序必须在开头包含预处理命令行;#include stdih
2、D.C 语言的预处理不能实现宏定义和条件编译的功能4.以下不合法的字符常量是( )。(分数:1.00)A./018B./C./D./xcc/5.对以下二叉树 (分数:1.00)A.ACBDFEGB.ACBDFGEC.ABDCGEFD.FCADBEG6.设有定义:int k=1,m=2:float f=7;,则以下选项中错误的表达式是( )。(分数:1.00)A.k=k=kB.-k+C.k%int(D.k=f=m8.若有以下程序段(n 所赋的是八进制数): int m=32767,n=032767; printf(“%d,%/n“,m,n); 执行后输出结果是( )。(分数:1.00)A.327
3、67,32767B.32767,032767C.32767,77777D.32767,0777779.算法具有 5 个特性,以下选项中不属于算法特性的是( )o(分数:1.00)A.有穷性B.简洁性C.可行性D.确定性10.以下程序段的输出结果是( )。 int a=1234; printf(“%2d/n“,A) ;(分数:1.00)A.12B.34C.1234D.提示出错,无结果11.有以下程序: #include stdio.h main() FILE *fp; int i; char ch=“abcd“,t; fp=fopen(“abc.dat“,“wb+“); for(i=0;i4;i
4、+)fwrite( switch(a%3) case 0:m+;break; case 1:m+; switch(b%2) default: m+; case 0:m+;break; rintf(“%d/n“,m); 程序运行后的输出结果是( )。(分数:1.00)A.1B.2C.3D.414.按照“后进先出”原则组织数据的数据结构是( )。(分数:1.00)A.队列B.栈C.双向链表D.二叉树15.以下能正确定义二维数组的是( )。(分数:1.00)A.int a3;B.int a3=2*3;C.int a3=;D.int a23=1,2,3,4;16.有以下程序: #include std
5、io.h main() inta=1,2,3,4,5,6,7,8,9,10,11,12,,*p=a+5,*q=NULL; *q=*(p+5); printf(“%d %d/n“,*p,*q); 程序运行后的输出结果是( )。(分数:1.00)A.运行后报错B.6 6C.6 11D.5 1017.已有定义:Mt x=3,y=4,z=5;,则表达式!(x/y)+z-1 strcat(p,r); strcpy(p+strlen(q),q); printf(“%d/n“,strlen(p); 程序运行后的输出结果是( )。(分数:1.00)A.9B.6C.11D.735.以下程序段十,不能正确赋字符串
6、(编译时系统会提示错误)的是( )。(分数:1.00)A.chars10=“abedefg“;B.char t=“abcdefS“,*s=t;C.chars10;s=“abcdefg“;D.chars10;strcpy(s,“abcdefg“);36.设有如下定义, struct sk int a; float b; data; int*p; 若要使 P 指向 data 中的 a 域,正确的赋值语句是( )。(分数:1.00)A.p= for (i=1; iargc; i+) n=n*10+*argvi-0; printf(“%d/n“,n); 编译连接后生成可执行文件 tt.exe。若运行时
7、输入以下命令行 tt 12 345 678 程序运行后的输出结果是( )。(分数:1.00)A.12B.12345C.12345678D.13640.以下对结构体类型变量 td 的定义中,错误的是( )。(分数:1.00)A.typedef struct aa int n; float m; AA; AA td;B.struct aa int n; float m; td; stmct aa td;C.stmct int n; float m; aa; stmct aa td;D.struct int n; float m; td;41.已定义 ch 为字符型变量,以下赋值语句中错误的是( )
8、。(分数:1.00)A.ch=/;B.ch=62+3C.ch=NULL;D.ch=/xaa;42.以下程序的输出结果是( )。 mam() char cf35=“AAAA“,“BBB“,“CC“); printf(“/“%s/“n“,cf1); (分数:1.00)A.“AAAA“B.“BBB“C.“BBBCC“D.“CC“44.以下关于字符串的叙述中正确的是( )。(分数:1.00)A.C 语言中有字符串类型的常量和变量B.两个字符串中的字符个数相同时才能进行串符串大小的比较C.可以用关系运算符对字符串的大小进行比较D.空串一定比空格打头的字符串小45.在数据库系统巾,用户所见的数据模式为(
9、)。(分数:1.00)A.概念模式B.外模式C.内模式D.物理模式,46.有以下程序: #include stdio.h #define N 5 #define M N+1 #define f(x) (x*M) main() int i1,i2; i1=f(2); i2=f(1+1); printf(“%d%d/n“,i1,i2); 程序的运行结果是( )。(分数:1.00)A.12 12B.11 7C.11 11D.12 747.以下选项中可作为 C 语言合法整数的是( )。(分数:1.00)A.10110BB.0386C.0XffaD.x2a248.设有如下说明: typedef stru
10、ct int n; char c;double x;STD; 则以下选项:能正确定义结构体数组并赋初值的语句是( )。(分数:1.00)A.STDtt2=1,A,62,2,B,75;B.STDtt2=1,“A“,62,2,“B“,75;C.struet tt2= 1,A,2,B;D.struct tt2=1,“A“,62.5,2,“B“,75.0;49.有以下程序: main() int i=0,s=0; do if(i%2) i+;continue; i+; s+=i; while(i7);. printf(“%d/n“,s); 执行后输出的结果是( )。(分数:1.00)A.16B.12C
11、.28D.2150.有以下程序: #include stdio.h #include string.h typedef structchar name9;char sex;float score2STU; STU f(STU A) STU b=“Zhao“,m,85.0,90.0; int i; strcpy(a.name,b.namC) ; a.sex=b.sex; for(i=0;i2;i+) a.scorei=b.scorei; return a; main() STU c=“Qian“,f,95.0,92.0,d; d=f(C) ; pintf(“%s,%c,%2.of%2of/n“,
12、d.name,d.sex,d.score0, scanq(“i=%d,j=%d“, printf(“i=%d,j=%d/n“,i,j); 要求给 i 赋 10,给 j 赋 20,则应该从键盘输入U 【7】 /U。(分数:2.00)填空项 1:_58.若有以下程序: main() int,p,a=5; if(P=a!=0) printf(“%d/n“,p); else printf(“%d/n“,p+2); 执行后输出结果是U 【8】 /U。(分数:2.00)填空项 1:_59.当运行以下程序时,输入 abed,程序的输出结果是:U 【9】 /U。 insert(char str) int i
13、i=strlen(str); while(i0) str2*i=stri;str2*-1=*;i-; printf(“%s/n“,str); main() char str40; scanf(“%s“,sB) ; insert(str); (分数:2.00)填空项 1:_60.以下程序运行后的输出结果是U 【10】 /U。 main() int a44=1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18; int i=0,j=0,s=0; while(i+4) if(i=2|=4)continue; j=0; do s+=aij; j+; while(j4); Pr
14、intf(“%d/n“,s); (分数:2.00)填空项 1:_61.己定义 char ch=$;int i=l,j;,执行 j=!ch (分数:2.00)填空项 1:_64.以下程序中函数 f 的功能是在数组 x 的 n 个数(假定 n 个数互不相同)小找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。 #include stdio.h void f(int x,int n) int p0,p1,i,j,t,m; i=j=x0; p0=p1=0; for(m=O;mn;m+) if(xmi) i=xm; p0=m; else if(xmj) j=xm;p1=m
15、;) t=xp0;xp0=xn-1;xn-1=t; t=xpl;xp1=U 【14】 /U;U 【15】 /U=t main() int a10,u; for(u=0;u10;u+) scamp(“%d“, f(a,10); for(u=0;u10;u+)printf(“%d“,au); ptintf(“/n“); (分数:2.00)填空项 1:_65.以下程序运行后的输出结果是U 【16】 /U。 struct NODE int num; stmct NODE *next; ; main() struct NODE s3=1,/0),2,/0),3,/0),*p,*q,*r; int sum
16、=0; s0next=s+1; s1next=s+2; s2next=s; p=s q=p-next; r=q-next; sum+=q-next-num; sum+=r-next-next-num; printf(“%d/n“,sum); (分数:2.00)填空项 1:_66.下面程序的运行结果是U 【17】 /U。 int f(int a,int n) if(n1)return a0+f( printf(“%d/n“,s); (分数:2.00)填空项 1:_67.以下程序中,函数 SumColumMin 的功能足:求出 M 行 N 列二维数组每列元素中的最小值,并计算它们的和值。和值通过形
17、参传回主函数输出。请填空。 #define M 2 #define N 4 void SumColumMm(int aMN,int*sum) int i,j,k,s=0; for(i=0;iN;i+) k=0; for(j=1;jM;j+) if(akiaji) k=j; s+=U 【18】 /U; U 【19】 /U=s; main() int xMn)=3;,5,1,4,1,8,3,s; SumC01umMm(U 【20】 /U); ptintf(“%d/n“,s); (分数:2.00)填空项 1:_二级 C 语言笔试 97 答案解析(总分:84.00,做题时间:90 分钟)一、B选择题/
18、B(总题数:50,分数:50.00)1.数据的存储结构是指( )。(分数:1.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构在计算机中的表示 解析:解析 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,也称数据的物理结构,所以选项 D 正确。2.在一棵二叉树上第 5 层的结点数最多是( )。(分数:1.00)A.8B.16 C.32D.15解析:解析 根据二叉树的性质,在二叉树的第 K 层上,最多有 2k-1 个结点。所以,第五层的结点数最多为 16。3.以下叙述中正确的是( )。(分数:1.00)A.预处理命令行必须位于
19、C 源程序的起始位置B.在 C 语言巾,预处理命令行都以“#“开头 C.每个 C 程序必须在开头包含预处理命令行;#include stdihD.C 语言的预处理不能实现宏定义和条件编译的功能解析:解析 预处理命令行可以出现在 C 源程序的任何位置,故选项 A 不正确。#includestdio.h预处理命令行的意思是将 stdioh 头文件插入源程序中该行命令所在的位置,表示我们将在后续行中用到stdioh 头文件中定义的函数或类型,若程序中没有用到这些函数或类型就可以不用包含此头文件,故选项 C 不正确。C 提供的预处理功能主要有:宏定义、文件包含和条件编译三种功能,故选项 D 不正确。在
20、 C 语言中,预处理命令行都以”#”开头,故应该选择 B。4.以下不合法的字符常量是( )。(分数:1.00)A./018 B./C./D./xcc/解析:解析 在选项 A 中,“/”后跟着三个数字,是表示一个 ASCII 码值等于这三位数字所组成的八进制数数值的字符,但是八进制数只能是由 0-7 这八个数字表示,而选项 A 中出现了数字 8 所以是不合法的。选项 B 是表示一个双引号的转义字符表示方法;选项 C 表示的是一个反斜杆;选项 D 表示一个 ASCII 值为十六进制值“的字符。故应该选择 A。5.对以下二叉树 (分数:1.00)A.ACBDFEG B.ACBDFGEC.ABDCGE
21、FD.FCADBEG解析:解析 二叉树的中序遍历递归算法为:如果根不空,则按中序次序访问左子树,访问跟结点,按中序次序访问右子树;否则返回。本题中,根据中序遍历算法,应首先按照中序次序访问以 C 为根结点的左子树,然后再访问根结点 P,最后才访问以 E 为根结点的右子树。遍历以 C 为根结点的左子树同样要遵循中序遍历算法,因此中序遍历结果为 ACBD;然后遍历根结点 P;遍历以 E 为根结点的右子树,同样要遵循巾序遍历算法,因此巾序遍历结果为 EG。最后把这三部分的遍历结果按顺序连接起来,中序遍历结果为 ACBDFEG。因此,本题的正确答案是选项 A。6.设有定义:int k=1,m=2:fl
22、oat f=7;,则以下选项中错误的表达式是( )。(分数:1.00)A.k=k=kB.-k+C.k%int( D.k=f=m解析:解析 强制类型转换运算符的格式是: (类型名)变量名 所以将浮点型变量 f 转换为整型应写作(int)f,故选项 C 是错误的。解析:解析 本题中定义了整型变量 a 和一个指向整型数据的指针变量 pa,并定义 pa 是一个存放 a 的地址的变量。选项 B 是应该将 a 改为中,(i+1)不是变量,该表达式的值为常量,而在什运算中,其运算对象必须为变量,故选项 C 错误,选项 D 中为复合赋值表达式,正确。所以应当选择 C。13.有以下程序: main() int
23、a=15,b=21,m=0; switch(a%3) case 0:m+;break; case 1:m+; switch(b%2) default: m+; case 0:m+;break; rintf(“%d/n“,m); 程序运行后的输出结果是( )。(分数:1.00)A.1 B.2C.3D.4解析:解析 本题中首先计算 switch 后面括号里的表达式 a%3,即 15%3 为 0;执行 case 0:后面的语句 m+:m 自加 1,即 m 为 1 遇到 break 语句;然后跳出 switch 语句,所以最后输出的 m 的值为 1。所以选项 A 正确。14.按照“后进先出”原则组织数
24、据的数据结构是( )。(分数:1.00)A.队列B.栈 C.双向链表D.二叉树解析:解析 “后进先出”表示最后被插入的元素最先能被删除。选项 A 巾,队列是指允许在端进行插入、而在另一端进行删除的线性表,在队列这种数据结构中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除,队列又称为“先进先出”的线性表,它体现了“先来先服务”的原则:选项 B 中,栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素,栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。队列和栈都届于线性表,它们具有顺序存储的特点,所以才有“先进先出”和“后进先出”的数据组织方式。双向链表使用链
25、式存储方式,二叉树也通常采用链式存储方式,它们的存储数据的空间可以是不连续的,各个数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。所以选项 C 和选项 D 错误。本题的正确答案为选项 B。15.以下能正确定义二维数组的是( )。(分数:1.00)A.int a3;B.int a3=2*3; C.int a3=;D.int a23=1,2,3,4;解析:解析 选项 A 中省略了第一维的长度,在 C 语言中是不允许的,故选项 A 错误;选项 C 也是省略第一维的长度;选项 D 中定义了一个 2 行 3 列的数组,而在赋值的时候却赋了一个 3 行的值给它,显然不正确,故选项 D 错误,所以,4
26、 个选项中选项 B 符合题意。16.有以下程序: #include stdio.h main() inta=1,2,3,4,5,6,7,8,9,10,11,12,,*p=a+5,*q=NULL; *q=*(p+5); printf(“%d %d/n“,*p,*q); 程序运行后的输出结果是( )。(分数:1.00)A.运行后报错 B.6 6C.6 11D.5 10解析:解析 本题中首先定义了一个维数组 a 并初始化,由于定义该数组的时候省略了长度,因此该数组的长度为初始化时候赋初值的个数即为 12。数组名 a 代表数组的首地址,所以*p=a+5 语句使得 p 指向数组的第 6 个元素,而在程序
27、中定义了一个指针 q 并让它指向空,实际上程序并没有在内存中为指针 q开辟存储空间,这样给 q 赋值不允许的,故该程序运行后报错。所以,4 个选项中选项 A 符合题意。17.已有定义:Mt x=3,y=4,z=5;,则表达式!(x/y)+z-1 strcat(p,r); strcpy(p+strlen(q),q); printf(“%d/n“,strlen(p); 程序运行后的输出结果是( )。(分数:1.00)A.9B.6 C.11D.7解析:解析 本题首先定义了 3 个字符数组 p、q、r 并分别被初始化。数组 p 指定的大小为 20,初始化列表为a,b,c,d,即只指定了前 4 个元素的
28、内容,根据 C 语言的规定,初始化列表不足时,其余元素均自动初始化为 0。然后通过 strcat()函数,将字符串,连接到字符串 p 之后,即执行后 p 中的内容为“abcdabcde“。因为“strlen(q)”表示求字符串 q 的长度,很明显为 3,所以语句“strcpy(p+strlen(q),q);”的作用就是:将字符串 q 拷贝到数组 p 的第 3 个元素位置处。注意,strcpy 函数拷贝字符串会将其结束标志位一起拷贝,故拷贝完后 p 中的内容为”ababc/0de“,但通过strlen 函数取 p 的长度碰到/0/即停止,故 p 巾字符串的长度是 6,应该选择 B。35.以下程序
29、段十,不能正确赋字符串(编译时系统会提示错误)的是( )。(分数:1.00)A.chars10=“abedefg“;B.char t=“abcdefS“,*s=t;C.chars10;s=“abcdefg“; D.chars10;strcpy(s,“abcdefg“);解析:解析 选项 A 巾定义了一个字符型数组并赋初值,故选项 A 正确;选项 B 定义了一个字符型数组t 并初始化,然后定义了一个指针变量 s 并让它指向 t,故选项 B 正确;选项 C 先定义了一个长度为 10 的字符型数组,然后在给它赋值,这时应该分别给数组中的每个元素赋值,故选项 c 不正确:选项 D 中先定义了一个长度为
30、 10 的字符型数组 s,然后通过字符串拷贝函数将字符串“abcdefs”赋值给它,选项 D 正确。所以,4 个选项中选项 C 符合题意。36.设有如下定义, struct sk int a; float b; data; int*p; 若要使 P 指向 data 中的 a 域,正确的赋值语句是( )。(分数:1.00)A.p= for (i=1; iargc; i+) n=n*10+*argvi-0; printf(“%d/n“,n); 编译连接后生成可执行文件 tt.exe。若运行时输入以下命令行 tt 12 345 678 程序运行后的输出结果是( )。(分数:1.00)A.12B.12
31、345C.12345678D.136 解析:解析 因为题目给出的命令行为 tt 12 345 678,所以 main 函数的两个参数分别为 4 和 “tt“,“12“,“345“,“678“)。程序中,通过一个 for 循环,遍历了后面的三个参数字符串,每次将 n 自乘 10,然后累加*argvi-0,即第 i 个参数字符串的首字符减去0。一个数宁字符减去,O 字符,即可得到这个数字字符的实际数值,因此三次循环的结果是让 n 的值变为 136,故本题应该选择 D。40.以下对结构体类型变量 td 的定义中,错误的是( )。(分数:1.00)A.typedef struct aa int n;
32、float m; AA; AA td;B.struct aa int n; float m; td; stmct aa td;C.stmct int n; float m; aa; stmct aa td; D.struct int n; float m; td;解析:解析 选项 A 使用 typedef 语句给结构体 8a 定义了一个新的名称 AA,因此使用 AA 直接声明结构体变量 td 是正确的。选项 B 中,前面一句是定义结构体同时声明了结构体变量 td,后一句是使用结构体名 aa 声明结构体变量 td,都是正确的写法。选项 C 的第 1 条语句和选项 D 使用的是无名结构体直接声明变
33、量的语法,是正确的,但是选项 C 的第 2 条语句使用已经声明的结构体变量 aa 来声明 td 是错误的。故应该选择 c。41.已定义 ch 为字符型变量,以下赋值语句中错误的是( )。(分数:1.00)A.ch=/; B.ch=62+3C.ch=NULL;D.ch=/xaa;解析:解析 选项 A 中“/”为转义字符应该用“/”来表示,故选项 A 错误;选项 B 中将一个整数赋值给字符变量,正确:选项 c 将一个空值赋值给字符变量,正确;选项 D 将一个用十六进制数表示的转义字符赋值给字符变量,正确。所以,4 个选项中选项 A 符合题意。42.以下程序的输出结果是( )。 mam() char
34、 cf35=“AAAA“,“BBB“,“CC“); printf(“/“%s/“n“,cf1); (分数:1.00)A.“AAAA“B.“BBB“ C.“BBBCC“D.“CC“解析:解析 二维字符数组可以看成由若干个一维字符数组组成,每行是一个一维字符数组。本题首先定义了一个数组 ch35,并给它们按行赋初值,即相当于给 eh0赋值“AAAA”,给 ch1赋值“BBB”,给 eh2赋值“BBB”,最后输出转义字符“叮”、ch1和转义字符“/”,因此输出为“BBB”。所以,4 个选项中 B 为所选。解析:解析 选项 B 中由于 1 和 2 都是整型,其 1/2 的运算结果为 0,故整个表达式的
35、值为 0,所以它的结果和题目中要求的代数式的讨算结果不相符,所以,4 个选项中选项 B 符合题意。44.以下关于字符串的叙述中正确的是( )。(分数:1.00)A.C 语言中有字符串类型的常量和变量B.两个字符串中的字符个数相同时才能进行串符串大小的比较C.可以用关系运算符对字符串的大小进行比较D.空串一定比空格打头的字符串小 解析:解析 C 语言中只有字符串常量而没有字符串变量,故选项 A 不正确:字符串比较大小是以第 1个不相同字符的大小为标准的,跟长度没有关系,故选项 B 不正确:字符串比较大小除了使用库函数stremp()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小
36、,因为字符串在表达式中相当于 coost char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。所以选项 C 也不正确。空串的长度为 0,而以空格打头的字符串的长度至少为 1,故选项 D 正确,本题应该选择 D。45.在数据库系统巾,用户所见的数据模式为( )。(分数:1.00)A.概念模式B.外模式 C.内模式D.物理模式,解析:解析 数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式也称子模式或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。46.有以下程序: #include stdio.h #defin
37、e N 5 #define M N+1 #define f(x) (x*M) main() int i1,i2; i1=f(2); i2=f(1+1); printf(“%d%d/n“,i1,i2); 程序的运行结果是( )。(分数:1.00)A.12 12B.11 7 C.11 11D.12 7解析:解析 题目中第 1 条要替换的语句 i1=f(2);展开后是 i1=(2*M);再展开为 i1=(2*N+1);最后展开为 i1=(2*5/1),结果使 i1=11。而第 2 条语句 i2=f(1+1);展开后为 i2=(1+1*M);再展开为 i2= (1+1*N+1);最后展开为 i2=(1
38、+1*5+1),结果使 i2=7。故应该选择 B。47.以下选项中可作为 C 语言合法整数的是( )。(分数:1.00)A.10110BB.0386C.0Xffa D.x2a2解析:解析 在 C 语言中,整数常量可以用十进制、八进制和十六进制来表示,选项 A 为二进制表示,故选项 A 不正确;选项 B 是八进制表示法,但在八进制数巾,各个位数只能为数字 0 到 7 中的一个,而在选项 B 中,有一个数字 8,故选项 B 不正确:选项 C 为十六进制表示法正确;选项 D 中也为十六进制表示法,但十六进制数以 ox 开头,故选项 D 不正确,所以,4 个选项中选项 c 符合题意。48.设有如下说明
39、: typedef struct int n; char c;double x;STD; 则以下选项:能正确定义结构体数组并赋初值的语句是( )。(分数:1.00)A.STDtt2=1,A,62,2,B,75; B.STDtt2=1,“A“,62,2,“B“,75;C.struet tt2= 1,A,2,B;D.struct tt2=1,“A“,62.5,2,“B“,75.0;解析:解析 本题定义了一个结构体类型并白定义类型名为 STD,用户自定义类型后,就可以利用它进行变量与数组的定义。定义的方法,与 C 语言中其它类型的定义完全一样,定义结构型数组并赋初值时,每个元素用一对“”和“厂括起来
40、,字符型元素用”括起来,选项 A、B、C、D 中只有选项 A 符合条件。所以,A 选项为所选。49.有以下程序: main() int i=0,s=0; do if(i%2) i+;continue; i+; s+=i; while(i7);. printf(“%d/n“,s); 执行后输出的结果是( )。(分数:1.00)A.16 B.12C.28D.21解析:50.有以下程序: #include stdio.h #include string.h typedef structchar name9;char sex;float score2STU; STU f(STU A) STU b=“Z
41、hao“,m,85.0,90.0; int i; strcpy(a.name,b.namC) ; a.sex=b.sex; for(i=0;i2;i+) a.scorei=b.scorei; return a; main() STU c=“Qian“,f,95.0,92.0,d; d=f(C) ; pintf(“%s,%c,%2.of%2of/n“,d.name,d.sex,d.score0, scanq(“i=%d,j=%d“, printf(“i=%d,j=%d/n“,i,j); 要求给 i 赋 10,给 j 赋 20,则应该从键盘输入U 【7】 /U。(分数:2.00)填空项 1:_ (
42、正确答案:i=0,j=20)解析:解析 该函数的第一个参数是格式字符串,主要由两类字符组成,一类是非格式符要求原样输入,一类是格式符对应要输入的变量,所以说本题中应该原样输入 i=,j=,后面分别给变量 0 和 20,所以说空格处应该填入 i=0,j=20。58.若有以下程序: main() int,p,a=5; if(P=a!=0) printf(“%d/n“,p); else printf(“%d/n“,p+2); 执行后输出结果是U 【8】 /U。(分数:2.00)填空项 1:_ (正确答案:1)解析:解析 首先计算 if 语句后面的表达式,根据运算符的优先级可知,先算“a!=0”,该值
43、为 1,再把 1 赋值给 p,结果为 1(真),执行其后的 printf 语句,输出的值为 1。59.当运行以下程序时,输入 abed,程序的输出结果是:U 【9】 /U。 insert(char str) int i i=strlen(str); while(i0) str2*i=stri;str2*-1=*;i-; printf(“%s/n“,str); main() char str40; scanf(“%s“,sB) ; insert(str); (分数:2.00)填空项 1:_ (正确答案:a*b*c*d,)解析:解析 在 insert()函数,因为题目要求输入的字符串为 abed,
44、所以执行完“i= strlen(str);”后,i 中存放的是字符串 abcd 的长度值 4。所以接 F 来的 while 循环会循环 4 次,每次让 i 减 1,故 4 次循环中 i 的值依次为 4、3、2、1。每次循环会执行两条语句 str2*i=stri;str2*i-1=*,当 i=4时为:str8=str4;str7=*;。执行结果是将字符串 abed 末尾的结束符/0复制到其下标值 2 倍的位置,并在其前 1 位插入个*哼符。接下来 i=3,执行 str6=str3;str5=*。执行后会将字符串 abcd 最后一个字符,d 复制到其下标值 2 倍的位置,并在其前 1 位插入一个*
45、字符。依次类推,直到 i=1,执行 str2=str1; str1=*,将字符 tb,往后移动了 1 位,并在原位置插入*字符。所以,循环结束后,字符串 str 会变为 a*b*c*d*。这就是程序的输出结果。60.以下程序运行后的输出结果是U 【10】 /U。 main() int a44=1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18; int i=0,j=0,s=0; while(i+4) if(i=2|=4)continue; j=0; do s+=aij; j+; while(j4); Printf(“%d/n“,s); (分数:2.00)填空项 1:_ (正确答案:92)解析:解析 主函数中首先定义了一个 4 行 4 列的二维数组,然后执行一个 while 循环,该循环中又嵌套了一个 do-while 循环。现看 while 循环,该循环通过 i+的值来判断是否结束循环当 i+的值为 4 的时候结束循环,当 i=0 时,执行 while 的循环体,显然 if 语句条件不满足不执行,接着让 i=0,然后执行do-while 循环体,我们不难看出 do-whilo 循环的功能是将第 i+1 行的所有元素加起来,所以这时 s 的值为 s=a10+a11+a12+a13)=26,当 i=1 时,i+1=2,uf 后面括号里的表