1、二级 C 语言笔试-384 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.有以下程序,其中函数 f 的功能是将多个字符串按字典顺序排序: #includestringh voidf(char*p,intn) char*t;int i,j; for(i=0;in-1;i+) for (j=i+1;jn;j+) if(strcmp(pi,pj)0) t=pi; pi=pj; pj=t; main() char*p5=“abc“,“aabdfg“,“abbd“,“dcdbe“,“cd“; f(p,5); printf(“%d/n“,str
2、len(p1); 程序运行后的输出结果是_。(分数:2.00)A.2B.3C.6D.42.下列叙述中错误的是_。(分数:2.00)A.一个 C 语言程序只能实现一种算法B.C 程序可以由多个程序文件组成C.C 程序可以由一个或多个函数组成D.一个 C 函数可以单独作为一个 C 程序文件存在3.有以下程序: void f(int n,int * r) int r1=0; if(n%3=0)r1=n/3; else if(n%5=0)r1=n/5; else f(-n,&r1); *r=r1; main() intm=7,r; f(m,&r);printf(“%d/n“,r); 程序运行后的输出结
3、果是_。(分数:2.00)A.2B.1C.3D.04.以下数组定义中错误的是_。(分数:2.00)A.intx30;B.int x231,2,3,4,5,6);C.intx31,2,3,4,5,6;D.mtx231,2,3,4,5,6;5.有以下程序: #includestdio.h iht fun(iht n,int*p) int f1,f2; if(n=1|,n=2)*p=1; else fun(n-1,&f1);fun(n-2,&f2); *p=f1+f2; main() int s; fun(3,&s); printf(“%d/n“,s); 程序的运行结果是_。(分数:2.00)A.2
4、B.3C.4D.56.以下不能定义为用户标识符是_。(分数:2.00)A.MainB._0C._intD.sizeof7.以下对结构体类型变量 td 的定义中,错误的是_。(分数:2.00)A.typedef struct aa int n; float m; AA; AA td;B.struct aa int n; float m; td; struct aa td;C.struct int n; float m; aa;D.struct int n; float m; td; struct aa td;8.有以下程序: voidf(int*x,int * y) int t; t= *x;*
5、x= *y;*y=t; main() inta8=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q=&a7; while(p) f(p,q);p+;q-; for(i=0;i8;i+)printf(“%d,“,ai); 程序运行后的输出结果是_;(分数:2.00)A.8,2,3,4,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1,9.下列叙述中正确的是_。(分数:2.00)A.软件测试的主要目的是发现程序中的错误B.软件测试的主要目的是确定程序中错误的位置C.为了提高软件测试的效率,最好由程序编制者自己来完
6、成软件测试的工作D.软件测试是证明软件没有错误10.有以下程序,其中%u 表示按无符号整数输出: main() unsigned int x=0xFFFF;/* x 的初值为十六进制数*/ printf(“%u/n“,x); 程序运行后的输出结果是_。(分数:2.00)A.-1B.65535C.32767D.0XFFFF11.有以下函数: fun(char * a,char * b) while(*a!=/0)&(*b!=/0)&(*a=*b) a+;b+; return(* a-*b); 该函数的功能是_。(分数:1.00)A.计算 a 和 b 所指字符串的长度之差B.将 b 所指字符串连接
7、到 a 所指字符串中C.将 b 所指字符串连接到 a 所指字符串后面D.比较 a 和 b 所指字符串的大小12.有以下程序: #includestdio.h main() FILE *fp;int i,a6=1,2,3,4,5,6; fp=fopen(“d2.dat“,“w“); fprintf(fp,“%d%d%d/n“,a0,a1,a2); fprintf(fp,“%d%d%d/n“,a3,a4,a5); fclose(fp); fp=fopen(“d2.dat“,“r“); fscanf(fp,“%d%d/n“,&k,&n); printf(“%d%d/n“,k,n); fclose(f
8、p); 程序运行后的输出结果是_。(分数:1.00)A.1 2B.1 4C.123 4D.123 45613.已知字母 A 的 ASC代码值为 65,若变量 kk 为 char 型,以下不能正确判断出 kk 中的值为大写字母的表达式是_。(分数:1.00)A.kk=A&kk=ZB.!(kk=Akk=Z)C.(kk+32)=a&(kk+32)=zD.isalpha(k&(kk91)14.有三个关系 R、S 和 T 如下: (分数:1.00)A.并B.自然连接C.笛卡儿积D.交15.从工程管理角度,软件设计一般分为两步完成,它们是_。(分数:1.00)A.概要设计与详细设计B.数据设计与接口设计C
9、.软件结构设计与数据设计D.过程设计与数据设计16.以下叙述中错误的是_。(分数:1.00)A.C 语言是一种结构化程序设计语言B.结构化程序由顺序、分支、循环三种基本结构组成C.使用三种基本结构构成的程序只能解决简单问题D.结构化程序设计提倡模块化的设计方法17.下列选项中不符合良好程序设计风格的是_。(分数:1.00)A.源程序要文档化B.数据说明的次序要规范化C.避免滥用 goto 语句D.模块设计要保证高耦合、高内聚18.有以下程序: fun(int x,int y)return(x+y); main() int a=1,b=2,c=3,Sum; sum=fun(a+,b+,a+b),
10、c+); printf(“%d“,sum); 执行后的输出结果是_。(分数:1.00)A.6B.7C.8D.919.设有定义:char p1,2,3,*qp;,以下不能计算出一个 char 型数据所占字节数的表达式是_。(分数:1.00)A.sizeof(B.sizeof(chaC.sizeof(*D.sizeof(p0)20.设变量 x 和 y 均已正确定义并赋值,以下 if 语句中,在编译时将产生错误信息的是_。(分数:1.00)A.if(x+);B.if(xy&y!=0);C.if(xx- else y+:D.if(y0); else x+;21.下列描述中正确的是_。(分数:2.00)
11、A.软件工程只是解决软件项目的管理问题B.软件工程主要解决软件产品的生产率问题C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D.软件工程只是解决软件开发中的技术问题22.对下列二叉树: (分数:2.00)A.DYBEAFCZXB.YDEBFZXCAC.ABDYECFXZD.ABCDEFXYZ23.以下程序段中的变量已正确定义: for(i=0;i4;i+,i+) for(k=1;k3;k+); printf(“*“);程序段的输出结果是_。(分数:2.00)A.*B.*C.*D.*24.以下关于 typedef 的叙述错误的是_。(分数:2.00)A.用 typedef 可以增
12、加新类型B.typedef 只是将已存在的类型用一个新的名字来代表C.用 typedef 可以为各种类型说明一个新名,但不能用来为变量说明一个新名D.用 typedef 为类型说明一个新名,通常可以增加程序的可读性25.有以下函数: int fun(char * s) char * t=s; while(*t+); return(t-s) 该函数的功能是_。(分数:2.00)A.比较两个字符串的大小B.计算 s 所指字符串占用内存字节个数C.计算 s 所指字符串的长度D.将 s 所指字符串复制到字符串 t 中26.有以下程序: int a=4; int f(int n) int t=0;sta
13、tic int a=5; if(n%2) int a=6;t+=a+; elseint a;7;t+=a+; return t+a+; main() int s=a,i=0; for(;i2;i+)s+=f(i); printf(“%d/n“,s); 程序运行后的输出结果是_。(分数:2.00)A.24B.28C.32D.3627.若变量已正确定义,则以下语句的输出结果是_。 s=32;s=32;printf(“%d“,s);(分数:2.00)A.-1B.0C.1D.3228.若程序有宏定义:#define N 100 则以下叙述中正确的是_。(分数:2.00)A.宏定义中定义了标识符 N 的
14、值为整数 100B.在编译程序对 C 源程序进行预处理时用 100 替换标识符 NC.对 C 源程序进行编译时用 100 替换标识符 ND.在运行时用 100 替换标识符 N29.在数据库设计中,将 E-R 图转换成关系数据模型的过程属于_。(分数:2.00)A.需求分析阶段B.概念设计阶段C.逻辑设计阶段D.物理设计阶段30.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。(分数:2.00)A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不会占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元31.下列关于栈
15、的叙述正确的是_。(分数:2.00)A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据C.只能在栈底插入数据D.不能删除数据32.设有定义 int a;float b;执行 scanf(“%2d%f“,&a,&b);语句时,若从键盘输入 876543.0回车,a 和 b 的值分别是_。(分数:2.00)A.876 和 543.000000B.87 和 6.000000C.87 和 543.000000D.76 和 543.00000033.下列叙述中正确的是_。(分数:2.00)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量C.
16、数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关34.下列叙述中正确的是_。(分数:2.00)A.break 语句只能用于 switch 语句B.在 switch 语句中必须使用 defaultC.break 语句必须与 switch 语句中的 case 配对使用D.在 switch 语句中不一定使用 break 语句35.设变量已正确定义,则以下能正确计算 fn!的程序段是_。(分数:2.00)A.f=0; for(i=1;i=n;i+)f*=i;B.f=1; for(i=1;in;i+)f*=i;C.f=1; for(i=n;i1;i+)f*=i;D.f=1;
17、for(i=n;i=2;i-)f*=i;36.有以下程序: main() intp8=11,12,13,14,15,16,17,18,i=0,i=0; while(i+7)if(pi%2)j+=pi; printf(”%dn“,j); 程序运行后的输出结果是_。(分数:2.00)A.42B.45C.56D.6037.下列叙述中正确的是_。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率38
18、.若有定义:intw35,则以下不能正确表示该数组元素的表达式是_。(分数:2.00)A.*(*w+3)B.*(w+1)4C.*(*(w+1)D.*(&w00+1)39.若变量均已正确定义并赋值,以下合法的 C 语言赋值语句是_。(分数:2.00)A.x=y=5;B.x=n%2.5;C.x+n=iD.x=5=4+1;40.有以下程序: #includestdio.h main() char c1,c2,c3,c4,c5,c6; scanf(“%c%c%c%c“,&c1,&c2,&c3,&c4); c5=getchar();c6=getchar(); putchar(c1);putchar(c2
19、);printf(“%c%c/n“,c5,c6); 程序运行后,若从键盘输入(从第 1 列开始) 123回车 45678回车 则输出结果是_。(分数:2.00)A.1267B.1256C.1278D.1245二、B填空题/B(总题数:14,分数:30.00)41.对长度为 10 的线性表进行冒泡排序,对坏情况下需要比较的次数为 1(分数:2.00)填空项 1:_42.一棵二叉树第六层(根节点为第一层)的节点数最多为 1。(分数:2.00)填空项 1:_43.下列软件系统结构图的宽度为_。 (分数:2.00)填空项 1:_44.模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块
20、(桩模块)。其中 1 的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。(分数:2.00)填空项 1:_45.在数据库系统中,实现各种数据管理功能的核心软件称为 1。(分数:2.00)填空项 1:_46.定义 char ch“$“;int i=1,j;执行 j! ch&i+以后,i 的值为 1。(分数:2.00)填空项 1:_47.下列程序运行时输入 1234567CR,则输出结果是_。 #includestdio.h main() int a=1,b; scanf(“%2d%2d“,&a,&b);printf(“%d %d/n“, a,b); (分数:2.00)填空项 1:
21、_48.若有定义:int k;,以下程序段的输出结果是_。 for(k=2;k6;k+,k+)printf(“#%d“,k);(分数:2.00)填空项 1:_49.以下程序运行后的输出结果是_。 main() char c1,c2; for(c1=0,c2=9;c1c2;c1+,c2-)printf(“%c%c“,c1,c2); printf(“/n“); (分数:2.00)填空项 1:_50.以下程序的功能是输入任意整数给 n 后,输出 n 行由大写字母 A 开始构成的三角形字符阵列图形。例如,输入整数 5 时(注意:n 不得大于 10),程序运行结果如下: A B C D E F G H
22、I J K L M N O 请填空完成该程序。 main() int i,j,n;char ch=A; scanf(“%d“,&n); if(n11) for(i=1;i=n;i+) for(j=1;jn-i+1;j+) printf(“%2c“,ch); U 10 /U; U 11 /U; else printf(“n is too large!/n“) printf(“/n“); (分数:4.00)填空项 1:_51.以下程序的输出结果是_。 #includestdio.h main() inta5=2,4,6,8,10,*p; p=a; p+; printf(“%d“,* p); (分数
23、:2.00)填空项 1:_52.下面程序的运行结果是_。 #includestdio.h int f(inta,int n) if(n1) return a0+f(a+1,n-1); else return a0; main() int aa10=1,2,3,4,5,6,7,8,9,10,s; s=f(aa+2,4); printf(“%d/n“,s); (分数:2.00)填空项 1:_53.有以下程序: int sub(int n) return(n/10+n%10); main() int x,y; scanf(“%d“,&x); y=sub(sub(sub(x); printf(“%d/
24、n“,y); 若运行时输入:1234回车,程序的输出结果是_。(分数:2.00)填空项 1:_54.以下程序运行后的输出结果是_。 struct NODE int hum;struct NODE *next; ; main() structNODE s3=1,/0,2,/0,3,/0, *p, *q, *r; int sum=0; s0next=s+1;s1.next=s+2;s2.next=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:_二级
25、 C 语言笔试-384 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.有以下程序,其中函数 f 的功能是将多个字符串按字典顺序排序: #includestringh voidf(char*p,intn) char*t;int i,j; for(i=0;in-1;i+) for (j=i+1;jn;j+) if(strcmp(pi,pj)0) t=pi; pi=pj; pj=t; main() char*p5=“abc“,“aabdfg“,“abbd“,“dcdbe“,“cd“; f(p,5); printf(“%d/n“,strlen
26、(p1); 程序运行后的输出结果是_。(分数:2.00)A.2B.3C.6D.4 解析:解析 函数 f 的功能是将字符串数组中的每个字符串元素按照由小到大的顺序进行排列,调用f(p,5)后,字符串数组 p 变为“aabdfg”,“abbd”,“abc”,“cd”,“dcdbe”,所以最后输出p1即“abbd“的长度应为 4。2.下列叙述中错误的是_。(分数:2.00)A.一个 C 语言程序只能实现一种算法 B.C 程序可以由多个程序文件组成C.C 程序可以由一个或多个函数组成D.一个 C 函数可以单独作为一个 C 程序文件存在解析:解析 一个 C 语言程序可以实现多种算法。C 程序可包含一个或
27、多个函数,并可由多个程序文件组成。3.有以下程序: void f(int n,int * r) int r1=0; if(n%3=0)r1=n/3; else if(n%5=0)r1=n/5; else f(-n,&r1); *r=r1; main() intm=7,r; f(m,&r);printf(“%d/n“,r); 程序运行后的输出结果是_。(分数:2.00)A.2 B.1C.3D.0解析:解析 题目中定义了一个指针变量 r 作为形参 f()的函数。在主函数 main()中定义了两个变量 m和 r,同时给 m 赋初值 7,调用函数 f(m, &r)并执行,函数 f()通过指针 r 将最
28、后的值返回。4.以下数组定义中错误的是_。(分数:2.00)A.intx30;B.int x231,2,3,4,5,6); C.intx31,2,3,4,5,6;D.mtx231,2,3,4,5,6;解析:解析 二维数组赋初值时,第一个维数即行数可以省略,但是列数不能省略。因此选项 A、C 正确。选项 D 是按数据在二维数组中的顺序初始化。在选项 B 中,列维数的初始化格式跟定义的维数不一致,为错误选项。5.有以下程序: #includestdio.h iht fun(iht n,int*p) int f1,f2; if(n=1|,n=2)*p=1; else fun(n-1,&f1);fun
29、(n-2,&f2); *p=f1+f2; main() int s; fun(3,&s); printf(“%d/n“,s); 程序的运行结果是_。(分数:2.00)A.2 B.3C.4D.5解析:解析 本题考查的重点是理解递归函数。fun()为递归函数,递归结束条件时 n 为 1 或 2,从而fun(3,&s)得 fun(2,&s)+fun(1,&s)1+12,因此选项 A 是正确的。6.以下不能定义为用户标识符是_。(分数:2.00)A.MainB._0C._intD.sizeof 解析:解析 C 语言合法的用户标识符是:以字母或下划线开头,随后是字母、数字或下划线的任意长度的字符串。因此
30、选项 B 和 C 是合法的用户标识符。C 语言区分大小写,选项 A 的 Main 不同于 main,是合法的用户标识符。选项 D 的 sizeof 是 C 的保留关键字,不能用来做用户标识符。7.以下对结构体类型变量 td 的定义中,错误的是_。(分数:2.00)A.typedef struct aa int n; float m; AA; AA td;B.struct aa int n; float m; td; struct aa td;C.struct int n; float m; aa; D.struct int n; float m; td; struct aa td;解析:解析
31、本题的考点是 C 语言结构体的定义和自定义类型 typedef。对于选项 A,首先用 typedef 将结构体自定义为 AA,再用 AA 定义结构体变量 td 是正确的。对于选项 B 首先定义结构体类型 aa,再用struct aa 定义结构体变量 td 也是正确的。选项 D 直接用无名结构体定义结构体变量 td 也是正确的。而选项 C 中,首先用无名结构体定义了结构体变量 aa,再用结构体变量 aa 去定义结构体变量 td 是完全错误的。因此正确选项是 C。8.有以下程序: voidf(int*x,int * y) int t; t= *x;*x= *y;*y=t; main() inta8
32、=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q=&a7; while(p) f(p,q);p+;q-; for(i=0;i8;i+)printf(“%d,“,ai); 程序运行后的输出结果是_;(分数:2.00)A.8,2,3,4,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1, 解析:解析 本题的函数 f 是将两个指针所指的两个单元中的数值对换。指针 p 指向数组 a 的第一个元素 a0而指针 q 指向数组 a 的元素 a7。调用 f 将 p 和 q 所指元素值对换,也就是将 a0和 a7的值对换,对
33、换后结果分别是 8、1。P+指向 a1,q-指向 a6J,继续循环,调用 f 将 a1和 a 6交换,结果变成 7、1。以此类推,直到 p 和 q 相遇循环站束。数组 a 的值由1,2,3,4,5,6,7,8变成了8,7,6,5,4,3,2,1。输出 9 结果应该是:8, 7,6,5,4,3,2,1。9.下列叙述中正确的是_。(分数:2.00)A.软件测试的主要目的是发现程序中的错误 B.软件测试的主要目的是确定程序中错误的位置C.为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作D.软件测试是证明软件没有错误解析:解析 软件测试的目的:尽可能地多发现程序中的错误,不能也不可能证
34、明程序没有错误,软件测试是一个发现错误而执行程序的过程。软件调试的目的是发现错误的位置,并改正错误。10.有以下程序,其中%u 表示按无符号整数输出: main() unsigned int x=0xFFFF;/* x 的初值为十六进制数*/ printf(“%u/n“,x); 程序运行后的输出结果是_。(分数:2.00)A.-1B.65535 C.32767D.0XFFFF解析:解析 %u 的作用是按无符号的十进制形式输出整型数,整型无符号数的取值范围是在 065535之间,无符号数不能表示成小于 0 的负数,十六进制数 0xFFFF 转换为二进制数是 16 个 1,代表整数就是65535。
35、11.有以下函数: fun(char * a,char * b) while(*a!=/0)&(*b!=/0)&(*a=*b) a+;b+; return(* a-*b); 该函数的功能是_。(分数:1.00)A.计算 a 和 b 所指字符串的长度之差B.将 b 所指字符串连接到 a 所指字符串中C.将 b 所指字符串连接到 a 所指字符串后面D.比较 a 和 b 所指字符串的大小 解析:解析 本题的函数 fun 的最后一个语句是“return(*a-*b);”,也就是返回指针 a 所指单元的值与指针 b 所指单元的值的差。显然这不可能是计算 a 和 b 所指字符串的长度之差,因此选项 A 的
36、说法是错误的。由于函数中并没有出现。a*b 的赋值操作,所以选项 B 的连接字符串的说法也是错误的。同理,由于没有*a 现*a*b 的赋值操作,所以选项 C 的复制字符串的说法也是错误的。排除了三个选项后,就可以断定正确选项是 D。12.有以下程序: #includestdio.h main() FILE *fp;int i,a6=1,2,3,4,5,6; fp=fopen(“d2.dat“,“w“); fprintf(fp,“%d%d%d/n“,a0,a1,a2); fprintf(fp,“%d%d%d/n“,a3,a4,a5); fclose(fp); fp=fopen(“d2.dat“,
37、“r“); fscanf(fp,“%d%d/n“,&k,&n); printf(“%d%d/n“,k,n); fclose(fp); 程序运行后的输出结果是_。(分数:1.00)A.1 2B.1 4C.123 4D.123 456 解析:解析 本题首先以创建方式打开文件 d2.dat,两次调用 fprintf()函数把 a0、a1、a2、a3、a4、a5的值写到文件 d2.dat 中,文件 d2.dat 内容为“1,2,3回车4,5,6”。然后把该文件关闭再以只读方式打开,文件位置指向文件头,再通过 fscanf()函数从小读取两个整数到 k 和 n 中。13.已知字母 A 的 ASC代码值为
38、 65,若变量 kk 为 char 型,以下不能正确判断出 kk 中的值为大写字母的表达式是_。(分数:1.00)A.kk=A&kk=ZB.!(kk=Akk=Z) C.(kk+32)=a&(kk+32)=zD.isalpha(k&(kk91)解析:解析 本题主要考查逻辑运算。对于正确判断 kk 为大写字母的表达式,当表达式为真时 kk 为大写字母。大写字母的 ASCII 代码值在 6590 之间,对应的小写字母的 ASCII 代码值在 97122 之间,因此选项 A、C 都是正确的表达式。选项 D 中 isalpha(kk)用于判断 kk 是否是字母, ASCII 代码值小于 91的字母为大写
39、字母,因此选项 D 是正确的表达式。选项 B 中的表达式可以转换为 kkA&.kkZ,无法判断 kk 中的值是否为大写字母。14.有三个关系 R、S 和 T 如下: (分数:1.00)A.并B.自然连接C.笛卡儿积D.交 解析:解析 关系 R 与 S 的并为由届于 R 或属于 S 的元组构成的集合组合;关系 R 与 S 的笛卡儿积是一个 6 元关系,元素的个数是 236,由 R 与 S 的有序组组合而成;自然连接是连接的一个特例,要求两个关系有公共域,通过公共域的相等值进行连接。15.从工程管理角度,软件设计一般分为两步完成,它们是_。(分数:1.00)A.概要设计与详细设计 B.数据设计与接
40、口设计C.软件结构设计与数据设计D.过程设计与数据设计解析:解析 从工程管理角度来看软件设计一般分为两步完成,分别是概要设计和详细设计。16.以下叙述中错误的是_。(分数:1.00)A.C 语言是一种结构化程序设计语言B.结构化程序由顺序、分支、循环三种基本结构组成C.使用三种基本结构构成的程序只能解决简单问题 D.结构化程序设计提倡模块化的设计方法解析:解析 结构化程序由三种基本结构组成:顺序结构、循环结构、选择结构,已经证明,由三种基本结构组成的算法结构可以解决任何复杂问题。17.下列选项中不符合良好程序设计风格的是_。(分数:1.00)A.源程序要文档化B.数据说明的次序要规范化C.避免
41、滥用 goto 语句D.模块设计要保证高耦合、高内聚 解析:解析 程序设计的风格主要强调:清晰第一,效率第二。主要应注重和考虑下述一些因素:源程序文档化;数据说明,其主要包括数据说明的次序规范化、说明语句中变量安排有序化、使用注释来说明复杂数据的结构;语句的结构。在程序结构中各模块的内聚性越强,则耦合性越弱。优秀软件应高内聚,低耦合。18.有以下程序: fun(int x,int y)return(x+y); main() int a=1,b=2,c=3,Sum; sum=fun(a+,b+,a+b),c+); printf(“%d“,sum); 执行后的输出结果是_。(分数:1.00)A.6
42、B.7C.8 D.9解析:解析 在 fun(a+,b+,a+b),c+)函数中先计算括号内的“(a+,b+,a+b)”逗号运算符,整个逗号表达式最后的值为 5;接下来调用 fun()函数,此时原句变为 fun(5,c+)。运算 c+表示在使用完 c 后再将 c 的值加 1,函数的返回值为 8。19.设有定义:char p1,2,3,*qp;,以下不能计算出一个 char 型数据所占字节数的表达式是_。(分数:1.00)A.sizeof( B.sizeof(chaC.sizeof(*D.sizeof(p0)解析:解析 本题考查的重点是 sizeof()的运用。sizeof 用于返回其操作数(变量
43、、类型)相对应数据类型的字节数。因此,选项 A 是错误的,因为 p 是一个地址,它既不是一个数据类型,也不是数据变量。20.设变量 x 和 y 均已正确定义并赋值,以下 if 语句中,在编译时将产生错误信息的是_。(分数:1.00)A.if(x+);B.if(xy&y!=0);C.if(xx- else y+: D.if(y0); else x+;解析:解析 if 是 C 语言的关键字,表达式两侧的圆括号不能少,最后一条语句足用花括号括起来的一组语句。选项 A 和 B 是在表达式后面跟了一条空语句,选项 D 是在表达式后跟厂一组空语句。选项 C 中的x-是表达式而不是语句。所以在编泽时会出现错
44、误信息。21.下列描述中正确的是_。(分数:2.00)A.软件工程只是解决软件项目的管理问题B.软件工程主要解决软件产品的生产率问题C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则 D.软件工程只是解决软件开发中的技术问题解析:解析 软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程的目的就是要建造一个优良的软件系统,它所包含的内容概括为以下两点:软件开发技术,主要有软件开发方法学、软件工具、软件工程环境;软件工程管理,主要有软件管理、软件工程经济学。软件工程的主要思想是将工程化原则运用到软件开发过程,它包括 3 个要素:方法、工具和过
45、程。22.对下列二叉树: (分数:2.00)A.DYBEAFCZXB.YDEBFZXCAC.ABDYECFXZ D.ABCDEFXYZ解析:解析 二叉树的前序遍历(DLR):首先访问根结点,然后遍历左子树,最后遍历右子树。23.以下程序段中的变量已正确定义: for(i=0;i4;i+,i+) for(k=1;k3;k+); printf(“*“);程序段的输出结果是_。(分数:2.00)A.*B.*C.*D.* 解析:解析 本题考杏 for 循环语句中嵌套 for 循环语句的情况。由于第一个 for 语句没有具体的执行语句,故当 i0 时,k1 时,执行一次语句 printf(“*”);,程序便会跳出整个循环,故运行结果为一个星号。24.以下关于 typedef 的叙述错误的是_。(分数:2.00)A.用