1、国家二级( C语言)笔试模拟试卷 54及答案与解析 1 在计算机中,算法是指 ( ) ( A)加工方法 ( B)解题方案的准确而完整的描述 ( C)排序方法 ( D)查询方法 2 线性表若采用链式存储结构时,要求内存中可用存储单元的地址 ( ) ( A)必须是连续的 ( B)部分地址必须是连续的 ( C)一定是不连续的 ( D)连续不连续都可以 3 循环链表的主要优点是 ( ) ( A)不再需要头指针了 ( B)从表中任一结点出发都能访问到整个链表 ( C)在进行插入、删除运算时,能更好 的保证链表不断开 ( D)已知某个结点的位置后,能够容易的找到它的直接前件 4 以下不属于对象的基本特点的
2、是 ( ) ( A)分类性 ( B)多态性 ( C)继承性 ( D)封装性 5 开发软件时对提高开发人员工作效率至关重要的是 ( ) ( A)操作系统的资源管理功能 ( B)先进的软件开发工具和环境 ( C)程序人员的数量 ( D)计算机的并行处理能力 6 模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准是模块的( ) ( A)抽象和信息隐蔽 ( B)局部化和封装化 ( C)内聚性和耦合性 ( D)激活机制和控制方法 7 需求分析阶段的任务是确定 ( ) ( A)软件开发方法 ( B)软件开发工具 ( C)软件开发费用 ( D)软件系统功能 8 数据库设计包括两个方面的设计内容,它
3、们是 ( ) ( A)概念设计和逻辑设计 ( B)模式设计和内模式设计 ( C)内模式设计和物理设计 ( D)结构特性设计和行为特性设计 9 “年龄在 1825之间 ”这种约束是属于数据库当中的 ( ) ( A)原子性措施 ( B)一致性措施 ( C)完整性措施 ( D)安全性措施 10 为了合理组织数据,应遵循的设计原则是 ( ) ( A) “一事一地 ”的原则,即一个表描述一个实体或实体之间的一种联系 ( B)用外部关键字保证有关联的表之间的联系 ( C)表中的字段必须是原始数据和基本数据元素,并避免在表之间出现重复字段 ( D)以上各原则都包括 11 下列选项中属于 C语言构造类型的是
4、( ) ( A)指针类型 ( B)空类型 ( C)枚举类型 ( D)数组类型 12 表达式 (double)(20 3)的值为 ( ) ( A) 6 ( B) 6 ( C) 2 ( D) 3 13 设有定义: long x 123456L;,则以下能够正确输出变量 x值的语句是 ( ) ( A) printf(“x %dn“, x); ( B) printf(“x %ldn“, x); ( C) printf(“x %8dLn“, x); ( D) printf(“x %LDn“, x); 14 下列不正确的表达式是 ( ) ( A) a b c ( B) c-, +b, a+ 1 ( C)
5、a=c+b n-m k ( D) p+ 15 以下选项中非法的字符串常量是 ( ) ( B) X0011 ( C) t“ ( D) n007n 16 若有说明语句 “int a; float b;”,以下输入语句正确的是 ( ) ( A) scanf(“%f%f“, b+; printf(“a=%d, b=%dn“, a, B) ; 程序运行后的输出结果是 ( ) ( A) a 2, b 1 ( B) a 1, b=1 ( C) a=1, b=0 ( D) a=2, b=2 24 以下选项中,正确的 if-else语句是 ( ) ( A) if(x! 0) printf(“%d“, x) el
6、se printf(“%d“, -x); ( B) if(x! 0) x x+y; printf(“%d“, x); else printf(“%d“, -x); ( C) if(x!=0) x x+y; printf(“%d“, x); else printf(“%d“,-x); ( D) if(x!=0) x x+y; printf(“%d“, x); else printf(“%d“, -x); 25 有以下程序段 int n=0, p; do scanf(“%d“, 则以下正确的叙述是( ) ( A)两处的 *p含义相同,都说明给指针变量 P赋值 3 ( B)在 “double r 9
7、9, *p 7; *p=r; ”中,把 r的地址赋给了 p所指的存储单元 ( C)语句 “*p r; ”把变量 r的值赋给指针变量 p ( D)语句 “*p=r; ”把变量 r的值放回 P中 34 设有 char str10, 下列语句正确的是 ( ) ( A) scanf(“%s“0, 则程序运行后的输出结果是( ) ( A) 12345 ( B) 1234567 ( C) 12345678 ( D) 123456 38 以下叙述中错误的是 ( ) ( A)局部变量的定义可以在函数体和复合语句的内部 ( B)全局变量的定义可以在函数以外的任何部位 ( C)同一程序内局部变量和全局变量不允许同
8、名 ( D)函数的形参属于局部变量 39 以下叙述中错误的是 ( ) ( A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以 ( B)在程序结束时,应当用 fclose函数关闭已 打开的文件 ( C)在利用 fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据 ( D)不可以用 FILE定义指向二进制文件的文件指针 40 若 fp是指向某文件的指针,且已读到此文件末尾,则库函数 feof(fp)的返回值是 ( ) ( A) EOF ( B) 0 ( C)非零值 ( D) NULL 41 若有如下程序: sub(p, n) int(*p)3, n; int i; fo
9、r(i=0; i =n; i+) printf(“%d“, *(*(p+i)+n); main() int s33 1, 2, 3, 4, 5, 6, 7, 8,9; sub(s, 2); 则程序运行后的输出结果是 ( ) ( A) 3 6 9 ( B) 2 4 8 ( C) 4 5 6 ( D) 7 8 9 42 有以下的程序 #include stdio.h void fun(char *fname, char *st) FILE *myf; int i; myf=fopen(fname, “w“); for(i=0; i strlen(st);i+)fputc(sti, myf); fc
10、lose(myf); main() fun(“test.t“, “new world“);fun(“test.t“, “hello, “); 程序执行后,文件 test t中的内容是 ( ) ( A) hello, ( B) new worldhello, ( C) new world ( D) hello, rld 43 若有以下说明和定义 fun(int *C) main() int(*A) () fun, *b(), w10,c; 在必要的赋值之后,对 fun函数的正确调用语句是 ( ) ( A) a a(w); ( B) (*a) (*b=c; main() cha, a, b; a
11、A; b B; sub3(putchar(b); a A; b=B; sub2(putchar(a); putchar(b); a A; b=B; sub1(a, b) ; putchar(a); putchar(b); 程序运行后的输出结果是( ) ( A) BABBAB ( B) ABBBBA ( C) BABABA ( D) BAABBA 45 有以下程序 void ss(char * s, char t) while(*s) if(*s=t)*s t-a+A; s+; main() char str1100 “abcddfefdbd“, c d: ss(str1, C) ; print
12、f(“%sn“, str1); 程序运行后的输出结果是 ( ) ( A) ABCDDEFEGDBD ( B) abcDDfefDbD ( C) abcAAfefAbA ( D) Abcddfefdbd 46 有如下说明 int a10 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, *p=a; 则数值为9的表达式是 ( ) ( A) *p+9 ( B) *(p+8) ( C) *p+ 9 ( D) p+8 47 下面函数的功能是 ( ) sss(s, t) char *s, *t; while(*s)too; DATE max; 则下列语句的执行结果是( ) printf(“%d
13、“, stzeof(struct date)+sizeof(max); ( A) 25 ( B) 30 ( C) 18 ( D) 8 49 fwrite函数的一般调用形式是 ( ) ( A) fwrite(buffer, count, fp, size); ( B) fwrite(fp, size, count, buffer); ( C) fwrite(fp, count, size, buffer); ( D) fwrite(buffer, size, count, fp); 50 以下程序的输出结果是 ( ) struct HAR int x, y; struct HAR *p; h2;
14、 main() h0.x 1; h0.y=2; h1.x 3; h1.y 4; h0.p= 57 下列程序的输出结果是 16 00,请填空 : main() int a=9, b=2; float x=【 】 ,y=1 1, z; z=a/2+b*x/y+1/2; printf(“%5.2fn“,z); 58 用以下语句调用库函数 malloc,使字符指针 st指向具有 11个字节的动态存储空间,请填空。 st=(char*)【 】; 59 下列程序段的输出结果是【 】。 main() char b=“Hello, you“; b5=0; printf(“%sn“, B); 60 下列程序段的
15、输出结果是【 】。 int n=c; switch(n+) default:printf(“error“); break; case a: case A: case b: case B: printf(“good“);break; case c: caseC: printf(“pass“); case d: caseD: printf(“warn“); 61 以下程序通过函数指针 p调用函数 fun,请在填空栏内写出定义变量 p的语句。 void fun(int*x,int*y) main() int a=10,b=20; 【 】: p=fun; p( 63 下列程序的输出结果是【 】。 vo
16、id fun(int *n) while(*n)-); printf(“%d“, +(*n); main() int a=100; fun( 65 以下程序运行后的输出结果是【 】。 main() char a=“Language“,b=“Programe“; char, p1, *p2; int k; p1=a,p2=b; for(k=0; k =7; k+) if*(p1+k)=*(p2+k)printf(“%c“, *(p1+k); 66 下面程序把从终端读入的文本 (用 作为文本结束标志 )输出到一个名为 bi dat的新文件中,请填空。 #include “stdio h“ FILE
17、 *fp; main() char ch; if(fp=fopen( 【 】 )=NULL)exit(0); while(ch=getchar()!=)fputc(ch,fp); fclose(fp); 67 若变量 n中的值为 24,则 prnt函数共输出【 】行。 void prnt(int n, int aa) int i; for(i=1; i =n; i+) printf(“%6d“, aai); if!(i%5)printf(“n“); printf(“n“); 68 以下程序是从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。请填空。 main() int i,a20,
18、sum,count; sum=count=【 】; for(i=0; i 20; i+)scanf(“%d“,【 】 ); for(i=0; i 20; i+) if(ai 0) count+: sum+=【 】; printf(“sum=%d,count=%dn“,sum.count); 国家二级( C语言)笔试模拟试卷 54答案与解析 1 【正确答案】 B 2 【正确答案】 D 3 【正 确答案】 B 4 【正确答案】 C 5 【正确答案】 B 6 【正确答案】 C 7 【正确答案】 D 8 【正确答案】 A 9 【正确答案】 C 10 【正确答案】 D 11 【正确答案】 D 12 【正
19、确答案】 B 13 【正确答案】 B 14 【正确答案】 C 15 【正确答案】 4 16 【正确答案】 C 17 【正确答案】 C 18 【正确答案】 A 19 【正确答案】 D 20 【正确答案】 D 21 【正确答案】 D 22 【正确答案】 A 23 【正确答案】 A 24 【正确答案】 B 25 【正确答案】 D 26 【正确答案】 B 27 【正确答案】 A 28 【正确答案】 C 29 【正确答案】 C 30 【正确答案】 C 31 【正确答案】 A 32 【正确答案】 D 33 【正确答案】 D 34 【正确答案】 D 35 【正确答案】 A 36 【正确答案】 C 37 【正
20、确答案】 D 38 【正确答案】 C 39 【正确答案】 D 40 【正 确答案】 C 41 【正确答案】 A 42 【正确答案】 A 43 【正确答案】 B 44 【正确答案】 A 45 【正确答案】 B 46 【正确答案】 B 47 【正确答案】 B 48 【正确答案】 B 49 【正确答案】 D 50 【正确答案】 D 51 【正确答案】 log2n 52 【正确答案】 存储结构 53 【正确答案】 对象类 54 【正确答案】 软件开发 55 【正确答案】 数据库管理系统 56 【正确答案】 2, 1 【试题 解析】 本题中,执行 a=a+b时, a=1, b=2, a=1+2=3,b=
21、a-b时, a=3,b=2, b=3-2=1; a=a-b时, a=3, b=1, a=3-1=2;因此,本题的输出是 2, 1 57 【正确答案】 6.6 【试题解析】 本题,已知结果 z=16.00,即 16.0=a/2+b*x/y+1/2,分别把 a、 b,代入,得到 16.0=9/2+2*x/1.1+1/2。因为 a=9, a是整型,所以 9/2的值在没有进行类型转换时,等于 4, 1/2同理,等于 0。代入求一元一次方程,很容易就可以得出 x=6.6。 58 【正确答案】 malloc(11) 【试题解析】 malloc函数的格式是 void*(或 char*)malloc(size
22、), size表示应分配的存储区,此题要分配 11字节的单元,把 11代入即可。 59 【正确答案】 Hello 【试题解析】 字符串中,数值 0或符号 /0表示字符串的结束。本题中, b5被赋了 0值,表明字符串 b的第六个字符就是结束标志。因此,只输出前五个字符,即 Hello。 60 【正确答案】 passwarn 【试题解析】 n+是在执行完其所在的语句后 再加 1,因此,在执行 case的时候, n的值依然为 c,执行 casec后面的语句,先打印出 “pass”;在执行完 casec后,未遇到 break跳出 switch,便接着执行下面的语句,又打印出 warn。所以此题输出结果
23、是 passwarn。 61 【正确答案】 void(*p)(); 【试题解析】 要定义 p为指向函数的指针变量,需写成 void(*p)();,注意 *p两侧的括弧不可以省略,表示 P先与 *结合,是指针变量,再与后面的 ()结合,表示此指针变量指向函数,这个函数无返回值 (同 fun()函数 )。 62 【正确答案】 24 【试题解析】 本题程序定义了一维数组 p,有七个数组元素,整型变量 i, j初值分别为 0,当 while的条件表达式 (i 7,如:当 i=0时, i 7为真, pi%2=11%2=1,表达式 (pi%2=1)的值为真,所以整个表达式 (i 7&pi%2=1)的值为真
24、,执行 j=j+pi+=0+11=11,i=1;,依此类推可以得出答案 24。 63 【正确答案】 0 【试题解析】 在函数 fun()中, while(*n)-)是先引用 *n的值,再做 (*n)-运算,所以循环结束时 *n的值为 0,再做 (*n)-运算后, *n的值为 -1;执行 +(*n)后, *n的值是 0。 64 【正确答案】 10 【试题解析】 整型指针最初被赋的值是数组 arr的头指针,即指向数组的第一个元素 30, p+后,指针指向数组的下一个元素,即 *p=arr1=25,在执行 *(p+3)时,则相当于 a1+3,即 10。因此,输出应为 100。 65 【正确答案】 g
25、ae 【试题解析】 本题定义了两个字符串 数组 a, b,字符型指针变量 p1和 p2,且分别指向字符串数组 a和 b,抽打 for循环,当 if(*(p1+k)=*(p2+k)条件为真,执行输出 *(p1+k)对应的字符。即当 k=0时, *(p1+k)对应的字符串数组 a中的字符L, *(p2+k)对应的字符串数组 b中字符 P,因此 if(*(p1+k)=*(p2+k)条件为假,不执行 printf语句,依此类推,将字符串数组 a和 b中对应位置上的字符 比较,如果对应位置上的字符相同,则输出该字符。 66 【正确答案】 dat“,“w“或 “bi.dat“, “w+“或 “bi.dat
26、“,“r+“ 【试题解析】 本题的考点是 fopen()函数,此函数的格式是 fopen(文件名,使用文件方式 ),题目的要求是将从键盘读入的文本写到文件中,因此选择的打开方式应该是 “w“(只写 )。或者是读写 “r+”或 “w+”。 67 【正确答案】 5 【试题解析】 本题的关键在于 if(!(i%5)printf(n),这句,即如果 i可被 5整除时,则换行。 i值为 24,可以被 5整除 4次,并余 4,因此, prnt函数共输出 5行,最后一行有 4个数。 68 【正确答案】 0 &ai ai 【试题解析】 本题要求从终端读入数据到数组中,统计其中正数的个数,井计算它们的和。程序中首先要对存放正数个数的变量 count及存放和值的变量 sum初始化为 0,所以第一空应填 0。接着要求从终端读入数据到数组中,可以通过scanf函数实现,因此第二空应填 &ai。最后通过 sum+=ai;语句累加正数 ai的值到 sum中,因此第三空应填 ai。