1、二级 C 语言笔试 91 及答案解析(总分:86.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.有以下程序:#include string .hvoid f(char *s, char *t) char k; k=*s; *s=*t; *t=k; s+; t- -; if(*s) f(s, t);main() char str10=“abcdefg“,*p; p=str+strlen(str)/2+ 1; f(p,p-2); printf(“%s/n“, str);程序运行后的输出结果是( )。(分数:1.00)A.abcdcfgB.gfedcbaC.gbc
2、defaD.abedcfg2.以下 4 组用户定义标识符中,全部合法的一组是( )。(分数:1.00)A._main enclude sinB.If -max turboC.txt REAL 3COMD.int K_2 _0013.有以下程序段: struct stint x; int *y; *pt;int a=1,2, b=3,4;struct st c2=10,a,20,b;pt=c; 以下选项中表达式的值为 11 的是( )。(分数:1.00)A.*pt-yB.pt-xC.+pt-xD.(pt+)-x4.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。(
3、分数:1.00)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMSD.没有任何关系5.下列叙述中正确的是( )。(分数:1.00)A.接口复杂的模块,其耦合程度一定低B.耦合程度弱的模块,其内聚程度一定低C.耦合程度弱的模块,其内聚程度一定高D.上述 3 种说法都不对6.有以下程序:mare()int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2) s+=* (t+ i); printf (“%d/n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.20C.25D.367.有以
4、下程序:int *flint *x, int *y) if(*x*y) return x; else return y;main() int a=7,b=8,*p,*q,*r; p= q= r=f(p, q); printf(“%d, %d, %d/n“,*p,*q,*r);执行后输出结果是( )。(分数:1.00)A.7,8,8B.7,8,7C.8,7,7D.8,7,88.以下程序中函数 f 的功能是将 n 个字符串按由大到小的顺序进行排序。#include string. hvoid f(char p10,int n) chart20;int i,j; for(i=0;in-1;i+) f
5、or(j=i+1;jn; j+) if(strcmp(pi,pj0) strcpy(t, pi); strcpy(pi,pj);strcpy(pj,t);main() char p10=“abc“, “aabdfg“, “abbd“, “dcdbe“, “cd“; int i; f(p,5); printf(“%d/n“, strlen(p0); 程序运行后的输出结果是( )。(分数:1.00)A.6B.4C.5D.39.有以下程序:street STU char num10; float score3; ;main() struct STU s3= “20021“,90,95,85, “20
6、022“,95,80,75 , “20023“,100, 95, 90 ,*p=s, int i; float sum=0; for(i=0;i3 ,i+) sum=sum+ p-scorei; printf(“%6.2f/n“,sum);程序运行后的输出结果是( )。(分数:1.00)A.260.00B.270.00C.280.00D.285.0010.若变景均已正确定义井赋值,以下合法的 C 语言赋值语句是( ),(分数:1.00)A.x=y=5;B.x=n%2.5;C.x+ n=i;D.x=5=4+1;11.有定义语句:“int a=1,b=2,c=3,x;”,则以下选项中各程序段执行后
7、,x 的值不为 3 的是( )。(分数:1.00)A.if(cx=1; else if (b x=2; else x=3;B.if(a3)x=3; else if (a2) x=2; else x=1;C.if(a3) x=3; if (a2) x=2; if (a1) x=1;D.if(ax=b; if (b x=c; if (c x=a;12.有以下程序:main () int i, s=0; for(i=1;i10;i+=2) s+=i+1; printf(“%d/n“, s); 程序执行后的输出结果是( )。(分数:1.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自
8、然数 19 中奇数之和D.自然数 110 中偶数之和13.下列关于队列的叙述中正确的是( )。(分数:1.00)A.在队列中只能插入数据B.在队列小只能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表14.设 fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof (fp)的返回值为( )。(分数:1.00)A.EOFB.非 0 值C.0D.NULL15.按照 C 语言规定的用户标识符命名规则,不能出现在标识符中的是( )。(分数:1.00)A.大写字母B.连接符C.数字字符D.下划线16.有以下程序: main() int a=1,b; for(b=1 ;b=10;
9、b+) if(a=8) break; if(a%2=1) a+=5; continue; a-=3; printf(“%d/n“, b); 程序运行后的输出结果是 ( )。 A) 3 B) 4 c) 5 D) 6(分数:1.00)A.B.C.D.17.有以下程序:main() int k=5; while(-k) printf(“%d“, k-=3); printf(“/n“); 执行后的输出结果是( )。(分数:1.00)A.1B.2C.4D.死循环18.下列选项中不属于软件生命周期开发阶段任务的是( )。(分数:1.00)A.软件测试B.概要设计C.软件维护D.详细设计19.下列叙述中正确
10、的是( )。(分数:1.00)A.线性链表中的各元素在存储空间中的位置必须是连续的B.线性链表中的表头元素一定存储在其他元素的前面C.线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面D.线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的20.下列叙述中正确的是( )。(分数:1.00)A.线性链表是线性表的链式存储结构B.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结构21.以下叙述中正确的是( )。(分数:1.00)A.C 语言的源程序不必通过编译就可以直接运行B.C 语言中的每条叫执行语句最终都
11、将被转换成二进制的机器指令C.C 源程序经编译形成的二进制代码可以直接运行D.C 语言中的函数不可以单独进行编译22.程序中头文件 type1.h 的内容是#define N 5#define M1 N*3 程序如下:#define “type1.h“#define M2 N*2main () int i; i=M1+M2; printf(“%d/n“, i);) 程序编译后运行的输出结果是( )。(分数:1.00)A.10B.20C.25D.3023.下列叙述中正确的是( )。(分数:1.00)A.黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征B.黑箱(盒)测试方法主要考虑程序的内部结
12、构和内部特征C.白箱(盒)测试不考虑程序内部的逻辑结构D.上述 3 种说法都不对24.以下选项中,与 k=n+完全等价的表达式是( )。(分数:1.00)A.k=n, n=n+1B.n=n+1,k=nC.k=+nD.k+=n+125.有以下程序:main () int x=102,y=012; printf(“%2d,%2d/n”,x,y); 执行后输出结果是( )。(分数:1.00)A.10,01B.02,12C.102,10D.02,1026.以下不合法的用户标识符是( )。(分数:1.00)A.j2_KEYB.DoubleC.4dD._8_27.有以下程序:int f(int b4) i
13、nt i, j, s=0; for(j=0j4;j+) i=j; if(i2) i=3-j; s+=bij; return s;main() int a44= 1,2,3,4, 0,2,4,6,3,6,9,12 , 3,2,1,0 ; printf(“%d/n“, f(a); 执行后的输出结果是( )。(分数:1.00)A.12B.11C.18D.1628.有以下程序:main() char *p=“3697“,“2584“; int i, j; long num=0; for(i=0;i2;i+) j=0; while(pij!=/0) if(pilj -0)%2) num=10*num+
14、pij -0; j+=2; printf(“%d/n“, num);程序执行后的输出结果是 ( )。(分数:1.00)A.35B.37C.39D.397529.若有定义:int x=0, *p=, 则语句 printf(“%d/n“,*p);的输出结果是 ( )。(分数:1.00)A.随机值B.0C.x 的地址D.p 的地址30.有如下程序:#include stdio. hmain () FILE *fp1; fp1=fopen (“fl.txt“, “w“); fprintf(fp1,“abc“); fclose (fp1);若文本文件 f1.txt 中原有内容为:good,则运行以上程序
15、后文件 f1txt 中的内容为( )。(分数:1.00)A.goodabcB.abedC.abcD.abcgood31.若以下定义:struct link int data; struck link *next;a,b,c,*p,*q;且变量 a 和 b 之间已有下图所示的链表结构: (分数:1.00)A.next=c; next=b;B.next=q; next= next;C.p-next= q-next=pnext;D.(*.next=q;(*.next= while (*t+); return (t-s); 该函数的功能是( )(分数:1.00)A.比较两个字符串的大小B.计算 s 所
16、指字符串占用内存字节个数C.计算 s 所指字符串的长度D.将 s 所指字符串自制到字符串 t 中33.以下叙述中正确的是( )。(分数:1.00)A.周部变量说明为 static 存储类,其生存期将碍到延长B.全局变量说明为 static 存储类,其作用域将被扩大C.任何存储类的变量在未赋初值时,其值都是不确定的D.形参可以使用的存储类说明符与局部变量完全相同34.有以下程序:main() union unsigned int n; unsigned char c; u1; u1.c=A; printf(“%c/n“,u1.n);执行后输出结果是 ( )。(分数:1.00)A.产生语法错B.随
17、机值C.AD.6535.若要说明一个类型名 STP,使得定义语句 STP 轧等价于 char*s;,以下选项中正确的是( )。(分数:1.00)A.typedef STP char*s;B.typedef *char STP;C.typedef STP *char;D.typedef char* STP;36.有以下程序:main()int i, j, x=0; for(i=0; i2; i+) x+; for( j=0; j=3; j+) if(j%2) continue; x+; x+; printf(“x=%d/n“, x);程序执行后输出结果是( )。(分数:1.00)A.x=4B.x
18、=8C.x=6D.x=1237.若有定义:float x=1.5;int a=1,b=3,c=2;则正确的 switch 语句是( )。(分数:1.00)A.switch( case 1.0: printf(“*/n“); case 2.0: printf(“*/n“);B.switch(in; case 1: printf(“*/n“); case 2: printf(“*/n“);C.switch(a + case 1: printf(“*/n“); case 2+1: printf(“*/n“);D.switch(a+ case 1: printf(“*/n“); case c: pri
19、ntf(“*/n“);38.有以下程序:void sum(int *a) a0=a1; main() int aa10=1,2,3,4,5,6,7,8,9,10, i; for(i=2;i=0;i-) sum( printf(“%d/n“, aa0);执行后的输出结果是( )。(分数:1.00)A.4B.3C.2D.139.以下程序的输出的结果是( )。int x=3;main() int i;for(i=1;ix;i+)incre();incre() staic int x=1; x*=x+1; printf(“ %d“, x);(分数:1.00)A.33B.22C.26D.2540.若 x
20、 和 y 代表整型数,以下表达式中不能正确表示数学关系x-y10 的是( )。(分数:1.00)A.abs(x-10B.x-y-10 t=*x,*x=*y;*y=t;main()char* s1=“abc“,*s2=“123“; swap(s1,s2); printf(“%s,%s/n“,s1,s2);程序执行后的输出结果是( )。(分数:1.00)A.123,abcB.abc,123C.1bc,a23D.321,cba43.设 a 和 b 均为 double 型变量,且 a=5.5、b=2.5,则表达式(int) a +b/b 的值是( )。(分数:1.00)A.6.500000B.6C.5
21、.500000D.6.00000044.下列描述中正确的是( )。(分数:1.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,又是物理实体D.软件是程序、数据与相关文档的集合45.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。(分数:1.00)A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元46.以下程序中函数 f 的功能是: 当 flag 为 1 时,进行由小到大排序;当 flag 为 0 时,进行由大到小排序。void
22、f(int b, int n, int flag)int i, j, t; for (i=0; in-1; i+) for (j=i+1; jn; j+) if(flag ? b!j: bibj) t=bi; bi=bj; bj=t; main () int a10=5,4,3,2,1,6,7,8,9,10, i; f( f(a, 5, 1), for (i=0; i10; i+) printf(“%d,“, ai);程序运行后输出结果是( )。(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.3,4,5,6,7,2,1,8,9,10,C.5,4,3,2,1,6,7,8,9,
23、10,D.10,9,8,7,6,5,4,3,2,1,47.若在定义语句:int a, b, c,*p=c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )。(分数:1.00)A.scanf(“%d”a, b, ;B.scanf(“%d%d%d”,a, b, ;C.scanf(“%d”,;D.scanf(“%d”,;48.下列选项中不符合良好程序设计风格的是( )。(分数:1.00)A.源程序要文档化B.数据说明的次序要规范化C.避免滥用 goto 语句D.模块设计要保证高耦合、高内聚49.下列选项中正确的语句是( )。(分数:1.00)A.chars 8;s=“Beijing“;B.
24、char*s:s=Bei jing“);C.chars 8: s=“Bei jing“;D.char*s:s=“Bei jing“;50.已定义以下函数:fun (Char* p2, char* p1) while (*p2=*p1) != /0) p1+;p2+; 函数的功能是( )。(分数:1.00)A.将 p1 所指字符串复制到 p2 所指内存空间B.将 p1 所指字符串的地址赋给指针 p2C.对 p1 和 p2 两个指针所指字符串进行比较D.检查 p1 和 p2 两个指针所指字符串中是否有/0,二、B填空题/B(总题数:18,分数:36.00)51.在一个容量为 25 的循环队列中,若
25、头指针 front=16,尾指针 rear=9,则该循环队列中共有上U 【1】 /U个元素。(分数:2.00)填空项 1:_52.在面向对象方法中,类之间共享属性和操作的机制称为U 【2】 /U。(分数:2.00)填空项 1:_53.在数据库系统中,实现各种数据管理功能的核心软件称为U 【3】 /U。(分数:2.00)填空项 1:_54.在数据库的概念结构设计中,常用的描述工具是U 【4】 /U。(分数:2.00)填空项 1:_55.在 E-R 图中,矩形表示U 【5】 /U。(分数:2.00)填空项 1:_56.设有定义:int n,*k=n;以下语句将利用指针变量 k 读写变量 n 中的内
26、容,请将语句补充家整。 seanf(“%d“,U 【6】 /U); printf(“%d/n“,U 【7】 /U);(分数:2.00)填空项 1:_57.以下程序的运行结果是U 【8】 /U。 int k=0; void fun (int m) m+=k; k+=m; printf(“m=%d k=%d“,m,k+) main() int i=4; fun(i+); printf(“i=%d k=%d/n“,i,k); (分数:2.00)填空项 1:_58.有以下程序,若运行时从键盘输入:18,11回车,则程序的输出结果是U 【9】 /U。 main () int a, b; printf(“
27、Enter a, b:“); scanf(“%d, %d“, while(a!=b) while(ab)a-b; while(ba)b-a; printf(“%3d%3d/n“,a,b); (分数:2.00)填空项 1:_59.以下程序运行后的输出结果是U 【10】 /U。 main() char c1,c2; for(c1=0,c2=9;c1c2;c1+,c2-) printf(“%c%c“,c1,c2); printf(“/n“); (分数:2.00)填空项 1:_60.以下程序的输出结果是U 【11】 /U。 main() int s,i; for(s=0,i=1;13;i+,s+=i)
28、; printf(“%d/n“,s); (分数:2.00)填空项 1:_61.若有以下程序: int f (int x,int y) return(y-x)*x; main() int a=3,b=4,c=5,d; d=f(3,4),f(3,5); printf(“%d/n“,d); 执行后输出结果是U 【12】 /U。(分数:2.00)填空项 1:_62.fun 函数的功能是:首先对 a 所指的 N 行 N 列的矩阵,找出各行中的最大的数,再求这 N 个最大值中的最小的那个数作为函数值返回。请填空。 #include stdio. h #define N 100 int fun(int(*a
29、)N) int row, col, max, min; for(row=0;rowN;row+ for(max=arow0,col=1;colN;col+) if(U 【13】 /U)max=arowcol; if (row=0)min=max; else if (U 【14】 /U)min=max; return min; (分数:2.00)填空项 1:_63.以下程序运行后的输出结果是U 【15】 /U。 int f (int a,int n) if(n=1) return f(a,n-1)+an-1; else return 0; main() int aa5=1,2,3,4,5,s;
30、s=f(aa,5); printf(“%d/n“, s); (分数:2.00)填空项 1:_64.以下程序用来统计文件中字符个数。请填空。 #include “stdio. h“ main() FILE *fp;long num=OL; if(fp=fopen(“fname.dat“,“r“)=NULL) Pirntf(“Open error/n“); exit(0); while(U 【16】 /U) fgetc(fp);num+; printf(“num=%1d/n“,num-1); fclose(fp); (分数:2.00)填空项 1:_65.以下程序运行后的输出结果是U 【17】 /U
31、。 struct NODE int k; struct NODE *link; ;main() struct NODE m5,*p=m,*p=m,*q=m+4; int i=0; while(p!=q) p-k=+i; p+ q-k=i+; q-; q-k=i; for(i=0;i5;i+) printf(“%d“,mi.k); ptintf(“/n“); (分数:2.00)填空项 1:_66.下面程序由两个源程序文件:t4.h 和 t4.c 组成,程序编译运行的结果是:U 【18】 /U。 t4h 的源程序为: #define N 10 #denne f2(x) (x*N) t4c 的源程序
32、为: #include stdio. h #define M 8 #define f(x) (x)*M) #include “t4.h“ #main() int i, j; i=f(1+1); j=f2(1+1); printf(%d%d/n“,i, j); (分数:2.00)填空项 1:_67.以下程序的输出结果是U 【19】 /U。 #include stdio.h #define M 5 #define N M+M main() int k; k;N*N*5; printf(“%d/n“k); (分数:2.00)填空项 1:_68.若 fp 已下确定义为一个文件指针,d1.dat 为二进
33、制文件,请填空,以便为“读”而打开此文件:fp= fopen(U 【20】 /U);。(分数:2.00)填空项 1:_二级 C 语言笔试 91 答案解析(总分:86.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.有以下程序:#include string .hvoid f(char *s, char *t) char k; k=*s; *s=*t; *t=k; s+; t- -; if(*s) f(s, t);main() char str10=“abcdefg“,*p; p=str+strlen(str)/2+ 1; f(p,p-2); printf(“%
34、s/n“, str);程序运行后的输出结果是( )。(分数:1.00)A.abcdcfgB.gfedcba C.gbcdefaD.abedcfg解析:解析 本题定义的函数 f()是一个递归函数。它先交换两个字符指针所指的内容,然后将第 1 个指针往后移动位,第 2 个指针往前移动一位,如果第 1 个指针所指内容不是字符串结束标志,则递归调用自身。主函数中首先定义了个字符数组 sir10=“ahcdeft”然后定义了一个字符指针 p=str+ strlen(str)/2+1,即让 p 指向 str+4(或 int *y; *pt;int a=1,2, b=3,4;struct st c2=10,
35、a,20,b;pt=c; 以下选项中表达式的值为 11 的是( )。(分数:1.00)A.*pt-yB.pt-xC.+pt-x D.(pt+)-x解析:解析 要计算一个复杂的表达式时,首先要弄明白表达式中所有运算符的优先级与结合性,本题中所涉及的运算符中,-的优先级最高,*和+的优先级相同,但其结合性为从右至左。所以选项 A 等价于*pt-y)也就是 pt 所指向的结构体的成员指针变量 y 所指向的内容。从前面的程序段不难看出, pt指向结构体数组 c 的首地址,也就是指向它的第 1 个元素,在它的第 1 个元素中,指针变量 y 又被初始化为指向控型数组 a 的首地址,即指向数组 a 的第 1
36、 个元素。故选项 A 中的表达式的值为 a0,也就是 1。选项 B 中表达式的值就是 c0.x,即 10。根据优先级和结合性,选项 C 中的表达式等价于+(pt-x),由于是前缀+,所以整个表达式的值为 pt-x 的值加 1,故为 11。而选项 D 中,+是后缀形式,所以(pt+)的值还是 pt 的原值,即等于 pt-x 的值 10。故应该选择 C。4.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。(分数:1.00)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMS D.没有任何关系解析:解析 数据库管
37、理系统 DBMS 是数据库系统中实现各种数据管理功能的核心软件。它负责数据库中所有数据的存储、检索、修改以及安全保护等,数据库内的所有活动都是在其控制下进行的。所以,DBMS包含数据库 DB。操作系统、数据库管理系统与应用程序在一定的硬件支持下就构成了数据库系统 DBS。所以,DBS 包含 DBMS,也就包含 DB。5.下列叙述中正确的是( )。(分数:1.00)A.接口复杂的模块,其耦合程度一定低B.耦合程度弱的模块,其内聚程度一定低C.耦合程度弱的模块,其内聚程度一定高 D.上述 3 种说法都不对解析:解析 影响模块之间耦合的主要因素有两个:模块之间的连接形式,模块接口的复杂性。一般来说,
38、接口复杂的模块,其耦合程度要比接口简单的的模块强,所以选项 A 的说法错误:耦合程度弱的模块,其内聚程度一定高,选项 B 错误:选项 C 正确。6.有以下程序:mare()int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2) s+=* (t+ i); printf (“%d/n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.20C.25 D.36解析:解析 要获得数组 t 的第 i 个元素的内容,既可以使用常规的 ti表达式,也可以将数组名 t 看作一个指针常量,使用表达式*(t+ i)来获取数组 t 的第 i 个元素的内容。在本
39、题中,for 循环会循环 5次,循环变量 i 从。开始,每次加 2。所以,循环结束后,s 中的值为 t0+t2+t4+t6+t6+t8=1+3+ 5+7+9=25。故应该选择 C。7.有以下程序:int *flint *x, int *y) if(*x*y) return x; else return y;main() int a=7,b=8,*p,*q,*r; p= q= r=f(p, q); printf(“%d, %d, %d/n“,*p,*q,*r);执行后输出结果是( )。(分数:1.00)A.7,8,8B.7,8,7 C.8,7,7D.8,7,8解析:解析 本题定义了一个返回值为指
40、针的函数 f(),此函数有两个指针型的形参 x 和 y,该函数的功能,是返回 x 和 y 指向的变量中值较小的那个指针变量。主函数中定义了两个指针变量 p 和 q,并让它们指向了变量 a 和 b,调用函数 f(),返回指向的变量值较小的指针变量,r 的值为指针变量 p 的值(变量 a的地址),因此最后输出的*p、*q 和*r 的值是 7,8 和 7。所以,B 选项为所选。8.以下程序中函数 f 的功能是将 n 个字符串按由大到小的顺序进行排序。#include string. hvoid f(char p10,int n) chart20;int i,j; for(i=0;in-1;i+) f
41、or(j=i+1;jn; j+) if(strcmp(pi,pj0) strcpy(t, pi); strcpy(pi,pj);strcpy(pj,t);main() char p10=“abc“, “aabdfg“, “abbd“, “dcdbe“, “cd“; int i; f(p,5); printf(“%d/n“, strlen(p0); 程序运行后的输出结果是( )。(分数:1.00)A.6B.4C.5 D.3解析:解析 函数 f()的功能是利用选择法把个具有 n 行的二维数组中按行存放的 n 个字符串由大到小排序。在主函数中定义了一个二维字符数组 p 并给它按行赋初值,然后调用 f
42、()函数,把它按行从大到小排列。字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符大,该字符所在的字符串就是较大的字符串。由此可知最大的字符串为“dcdbe“,排序后存放在第一行,其首地址为 p0,在输出语句输出的 p0指向的字符串长度是 5。所以 4 个选项中 C 正确。9.有以下程序:street STU char num10; float score3; ;main() struct STU s3= “20021“,90,95,85, “20022“,95,80,75 , “20023“,100, 95, 90 ,*p=s, int i; float sum=0; for
43、(i=0;i3 ,i+) sum=sum+ p-scorei; printf(“%6.2f/n“,sum);程序运行后的输出结果是( )。(分数:1.00)A.260.00B.270.00 C.280.00D.285.00解析:解析 程序中首先定义了一个结构体,其成员为一字符数组和一浮点型数组。在 main()首先定义了一个结构体数组并初始化。接下来在 for 循环中遍历了结构体数组中的第一个元素中数组成员即“20021”,90,95,85”循环结果为 90+95+85=270 最后 sum 为 270,又输出格式为“%6.2f/n”要求保留两位小数故最后输出为 270.00。所以 4 个选项
44、中 B 正确。10.若变景均已正确定义井赋值,以下合法的 C 语言赋值语句是( ),(分数:1.00)A.x=y=5; B.x=n%2.5;C.x+ n=i;D.x=5=4+1;解析:解析 “%”运算符的作用是求模,意思是做除法求余,这就要求两个运算分量均为整数。选项 B中,2.5 不是整数,故非法;选项 C 中,表达式 x+n 计算后得到的是一临时值,临时值不能做左值,故非法;选项 D 中,由于“=”运算符的结合性是“从右到左”,故先计算 5=4+1,5 是常量不能做左值,故选项 D 也非法。选项 A,y=5 是一个逻辑表达式,其值为真或假,可以用做右值,所以是合法的。故本题应该选择 A。1
45、1.有定义语句:“int a=1,b=2,c=3,x;”,则以下选项中各程序段执行后,x 的值不为 3 的是( )。(分数:1.00)A.if(cx=1; else if (b x=2; else x=3;B.if(a3)x=3; else if (a2) x=2; else x=1;C.if(a3) x=3; if (a2) x=2; if (a1) x=1; D.if(ax=b; if (b x=c; if (c x=a;解析:解析 选项 A 首先判断 if 语句条件中表达式的值“31”为假,然后执行最近的 else 后面的语句,该 else 后面又为 if-else 语句,在这个 if-
46、else 语句中首先判断该 if 语句条件中表达式的值“21”为假,程序执行其最近的 else 后面的语句,将 3 赋值给 x。 选项 B 中首先判断 if 语句条件中表达式的值“13”为真,然后执行最近的 else 后面的语句“x=3”,后面的 else 不再执行,最后 x 的值为 3。 选项 C 中,首先选执行第一条 if 语句,由于“13”为真,执行此 if 后面的语句“x=3”,接着执行第二条 if 语句,由于“12”为真,执行此 if 后面的语句“x=2”,接着执行第三条 if 语句,由于“11”为假,后面的语句不执行,所以最后的 x 值为 2 不为 3。 选项 D 中,首先选执行第一条 if 语句,由于“ab”为真,执行此 if 后面的语句