1、2013年 9月国家二级( C语言)机试真题试卷及答案与解析 一、选择题 1 一个栈的初始状态为空。现将元素 1、 2、 3、 4、 5、 A、 B、 C、 D、 E依次入栈,然后再依次出栈,则元素出栈的顺序是 ( )。 ( A) 12345ABCDE ( B) EDCBA54321 ( C) ABCDEl2345 ( D) 54321EDCBA 2 下列叙述中正确的是 ( )。 ( A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 ( B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 ( C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况 ( D)循
2、环队列中元素的个数是由队头指针和队尾指针共同决定的 3 在长度为 n的有序线性表中进行二分查找,最坏情况下需要比较的次数是 ( )。 ( A) O(n) ( B) O(n2) ( C) O(log2n) ( D) O(nlog2n) 4 下列叙述中正确的是 ( )。 ( A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 ( B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 ( C)顺序存储结 构能存储有序表,链式存储结构不能存储有序表 ( D)链式存储结构比顺序存储结构节省存储空间 5 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)事件
3、驱动 ( C)模块调用 ( D)数据流 6 在软件开发中,需求分析阶段可以使用的工具是 ( )。 ( A) N-S图 ( B) DFD图 ( C) PAD图 ( D)程序流程图 7 在面向对象方法中,不属于 “对象 ”基本特点的是 ( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 8 一间宿舍可住 多个学生,则实体宿舍和学生之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 9 在数据管理技术发展的三个阶段中,数据共享最好的是 ( )。 ( A)人工管理阶段 ( B)文件系统阶段 ( C)数据库系统阶段 ( D)三个阶段相同 10
4、 有三个关系 R、 S和 T如下: 由关系 R和 S通过运算得到关系 T,则所使用的运算为 ( )。 ( A)笛卡儿积 ( B)交 ( C)并 ( D)自然连接 11 下列叙述中错误的是 ( )。 ( A) C程序可以由多个程序文件组 成 ( B)一个 C语言程序只能实现一种算法 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 12 以下选项中,能用作数据常量的是 ( )。 ( A) 115L ( B) 0118 ( C) 1 5e1 5 ( D) o115 13 按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是 ( )。 ( A)大
5、写字母 ( 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 15 设有定义: int x=2;,以下表达式中,值不为 6的是 ( )。 ( A) 2*x, x+=2 ( B) x+, 2*x ( C) x*=(1+x) ( D) x*=x+1 16 有以下程序: #include main() int x, y, z; x=y=1; z=x+, y+, +y; printf(“ d, d, d n“, x, y,
6、 z); 程序运行后的输出结果是 ( )。 ( A) 2, 3, 3 ( B) 2, 3, 2 ( C) 2, 3, 1 ( D) 2, 2, 1 17 有以下程序: #include main() char c1, c2; cl=A+8-4; c2=A+8-5; printf(“ c, d n“, c1, c2); 已知字母 A的 ASCII码为 65,程序运行后的输出结果是 ( )。 ( A) E, 68 ( B) D, 69 ( C) E, D ( D)输出无定值 18 若有定义 int x, y;并已正确给变量赋值,则以下选项 中与表达式 (x-y)?(x+):(y+)中的条件表达式
7、(x-y)等价的是 ( )。 ( A) (x-y 0 x-y 0) ( B) (x-y 0) ( C) (x-y 0) ( D) (x-y=0) 19 有以下程序: #include main() 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 20 若有定义: float x=1 5; int a=1, b=3, c=2;则正确的 switch语句是 ( )。 ( A) switch(a+b) c
8、ase 1: printf(“* n“); ease 2+1: printf(“* n“); ( B) switch(int)x); case 1: printf(“* n“); case 2: printf(“* n“); ( C) switch(x) case 1 0: printf(“* n“); ease 2 0: printf(“* n“); ( D) switch(a+b) ease 1: printf(“* n“); ease c: printf(“* n“); 21 有以下程序: nclude main() int y=9; for(; y 0; y- -) if(y 3= =
9、0)printf(“ d“, - -y); 程序的运行结果是 ( )。 ( A) 852 ( B) 963 ( C) 741 ( D) 875421 22 有以下程序: #include main() int i, j, m=1; for(i=1; i 3; i+) for(j: 3; j 0; j- -) if(i*j 3)break; m *=i*j; printf(“m= d n“, m); 程序运行后的输出结果是 ( )。 ( A) m=4 ( B) m=2 ( C) m=6 ( D) m=5 23 有以下程序: #include int fun(int x, int y) if(x!
10、=y)return(x+y) 2); else return(x); main() int a=4, b=5, c=6; pfinff(“ d n“, fun(2*a, fun(b, c); 程序运行后的输出结果是 ( )。 ( A) 6 ( B) 3 ( C) 8 ( D) 12 24 有以下程序: include int add(int a, int b)return(a+b); mmn() int k, (* f)(), a=5, b=10; f=add; 则以下函数调用语句错误的是 ( )。 ( A) k=f(a, b); ( B) k=add(a, b); ( C) k=(*f)(a
11、, b); ( D) k=*f(a, b); 25 有以下程序: include main() int n, *p=NULL; *p=&n; pfinff(“Input n: “); scanf(“ d“, &p); pfinff(“output n: “); pfinff(“ d n“, P); 该程序试图通过指针 p为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是 ( )。 ( A) int n, *p=NULL; ( B) *p=&n; ( C) scanf(“ d“, &p) ( D) pfinff(“ d n“, p); 26 下列定义数组的语句中,正确的是 ( )。 (
12、 A) #define N 10 int xN; ( B) int N=10; int xN; ( C) int x010 ; ( D) int x; 27 有以下程序: include main() int a=2, 3, 5, 4, i; for(i=0; i 4; i+) switch(i 2) case 0: switch(ai 2) case 0: ai+; break; case 1: ai- -; break; case 1: ai=0; for(i=0; i 4; i+)printf(“ d“, ai); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A)
13、0 3 0 4 ( B) 2 0 5 0 ( C) 3 3 4 4 ( D) 3 0 4 0 28 有以下程序: include main() int b33=0, 1, 2, 0, 1, 2, 0, 1, 2, i, j, t=1; for(i: 0; i 3; i+) for(j=i; j =i; j+)t+=bibji; printf(“ d n“, t); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 1 ( D) 9 29 以下语句中存在语法错误的是 ( )。 ( A) char ss620; ss1=“right?“; ( B) char ss()20=“
14、right?“; ( C) char*ss6; ss1=“riht?“; ( D) char*ss()=“right?“; 30 以下不能将 s所指字符串正确复制到 t所指存储空间的是 ( )。 ( A) do*t+=*s+; while(*s); ( B) for(i=0; ti=si; i+); ( C) while(*t=*s)t+; s+; ( D) for(i=0, j=0; ti+: sj+; ); 31 有以下程序: i nelude void swap(char * x, char *y) char t; t=*x; *x=*y; *y=t; main() char*s1=“a
15、be“, *s2=“123“; swap(s1, s2); printf(“ s, s n“, s1, s2); 程序执行后的输出结果是 ( )。 ( A) 321, cba ( B) abc, 123 ( C) 123, abc ( D) 1bc, a23 32 有以下函数: int fun(char: * x, char *y) int n=0; while(*x=*y)&*x!= 0)x+; y+; n+; return n; 函数的功能是 ( )。 ( A)将 y所指字符串赋给 x所指存储空间 ( B)查找 x和 y所指字符串中是否有 0 ( C)统计 x和 y所指字符串中最前面连续相
16、同的字符个数 ( D)统计 x和 y所指字符串中相同的字符个数 33 有以下程序: include int fun() static int x=1; x* =2; return x; main() int i, s=1; for(i=1; i =3; i+)8*=fun(); printf(“ d n“, s); 程序运行后的输出结果是 ( )。 ( A) 10 ( B) 30 ( C) 0 ( D) 64 34 在一个 C源程序文件中所定义的全局变量,其作用域为 ( )。 ( A)由具体定义位置和 extern说明来决定范围 ( B)所在程序的全部范围 ( C)所在函数的全部范围 ( D)
17、所在文件的全部范围 35 以下叙述中错误的是 ( )。 ( A)可以通过 typedef增加新的类型 ( B)可以用 typedef将已存在的类型用一个新的名字来代表 ( C)用 typedef定义新的类型 名后,原有类型名仍有效 ( D)用 typedef可以为各种类型起别名,但不能为变量起别名 36 有以下程序: #include struet S int a, b; data2=10, 100, 20, 200; main() struct S p=data1; printf(“ d n“, +(p a); 程序运行后的输出结果是 ( )。 ( A) 10 ( B) 11 ( C) 20
18、 ( D) 21 37 有以下程序: #include #define PT 3 5; #define S(x)PT*x*x; main() int a=1, b=2; printf(“ 4 1f n“, S(a+b); 程序运行后的输出结果是 ( )。 ( A) 7 5 ( B) 31 5 ( C)程序有错无输出结果 ( D) 14 0 38 有以下程序: #include main() unsigned char a=2, b=4, c=5, d; d=a b; d&=c; pfinff(“ d n“, d); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 5 (
19、 D) 6 39 有以下程序: #include #include mmn() int * a, *b, *c; a=b=c=(int *)malloc(sizeof(int); *a=1;, * b=2, *c=3; a=b: pfinff(“ d, d, d n“, *a, *b, *c); 程序运行后的输出结果是 ( )。 ( A) 1, 1, 3 ( B) 2, 2, 3 ( C) 1, 2, 3 ( D) 3, 3, 3 40 以下叙述 中正确的是 ( )。 ( A)当对文件的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 ( B)打开一个已存在的文件并进行了写操作后,
20、原有文件中的全部数据必定被覆盖 ( C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( D) C语言中的文件是流式文件,因此只能顺序存取数据 二、程序填空题 41 下列给定程序中,函数 fun的功能是:计算如下公式前 n项的和,并作为函数值返回。 例如,当形参 n的值为 10时,函数返回值为 9 612558。请在下画线处填入正确 的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构 !试题程序: #includedouble fun(int n)int i; double s, t; *found
21、* s=【 1】;*found* for(i=1; i =【 2】; i+)t=2 0*i;*found* s=s+(2 0*i-1)*(2 0*i+1)【 3】; return s; void main()int n=-1; while(n 0)printf(“Please input(n 0): “); scanf(“ d“, n); ) printf(“ nThe result is: f n“, fun(n); 三、程序修改题 42 下列给定程序中函数 fun的功能是:统计 substr所指的字符串在 sir所指的字符串中出现的次数。 例如,若字符串为 aaas 1kaaas,子字符串
22、为 as,则应输出 2。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增 行或删行,也不得更改程序的结构 ! 试题程序: #include int fun(char*str, char*substr) int i, J, k, num=0; * found* for(i=0, stri, i+) for(j=i, k=0; substrk= =strj; k+, j+) *found* If(substrk+I= = 0) num+; break; return num; main() char str80, substr80; pfinff(“Input a
23、 stnng: “); gets(str); pfinff(“Input a substfing: “); gets(substr); pfinff(“ d n“, fun(str, substr); 四、程序设计题 43 编写函数 fun,其功能是:根据以下公式求, 的值 (要求精度 0 0005,即某项小于 0 0005时停止迭代 )。 程序运行后,若输入精度 0 0005,则程序应输出为 3 14 。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:include#include#includedouble
24、 fun(double eps)V0id main()double x; printf(“Input eps: “); scanf(“ 1f“, x); printf(“ neps= 1f, PI= 1f n“, x, fun(x); 2013年 9月国家二级( C语言)机试真题试卷答案与解 析 一、选择题 1 【正确答案】 B 【试题解析】 栈是按照先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择 B)。 2 【正确答案】 D 【试题解析】 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以 A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化
25、情况,所以 B)与 C)错误。 3 【正确答案】 C 【试题解析】 当有序线性表为顺序存储时才能用二分法查找。可以证明的是对于长度为 n的有序线性表,在最坏情况下,二分法查找只需要比较 log2n次,而顺序查找需要比较 n次。 4 【正确答案】 A 【试题解析】 链式存储结构既可以针对线性结构也可以针对非线性结构,所以 B)与 C)错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以 D)错误。 5 【正确答案】 D 【试题解析】 数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。 6 【正确答案】 B 【试题解析】 在需求分析
26、阶段可以使用的工具有数据流图 (DFD)、数据字典(DD)、判定树与判定表,所以选择 B)。 7 【正确答案】 A 【试题解析】 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A)。 8 【正确答案】 B 【试题解析】 因为一间宿舍可以住多个学生,即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。 9 【正确答案】 C 【试题解析】 数据管理发展至今已经历了 3个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便,逻辑性强,物理性少,在各方面的表现都最好, 一直占据数据库领域的主导地
27、位,所以选择 C)。 10 【正确答案】 D 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据 T关系中的有序组可知 R与 S进行的是自然连接操作。 11 【正确答案】 B 【试题解析】 在一个 C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以 B)错误。 12 【正确答案】 A 【试题解析】 A)选项中 115L表示 115是长整型数据,合法。 B)选项是八进制常量的表 示方法,但是在八进制中不能含有数字 8,所以 B)错误。 C)选项中 e后面应该是整数不能是小数 1 5,所以 C)错误。
28、D)选项中八进制常量应该是数字 “0”开始,而不是字母 “o”开始。 13 【正确答案】 D 【试题解析】 C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以 D)选项中的连接符不合法。 14 【正确答案】 A 【试题解析】 B)与 D)选项中取模运算符的左右两个操作数应均为整数,所以B)、 D)错误。 C)选项中不能将 x+y的值赋给表达式 y*5,所以 C)错误。 15 【正确答案】 A 【试题解析】 A)选项中逗号表达式先计算第一表达式 2*x,然后计算表达式x+=2的值,即 x=x+2即 4,整个逗号表达式为第二个表达式的值 4,所以选择A)。 B)选项中首先计算逗
29、号表达式中第一表达式 x+,此时 x为 3,在执行第二个表达式 2*x=2*3=6,所以逗号表达式为第二个表达式的值 6。 C)选项的赋值表达式可以表示为 x=x*(1+x)=2*(1+2)=6。 D)选项中的表达式可以表示为 x=x*(x+1)=2* 3=6。 16 【正确答案】 C 【试题解析】 z=x+, y+, +y;,因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成 (z=x+), (y+), (+y)。然后从左向右先计算表达式 z=x+,因为 x+先使用后自增,所以 z的值为 1, x的值为 2。再计算逗号表达式第二个表达式 y+,此时 y的值为 2,最后计算第三
30、个表达式 +y, y的值为 3。 17 【正确答案】 A 【试题解析】 本题目中字符变量 c1是字符 A的 ASCII码加上 4,即 69所对应的字符 E。字符变量 c2是字符 A的 ASCII码加上 3,即 68所对应的字符 D。但是打印 输出时, c1以 c的格式输出,所以是 E, c2以 d的格式输出,所以是68。 18 【正确答案】 A 【试题解析】 条件表达式: x=表达式 1?表达式 2:表达式 3的含义是:先求解表达式 1,若为非 0(真 ),则求解表达式 2,将表达式 2的值赋给 x;若表达式 1的值为 0(假 ),则求解表达式 3,将表达式 3的值赋给 x。在本题中与表达式
31、1: (x-y)等价的是 (x-y 0|x-y 0)。 19 【正确答案】 D 【试题解析】 在 if else语句中, else总是与离它最近的 if配对。本题目中 x为1,所以 !x为 0,因此执行 else if语句中的内容,判断 (x=0)是否成立。因为 x为1,所以条件不成立,于是 else if内部的 ifelse 语句不再执行,所以 y的值还是初始值 0。 20 【正确答案】 A 【试题解析】 B)选项中 switch(int)x);语句中不应该有最后的分号。switch(expr1),中的 expr1不能用浮点类型或 long类型,也不能为一个字符串,所以 C)错误。 case
32、后面常量表达式的类型必须与 switch后面表达式的类型一致,所以 D)错误。 21 【正确答案】 A 【试题解析】 第一次 for循环, y的值为 9, y 3的值为 0,满足条件打印 -y,即先减一后打印,所以打印 8; 第二次 for循环, y的值为 7, y 3的值为 1,不执行打印语句; 第三次 for循环, y的值为 6, y 3的值为 0,满足条件打印 -y,即先减一后打印,所以打印 5; 第四次 for循环, y的值为 4,不满足 if条件,不执行打印语句; 第五次 for循环, y的值为 3,满足 if条件,打印输出 2; 第六次 for循环, y的值为 1,不满足条件,不执
33、行打印语句。 22 【正确答案 】 C 【试题解析】 第一次外循环 i的值为 1,第一次内循环 j的值为 3,不满足条件执行 m*=i*j,即 m的值为 3;第二次 j的值为 2,不满足条件执行 m*=i*j,即 m的值为 6;第三次 j的值为 1,不满足条件执行 m*=i*j,即 m的值仍为 6。第二次外循环 i的值为 2, j的值为 3,满足条件,执行 break语句,跳出循环。 23 【正确答案】 A 【试题解析】 本题中第一次调用为 fun(8, fun(5, 6),因为 fun(5, 6)返回值为5,所以第二次调用为 fun(8, 5)=6。所以选择答案 A。 24 【正确答案】 D
34、 【试题解析】 D)选项中 *f(a, b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整型变量 k。 25 【正确答案】 A 【试题解析】 选项 B)的正确写法应为 p= n;,选项 C)的正确写法应为scanf(“ d“, p);,选项 D)的正确写法应为 printf(“ d n“, *p)。 26 【正确答案】 A 【试题解析】 数组说明的一般形式为:类型说明符数组名 常量表达式 。 B)选项中 N是变量,不能用变量定义数组长度。 C)选 项中数组长度是非法的一串数字。定义数组时必须为其指明长度, D)选项中数组长度为空。所以非法。 27 【
35、正确答案】 D 【试题解析】 第一次循环 i为 0, i 2为 0,执行 switch(a0 2)中的 case 0语句后内容即 a0+, a0的值变成 3;第二次循环 i的值为 1, i 2为 1,执行 case 1: ai=0;所以 a1的值变成 O;第三次循环 i的值为 2, i 2为 0,执行switch(a2 2)中的 case 1语句后的内容 a2-, a2的值变成 4;第四次循环 i的值为 3, i 2为 1,执行 case 1: ai=0;,所以 a3的值变成 0。 28 【正确答案】 B 【试题解析】 每次内循环只循环一次就结束,第一次外循环时t=t+b0b00=1+b00=
36、1+0=1;第二次外循环时t=t+b1b11=1+b11=1+1=2;第三次外循环时 t=t+b2b22 =2+b22=2+2=4。 29 【正确答案】 A 【试题解析】 数组定义后,不可以对数组整体赋值, ss是二维数组,因 ss1是一维字符 数组,即字符串,字符串赋值可以使用 strcpy(ss1, “right“);这样的形式,而选项 A)中对二维数组中的第 “1”维 (相当于一个一维数组 )赋值,是不可以的。选项 B)和 D)是定义时对数组初始化,这是可以的。选项 C)中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。 30 【正确答案】 A 【试题解析】 do*t+=*
37、s+; while(*s);不能因为当 *s= 0时, while(*s)跳出循环,这样字符串结束标志 0没有复制给 *t,造成 *t不完整。注意, *t+=*s+是先执行 t=*s,然后才进行 t=t+1, s=s+1。 B)、 C)、 D)都能将 0复制过去。 31 【正确答案】 D 【试题解析】 字符串是一个特殊的数组,所以按照数组的规则, s1应该指向的是数组的首地址,即 “abc” 的第一个字符的地址。 s2指向的是 “123”的第一个字符的地址。调用 swap函数之后交换的是两个字符串的第一个字符 a和 1的内容,所以打印输出为 D)。 32 【正确答案】 C 【试题解析】 本题中
38、由循环条件可知遇到 0或 x与 y所指的字符的值不等中的一个 条件时就结束,所以功能是统计 x和 y所指字符串中最前面连续相同的字符个数。 33 【正确答案】 D 【试题解析】 本题目中静态局部变量 x,在静态存储区内分配存储单元。在程序整个运行期间都不释放。所以第一次循环 s的值为 2;第二次循环中,返回的 x的值为 4,所以 s的值为 8;第三次循环中,返回的 x的值为 8,所以 s的值为 64。 34 【正确答案】 A 【试题解析】 全局变量的作用域是从声明处到文件的结束。所以选择 A)。 35 【正确答案】 A 【试题解析】 关键字 typedef的作用只是将 C语言中的已有的数据类型
39、作了置换,并不是增加新的类型,所以 A)错误。 36 【正确答案】 D 【试题解析】 声明 data是结构 s数组。初始化 data0 a=10;,data0 b=100;, data1 a=20;, data1 b=200。主函数中 p=data1;,即p a: data1 a;, p b: data1 b;。执行语句 printf(“ d n“,+(p a);打印输出时 p a先增 1再打印,即 p a=data1 a=20,先增 1等于21。 37 【正确答 案】 C 【试题解析】 宏定义不是 C语句,末尾不需要有分号。所以语句 printf(“4 1f n“, s(a+b);展开后为
40、printf(“ 4 1f n“, 3 5; *a+b, *a+b; );所以程序会出现语法错误。 38 【正确答案】 B 【试题解析】 &按位与,如果两个相应的二进制位都为 1,则该位的结果值为1,否则为 0。按位或,两个相应的二进制位中只要有一个为 1,该位的结果值为 1。 2的二进制为 00000010, 4的二进制为 00000100,所以做或运算结果为000001 10,该数与 5即 00000101做与操作结果为 00000100,即 4。 39 【正确答案】 D 【试题解析】 malloc函数动态分配一个整型的内存空间,然后把函数返回的地址用 (int*)强制类型转换为整型指针,
41、再把它赋给 a, b, c,即让指针变量 a, b, c都指向刚申请的内存空间。所以只有最后一个赋值语句 *c=3的值保留在了该空间内,因为 a, b, c 3个指针变量均指向该空间,所以打印该空间内的数值为 3。 40 【正确答案】 A 【试题解析】 B)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全 部数据不一定被覆盖,也可以对源文件进行追加操作等。 C)选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开就能读到第 1个数据,可以用 fseek()函数进行重新定位即可。 D)选项中, C语言中的文件可以进行随机读写。 二、程序填空题 41 【正确答案】 【 1
42、】 0 【 2】 n 【 3】 (t*t) 【试题解析】 本题考查:变量初始化操作,需注意该变量是用做累加器还是累乘器; for循环语句。 填空 1:程序开始定义了变量 s,但没有对其进行初始化,根据公式及后面的程序可知变量 s用来存放公式 的前 n项和,因此该变量应初始化为 0。 填空 2:通过 for循环语句将表达式各项进行累加,结果存于变量 s中,循环变量 i的取值范围为 1 n。 填空 3:根据题目要求确定表达式通项。前面已定义 t=2 0*i,因此此空应填(t*t)。 程序要求计算表达式的值时,一般都设定一个变量 s并赋初值。如果 s用来存放表达式的和,则赋初值为 0;如果 s用来存
43、放表达式的积,则赋初值为 1。 三、程序修改题 42 【正确答案】 (1)for(i=0; 8tri; i+) (2)if(substrk+1= 0) 【试题解析】 本题考查: for循环语句和 if条件语句的格式。 for循环语句使用最为灵活,其一般形式为 for(表达式 1;表达式 2;表达式 3),注意表达式之间使用“; ”相隔;在 if条件语句中, if关键字需要区别大小写,不能混淆使用。关键字是由 C语言规定的具有特定意义的字符串,也称为保留字。用户定义的标识符不应与关键字相同,并且关键字应小写。 先看循环条件 for(i=0, stri, i+),不难发现此处 for循环语句的格式
44、有误,其中表达式之间应以 “; ”相隔;同时很容易发现 if条件语句处的关键字书写错误。 四、程序设计题 43 【正确答案】 double fun(double eps) double s=1 0, s1=1 0; int n=1; while(s1=eps) *当某项大于精度要求时,继续求下一项 * s1=s1*n (2*n+1); *求多项式的每一项 * s=s+s1; *求和 * n+; return 2*s; 【试题解析】 本题 考查:迭代法求给定多项式的值。迭代算法是让计算机对一组指令 (或一定步骤 )进行重复执行,在每次执行这组指令 (或这些步骤 )时,都从变量的原值推出它的一个新值。需要注意变量的数据类型以及赋初值操作。 首先应该定义 double类型变量,并且赋初值,用来存放多项式的某一项和最后的总和。从第二项开始以后的每一项都是其前面一项乘以 n (2*n+1),程序中用s1来表示每一项, s表示求和后的结果。需注意 s1和 s的初值都为 1 0,因为循环变量从第二项开始累加。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1