1、二级 C语言-71 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:40.00)1.程序流程图中带有箭头的线段表示的是_。 A.图元关系 B.数据流 C.控制流 D.调用关系(分数:1.00)A.B.C.D.2.结构化程序设计的基本原则不包括_。 A.多态性 B.自顶向下 C.模块化 D.逐步求精(分数:1.00)A.B.C.D.3.软件设计中模块划分应遵循的准则是_。 A.低内聚低耦合 B.高内聚低耦合 C.低内聚高耦合 D.高内聚高耦合(分数:1.00)A.B.C.D.4.在软件开发中,需求分析阶段产生的主要文档是_。 A.可行性分析报告 B.软
2、件需求规格说明书 C.概要设计说明书 D.集成测试计划(分数:1.00)A.B.C.D.5.算法的有穷性是指_。 A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的 C.算法程序的长度是有限的 D.算法只能被有限的用户使用(分数:1.00)A.B.C.D.6.对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n-1)/2的排序方法是_。 A.快速排序 B.冒泡排序 C.直接插入排序 D.堆排序(分数:1.00)A.B.C.D.7.下列关于栈的叙述正确的是_。 A.栈按“先进先出”组织数据 B.栈按“先进后出”组织数据 C.只能在栈底插入数据 D.不能删除数据(分数:1.
3、00)A.B.C.D.8.在数据库设计中,将 E-R图转换成关系数据模型的过程属于_。 A.需求分析阶段 B.概念设计阶段 C.逻辑设计阶段 D.物理设计阶段(分数:1.00)A.B.C.D.9.有三个关系 R、S 和 T如下: RB C Da 0 k1b 1 n1SB C Df 3 h2a 0 k1n 2 x1TB C Da 0 k1由关系 R和 S通过运算得到关系 T,所使用的运算为_。 A.并 B.自然连接 C.笛卡儿积 D.交(分数:1.00)A.B.C.D.10.设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成
4、绩),则表 SC的关键字(键或码)为_。 A.课号,成绩 B.学号,成绩 C.学号,课号 D.学号,姓名,成绩(分数:1.00)A.B.C.D.11.下列叙述中错误的是_。 A.一个 C语言程序只能实现一种算法 B.C程序可以由多个程序文件组成 C.C程序可以由一个或多个函数组成 D.一个 C函数可以单独作为一个 C程序文件存在(分数:1.00)A.B.C.D.12.以下选项中,能用作数据常量的是_。 A.115L B.0118 C.1.5e1.5 D.o115(分数:1.00)A.B.C.D.13.按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是_。 A.下划线 B.大写字母 C
5、.数字字符 D.连接符(分数:1.00)A.B.C.D.14.设变量已正确定义并赋值,以下正确的表达式是_。 A.x=y+z+5,+y B.int(15.8%5) C.x=y*5=x+z D.x=25%5.0(分数:1.00)A.B.C.D.15.设有定义“int x=2;”,以下表达式中,值不为 6的是_。 A.x+,2*x B.2*x,x+=2 C.x*=(1+x) D.x*=x+1(分数:1.00)A.B.C.D.16.有以下程序#include stdio.hmain() int x,y,z;x=y=1;z=x+,y+,+y;printf(“%d,%d,%d/n“,x,y,z);程序运
6、行后的输出结果是_。 A.2,3,1 B.2,3,2 C.2,3,3 D.2,2,1(分数:1.00)A.B.C.D.17.有以下程序#include stdio.hmain() char c1,c2;c1=A+8-4;c2=A+8-5;printf(“%c,%d/n“,c1,c2);已知字母 A的 ASCII码为 65,程序运行后的输出结果是_。 A.E,D B.D,69 C.E,68 D.输出无定值(分数:1.00)A.B.C.D.18.若有定义“int x,y;”并已正确给变量赋值,则以下选项中与表达式“(x-y)?(x+):(y+)”中的条件表达式“(x-y)”等价的是_。 A.(x-
7、y0x-y0) B.(x+y0) C.(x-y0) D.(x-y=0)(分数:1.00)A.B.C.D.19.有以下程序#include stdio.hmain() int x=1,y=0;if(!x) y+;else if(x=0)if(x) y+=2;else y+=3;printf(“%d/n“,y);程序运行后的输出结果是_。 A.3 B.2 C.1 D.0(分数:1.00)A.B.C.D.20.若有定义“float x=1.5;int a=1,b=3,c=2;”,则正确的 switch语句是_。 A.switch(a+b) case 1: printf(“*/n“);case 2+1
8、: printf(“*/n“); B.switch(int)x); case 1: printf(“*/n“);case 2: printf(“*/n“); C.switch(x) case 1.0: printf(“*/n“);case 2.0: printf(“*/n“); D.switch(a+b) case 1: printf(“*/n“);case c: printf(“*/n“);(分数:1.00)A.B.C.D.21.有以下程序#include stdio.hmain() int y=9;for( ;y0;y-)if(y%3=0) printf(“%d“,-y);程序的运行结果是
9、_。 A.852 B.963 C.741 D.875421(分数:1.00)A.B.C.D.22.有以下程序#include stdio.hmain() 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);程序运行后的输出结果是_。 A.m=4 B.m=2 C.m=6 D.m=5(分数:1.00)A.B.C.D.23.有以下程序#include stdio.hint fun(int x,int y) if(x!=y) return(x+y)/2);else return(x);ma
10、in() int a=4,b=5,c=6;printf(“%d/n“,fun(2*a,fun(b,c);程序运行后的输出结果是_。 A.6 B.3 C.8 D.12(分数:1.00)A.B.C.D.24.有以下程序#include stdio.hint add(int a,intB)return(a+b);main() int k,(*f)(),a=5,b=10;f=add;.则以下函数调用语句错误的是_。 A.k=f(a,b); B.k=add(a,b); C.k=(*f)(a,b); D.k=*f(a,b);(分数:1.00)A.B.C.D.25.有以下程序#include stdio.h
11、main() int n,*p=NULL;*p=printf(“Input n:“); scanf(“%d“, printf(“output n:“); printf(“%d/n“,p);该程序试图通过指针 p为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是_。 A.int n,*p=NULL; B.*p= C.scanf(“%d“,(分数:1.00)A.B.C.D.26.下列定义数组的语句中,正确的是_。 A.int N 10int xN; B.#define N=10;int xN; C.int x010; D.int x;(分数:1.00)A.B.C.D.27.有以下程序#i
12、nclude stdio.hmain() int a=2,3,5,4,i;for(i=0;i4;i+)switch(i%2) case 0:switch(ai%2) case 0:ai+;break;case 1:ai-;break;case 1:ai=0;for(i=0;i4;i+)printf(“%d“,ai);printf(“/n“);程序运行后的输出结果是_。 A.3 0 4 0 B.2 0 5 0 C.3 3 4 4 D.0 3 0 4(分数:1.00)A.B.C.D.28.有以下程序#include stdio.hmain() int b33=0,1,2,0,1,2,0,1,2,i
13、,j,t=1;for(i=0;i3;i+)for(j=i;j=i;j+) t+=bibji;printf(“%d/n“,t);程序运行后的输出结果是_。 A.3 B.4 C.1 D.9(分数:1.00)A.B.C.D.29.以下语句中存在语法错误的是_。 A.char ss620;ss1=“right?“; B.char ss20=“right?“); C.char *ss6;ss1=“right?“; D.char *ss=“right?“;(分数:1.00)A.B.C.D.30.以下不能将 s所指字符串正确复制到 t所指存储空间的是_。 A.while(*t=*s)t+;s+;) B.fo
14、r(i=0;ti=si;i+); C.do*t+=*s+; while(*s); D.for(i=0,j=0;ti+=sj+;);(分数:1.00)A.B.C.D.31.有以下程序#include stdio.hvoid swap(char *x,char *y) char t;t=*x;*x=*y;*y=t;main() char *s1=“abc“,*s2=“123“;swap(s1,s2); printf(“%s,%s/n“,s1,s2);程序执行后的输出结果是_。 A.1bc,a23 B.abc,123 C.123,abc D.321,cba(分数:1.00)A.B.C.D.32.有以
15、下函数int fun(char *x,char *y) int n=0;while(*x=*y)y+;n+;return n;函数的功能是_。 A.统计 x和 y所指字符串中最前面连续相同的字符个数 B.查找 x和 y所指字符串中是否有/0 C.将 y所指字符串赋给 x所指存储空间 D.统计 x和 y所指字符串中相同的字符个数(分数:1.00)A.B.C.D.33.有以下程序#include stdio.hint 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“,
16、s);程序运行后的输出结果是_。 A.30 B.10 C.0 D.64(分数:1.00)A.B.C.D.34.在一个 C源程序文件中所定义的全局变量,其作用域为_。 A.所在文件的全部范围 B.所在程序的全部范围 C.所在函数的全部范围 D.由具体定义位置和 extern说明来决定范围(分数:1.00)A.B.C.D.35.以下叙述中错误的是_。 A.用 typedef定义新的类型名后,原有类型名仍有效 B.可以用 typedef将已存在的类型用一个新的名字来代表 C.可以通过 typedef增加新的类型 D.用 typede可以为各种类型起别名,但不能为变量起别名(分数:1.00)A.B.C
17、.D.36.有以下程序#include stdio.hstruct Sint a,b; data2=10,100,20,200);main() struct S p=data1;printf(“%d/n“,+(p.A);程序运行后的输出结果是_。 A.21 B.11 C.20 D.10(分数:1.00)A.B.C.D.37.有以下程序#include stdio.h#define PT 3.5;#define S(x) PT*x*x;main() int a=1,b=2; printf(“%4.1f/n“,S(a+b);程序运行后的输出结果是_。 A.31.5 B.程序有错无输出结果 C.7.
18、5 D.14.0(分数:1.00)A.B.C.D.38.有以下程序#include stdio.hmain() unsigned char a=2,b=4,c=5,d;d=a|b; d printf(“%d/n“,d);程序运行后的输出结果是_。 A.4 B.3 C.5 D.6(分数:1.00)A.B.C.D.39.有以下程序#include stdio.h#include stdlib.hmain() int *a,*b,*c;a=b=c=(int*)malloc(sizeof(int);*a=1;*b=2,*c=3;a=b;printf(“%d,%d,%d/n“,*a,*b,*c);程序运
19、行后的输出结果是_。 A.1,1,3 B.2,2,3 C.1,2,3 D.3,3,3(分数:1.00)A.B.C.D.40.以下叙述中正确的是_。 A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失 B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 D.C语言中的文件是流式文件,因此只能顺序存取数据(分数:1.00)A.B.C.D.二、B程序填空题/B(总题数:1,分数:20.00)41.给定程序中,函数 fun的功能是:找出 100至 x(x999)之间各位上
20、的数字之和为 15的所有整数,然后输出;符合条件的整数个数作为函数值返回。 例如,当 x值为 500时,各位数字之和为 15的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492,共有 26个。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include stdio.h int fun(int x) int
21、 n,s1,s2,s3,t; /*found*/ n=U U /U /U; t=100; /*found*/ while(t=U U /U /U) s1=t%10;s2=(t/10)%10;s3=t/100; if(s1+s2+s3=15) printf(“%d“,t); n+; /*found*/ U U /U /U; return n; main() int x=-1; while(x999x0) printf(“Please input(0x=999):“); scanf(“%d“,printf(“/nThe result is:%d/n“,fun(x); (分数:20.00)填空项 1
22、:_三、程序改错题(总题数:1,分数:20.00)42.给定程序 MODI1.C中函数 fun的功能是:先将 s所指字符串中的字符按逆序存放到 t所指字符串中,然后把 s所指串中的字符按正序连接到 t所指串的后面。 例如:当 s所指的字符串为:“ABCDE”时,则t所指的字符串应为:“EDCBAABCDE”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include stdio.h #include string.h void fun (char *s,char *t) /*found*/ int i; i
23、=0; sl=strlen(s); for(;isl;i+) /*found*/ ti=ssl-i; for(i=0;isl;i+) tsl+i=si; t2*sl=/0; main() char s100,t100; printf(“/nPlease enter string s:“);scanf(“%s“,s); fun(s,t); printf(“The result is:%s/n“,t); (分数:20.00)_四、程序设计题(总题数:1,分数:20.00)43.函数 fun的功能是:将 a、b 中的两个两位正整数合并形成一个新的整数放在 c中。合并的方式是:将a中的十位和个位数依次
24、放在变量 c的百位和个位上,b 中的十位和个位数依次放在变量 c的千位和十位上。 例如,当 a=45,b=12,调用该函数后,c=1425。 注意:部分源程序存在文件 PROG1.C中。数据文件 IN.DAT中的数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include stdio.h void fun(int a,int b,long *c main()/*主函数*/ int a,b;long c; printf(“Input a b:“); scanf(“%d%d“, fun(a,b, printf(“T
25、he result is:%ld/n“,c); (分数:20.00)_二级 C语言-71 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:40.00)1.程序流程图中带有箭头的线段表示的是_。 A.图元关系 B.数据流 C.控制流 D.调用关系(分数:1.00)A.B.C. D.解析:解析 在数据流图中,用标有名字的带箭头线段表示数据流。在程序流程图中,用标有名字的带箭头线段表示控制流,因此本题答案为 C。2.结构化程序设计的基本原则不包括_。 A.多态性 B.自顶向下 C.模块化 D.逐步求精(分数:1.00)A. B.C.D.解析:解析 结构化程序
26、设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,多态性是面向对象的程序设计的思想,因此本题答案为 A。3.软件设计中模块划分应遵循的准则是_。 A.低内聚低耦合 B.高内聚低耦合 C.低内聚高耦合 D.高内聚高耦合(分数:1.00)A.B. C.D.解析:解析 软件设计中,模块划分应遵循的准则是高内聚低耦合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的准则,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性高,易于理解和维护。模块之间的耦合应尽可能地低,模块的内聚应尽可能地高,因此本题答案为 B。4.在软件开发中,需求分析阶段产生的主要文档是
27、_。 A.可行性分析报告 B.软件需求规格说明书 C.概要设计说明书 D.集成测试计划(分数:1.00)A.B. C.D.解析:解析 A 错误,可行性分析阶段产生可行性分析报告。C 错误,总体设计阶段产生概要设计说明书。D错误,集成测试计划是在概要设计阶段编写的文档。B 正确,需求规格说明书是需求分析阶段产生的主要文档,是后续工作如设计、编码等需要的重要参考文档。5.算法的有穷性是指_。 A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的 C.算法程序的长度是有限的 D.算法只能被有限的用户使用(分数:1.00)A. B.C.D.解析:解析 算法原则上能够精确地运行,而且人们用
28、笔和纸做有限次运算后即可完成。算法的有穷性是指算法程序的运行时间是有限的,因此本题答案为 A。6.对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n-1)/2的排序方法是_。 A.快速排序 B.冒泡排序 C.直接插入排序 D.堆排序(分数:1.00)A.B.C.D. 解析:解析 快速排序、冒泡排序和直接插入排序在最坏情况下,比较次数都是 n(n-1)/2,堆排序在最坏情况下的比较次数最少,是 O(log2n),因此本题答案为 D。7.下列关于栈的叙述正确的是_。 A.栈按“先进先出”组织数据 B.栈按“先进后出”组织数据 C.只能在栈底插入数据 D.不能删除数据(分数:1.00)A.
29、B. C.D.解析:解析 栈是只允许在同一端进行插入和删除运算的线性表,按“先进后出”组织数据,因此本题答案为 B。8.在数据库设计中,将 E-R图转换成关系数据模型的过程属于_。 A.需求分析阶段 B.概念设计阶段 C.逻辑设计阶段 D.物理设计阶段(分数:1.00)A.B.C. D.解析:解析 将 E-R图转换成关系数据模型是把图形分析出来的联系反映到数据库中,即设计出表,因此属于逻辑设计阶段,答案为 C。9.有三个关系 R、S 和 T如下: RB C Da 0 k1b 1 n1SB C Df 3 h2a 0 k1n 2 x1TB C Da 0 k1由关系 R和 S通过运算得到关系 T,所
30、使用的运算为_。 A.并 B.自然连接 C.笛卡儿积 D.交(分数:1.00)A.B.C.D. 解析:解析 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,因此 B错误。笛卡儿积是用 R集合中的元素为第一元素,S 集合中的元素为第二元素构成的有序对,因此 C错误。根据关系 T可以很明显地看出是从关系 R与关系 S中取得相同的关系组,所以使用的是交运算,选择 D。10.设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成绩),则表 SC的关键字(键或码)为_。 A
31、.课号,成绩 B.学号,成绩 C.学号,课号 D.学号,姓名,成绩(分数:1.00)A.B.C. D.解析:解析 学号是学生表 S的主键,课号是课程表 C的主键,因此选课表 SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,故本题答案为 C。11.下列叙述中错误的是_。 A.一个 C语言程序只能实现一种算法 B.C程序可以由多个程序文件组成 C.C程序可以由一个或多个函数组成 D.一个 C函数可以单独作为一个 C程序文件存在(分数:1.00)A. B.C.D.解析:解析 一个 C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C语言程序可以实现多种算法。12.
32、以下选项中,能用作数据常量的是_。 A.115L B.0118 C.1.5e1.5 D.o115(分数:1.00)A. B.C.D.解析:解析 选项中 115L表示 115是长整型数据,合法。B 选项是八进制常量的表示方法,但是在八进制中不能含有数字 8,因此 B选项错误。C 选项中 e后面应该是整数,不能是小数(1.5),因此 C选项错误。D选项中八进制常量应该是以数字“0”开始,而不是以字母“o”开始。故本题答案为 A。13.按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是_。 A.下划线 B.大写字母 C.数字字符 D.连接符(分数:1.00)A.B.C.D. 解析:解析 C
33、 语言中标识符由字母、下划线或数字组成,且开头必须是字母或下划线。因此 D选项中的连接符不合法。14.设变量已正确定义并赋值,以下正确的表达式是_。 A.x=y+z+5,+y B.int(15.8%5) C.x=y*5=x+z D.x=25%5.0(分数:1.00)A. B.C.D.解析:解析 B 与 D选项中取模运算符%的左右两个操作数均应为整数,因此 B、D 选项错误。C 选项中不能将 x+z的值赋给表达式 y*5,因此 C选项错误。故本题答案为 A。15.设有定义“int x=2;”,以下表达式中,值不为 6的是_。 A.x+,2*x B.2*x,x+=2 C.x*=(1+x) D.x*
34、=x+1(分数:1.00)A.B. C.D.解析:解析 选项 B中,2*x 对 x的值没有影响,x 仍为 2,“x+=2”执行后,表达式值为 4。故本题答案为 B。16.有以下程序#include stdio.hmain() int x,y,z;x=y=1;z=x+,y+,+y;printf(“%d,%d,%d/n“,x,y,z);程序运行后的输出结果是_。 A.2,3,1 B.2,3,2 C.2,3,3 D.2,2,1(分数:1.00)A. B.C.D.解析:解析 对于表达式“z=x+,y+,+y;”,因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式改成“(z=x+),(y+),
35、(+y)”。然后从左向右先计算表达式 z=x+,因为 x+先使用后自增,所以 z的值为 1,x 的值为 2。再计算逗号表达式第二个表达式 y+,此时 y的值为 1,y+的值为 2。最后计算第三个表达式+y,y 的值为 3,故本题答案为 A。17.有以下程序#include stdio.hmain() char c1,c2;c1=A+8-4;c2=A+8-5;printf(“%c,%d/n“,c1,c2);已知字母 A的 ASCII码为 65,程序运行后的输出结果是_。 A.E,D B.D,69 C.E,68 D.输出无定值(分数:1.00)A.B.C. D.解析:解析 本题中字符变量 c1是字
36、符A的 ASCII码加上 4,即 69所对应的字符E。字符变量 c2是字符A的 ASCII码加上 3,即 68所对应的字符D。但是打印输出时,c1 以%c 的格式输出,因此是E,c2 以%d 的格式输出,因此是 68。故本题答案为 C。18.若有定义“int x,y;”并已正确给变量赋值,则以下选项中与表达式“(x-y)?(x+):(y+)”中的条件表达式“(x-y)”等价的是_。 A.(x-y0x-y0) B.(x+y0) C.(x-y0) D.(x-y=0)(分数:1.00)A. B.C.D.解析:解析 条件表达式:x=表达式 1? 表达式 2:表达式 3的含义是:先求解表达式 1,若其值
37、为非0(真),则求解表达式 2,将表达式 2的值赋给 x,若表达式 1的值为 0(假),则求解表达式 3,将表达式3的值赋给 x。在本题中与表达式(x-y)等价的是“(x-y0x-y0)”,A 选项正确。19.有以下程序#include stdio.hmain() int x=1,y=0;if(!x) y+;else if(x=0)if(x) y+=2;else y+=3;printf(“%d/n“,y);程序运行后的输出结果是_。 A.3 B.2 C.1 D.0(分数:1.00)A.B.C.D. 解析:解析 在 if else语句中 else总是与离它最近的 if配对。本题目中 x为 1,因
38、此“!x”为 0,所以执行 else if语句中的内容,判断“x=0”是否成立,因为 x为 1,所以条件不成立,因此 else if内部的“if.else”语句不再执行,所以 y的值还是初始值 0。20.若有定义“float x=1.5;int a=1,b=3,c=2;”,则正确的 switch语句是_。 A.switch(a+b) case 1: printf(“*/n“);case 2+1: printf(“*/n“); B.switch(int)x); case 1: printf(“*/n“);case 2: printf(“*/n“); C.switch(x) case 1.0: p
39、rintf(“*/n“);case 2.0: printf(“*/n“); D.switch(a+b) case 1: printf(“*/n“);case c: printf(“*/n“);(分数:1.00)A. B.C.D.解析:解析 B 选项的“switch(int)x);”语句中不应该有最后的分号。“switch(expr1)”中的 expr1不能用浮点类型或 long类型,也不能为一个字符串,因此 C错误。case 后面只能是常量表达式,因此 D错误。21.有以下程序#include stdio.hmain() int y=9;for( ;y0;y-)if(y%3=0) printf
40、(“%d“,-y);程序的运行结果是_。 A.852 B.963 C.741 D.875421(分数:1.00)A. B.C.D.解析:解析 第一次执行 for循环,y 的值为 9,y%3 的值为 0,满足条件打印,所以执行“-y”语句,即先减 1后打印,因此打印 8;第二次执行 for循环,y 的值为 7,y%3 的值为 1,不执行打印语句;第三次执行 for循环,y 的值为 6,y%3 的值为 0,满足条件打印,所以执行“-y”语句,即先减 1后打印,因此打印 5;第四次执行 for循环,y 的值为 4,不满足 if条件,不执行打印语句;第五次执行 for循环,y的值为 3,满足 if条件
41、,打印输出 2;第六次执行 for循环,y 的值为 1,不满足条件,不执行打印语句。故本题答案为 A。22.有以下程序#include stdio.hmain() 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);程序运行后的输出结果是_。 A.m=4 B.m=2 C.m=6 D.m=5(分数:1.00)A.B.C. D.解析:解析 第一次外循环 i的值为 1,第一次内循环 j的值为 3,不满足条件,则执行“m*=i*j”,即m的值为 3;第二次 j的值为 2,不满足条件,则执行
42、“m*=i*j”,即 m的值为 6;第三次 j的值为 1,不满足条件,则执行“m*=i*j”,即 m的值仍为 6。第二次外循环 i的值为 2,j 的值为 3,满足条件,执行break语句,跳出循环。故本题答案为 C。23.有以下程序#include stdio.hint 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);程序运行后的输出结果是_。 A.6 B.3 C.8 D.12(分数:1.00)A. B.C.D.解析:解析
43、本题中第一次调用为“fun(8,fun(5,6)”,因为“fun(5,6)”返回值为 5,所以第二次调用为“fun(8,5)=6”,因此选择 A。24.有以下程序#include stdio.hint add(int a,intB)return(a+b);main() int k,(*f)(),a=5,b=10;f=add;.则以下函数调用语句错误的是_。 A.k=f(a,b); B.k=add(a,b); C.k=(*f)(a,b); D.k=*f(a,b);(分数:1.00)A.B.C.D. 解析:解析 D 选项中“*f(a,b)”表示调用后返回一个指向整型数据的地址指针,即该函数的返回值
44、为指针类型,因此不能将其赋值给整型变量 k。25.有以下程序#include stdio.hmain() int n,*p=NULL;*p=printf(“Input n:“); scanf(“%d“, printf(“output n:“); printf(“%d/n“,p);该程序试图通过指针 p为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是_。 A.int n,*p=NULL; B.*p= C.scanf(“%d“,(分数:1.00)A. B.C.D.解析:解析 选项 B的正确写法应为“p=”,选项 C的正确写法应为“scanf(“%d“,p);”,选项 D的正确写法应为“printf(“%din“,*p);”。故本题答案为 A。26.下列定义数组的语句中,正确的是_。 A.int N 10int xN; B.#define N=1