1、国家二级( C语言)笔试模拟试卷 49及答案与解析 1 与数据元素本身的形式、内容、相对位置、个数无关的是数据的 _。 ( A)存储结构 ( B)存储实现 ( C)逻辑结构 ( D)运算实现 2 循环链表的主要优点是 _。 ( A)不再需要头指针了 ( B)己知某个结点的位置后,能够容易找到它的直接前驱 ( C)在进行插入、删除运算时,能更好地保证链表不断开 ( D)从表中任一结点出发都能扫描到整个链表 3 以下关键字序列用快速排序法进行排序,速度最慢的是 _。 ( A) 23, 27, 7, 19, 11, 25, 32 ( B) 23, 11, 19, 32, 27, 35, 7 ( C)
2、 7, 11, 19, 23, 25, 27, 32 ( D) 27, 25, 32, 19, 23, 7, 11 4 当向一棵 m阶的 B-树做插入操作时,若一个结点中的关键字个数等于 _,则必须分裂为 2个结点。 ( A) m ( B) m-1 ( C) m+1 ( D) m/2 5 软件的可维护性度量可分解为多种因素的度量,下列选项中的 _是可维护性度量的内容。 可测试性 可移植性 可复用性 可靠性 ( A)全部 ( B) 和 ( C) 、 和 ( D) 和 6 在数据管理技术发展过程中,文件系统与数据库系统的本质区别是:数据库系统具有 _。 ( A)数据结构化 ( B)数据无冗余 (
3、C)数据共享 ( D)数据独立性 7 先用以下语句定义字符型变量: char c;然后要将字符 a赋给变量 c,则下列语句中正确的是 _。 ( A) c=a; ( B) c=“a“; ( C) c=“97“; ( D) c=97; 8 下列程序的输出结果是 _。 #include stdio.h main () int i=1, j=3; printf(“%d, “, i+); int i=0; i+=j*2; printf(“%d, %d, “, i, j); printf(“%d, %dn“, i, j); ( A) 1, 6, 3, 1, 3 ( B) 1, 6, 3, 2, 3 ( C
4、) 1, 6, 3, 6, 3 ( D) 1, 7, 3, 2, 3 9 执行 x=5 1+2 for(i=0;i 2; i+) for(j=0;pij 0; j+=2) s=10*s+(pij-0); printf(“%dn“,s); 该程序的输出结果是 _。 ( A) 69825 ( B) 63825 ( C) 6385 ( D) 693825 12 以下叙述不正确的是 _。 ( A)分号是 C语言的必要组成部分 ( B) C程序的注释可以写在句的后面 ( C)函数是 C程序的基本单位 ( D)主函数的名字不一定用 main表示 13 若变量已正确定义并赋值,下面符合 C语言的表达式是 _
5、。 ( A) a:=b+1 ( B) a=b=c+2 ( C) int 18.5%3 ( D) a=a+7=c+b 14 C语言运算对象必须是整型的运算符是 _。 ( A) %= ( B) / ( C) = ( D) = 15 下面一组中都是 C语言关键字的是 _。 ( A) double Int for ( B) main while goto ( C) volatile break static ( D) malloc sizeof new 16 若已定义 x和 y为 double类型,则表达式 x=1,y=x+3/2的值是 _。 ( A) 1 ( B) 2 ( C) 2 ( D) 2.5
6、 17 执行语句 for(i=1; i+ 4;);后变量 i的值是 _。 ( A) 3 ( B) 4 ( C) 5 ( D)不定 18 若变量 a、 i已正确定义,且 i已正确赋值,合法的语句是 _。 ( A) a=1 ( B) +i; ( C) a=a+=5; ( D) a=int(i); 19 有如下程序 main() int y=3, x=3, z=1; printf(“%dn“, (+x, y+),z+2); 运行该程序的输出结果是 _。 ( A) 3 4 ( B) 4 2 ( C) 4 3 ( D) 3 3 20 运行以下程序后,如果从键盘上输入 65 14回车,则输出结果为 _。
7、main() int m,n; printf(“Enter m,n: “); scanf(“%d%d“, while(m!=n) while(m n)m-=n; while(n m)n-=m; printf(“m=%dn“,m); ( A) m=3 ( B) m=2 ( C) m=1 ( D) m=0 21 设有以下说明和定义: typedef union long i; int k5; char c; DATE; struct date int cat; DATE cow; double dog; too; DATE max;则下列语句的执行结果是 _。 printf(“%d“, sizeo
8、f (struct date) +sizeof(max); ( A) 26 ( B) 30 ( C) 18 ( D) 8 22 以下程序运行后,输出结果是 _。 #include stdio.h ss (char *s) char *p=s; while(* p)p+; return(p-s); main() char *a=“abded“; int i; i=ss(A); print (“%dn“, i); ( A) 8 ( B) 7 ( C) 6 ( D) 5 23 若有说明: long *p, a;则不能通过 scanf语句正确给输入项读入数据的程序段是 _。 ( A) *p=int i
9、; for(i=0; i 3; i+) pi=chi; for(i=0; i 3; i+) printf(“%s“,pi); ( A) 1.23457e+008 ( B) 1.23457e+008 ( C) 1.23457e+007 ( D) 147 25 以下程序的输出结果是 _。 #includemain() char *p1, *p2,str50=“ABCDEFG“; p1=“abcd“; p2=“efgh“; strcpy(str+1, p2+1);strcpy(str+3, p1+3); printf(“%s“, str); ( A) AfgdEFG ( B) Abfhd ( C)
10、Afghd ( D) Afgd 26 以下程序的输出结果是 _。 main() char w 10=“ABCD“, “EFGH“,“IJKL“, “MNOP“), k; for(k=1; k 3; k+) printf(“%sn“, wk); ( A) ABCD FGH KL M ( B) ABCD EFG IJ ( C) EFG JK O ( D) EFGH UKL 27 若输入 173253,则以下 程序的运行结果为 _。 main() unsigned a; int n1, n2; scanf(“%o“, b5=0; printf(“%sn“,b); 39 下面程序的运行结果是【 】。
11、#define DOUBLE(x,y) x/y main() int x=4,y=2,t; t=DOUBLE(x+y,x-y); printf(“%d“,t); 40 以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用 #作为结束输入的标志,请填空。 #include stdio.h main() FILE *fp; char ch,fname10; printf(“Input the nam n“); gets(fname); if(fp=【 】 =NULL) printf(“Cannot openn“); exit(0); printf(“Enter dat
12、an“); while(ch=getchar()!=#) fputc(【 】 ,fp); fclose(fp); 41 以下程序将数组 a的 4个元素和数组 b的 6个元素写到名为 letter.dat的二进制文件中,请填空。 #include stdio.h main() FILE*fp; char a4=“1234“,b6=“abcdef“; if(fp=fopen(“【 】 “,“wb“)=NULL)exit(0); fwrite(a,sizeof(char),4,fp); fwrite(b,【 】 ,1,fp); fclose(fp); 42 用指针法求出数组元素中最大者和最小者。 i
13、nt max,min; void max_min_value(array,n) int array,n; 【 】 ; max=min=*array; for(【 】 ;p array+n;p+) if(*p max) max=*p; else if(*p min)min=*p; main() int i,number20,*p; p=number; printf(“输入 20个数据 :n“); for(i=0;i 20;i+,p+) scanf(“%d“,p); 【 】 ; max_min_value(p,10); printf(“max=%-10dmin=%dn“,max,rain); 43
14、 下面的程序实现字符串的复制。 void copy_string(from,to) 【 】 ; for(;*from;from+,to+) *to=*from; 【 】 ; main() char *a=“I am wang“,*b=“you are Li“; printf (“%sn%sn“,a,b); 【 】 ; printf(“%sn%snn“,a,b); 国家二级( C语言)笔试模拟试卷 49答案与解析 1 【正确答案】 C 2 【正确答案】 D 3 【正确 答案】 C 4 【正确答案】 A 5 【正确答案】 C 6 【正确答案】 A 7 【正确答案】 A 8 【正确答案】 B 9 【
15、正确答案】 C 10 【正确答案】 B 11 【正确答案】 C 【试题解析】 本题 “ch25=“6937“, “8254“”用于 2行 5列的二维数组初始化, ch00-ch04的值分别为: 6,9,3,7,0; ch10-ch14的值分别为:8,2,5,4,0:第一个 for循环用于将数组指针分别指向二给数 组的第一行和第二行;第二个 for嵌套循环用于取出 p00, p02, p10, p12四个存储单元的数组成一个四位数进行输出。 12 【正确答案】 D 【试题解析】 C语言的程序是由主函数 main()开始运行,由主函数来调用其他函数,所以 D是错误的。 13 【正确答案】 B 【试
16、题解析】 选项 A和 C一望而知其错;对于表达式 a=a+7=c+b(答案 D) ,是先执行赋值表达式 a+7=c+b,再把这个表达式的值赋给 a,显然,表达式 a+7=c+b非法,因为赋值表达式的左侧 不能为常量或表达式。 14 【正确答案】 A 【试题解析】 在 C语言中,模运算 (即取余运算 %)的运算对象必须是整型数据(常量、变量或表达式 )。 15 【正确答案】 C 【试题解析】 C语言中的关键字有 32个关键字 (参见 C语言教程 ),本题中只有C符合题意。 16 【正确答案】 C 【试题解析】 这是一个逗号表达式,它的值应为表达式 y=x+3/2的值,而前一个表达式已给 x赋值
17、1,在没有进行类型转换的情况下, 3/2的值为 1,所以 x+3/2的值应为 2.0。 17 【正确答案】 C 【试题解析】 for语句的一般形式为; for(表达式 1;表达式 2;表达式 3)语句,循环结束的条件是 i+ 4,所以当, i+=4时,循环结束,此时变量 i的值为 5。 18 【正确答案】 B 【试题解析】 选项 D显然是错的,而选项 A没有分号结束,不是 C语句;a+=5违反了赋值表达式左侧必须为一个变量 (不能是常量或表达式 )的规定。 19 【正确答案】 D 【试题解析】 逗号表达式 (+x, y+)的值应该是 y+的值,由于 y+是先引用后自增,所以 y+的值是 3。
18、20 【正确答 案】 C 【试题解析】 分析程序可知,该程序实现的功能是对数 m,n求其最大公约数。在本题中 m与 n的值分别为 65与 14,其最大公约数为 1,故其输出结果为 m=1。 21 【正确答案】 B 22 【正确答案】 D 23 【正确答案】 A 24 【正确答案】 C 25 【正确答案】 D 26 【正确答案】 D 27 【正确答案】 B 28 【正确答案】 C 29 【正确答案】 B 30 【正确答案】 D 31 【正确答案】 链式存储结构 32 【正确答案】 人员 资源 33 【正确答案】 10 34 【正确答案】 5 4 3 2 1 35 【正确答案】 前驱 一 后继 3
19、6 【正确答案】 -32768 32767 37 【正确答案】 ASC 38 【正确答案】 Hello 【试题解析】 语句 b5=0;就相当于语句 b5=0,且 0为字符串结束标志,所以执行该语句后,数组中存放的内容变为 Hello。 39 【正确答案】 2 40 【正确答案】 fopen(fname, “w“) ch 【试题解析】 数组 fname用来存放终端输入的一个文件的文件名;文件使用方式 “w“是为写而打开文本文件。若文件不存在,系统将用在 fopen调用中以指定的文件名建立一个新文件;若存在,则覆盖原有内容; fputs(ch, fp)的功能是将字符ch写到文件指针 fp所指的文件
20、中去。 41 【正确答案】 letter.dat 6*sizeof(char) 【试题解析】 本题主要考查函数 fwrite(char *pt, unsigned size, unsigned n, FILE *fp),把 pt所指向的 n*size个字节输出到 fp所指文件中。 42 【正确答案】 int *p p=array+1 p=number 【试题解析】 函数 max_min_value()中用到了指针变量 p,显然应在第一个空格处填 int *p。函数 max_min_value()中的 for循环逐一把数组中的元素与 max和min的当前值进行比较。 max和 rain的初值是数
21、组的第 1个元素值,第 1次比较应与第 2个元素比较,即 array+1。第二个空格处应填 p=array+1。主函数 main()中的指针变量 p首先指向数组 number的第 1个元素,当第 1个 for循环结束时,它指向数组的最后一个元素。若这时将 p作为实参传给被调用函数,形参 array数组的首址将是 number口数组的最后元素的地址,而 number数组的前 n-1个元素不能参加比较,这将引起计算出错。因此,在调用 max_min_value()函数之前,应将指针 p指向 number数组首址,即在第三个空格应填写 p=umber。 43 【正确答案】 char*from, *t
22、o *to=0 copy_string(a, b) 【试题解析】 函数 copy_string()用到了形参 from, to是指针变量,实参 a、 b是字符串指针,第一个空格应填形参说明语句 “char*from, *to”。当 from所指的字符串全部复制给 to所指的字符串时,有可能 to所指原字符串长度大于 from所指字符串长度,即可能 to所指串的后面字符仍留在复制后的 to所指串中。为避免这种情况,必须在 from所指串复制完后,马上给 to所指串加上串结束符。因此,第二个空格应填 *to=0。 main()函数应调用 copy_string()函数,第三个空格应填copy_string(a, b)。