1、国家二级( C语言)机试模拟试卷 154及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)循环队列中的元素个数随队头指针与队尾指针的变化而动态变化 ( B)循环队列中的元素个数随队头指针的变化而动态变化 ( C)循环队列中的元素个数随队尾指针的变化而动态变化 ( D)以上说法都不对 2 下列关于栈的叙述中,正确的是 ( )。 ( A)栈底元素一定是最后入栈的元素 ( B)栈顶元素一定是最先入栈的元素 ( C)栈操作遵循 “先进后出 ”的原则 ( D)以上说法均错误 3 设某二 叉树的后序序列为 CBA,中序序列为 ABC,则该二叉树的前序序列为( )。 ( A) BCA (
2、B) CBA ( C) ABC ( D) CAB 4 结构化程序设计主要强调的是 ( )。 ( A)程序的规模 ( B)程序的效率 ( C)程序设计语言的先进性 ( D)程序易读性 5 为了使模块尽可能独立,要求 ( )。 ( A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强 ( B)模块的内聚程度要尽量高,且各模块问的耦合程度要尽量弱 ( C)模块的内聚程度要尽量低,且各模块间的耦合程度要 尽量弱 ( D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 6 在结构化方法中,软件功能属于软件开发中的 ( )阶段。 ( A)详细设计 ( B)需求分析 ( C)总体设计 ( D)编程
3、调试 7 下列叙述中正确的是 ( )。 ( A)程序执行的效率与数据的存储结构密切相关 ( B)程序执行的效率只取决于程序的控制结构 ( C)程序执行的效率只取决于所处理的数据量 ( D)以上说法均错误 8 关系数据库管理系统所管理的关系是 ( )。 ( A)若干个二维表 ( B)一个 DBF文件 ( C)一个 DBC文件 ( D)若干个 DBC文件 9 结构化程序设计中,下面对 goto语句使用描述正确的是 ( )。 ( A)禁止使用 goto语句 ( B)使用 goto语句程序效率高 ( C)应避免滥用 goto语句 ( D)以上说法均错误 10 设有如下三个关系表: 下列操作中正确的是
4、( )。 ( A) T=RS ( B) T=R S ( C) T=RS ( D) T=R S 11 以下选项中合法的标识符是 ( )。 ( A) _11 ( B) 11 ( C) 1_1 ( D) 1_ 12 以下叙述中错误的是 ( )。 ( A) C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件 ( B) C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 ( C)用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本文件中 ( D) C语言源程序经编译后生成后缀为 obj的目标程序 13 若有定义 :int a=0, b=0, c=0
5、,d=0;,有 C语言表达式 (a+&b+)?c+: d+,以下关于其执行顺序的叙述中正确是 ( )。 ( A)先执行 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,因此
6、执行 c+ 14 表达式: (int)(double)9 2)一 (9) 2的值是 ( )。 ( A) 0 ( B) 3 ( C) 4 ( D) 5 15 以下选项中叙述正确的是 ( )。 ( A)函数体必须由 开始 ( B) C程序必须由 mflin语句开始 ( C) C程序中的注释可以嵌套 ( D) C程序中的注释必须在一行里完成 16 若有以下程序段: int r=8: printf(“ d n“, r 1); 输出结果是 ( )。 ( A) 16 ( B) 8 ( C) 4 ( D) 2 17 以下能对一维数组 a进行初始化的 语句是 ( )。 ( A) int a5=(0, 1, 2
7、, 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输入给变量 a、把 2输入给变量 b、把 3输入给变量 c的输入语句是 ( )。 ( A) scanf(“ d f lf“, &a, &b, &c); ( B) scanf(“ d f lf“, &a, &b, &c); ( C) scanf(“ d lf lf“, &a, &b, &c); ( D) scanf(“ d f f“, &a, &b, &c);
8、 19 下列数据中属于 “字符串常量 ”的是 ( )。 ( A) a ( B) ABC ( C) abc 0 ( D) a 20 当变量 C的值不为 2、 4、 6时,值为 “真 ”的表达式是 ( )。 ( A) (c=2) (c=4) (c=6) ( B) (c =2&c =6) (c!一 3) (c!=5) ( C) (c =2&c =6)&!(c 2) ( D) (c =2&c =6)&(c 2!=1) 21 有以下程序: #include stdio h main() float a, b, c, t; a=3; b=7; c=1; if(a b) t=a; a=b; b=t; if(
9、a c) t=a; a=c; c=t; if(b c) t=b; b=c; c=t; printf(“ 5 2f, 5 2f, 5 2f“, a, b, c); 程序运行后的输出结果是 (其中口代表空格 )( )。 ( A)口口 3 00,口口 1 00,口口 7 00 ( B)口口 3 00,口口 7 00,口口 1 00 ( C)口口 1 00,口口 3 00,口口 7 00 ( D)口口 7 00,口口 3 00,口口 1 00 22 有以下程序: #include stdio h main() int a=1, b=0; for(; a 5; a+) if(a 2=0)break; c
10、ontinue; b+=a: printf(“ d n“, b); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 1 ( C) 10 ( D) 4 23 有以下程序: #include stdio h main() int sum=10, n=1; while(n 3) sum=sumn; n+; printf(“ d, d“, n, sum); 程序运行后的输出结果是 ( )。 ( A) 2, 8 ( B) 3, 7 ( C) 3, 8 ( D) 2, 7 24 以下叙述中正确的是 ( )。 ( A)数组说明符的一对方括号中只能使用整型常量,而不能使用表达式 ( B)一条语句只能
11、定义一个数组 ( C)每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 ( D)在引用数组元素时,下标表达式可以使用浮点数 25 以下叙述中正确的是 ( )。 ( A) char c1, c2, *c3, c440;是合法的变量定义语句 ( B)数组下标的下限由数组中第一个非零元素的位置决定 ( C)数组下标的下限由数组中第一个被赋值元素的位置决定 ( D)数组下标的下限是 1 26 设有定义: char p=1, 2, 3, *q=p; 以下不能计算出一个 char型数据所占字节数的表达式是 ( )。 ( A) sizeof(*q) ( B) sizeof(char)
12、( C) sizeof(p) ( D) sizeof(p0) 27 以下叙述中正确的是 ( )。 ( A)语句 char a2=“a“, “b“;是合法的,定义了一个包含两个字符的数组 ( B)语句 int a=0;是不合法的,遗漏了数组的大小 ( C)语句 int a8=0;是合法的 ( D)语句 char a3; a=“ab“;是合法的,因为数组有三个字符空间的容量,可以保存两个字符 28 有以下程序: #include stdio h int k=5: void f(int*s) s=&k; main() int m=3, *p=&m; f(p); printf(“ d d n“, m,
13、 *p); 程序的运行结果是 ( )。 ( A) 3 3 ( B) 5 5 ( C) 3 5 ( D) 5 3 29 有以下程序: #include stdio h main() im x33=1, 2, 3, 4, 5, 6, 7, 8, 9), i; for(i=1; i 3; i+) printf(“ d“, xi3一 i); 程序运行后的输出结果是 ( )。 ( A) 2, 4 ( B) 6, 8 ( C) 3, 7 ( D) 2, 6 30 下列错误的定义是 ( )。 ( A) int *p= i, i; ( B) int *p, i; ( C) int i, *p= i; ( D)
14、 int i, *p; 31 有以下程序: #include stdio h main() int a23=1, 2, 3, 4, 5, 6; int 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); 程序的运行结果是 ( )。 ( A) 1 2 3 4 5 6 ( B) 1 3 5 2 4 6 ( C) 1 4 2 5 3 6 ( D) 1 3 2 5 4 6 32 若有定义语句: char *s1=“GOOD“,
15、 *s2=“good“; 以下选项中,能够输出 “GOOD“语句是 ( )。 ( A) if(strcmp(s1, s2)!=0)puts(s2); ( B) if(strcmp(s1, s2)!=0)puts(s1); ( C) if(strcmp(s1, s2)=1)puts(s1); ( D) if(strcmp(s1, s2)=0)puts(s1); 33 有以下程序: #include stdio h unsigned fun(unsigned num) unsigned k=1; do k*=num 10; num =10; while(num); return k; main()
16、 unsigned n=26; printf(“ d n“, fun(n); 程序运行后的输出结果是 ( )。 ( A) 12 ( B) 10 ( C) 16 ( D) 8 34 在 C语言中,只有在使用时才占用内存单元的变量的是 ( )。 ( A) auto和 register ( B) extern和 register ( C) auto和 static ( D) static和 register 35 若有如下定义: char *ps=“aa“, “bb“, “cc“, “dd“;, 则以下叙述中正确的是 ( )。 ( A) *ps0是字符 A ( B) *ps0是字符串 “aa“ (
17、C) ps0是字符 A ( D) ps是字符串 “aa“ 36 以下叙述中正确的是 ( )。 ( A)在 C语言中,预处理命令行都以 #开头 ( B)预处理命令行必须位于 C源程序的起始位置 ( C) #include stdio h必须放在 C程序的开头 ( D) C语言的预处理不能实现宏定义和条件编译的功能 37 有以下程序: #include stdio h main() static char a=“Program“, *ptr; for(ptr=a; ptr a+7; ptr+=2) putchar(*ptr); 程序运行后的结果为 ( )。 ( A) Prog ( B) Porm
18、( C) rga ( D) Por 38 有以下程序: #include stdio h main() int i; FILE *fp; for(i=0; i 3; i+) fp=fopen(“res txt“, “w“); fputc(K+i, fp); fclose(fp); 程序运行后,在当前目录下会生成一个 res txt文件,其内容是 ( )。 ( A) M ( B) EOF ( C) KLM ( D) L 39 有以下程序: #include stdio h struct st int x: int y; a2=5, 7, 2, 9; main() printf(“ d n“, a
19、0 y*a1 x); 程序运行后的输出结果是 ( )。 ( A) 10 ( B) 18 ( C) 14 ( D) 63 40 下列关于 C语言文件的叙述中正确的是 ( )。 ( A)文件由一系列数据依次排列组成,只能构成二进制文件 ( B)文件由结构序列组成,可以构成二进制文件或文本文件 ( C)文件由数据序列组成,可以构成二进制文件或文本文件 ( D)文件由字符序列组成,其类型只能是文本文件 二、程序填空题 41 给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和 3门课的成绩。函数 fun的功能是将该学生的各科成绩都乘以一个系数a。 注意:不得增行或删行,也不得更改
20、程序的结构 ! 试题程序: #include stdio h typedef struct int num; char name9; float score3; STU; void show(STU tt) int i; printf(“ d s: “, tt num, tt name); for(i=0; i 3; i+) printf(“ 5 1f“, tt scorei); printf(“ n“); *found* void modify(【 1】 *ss, float a) int i; for(i=0; i 3; i+) *found* ss一【 2】 *=a; main() ST
21、U std=1, “Zhanghua“, 76 5, 78 0, 82 0; 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); 三、程序修改题 42 以下给定程序中,函数 fun的功能是:判断输入的任何一个正整数 n,是否等于某个连续正整数序列之和。若是,则 输出所有可
22、能的序列。否则输出 “不能分解 ”。 例如:当输入 100时,输出: 100=9+10+11+12+13+14+15+16 100=18+19+20+21+22 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include stdio h void fun(int n) int j, b, c, m, flag=0; for(b=1 b =n 2; b+) *found* n=m; c=b: while(m !=0&m =c) *found* m=mc; c+ *found* if(m!=0) p
23、rintf(“ d=“, n); for(j=b; j c一 1; j+) printf(“ d+“, j); printf(“ d n“, j); flag=1; if(flag=0) printf(“不能分解 n“); main() int n; printf(“请输入一个整数: “); scanf(“ d“, &n); fun(n); 四、程序设计题 43 规定输入的字符串中只包含字母和 *号。请编写函数 fun,其功能是:使字符串的前导 *号不得多于 n个,若多于 n个,则删除多余的 *号;若少于或等 n个,则不做处理,字符串中间和尾部的 *号不删除。 例如,字符串中的内容为: *A*
24、BC*DEF*G*,若 n的值为 4,删除后,字符串中的内容应当是: *A*BC*DEF*G*;若 n的值为 8,则字符串中的内容仍为: *A*BC*DEF*G*。 n的值在主函数中输入。在编写函数时,不得使用 C语言提供的字符串函数。 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include stdio h void fun(char *a, int n) main() char s81; int n; void NONO(); printf(“Enter a string: n“); gets(s); printf
25、(“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(“in dat“, “r“); out=fopen(“out dat“, “w“); for(i=0; i 10; i+) fscanf(in, “ s“, s); fscanf(in, “ d“, &n); fun
26、(s, n); fprintf(out, “ s n“, s); fclose(in); fclose(out); 国家二级( C语言)机试模拟试卷 154答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 在循环队列中,用队尾指针 rear指向队列中的队尾元素,用队头指针 front指向队头元素的前一个位置。因此,从队头指针 front指向的后一个位置直到队尾指针 rear指向的位置之间,所有的元素均为队列中的元素。所以循环队列中的元素个数随队头指针和队尾指针的变化而变化。故 A选项正确。 2 【正确答案】 C 【试题解析】 栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素
27、总是最先被插入的元素,也是最后才被 删除的元素;栈的修改是按 “后进先出 ”的原则进行的。因此,栈称为 “先进后出 ”表,或 “后进先出 ”表,故 C选项正确。 3 【正确答案】 C 【试题解析】 后序序列为 CBA,中序序列为 ABC,则说明, A为根结点,并且B和 C均在 A的右子树上;结点 B和 C中,后序序列为 CB,中序序列为 BC,则说明结点 C在结点 B的右子树上,根据分析可得,该二叉树的前序序列为 ABC,答案选 C。 4 【正确答案】 D 【试题解析】 结构化程序设计强调的是程序的易读性。 5 【正确答案】 B 【试题解析】 系统设计 的质量主要反映在模块的独立性上。评价模块
28、独立性的主要标准有两个:一是模块之间的耦合,它表明两个模块之间互相独立的程度;二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽可能独立,而要求模块的内聚程度尽量地高。 6 【正确答案】 C 【试题解析】 总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功 能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。 7 【正确答案】 A 【试题解析】 程序执行的效率与数据的存储结构、数据的
29、逻辑结构、程序的控制结构、所处理的数据量等有关。 8 【正确答案】 A 【试题解析】 在关系数据库中,一个表就是一个关系,关系数据库管理系统管理的关系就是多个二维表。 9 【正确答案】 C 【试题解析】 结构化程序设计中,要注意尽量避免 goto语句的使用,故 C选项正确。 10 【正确答案】 B 【试题解析】 两个相同结构关系的 “并 ”是 由属于这两个关系的元组组成的集合。 11 【正确答案】 A 【试题解析】 标识符由字母、数字或下画线组成,并且数字不能开头。故 A选项是合法的标识符。 12 【正确答案】 B 【试题解析】 C语言程序编译时将每条可执行语句转换为二进制的机器指令,但非执行
30、语句 (如注释语句 )不被编译。所以选项 B错误。 13 【正确答案】 A 【试题解析】 把握前置运算和后置运算的基本运算规则。 14 【正确答案】 B 【试题解析】 运算符 “ ”和 “ ”的优先级高于 “ ”,所以先进行除法和求 余运算,再进行减法运算。强制类型转换表达式的形式: (类型名 )(表达式 )。 “9 2”结果为 4,转换成 double类型再转换成 int类型结果依然为 4, (9) 2的结果为 1,41的最后结果为 3。 15 【正确答案】 A 【试题解析】 函数体是函数首部下面的花括号内的部分,所以函数休必须由 (开始, A项正确。一个源程序文件可以包括预处理命令、全局声
31、明、函数定义,程序总是从 main函数开始执行的,不是 main语句, B项错误。 C程序中允许两种注释,以开头的单行注释;以 *开始,以 *结束的块式注释, D项错 误。函数可以嵌套,注释不能嵌套, C项错误。 16 【正确答案】 C 【试题解析】 C语言中 “ ”是对二进制的右移运算符,右移相当于将原数做除二操作,它将原数右移相应位数,并将移出的位舍去,在高位补 0,将所得的结果再赋值给变量。本题中 8的二进制为 00001000,右移一位得到 00000100,所以是4。 17 【正确答案】 C 【试题解析】 选项 A,数组可以看作是若干个相同数据类型元素的有序集合,因此以集合的形式对其
32、初始化,使用 对其初始化;选项 BD,常量表达式只能放在中括号 中。故 C选项正确。 18 【正确答案】 A 【试题解析】 在 scanf()函数中, a变量为整数用 d格式字符串, a变量为单精度数用 f格式字符串, a变量为双精度数用 1f格式字符串,只有 A选项正确。 19 【正确答案】 A 【试题解析】 在 C语言中,若干个字符构成字符串,用单引号标识字符,用双引号标识字符串。选项 A,用双引号标识字符串,正确;选项 B和 C,分别用花括号和单引号标识字符串,错误;选项 D,标识字符。故 A选项正确。 20 【正确答案】 B 【试题解析】 本题主要考查的是逻辑表 达式。逻辑与运算中只有
33、两边的表达式同时为真,最后结果才为真;参与逻辑或运算的表达式只要有一个为真,最后结果就为真。选项 A中表达式的意思是当 c等于 2或 4或 6时,表达式的值为真,否则为假,所以不满足题意。选项 C中表达式的意思是当 c大于等于 2且小于等于6,并且 c不是奇数时,表达式的值为真,否则为假。此时满足该表达式的 c只能取值为 2、 4、 6,所以也不满足题意。选项 D中后面一个子表达式 (c 2!=1)和选项 C中的 !(c 2)是等价的,都是判断 c不是奇数,因此也不满足题意。故 B选项正确。 21 【正确答案】 C 【试题解析】 本题考查 if语句。该题包含了 3个 if语句,每个 if语句后
34、的 都不可省略,因为每个 中都包含了多条语句。首先判断条件 a b,由于 3小于 7,表达式 a b不成立,因此不执行 t=a; a=b; b=t; ;然后判断条件 a c,由于 3大于 1,因此表达式 a c成立,则执行 t=a; a=c; c=t; ),该表达式语句是用来交换 a和 c的值,执行完后 a为 1, c为 3;然后判断条件 b c,由于 7大于 c中的 3,因此 b c成立,则执行 t=b; b=c; c=t; ,过程同上,执行后 b为 3, c为7。 printf语句用来 输出 a, b, c中的值,并且要求输出的每个数据宽度为 5个空格,小数部分保留 2位,数据右对齐。故最
35、后输出为 C选项中所示结果。 22 【正确答案】 A 【试题解析】 第一次循环, a=1, a 2!=0所以执行 break,整个循环结束,所以b=0。 23 【正确答案】 B 【试题解析】 考查 while循环。当循环条件 n 3成立的时候,执行循环体sum=sumn; n+; 中的语句。循环初值 sum为 10, n为 1。首先判断循环条件 n 3成立,开始第 1次循环,执行 sum=sumn=10一 1=9,执 行 n+,即将 n中的值加 1,执行后 n为 2;此时 n中的值为 2, sum中的值为 9,循环条件 n 3成立,继续执行第 2次循环,执行 sum=sumn=92=7,执行
36、n+,即将 n中的值加 1,执行后 n为 3; n为 3时,循环条件不成立,结束循环,输出结果为 3,7。故 B选项正确。 24 【正确答案】 C 【试题解析】 同类元素的集合称为数组,数组元素在内存中占据连续的存储空间,答案 C正确。方括号中可以为整型变量或者常量表达式,选项 A错。在使用逗号运算苻的情况下,一条语句可以定义多个数组,选项 B错。数组元素在数组中的下标为整型常量或者变量构成的整型表达式,不能为浮点数,选项 D错。 25 【正确答案】 A 【试题解析】 A正确, char c1, c2, *c3, c440表示定义了两个字符变量 c1、c2,一个字符指针 c3,一个字符数组 c
37、4。数组的下限永远为 0,选项 B、 C、 D错,答案选 A。 26 【正确答案】 C 【试题解析】 数组名表示该数组的首地址,是一个地址常量,所以 sizeof(p)求得的是一个地址占用的字节数,即 4个字节,答案选 C。 27 【正确答案】 C 【试题解析】 考查一维数 组以及字符数组的初始化。初始化的时候可以只给数组的前面一部分元素设定初值,故 C正确。字符数组中的每个元素为一个字符,需要用单引号,选项 A错。若对数组全部元素赋初值时,可以不指定数组元素的个数,选项 B错。定义字符数组时可以将字符串直接赋给该字符数组,其他情况则不可以,选项 D错。答案选 C。 28 【正确答案】 A 【
38、试题解析】 考查函数传参。 C语言中,数据只能从实参单向传递给形参,指针作为函数参数时,形参仍然作为实参的副本被赋值,形参指针变量的指向改变不能影响实参指针变量的指向,结果不变,答案选 A。 29 【正确答案】 B 【试题解析】 二维数组的起始行标和列标均为 0,即 x00=1。当 i=1时, for循环判断条件成立,输出 x12=6;此时 i自增为 2,开始第二次 for循环,条件成立,输出 x21=8。故 B选项正确。 30 【正确答案】 A 【试题解析】 选项 A,先定义一个整型指针变量 p,然后将变量 i的地址赋给p。然而此时还未定义变量 i,因此编译器无法获得变量 i的地址, A选项
39、错误。 A与 C对比,选项 C先定义变量 i,则在内存中为 i分配空间,因此 i在内存空间的地址就可以确 定了,然后再定义 p,此时可以为 p赋 i的地址, C选项正确。 31 【正确答案】 C 【试题解析】 本题考查 for循环的嵌套以及二维数组的赋值和输出。第一个 for循环嵌套用来给二维数组 b中的各元素赋值,执行完后得到 b32=1, 4, 2,5, 3, 6。第二个 for循环嵌套用来输出二维数组 b中的各元素。依次输出为b00, b01, b10, b11, b20, b21,故输出结果为 1 3 2 5 4 6。 32 【正确答案】 B 【试题解 析】 strcmp(s1, s2
40、)是字符串比较函数,比较方式是两个字符串从左自右逐个字符进行比价 (按照 ASCII码值大小 ),以第一个不相同字符的大小作为比较结果。由于大写字母的 ASCII码值小于小写字母的 ASCII码值,所以比较后的结果为负值,故只有 B选项符合题意。 33 【正确答案】 A 【试题解析】 程序首先执行 main函数,执行 printf(“ d n“, fun(n);即输出表达式 fun(6)的值,为了计算该表达式,需要调用函数 func。此时 main将 n中的26作为实参传递给 fun的 num, 即 num值为 26,接着执行 dowhile语句。第 1次循环,执行 k*=num 10,即 k
41、=k*(num 10)=1*(26 10)=6;执行 num=10,即 num=num 10=26 10=2; while后面循环条件为 num,此时 num为 2,是非 0值,即表示循环条件成立,继续执行循环体。此时 k为 6, num为 2,执行dowhile中的语句后, k为 12, num为 0。由于 while后面循环条件为 num,此时 num为 0,表示循环条件不成立,结束循环,执行 return k,即返回至 main函数中的被调用处,执行 main函数,执行 printf语句,输出结果为 12。 34 【正确答案】 A 【试题解析】 C语言中,动态存储区域中存放的变量在使用时
42、才分配内存空间。auto变量的存储单元是分配在内存的动态存储区中,每当进入函数体时自动分配存储单元。 register变量也是自动类变量。 static说明的变量为静态变量,静态变量在内存的静态存储中占据着永久的存储单元,直至程序运行结束。 extern说明的变量为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。 35 【正确答案】 B 【试题解 析】 对于指针数组, ps0代表的就是第一个字符串的地址。 36 【正确答案】 A 【试题解析】 C语言中,凡是以 #开头的都被称为编译预处理行,选项 A正确;预处理行可以放在 C源程序的任何位置,习惯放在起始位置,选项 B错误;语
43、句#include stdio h必须放在使用文件 stdio h中相关方法的语句之前,但是不一定非要放在 C程序开头,选项 C错误;预处理包括宏定义、文件包含和条件编译等,选项 D错误。 37 【正确答案】 B 【试题解析】 首先定义一个字符型数组 a,并对 a进行初始化, 然后定义字符型指针变量 p。执行 for语句, ptr=a表示将数组 a的地址赋给 ptr; ptr a+7代表循环条件, ptr+=2,即 ptr=ptr+2。执行 putchar(*ptr);即输出 *pt所对应的字符。此时 ptr指向数组中的第 1个元素,即 a0,因此 *ptr表示 a0中的值,即 p,此时输出
44、p;然后执行 ptr+=2,此时 ptr指向数组中的第 3个元素,即 a2,输出0;然后执行 ptr+=2,此时 ptr指向数组中的第 5个元素,即 a4,输出 r;然后执行 ptr+=2,此时 ptr指向数组中的第 6个元素,即 a5,输出 m;然后执行ptr+=2,得到 ptr=a+8 a+7,即循环条件不成立,循环结束,最终输出结果为Porm。 38 【正确答案】 A 【试题解析】 通过三次循环,最后 i的值定格在 2,最后储存值 K+2=M,所以最后保存的数值为 M。注意: fclose函数,每次都关闭文件,并且重新回到文件首地址。 39 【正确答案】 C 【试题解析】 首先是定义结构
45、体 st, st中共有两个整型成员 x, y。然后定义一个 st类型的数组 a, a的长度为 2,即数组中含有两个 st类型的元素,分别是 a0和 a1。对 a进行初始化,此题是按照存储顺序进行初始化,即将 5赋给 a0中的x(即 a0 x=5),将 7赋给 a0中的 y(即 a0 y=7),将 2赋给 a1中的 x(即a1 x=2),将 9赋给 a1中的 y(即 a1 y=9)。执行 main函数,输出表达式a0 y*a1 x的值,即 7*2的值 14。 40 【正确答案】 C 【试题解析】 C语言将文件看作是一个字符 (字节 )的序列,即由一个一个字符 (字节 )数据顺序组成。根据数据的组
46、成形式,可将文件分为两种: ASCII文件,又称 文本 (text)文件,它的每一个字节可放一个 ASCII码,代表一个字符; 二进制文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。所以C文件就是一个字节流或一个二进制流。 二、程序填空题 41 【正确答案】 (1)STU (2)scorei (3)&std 【试题解析】 本题考查:数组变量赋值;函数实参定义。 本题是利用结构体存储学生记录,对记录进行修改并由实参 ss返回。 填空 1:实参 ss是一个结构型指针变量,所以应填 STU。 填空 2:该学 生的各科成绩都乘以一个系数 a,所以应填 scorei。 填空 3:函数的
47、调用,由于函数定义时使用的指针结构型变量,所以应填 std。 三、程序修改题 42 【正确答案】 (1)m=n; (2)m=mc; c+; (3)if(m=0) 【试题解析】 (1)每次循环,程序需要对 n执行减去连续的正整数序列,来判断n是否刚好为 0,即 n是否是连续的正整数序列之和,所以需要使用临时变量 m寄存 n的值,每次循环对 m执行减运算操作,不满足继续下一轮,另外程序声明变量 m时,未初始化 它的值,所以此处应该修改为: m=n;。 (2)语法错误, C语言中每个语句必须以分号结束,修改为: m=mc; c+;。 (3)题目判断 n是否是连续的正整数序列之和。若是,则输出所有序列,程序中m依次减去连续的正整数,当 m为 0时,表示 m(即 n)满足条件,再输出当前序列中的每个正整数,所以此处判断条件反了,应修改为: if(m=0)。 四、