1、国家二级(C 语言)机试模拟试卷 154及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列叙述中正确的是( )。(分数:2.00)A.循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B.循环队列中的元素个数随队头指针的变化而动态变化C.循环队列中的元素个数随队尾指针的变化而动态变化D.以上说法都不对2.下列关于栈的叙述中,正确的是( )。(分数:2.00)A.栈底元素一定是最后入栈的元素B.栈顶元素一定是最先入栈的元素C.栈操作遵循“先进后出”的原则D.以上说法均错误3.设某二叉树的后序序列为 CBA,中序序列为 ABC,则该二叉树
2、的前序序列为( )。(分数:2.00)A.BCAB.CBAC.ABCD.CAB4.结构化程序设计主要强调的是( )。(分数:2.00)A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序易读性5.为了使模块尽可能独立,要求( )。(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块问的耦合程度要尽量弱C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强6.在结构化方法中,软件功能属于软件开发中的( )阶段。(分数:2.00)A.详细设计B.需求分析C.总体设计D.编程调
3、试7.下列叙述中正确的是( )。(分数:2.00)A.程序执行的效率与数据的存储结构密切相关B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上说法均错误8.关系数据库管理系统所管理的关系是( )。(分数:2.00)A.若干个二维表B.一个 DBF文件C.一个 DBC文件D.若干个 DBC文件9.结构化程序设计中,下面对 goto语句使用描述正确的是( )。(分数:2.00)A.禁止使用 goto语句B.使用 goto语句程序效率高C.应避免滥用 goto语句D.以上说法均错误10.设有如下三个关系表: (分数:2.00)A.T=RSB.T=RSC.T=RS
4、D.T=RS11.以下选项中合法的标识符是( )。(分数:2.00)A._11B.11C.1_1D.1_12.以下叙述中错误的是( )。(分数:2.00)A.C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件B.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令C.用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本文件中D.C语言源程序经编译后生成后缀为obj 的目标程序13.若有定义:int a=0,b=0,c=0,d=0;,有 C语言表达式(a+&b+)?c+:d+,以下关于其执行顺序的叙述中正确是( )。(分数:2.00)A.先执
5、行 a+,表达式 a+的值为 0,由此即可确定(a+&b+)值为 0,因此执行 d+B.先执行 a+,表达式 a+的值为 0;再执行 b+,表达式 b+的值为 0,由此可确定(a+&b+)值为 0,因此执行 d+C.先执行 a+,表达式 a+的值为 1;再执行 b+,表达式 b+的值为 1,由此可确定(a+&b+)值为 1,因此执行 c+D.先执行 b+,表达式 b+的值为 1;再执行 a+,表达式 a+的值为 1,由此可确定(a+&b+)值为 1,因此执行 c+14.表达式:(int)(double)92)一(9)2 的值是( )。(分数:2.00)A.0B.3C.4D.515.以下选项中叙
6、述正确的是( )。(分数:2.00)A.函数体必须由开始B.C程序必须由 mflin语句开始C.C程序中的注释可以嵌套D.C程序中的注释必须在一行里完成16.若有以下程序段: int r=8: printf(“dn“,r1); 输出结果是( )。(分数:2.00)A.16B.8C.4D.217.以下能对一维数组 a进行初始化的语句是( )。(分数:2.00)A.int a5=(0,1,2,3,4);B.int a(5)=;C.int a3=0,1,2;D.int a5=10*1;18.若有定义:int a;float b;double c;,程序运行时输入:1 2 3回车,能把 1输入给变量
7、a、把 2输入给变量 b、把 3输入给变量 c的输入语句是( )。(分数:2.00)A.scanf(“d f lf“,&a,&b,&c);B.scanf(“dflf“,&a,&b,&c);C.scanf(“d lflf“,&a,&b,&c);D.scanf(“d f f“,&a,&b,&c);19.下列数据中属于“字符串常量”的是( )。(分数:2.00)A.aB.ABCC.abc0D.a20.当变量 C的值不为 2、4、6 时,值为“真”的表达式是( )。(分数:2.00)A.(c=2)(c=4)(c=6)B.(c=2&c=6)(c!一 3)(c!=5)C.(c=2&c=6)&!(c2)D.
8、(c=2&c=6)&(c2!=1)21.有以下程序: #includestdioh main() float a,b,c,t; a=3;b=7;c=1; if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(“52f,52f,52f“,a,b,c); 程序运行后的输出结果是(其中口代表空格)( )。(分数:2.00)A.口口 300,口口 100,口口 700B.口口 300,口口 700,口口 100C.口口 100,口口 300,口口 700D.口口 700,口口 300,口口 10022.有以下程序: #in
9、cludestdioh main() int a=1,b=0; for(;a5;a+) if(a2=0)break; continue; b+=a: printf(“dn“,b); 程序运行后的输出结果是( )。(分数:2.00)A.0B.1C.10D.423.有以下程序: #includestdioh main() int sum=10,n=1; while(n3) sum=sumn;n+; printf(“d,d“,n,sum); 程序运行后的输出结果是( )。(分数:2.00)A.2,8B.3,7C.3,8D.2,724.以下叙述中正确的是( )。(分数:2.00)A.数组说明符的一对方
10、括号中只能使用整型常量,而不能使用表达式B.一条语句只能定义一个数组C.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元D.在引用数组元素时,下标表达式可以使用浮点数25.以下叙述中正确的是( )。(分数:2.00)A.char c1,c2,*c3,c440;是合法的变量定义语句B.数组下标的下限由数组中第一个非零元素的位置决定C.数组下标的下限由数组中第一个被赋值元素的位置决定D.数组下标的下限是 126.设有定义: char p=1,2,3,*q=p; 以下不能计算出一个 char型数据所占字节数的表达式是( )。(分数:2.00)A.sizeof(*q)B.size
11、of(char)C.sizeof(p)D.sizeof(p0)27.以下叙述中正确的是( )。(分数:2.00)A.语句 char a2=“a“,“b“;是合法的,定义了一个包含两个字符的数组B.语句 int a=0;是不合法的,遗漏了数组的大小C.语句 int a8=0;是合法的D.语句 char a3;a=“ab“;是合法的,因为数组有三个字符空间的容量,可以保存两个字符28.有以下程序: #includestdioh int k=5: void f(int*s) s=&k; main() int m=3,*p=&m; f(p); printf(“d dn“,m,*p); 程序的运行结果是
12、( )。(分数:2.00)A.3 3B.5 5C.3 5D.5 329.有以下程序:#includestdiohmain() im x33=1,2,3,4,5,6,7,8,9),i; for(i=1;i3;i+) printf(“d“,xi3 一 i); 程序运行后的输出结果是( )。(分数:2.00)A.2,4B.6,8C.3,7D.2,630.下列错误的定义是( )。(分数:2.00)A.int *p=i,i;B.int *p,i;C.int i,*p=i;D.int i,*p;31.有以下程序: #includestdioh main() int a23=1,2,3,4,5,6; int
13、 b32,i,j; for(i=0;i=1;i+) for(j=0;j=2;j+) bji=aij; for(i=0;i=2;i+) for(j=0;j=1;j+) printf(“d“,bij); 程序的运行结果是( )。(分数:2.00)A.1 2 3 4 5 6B.1 3 5 2 4 6C.1 4 2 5 3 6D.1 3 2 5 4 632.若有定义语句: char *s1=“GOOD“,*s2=“good“; 以下选项中,能够输出“GOOD“语句是( )。(分数:2.00)A.if(strcmp(s1,s2)!=0)puts(s2);B.if(strcmp(s1,s2)!=0)put
14、s(s1);C.if(strcmp(s1,s2)=1)puts(s1);D.if(strcmp(s1,s2)=0)puts(s1);33.有以下程序: #includestdioh unsigned fun(unsigned num) unsigned k=1; do k*=num10; num=10; while(num); return k; main() unsigned n=26; printf(“dn“,fun(n); 程序运行后的输出结果是( )。(分数:2.00)A.12B.10C.16D.834.在 C语言中,只有在使用时才占用内存单元的变量的是( )。(分数:2.00)A.a
15、uto和 registerB.extern和 registerC.auto和 staticD.static和 register35.若有如下定义: char *ps=“aa“,“bb“,“cc“,“dd“;, 则以下叙述中正确的是( )。(分数:2.00)A.*ps0是字符AB.*ps0是字符串“aa“C.ps0是字符AD.ps是字符串“aa“36.以下叙述中正确的是( )。(分数:2.00)A.在 C语言中,预处理命令行都以#开头B.预处理命令行必须位于 C源程序的起始位置C.#includestdioh必须放在 C程序的开头D.C语言的预处理不能实现宏定义和条件编译的功能37.有以下程序:
16、 #includestdioh main() static char a=“Program“,*ptr; for(ptr=a;ptra+7;ptr+=2) putchar(*ptr); 程序运行后的结果为( )。(分数:2.00)A.ProgB.PormC.rgaD.Por38.有以下程序: #includestdioh main() int i; FILE *fp; for(i=0;i3;i+) fp=fopen(“restxt“,“w“); fputc(K+i,fp); fclose(fp); 程序运行后,在当前目录下会生成一个 restxt 文件,其内容是( )。(分数:2.00)A.M
17、B.EOFC.KLMD.L39.有以下程序: #includestdioh struct st int x: int y; a2=5,7,2,9; main() printf(“dn“,a0y*a1x); 程序运行后的输出结果是( )。(分数:2.00)A.10B.18C.14D.6340.下列关于 C语言文件的叙述中正确的是( )。(分数:2.00)A.文件由一系列数据依次排列组成,只能构成二进制文件B.文件由结构序列组成,可以构成二进制文件或文本文件C.文件由数据序列组成,可以构成二进制文件或文本文件D.文件由字符序列组成,其类型只能是文本文件二、程序填空题(总题数:1,分数:2.00)4
18、1.给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和 3门课的成绩。函数 fun的功能是将该学生的各科成绩都乘以一个系数 a。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh typedef struct int num; char name9; float score3;STU; void show(STU tt) int i; printf(“d s:“,ttnum,ttname); for(i=0;i3;i+) printf(“51f“,ttscorei); printf(“n“); *found* void modify
19、(【1】*ss,float a) int i; for(i=0;i3;i+) *found* ss 一【2】*=a; main() STU std=1,“Zhanghua“,765,780,820; float a; printf(“The original number andname and scores:n“); show(std); printf(“Input a number:“); scanf(“f“,&a); *found* modify(【3】,a); printf(“A result of modifying:n“); show(std); (分数:2.00)_三、程序修改题
20、(总题数:1,分数:2.00)42.以下给定程序中,函数 fun的功能是:判断输入的任何一个正整数 n,是否等于某个连续正整数序列之和。若是,则输出所有可能的序列。否则输出“不能分解”。 例如:当输入 100时,输出: 100=9+10+11+12+13+14+15+16 100=18+19+20+21+22 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdioh void fun(int n) int j,b,c,m,flag=0; for(b=1b=n2;b+) *found
21、* n=m; c=b: while(m !=0&m=c) *found* m=mc;c+ *found* if(m!=0) printf(“d=“,n); for(j=b;jc 一 1;j+) printf(“d+“,j); printf(“dn“,j); flag=1; if(flag=0) printf(“不能分解n“); main() int n; printf(“请输入一个整数:“); scanf(“d“,&n); fun(n); (分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串的前导*号不
22、得多于 n个,若多于 n个,则删除多余的*号;若少于或等 n个,则不做处理,字符串中间和尾部的*号不删除。 例如,字符串中的内容为:*A*BC*DEF*G*,若 n的值为 4,删除后,字符串中的内容应当是:*A*BC*DEF*G*;若 n的值为 8,则字符串中的内容仍为:*A*BC*DEF*G*。n 的值在主函数中输入。在编写函数时,不得使用 C语言提供的字符串函数。 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #includestdioh void fun(char *a,int n) main() char s81;i
23、nt n;void NONO(); printf(“Enter a string:n“);gets(s); printf(“Enter n:“);scanf(“d“,&n); fun(s,n); printf(“The string after deleted:n“); puts(s); NONO(); void NONO() (*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。* FILE *in,*out; int i,n;char s81; in=fopen(“indat“,“r“); out=fopen(“outdat“,“w“); for(i=0;i10;i+) fsca
24、nf(in,“s“,s); fscanf(in,“d“,&n); fun(s,n); fprintf(out,“sn“,s); fclose(in); fclose(out); (分数:2.00)_国家二级(C 语言)机试模拟试卷 154答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列叙述中正确的是( )。(分数:2.00)A.循环队列中的元素个数随队头指针与队尾指针的变化而动态变化 B.循环队列中的元素个数随队头指针的变化而动态变化C.循环队列中的元素个数随队尾指针的变化而动态变化D.以上说法都不对解析:解析:在循环队列中,用队尾指针 r
25、ear指向队列中的队尾元素,用队头指针 front指向队头元素的前一个位置。因此,从队头指针 front指向的后一个位置直到队尾指针 rear指向的位置之间,所有的元素均为队列中的元素。所以循环队列中的元素个数随队头指针和队尾指针的变化而变化。故 A选项正确。2.下列关于栈的叙述中,正确的是( )。(分数:2.00)A.栈底元素一定是最后入栈的元素B.栈顶元素一定是最先入栈的元素C.栈操作遵循“先进后出”的原则 D.以上说法均错误解析:解析:栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才被删除的元素;栈的修改是按“后进先出”的原则进行的。因此,栈称为
26、“先进后出”表,或“后进先出”表,故 C选项正确。3.设某二叉树的后序序列为 CBA,中序序列为 ABC,则该二叉树的前序序列为( )。(分数:2.00)A.BCAB.CBAC.ABC D.CAB解析:解析:后序序列为 CBA,中序序列为 ABC,则说明,A 为根结点,并且 B和 C均在 A的右子树上;结点 B和 C中,后序序列为 CB,中序序列为 BC,则说明结点 C在结点 B的右子树上,根据分析可得,该二叉树的前序序列为 ABC,答案选 C。4.结构化程序设计主要强调的是( )。(分数:2.00)A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序易读性 解析:解析:结构化程序设计
27、强调的是程序的易读性。5.为了使模块尽可能独立,要求( )。(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块问的耦合程度要尽量弱 C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强解析:解析:系统设计的质量主要反映在模块的独立性上。评价模块独立性的主要标准有两个:一是模块之间的耦合,它表明两个模块之间互相独立的程度;二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽可能独立,而要求模块的内聚程度尽量地高。6.在结构化方法中,软件功能
28、属于软件开发中的( )阶段。(分数:2.00)A.详细设计B.需求分析C.总体设计 D.编程调试解析:解析:总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。7.下列叙述中正确的是( )。(分数:2.00)A.程序执行的效率与数据的存储结构密切相关 B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上说法均错误解析:解析:程序执行的效率
29、与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。8.关系数据库管理系统所管理的关系是( )。(分数:2.00)A.若干个二维表 B.一个 DBF文件C.一个 DBC文件D.若干个 DBC文件解析:解析:在关系数据库中,一个表就是一个关系,关系数据库管理系统管理的关系就是多个二维表。9.结构化程序设计中,下面对 goto语句使用描述正确的是( )。(分数:2.00)A.禁止使用 goto语句B.使用 goto语句程序效率高C.应避免滥用 goto语句 D.以上说法均错误解析:解析:结构化程序设计中,要注意尽量避免 goto语句的使用,故 C选项正确。10.设有如下三个关系
30、表: (分数:2.00)A.T=RSB.T=RS C.T=RSD.T=RS解析:解析:两个相同结构关系的“并”是由属于这两个关系的元组组成的集合。11.以下选项中合法的标识符是( )。(分数:2.00)A._11 B.11C.1_1D.1_解析:解析:标识符由字母、数字或下画线组成,并且数字不能开头。故 A选项是合法的标识符。12.以下叙述中错误的是( )。(分数:2.00)A.C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件B.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 C.用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本
31、文件中D.C语言源程序经编译后生成后缀为obj 的目标程序解析:解析:C 语言程序编译时将每条可执行语句转换为二进制的机器指令,但非执行语句(如注释语句)不被编译。所以选项 B错误。13.若有定义:int a=0,b=0,c=0,d=0;,有 C语言表达式(a+&b+)?c+:d+,以下关于其执行顺序的叙述中正确是( )。(分数:2.00)A.先执行 a+,表达式 a+的值为 0,由此即可确定(a+&b+)值为 0,因此执行 d+ B.先执行 a+,表达式 a+的值为 0;再执行 b+,表达式 b+的值为 0,由此可确定(a+&b+)值为 0,因此执行 d+C.先执行 a+,表达式 a+的值为
32、 1;再执行 b+,表达式 b+的值为 1,由此可确定(a+&b+)值为 1,因此执行 c+D.先执行 b+,表达式 b+的值为 1;再执行 a+,表达式 a+的值为 1,由此可确定(a+&b+)值为 1,因此执行 c+解析:解析:把握前置运算和后置运算的基本运算规则。14.表达式:(int)(double)92)一(9)2 的值是( )。(分数:2.00)A.0B.3 C.4D.5解析:解析:运算符“”和“”的优先级高于“”,所以先进行除法和求余运算,再进行减法运算。强制类型转换表达式的形式:(类型名)(表达式)。“92”结果为 4,转换成 double类型再转换成 int类型结果依然为 4
33、,(9)2 的结果为 1,41 的最后结果为 3。15.以下选项中叙述正确的是( )。(分数:2.00)A.函数体必须由开始 B.C程序必须由 mflin语句开始C.C程序中的注释可以嵌套D.C程序中的注释必须在一行里完成解析:解析:函数体是函数首部下面的花括号内的部分,所以函数休必须由(开始,A 项正确。一个源程序文件可以包括预处理命令、全局声明、函数定义,程序总是从 main函数开始执行的,不是 main语句,B项错误。C 程序中允许两种注释,以开头的单行注释;以*开始,以*结束的块式注释,D 项错误。函数可以嵌套,注释不能嵌套,C 项错误。16.若有以下程序段: int r=8: pri
34、ntf(“dn“,r1); 输出结果是( )。(分数:2.00)A.16B.8C.4 D.2解析:解析:C 语言中“”是对二进制的右移运算符,右移相当于将原数做除二操作,它将原数右移相应位数,并将移出的位舍去,在高位补 0,将所得的结果再赋值给变量。本题中 8的二进制为00001000,右移一位得到 00000100,所以是 4。17.以下能对一维数组 a进行初始化的语句是( )。(分数:2.00)A.int a5=(0,1,2,3,4);B.int a(5)=;C.int a3=0,1,2; D.int a5=10*1;解析:解析:选项 A,数组可以看作是若干个相同数据类型元素的有序集合,因
35、此以集合的形式对其初始化,使用对其初始化;选项 BD,常量表达式只能放在中括号中。故 C选项正确。18.若有定义:int a;float b;double c;,程序运行时输入:1 2 3回车,能把 1输入给变量 a、把 2输入给变量 b、把 3输入给变量 c的输入语句是( )。(分数:2.00)A.scanf(“d f lf“,&a,&b,&c); B.scanf(“dflf“,&a,&b,&c);C.scanf(“d lflf“,&a,&b,&c);D.scanf(“d f f“,&a,&b,&c);解析:解析:在 scanf()函数中,a 变量为整数用d 格式字符串,a 变量为单精度数用
36、f 格式字符串,a变量为双精度数用1f 格式字符串,只有 A选项正确。19.下列数据中属于“字符串常量”的是( )。(分数:2.00)A.a B.ABCC.abc0D.a解析:解析:在 C语言中,若干个字符构成字符串,用单引号标识字符,用双引号标识字符串。选项 A,用双引号标识字符串,正确;选项 B和 C,分别用花括号和单引号标识字符串,错误;选项 D,标识字符。故 A选项正确。20.当变量 C的值不为 2、4、6 时,值为“真”的表达式是( )。(分数:2.00)A.(c=2)(c=4)(c=6)B.(c=2&c=6)(c!一 3)(c!=5) C.(c=2&c=6)&!(c2)D.(c=2
37、&c=6)&(c2!=1)解析:解析:本题主要考查的是逻辑表达式。逻辑与运算中只有两边的表达式同时为真,最后结果才为真;参与逻辑或运算的表达式只要有一个为真,最后结果就为真。选项 A中表达式的意思是当 c等于 2或 4或 6时,表达式的值为真,否则为假,所以不满足题意。选项 C中表达式的意思是当 c大于等于 2且小于等于 6,并且 c不是奇数时,表达式的值为真,否则为假。此时满足该表达式的 c只能取值为 2、4、6,所以也不满足题意。选项 D中后面一个子表达式(c2!=1)和选项 C中的!(c2)是等价的,都是判断 c不是奇数,因此也不满足题意。故 B选项正确。21.有以下程序: #inclu
38、destdioh main() float a,b,c,t; a=3;b=7;c=1; if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(“52f,52f,52f“,a,b,c); 程序运行后的输出结果是(其中口代表空格)( )。(分数:2.00)A.口口 300,口口 100,口口 700B.口口 300,口口 700,口口 100C.口口 100,口口 300,口口 700 D.口口 700,口口 300,口口 100解析:解析:本题考查 if语句。该题包含了 3个 if语句,每个 if语句后的都不可省略,
39、因为每个中都包含了多条语句。首先判断条件 ab,由于 3小于 7,表达式 ab 不成立,因此不执行t=a;a=b;b=t;然后判断条件 ac,由于 3大于 1,因此表达式 ac 成立,则执行t=a;a=c;c=t;),该表达式语句是用来交换 a和 c的值,执行完后 a为 1,c 为 3;然后判断条件bc,由于 7大于 c中的 3,因此 bc 成立,则执行t=b;b=c;c=t;,过程同上,执行后 b为 3,c为 7。printf 语句用来输出 a,b,c 中的值,并且要求输出的每个数据宽度为 5个空格,小数部分保留 2位,数据右对齐。故最后输出为 C选项中所示结果。22.有以下程序: #inc
40、ludestdioh main() int a=1,b=0; for(;a5;a+) if(a2=0)break; continue; b+=a: printf(“dn“,b); 程序运行后的输出结果是( )。(分数:2.00)A.0 B.1C.10D.4解析:解析:第一次循环,a=1,a2!=0 所以执行 break,整个循环结束,所以 b=0。23.有以下程序: #includestdioh main() int sum=10,n=1; while(n3) sum=sumn;n+; printf(“d,d“,n,sum); 程序运行后的输出结果是( )。(分数:2.00)A.2,8B.3,
41、7 C.3,8D.2,7解析:解析:考查 while循环。当循环条件 n3 成立的时候,执行循环体sum=sumn;n+;中的语句。循环初值 sum为 10,n 为 1。首先判断循环条件 n3 成立,开始第 1次循环,执行 sum=sumn=10一1=9,执行 n+,即将 n中的值加 1,执行后 n为 2;此时 n中的值为 2,sum 中的值为 9,循环条件 n3成立,继续执行第 2次循环,执行 sum=sumn=92=7,执行 n+,即将 n中的值加 1,执行后 n为 3;n为 3时,循环条件不成立,结束循环,输出结果为 3,7。故 B选项正确。24.以下叙述中正确的是( )。(分数:2.0
42、0)A.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式B.一条语句只能定义一个数组C.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 D.在引用数组元素时,下标表达式可以使用浮点数解析:解析:同类元素的集合称为数组,数组元素在内存中占据连续的存储空间,答案 C正确。方括号中可以为整型变量或者常量表达式,选项 A错。在使用逗号运算苻的情况下,一条语句可以定义多个数组,选项 B错。数组元素在数组中的下标为整型常量或者变量构成的整型表达式,不能为浮点数,选项 D错。25.以下叙述中正确的是( )。(分数:2.00)A.char c1,c2,*c3,c440;是合法
43、的变量定义语句 B.数组下标的下限由数组中第一个非零元素的位置决定C.数组下标的下限由数组中第一个被赋值元素的位置决定D.数组下标的下限是 1解析:解析:A 正确,char c1,c2,*c3,c440表示定义了两个字符变量 c1、c2,一个字符指针 c3,一个字符数组 c4。数组的下限永远为 0,选项 B、C、D 错,答案选 A。26.设有定义: char p=1,2,3,*q=p; 以下不能计算出一个 char型数据所占字节数的表达式是( )。(分数:2.00)A.sizeof(*q)B.sizeof(char)C.sizeof(p) D.sizeof(p0)解析:解析:数组名表示该数组的
44、首地址,是一个地址常量,所以 sizeof(p)求得的是一个地址占用的字节数,即 4个字节,答案选 C。27.以下叙述中正确的是( )。(分数:2.00)A.语句 char a2=“a“,“b“;是合法的,定义了一个包含两个字符的数组B.语句 int a=0;是不合法的,遗漏了数组的大小C.语句 int a8=0;是合法的 D.语句 char a3;a=“ab“;是合法的,因为数组有三个字符空间的容量,可以保存两个字符解析:解析:考查一维数组以及字符数组的初始化。初始化的时候可以只给数组的前面一部分元素设定初值,故 C正确。字符数组中的每个元素为一个字符,需要用单引号,选项 A错。若对数组全部
45、元素赋初值时,可以不指定数组元素的个数,选项 B错。定义字符数组时可以将字符串直接赋给该字符数组,其他情况则不可以,选项 D错。答案选 C。28.有以下程序: #includestdioh int k=5: void f(int*s) s=&k; main() int m=3,*p=&m; f(p); printf(“d dn“,m,*p); 程序的运行结果是( )。(分数:2.00)A.3 3 B.5 5C.3 5D.5 3解析:解析:考查函数传参。C 语言中,数据只能从实参单向传递给形参,指针作为函数参数时,形参仍然作为实参的副本被赋值,形参指针变量的指向改变不能影响实参指针变量的指向,结
46、果不变,答案选A。29.有以下程序:#includestdiohmain() im x33=1,2,3,4,5,6,7,8,9),i; for(i=1;i3;i+) printf(“d“,xi3 一 i); 程序运行后的输出结果是( )。(分数:2.00)A.2,4B.6,8 C.3,7D.2,6解析:解析:二维数组的起始行标和列标均为 0,即 x00=1。当 i=1时,for 循环判断条件成立,输出 x12=6;此时 i自增为 2,开始第二次 for循环,条件成立,输出 x21=8。故 B选项正确。30.下列错误的定义是( )。(分数:2.00)A.int *p=i,i; B.int *p,i;C.int i,*p=i;D.int i,*p;解析: