1、国家二级( C语言)笔试模拟试卷 100及答案与解析 1 在计算机中,算法是指 _ 。 ( A)查询方法 ( B)加工方法 ( C)解题方案的准确而完整的描述 ( D)排序方法 2 栈和队列的共同点是 _。 ( A)都是先进后出 ( B)都是先进先出 ( C)只允许在端点处插入和删除元素 ( D)没有共同点 3 已知二叉树 BT的后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是 _。 ( A) cedba ( B) acbed ( C) decab ( D) deabc 4 在下列几种排序方法中,要求内存量最大的是 _。 ( A)插入排序 ( B)选择排序 ( C)快
2、速排序 ( D)归并排序 5 在设计程序时,应采纳的原则之一是 _。 ( A)程序结构应有助于读者理解 ( B)不限制 goto语句的使用 ( C)减少或取消注解行 ( D)程序越短越好 6 下列不属于软件调试技术的是 _ 。 ( A)强行排错法 ( B)集成测试法 ( C)回溯法 ( D)原因排除法 7 下列叙述中,不属于软件需求规格说明书的作用的是 _。 ( A)便于用户、开发人员进行理解和交流 ( B)反映出用户问题的结构,可以作为软件开发工作的基础和依据 ( C)作为确认测试和验收的依据 ( D)便于开发人员进行需求分析 8 在数据流图 (DFD) 中,带有名字的箭头表示 _。 ( A
3、)控制程序的执行顺序 ( B)模块之间的调用关系 ( C)数据的流向 ( D)程序的组成成分 9 SQL语言又称为 _。 ( A)结构化定义语言 ( B)结构化控制语言 ( C)结构化查询语言 ( D)结构化操纵语言 10 视图 设计一般有 3种设计次序,下列不属于视图设计的是 _。 ( A)自顶向下 ( B)由外向内 ( C)由内向外 ( D)自底向上 11 以下说法中,不正确的是 ( A) C程序中必须有一个 main()函数,从 main()函数的第一条语句开始执行 ( B)非主函数都是在执行主函数时,通过函数调用或嵌套调用而执行 ( C) C程序中的 main()函数必须放在程序的开始
4、位置 ( D) C程序中的 main()函数位置可以任意指定 12 变量 a已被定义为整型,下列表达式不正确的是 ( A) a=A+20 ( B) a-=a ( C) a=c+d ( D) a=c+d 13 下面程序的输出结果是 #include stdio h main() int i=010, j=10; Printf(“%d, %d”, +i, j-); ( A) 11, 10 ( B) 9, 10 ( C) 010, 9 ( D) 10, 9 14 下面可以作为 C语言用户标识符的一组是 ( A) void define WORD ( B) a3_b3_123 IF ( C) for
5、-abc case ( D) 2a D0 sizeof 15 下面哪一个是正确的赋值语句 ? ( A) a+; ( B) a=b; ( C) a+=b; ( D) a=1, b=1; 16 若有定义: int a=8, b=5, c;执行语句 c=a/b+0.4;后, c的值为 ( A) 1.4 ( B) 1 ( C) 2 ( D) 2 17 若变量 a是 int类型,并执行了语句: a=A+1.6;则正确的叙述是 ( A) a的值是字符 C ( B) a的值是浮点型 ( C)不允许字符型和浮点型相加 ( D) a的值是字符 A的 ASCII值加上 1。 18 以下程序段的输出结果是 int
6、a=1234; printf(“%2dn”; A) ; ( A) 12 ( B) 34 ( C) 1234 ( D)提示出错、无结果 19 以下选项中不属于 C语言的类型的是 ( A) signed short int ( B) unsigned long int ( C) unsigned int ( D) long short 20 若有说明语句: int a, b, c, *d= strcpy(string,scmp(string,str2); printf(“%sn“,string); 若运行时依次输入 abcd、 abba和 abc三个字符串,则输出结果为 _。 ( A) abcd
7、( B) abba ( C) abc ( D) abca 31 下列程序的输出结果是 _。 main() char a10-(9,8,7,6,5,4,3,2,1,0,*p=a+5; printf(“%d“,*-p); ( A)非法 ( B) a4的地址 ( C) 5 ( D) 3 32 对下面的程序进行编译与连接生成可执行文件 c exe,并在 DOS命令提示符下输入: c I said “ I love China“! 程序代码如下: main(int argc,char*argv ) printf(“%d“,argC) ; 其输出结果为 _ 。 ( A) 4 ( B) 5 ( C) 6 (
8、 D) 7 33 下列程序的运行结果是 _。 void fun(int * a,int *B) int*k; k=a; a=b; b=k; main() int a=3,b=6,*x for(i=0; i 3; i+)pi=ai*(1+1); for(i=0; i 3;i+)k+=pi*2; printf(“%dn“, k); ( A) 20 ( B) 21 ( C) 22 ( D) 23 42 当执行下面的程序时,其输出结果为 _。 union st int a; char b; main() union st s; char* p=(char *) ( A) ABC6789 ( B) AB
9、C67 ( C) 12345ABC6 ( D) ABC456789 44 main(int argc, char * argv) while(-argc 0)printf(“%s“,argvargc); printf“n“); 假定以上程序经编译和连接后生成可执行文件 PROG EXE,如果在此可执行文件所在目录的 DOS提示符下键入 PROG ABCDEFGHIJKL,则输出结果为 _。 ( A) ABCDEFG ( B) IJHL ( C) ABCDEFGHIJKL ( D) IJKLABCDEFGH 45 设 char型变量 x中的值为 10100111,则表达式 (2+x)(-3)的值
10、为 _。 ( A) 10101001 ( B) 10101000 ( C) 11111101 ( D) 1010101 46 以下程序的输出结果是 _。 long fum(int n) long s; if(n=|n=2)s=2; else s=n-fun(n-1); return s; main() printf(“%ldn“,fun(3); ( A) 1 ( B) 2 ( C) 3 ( D) 4 47 以下程序试图把从终端 输入的字符输出到名为 abc txt的文件中,直到从终端读入字符串 #号时结束输入和输出操作,但程序有错 #include stdio.h main() FILE *
11、fout; char ch; fout=fopen(abc txtw); ch=fgetc (stdin); while(ch!=#) fputc(ch,fout); ch=fgetc(stdin); fclose(fout); 出错的原因是 _。 ( A)函数 fopen调用形式错误 ( B)输入文件没有关闭 ( C)函数 fgetc调用形式错误 ( D)文件指针 stdin没有定义 48 以下程序的输出结果是 _。 #define SQR(X) X * X main() int a=16,k=2,m=1; a/=SQR(k/m) SQR(k+m); printf(“%dn“, A) ; (
12、 A) 16 ( B) 2 ( C) 9 ( D) 1 49 假定建立了以下链表结构,指针 p、 q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是 _。( A) free (q); p- next=q- next; ( B) (*p) next=(*q) next; free(q); ( C) q=(*q) next; (*p) next=q; free(q); ( D) q=q- next; p- next=q; p=p- next; free(p): 50 以下程序的输出结果是 _。 main() int x=05; char z=a; printf(“%
13、dn“,(x 的功能相同,请补充完整。 if( 【 】 ) if( 【 】 )y=2*x-1; else y=x; else y=3*x-11; 61 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用 #结束输入)存放到此文件中,形成文本文件,并将字符的个数写到文件的尾部。请填空。 #include stdio.h main() FILE *fp; char ch,fname32; int count=0; printf(”Input the filename: “); scanf(“%s“,fname); if(fp=fopen( 【 】 ,“w+“)=NULL) printf(“C
14、ant open file: %sn“,fname); exit(0); printf(“Enter data:n“); while(ch=getchar()!=#) fputc(ch,fp); count+; fprintf( 【 】 , “n%dn“, count); fclose(fp); 62 函数 void fun(float*sn,int n)的功能是:根据以下公式计算 S,计算结果通过形参指针 sn传回; n通过形参传入, n的值大于等于 0。请补全程序。 S=1-1/3+1/5-1/7+1/(2n+1) void fun(float*sn,int n) float s=0.0,
15、w,f=-1.0; int i=0; for(i=0; i =n; i+) f= 【 】 *f; w=f/(2*i+1); s+=w; 【 】 =s; 63 下面的函数 strcat(str1, str2)实现将字符串 str2拼接到字符串 str1后面的功能。请填空使之完整。 char*strcat(str1,str2) char*str1,*str2; char*t=str1; while( 【 】 )str1+; while( 【 】 ); return(t); 64 以下函数 fun用于求两个整数 a和 b的最大公约数。 fun(a,B) int a, b; int i,j,m,n;
16、if(a B) m=a; a=b; 【 】 ; i=a;j=b; while(n= 【 】 )!=0) j=i; i= 【 】 ; return(i); 国家二级( C语言)笔试模拟试卷 100答案与解析 1 【正确答案】 C 【试题解析】 计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:可行性、确定性、有穷性和拥有足够的情报。 2 【正确答案】 C 【试题解析】 栈和队列是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈是一种 “后进先出 ”的线性表;而队列是一种 “先进先出 ”的线性表。 3 【正确答案】 A 【试题解析】 二叉树 BT的后序遍历序
17、列为 dabec,故 BT的根结点为 c;而 BT的中序遍历序列是 debac,即遍历序列中最后一个结点为跟结点,说明 BT的右子树为空。由 BT的的后序遍历序列和中序遍历序列可知 BT的左子树 (LST)的后序遍历序列和中序遍历序列分别为 dabe和 deba(树是递归定义的 );故 LST的根结点是 e,在由 LST的中序遍历序列可知其左子树为 d。因此 BT的前序遍历序列为cedba。 4 【正确答案】 D 【试题解析】 快速排序的基本思想是,通过一趟排序将待排序记录分割成独立 的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,再分别对这两部分记录继续进行排序,以达到整个序列有
18、序;插入排序的基本操作是指将无序序列中的各元素依次插入到已经有序的线性表中,从而得到一个新的序列;选择排序的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面 (这是它应有的位置 ),然后对剩下的子表采用同样的方法,直到表空为止;归并排序是将两个或两个以上的有序表组合成一个新的有序表。 5 【正确答案】 A 【试题解析】 滥用 goto语句将使程序流程无规律,可读性差;添加的注 解行有利于对程序的理解,不应减少或取消;程序的长短要依照实际需要而定,并不是越短越好。 6 【正确答案】 B 【试题解析】 调试的关键在于推断程序内部的错误位置及原因。主要的调试方法有强行排错法、回溯
19、法和原因排除法。 7 【正确答案】 D 【试题解析】 软件需求规格说明书是需求分析阶段的最后成果,是软件开发中的重要文档之一。它不能力便开发人员进行需求分析。 8 【正确答案】 C 【试题解析】 在数据流图中,用标有名字的箭头表示数据流。数据流可以从工流向加工,也可以从加工流向文件 或从文件流向加工,并且可以从外部实体流向系统或从系统流向外部实体。 9 【正确答案】 C 【试题解析】 结构化查询语言 (Structured Query Language,简称 SQL)是集数据定义、数据操纵和数据控制功能于一体的数据库语言。 10 【正确答案】 B 【试题解析】 视图设计一般有 3种设计次序,它
20、们分别是自顶向下、自底向上和由内向外,它们又为视图设计提供了具体的操作方法,设计者可根据实际情况灵括掌握,可以单独使用也可混合使用。 11 【正确答案】 C 【试题解析】 main()函数的作用,以及 main()函数在程序中出现的位置。一个完整的 C语言程序有且仅有一个主函数 (main()函数 )。程序总从 main()函数的第一条语句开始执行,到 main()函数的最后 条语句结束,其他函数都是在执行 main()函数时,通过函数调用或嵌套调用而得以执行的。 C语言规定, main()函数在程序中的位置是任意的。 12 【正确答案】 C 【试题解析】 在 C语言中,字符变量可参与任何整数
21、运算。本题中只有 C有错,因为 C选项中 c、 d如果是字符常量,应有单引号,如果是变量,应该提前定义 。 13 【正确答案】 B 【试题解析】 程序中 i的值用八进制表示 (十进制为 8), +i是在变量使用前自身先加 1,而 j-是在变量使用后自身减 1。 14 【正确答案】 B 【试题解析】 在 C语言中,合法的标识符可以由字母、数字和下划线组成,其中关键字不能作为用户的标识符,且开头的第一个字符必须为字母或下划线。选项 A中 void为关键字;选项 C中 for和 case为关键字;选项 D中 sizeof为关键字。 15 【正确答案】 B 【试题解析】 C语言中赋值语句是由赋值表达式
22、加 “;”构成 的。赋值表达式的形式为:变量 =表达式;。选项 A中 a+相当于 a+1,是赋值语句;选项 C和选项 D也是赋值语句。只有选项 B不是,因为选项 B中 “=”符号是等于的意思,并不是赋值运算符。 16 【正确答案】 B 【试题解析】 在表达式中根据运算的结合性和运算符的优先级,首先计算的是 a/ b(8/5=1),再将 1+0.4赋值给 c,由于 c为整型变量所以要将 1.4转换为整型,即舍弃小数位 (c的值变为 1)。 17 【正确答案】 D 【试题解析】 在 C语言中规定允许不同类型的量进行运算,但在运算时需转换成高级的类型进行运算。在表达式中有字符型和实型参加运算时,统一
23、转换为实型再运算,当运算结果存入变量时再转换为该变量的类型。 18 【正确答案】 C 【试题解析】 printf()函数的输出格式,当整数的值超过格式要求输出范围时,原样输出。本题中要求输出两个有效数字,而实际上 a有 4个有效数字,故原样输出,输出 1234。 19 【正确答案】 D 【试题解析】 在选项中很明显选项 A为无符号短整型,选项 B为无符号长整型,选项 C为无符号整型,而选项 D的类型在 C语言中不存在。 20 【正确答案 】 A 【试题解析】 scanf()函数有两个参数,第一个参数是输入格式字符串,第二个参数是输入变量地址列表。输入格式字符串主要由 “%”符号和格式字符组成。
24、地址列表是由多个地址组成的。选项 B中 d已经为地址,不应再加上求地址符号“由 于 (a+b) (c+d)为真,所以 t=(a+b),即为 7。 58 【正确答案】 0 【试题解析】 对于 个 nusigned short short来说,它能取的最大值是 65535。这里给 a赋值 65536,已经超出了它的取值范围,这样它的高位将被截掉,只把低位赋给它 (全零 )。所以 a的值实际为 0。 59 【正确答案】 a=26,b=14,c=19 【试题解析】 这种条件表达式的 般形式为:表达式 1?表达式 2:表达式 3,三目运算符的执行顺序,先求解表达式 1,若非 0则求解表达式 2,此时表达
25、式 2的 值就作为整个表达式的值,若表达式 1的值为 0,则求解表达式 3,此时表达式3的值就作为整个表达式的值。 C语言在做一系列表达式相与时,从左到右分别计算各表达式的值,一旦遇到一个表达式为 false,则剩余的表达式都不再进行运算。该题中, a+ =2的值为 false,则 b- =2和 c+就都不再运算再运算。 60 【正确答案】 x 10 x =1 【试题解析】 条件表达式的一般形式为,表达式 1?表达式 2:表达式 3条件运算符的执行顺序:先求解表达式 1,若为非 0(真 )则求解表达式 2,此时表达式 2的值就作为整个条 件表达式的值;若表达式 1的值为 0(假 ),则求解表达
26、式 3,表达式 3的值就是整个条件表达式的值。 y=(x =10)?3*x-11: (x =1)?x:2*x-1;的功能是先求 (x =1)?x: 2*x-1;的值,所的的结果再与前面的语句构成条件表达式进行求值。所以第一个空格处应该填 x 10,第二个空格处应该填 x =1。 61 【正确答案】 fname fp 【试题解析】 fopen()函数实现打开文件的功能,通常的调用方式为: FILE *fp;fp=fopen(文件名,使用文件方式 ),因此,第一个横线处 要求填写要打开文件的名字 fname。 fprintf()函数的 般调用方式为: fprintf(文件指针,格式字符串,输出表列
27、 ),所以第二个横线处应填写 fp。 62 【正确答案】 -1或 -1.0 *sn 【试题解析】 由于在对 S求和时,相邻两项的符号刚好相反,而在函数 fun中没有对数据进行取反的操作,故第 空的目的是对数据进行取反,以保证序列中相邻两项的符号不同。故第 个应填 -1 或 -1.0。在执行完循环体后,要将求和结果通过指针参数的形式传递绐调用 fun的函数,故第二空应填 *sn。 63 【正确 答案】 *str1 或 *str1!=0 或 *str1!=0 或 *str1!=NUL *str1+=*str2+ 或 *str1+=*str2, *str2+ 【试题解析】 函数 strcat(str
28、1,str2)实现将字符串 str2连接到字符串 str1后面,所以首先要找到字符串 str1的串尾,根据 C语言的语法规定,一个串的串尾 定是 个隐含字符 “0”,而在程序中,对字符串中字符的访问是通过两个指针变量来完成的,因此要找到字符串 str1的串尾,要判断: str1是否为 “0”,要找到字符 串str2的串尾,要判断 *str2是否为 “0”,程序中必须以使字符串中字符逐 顺序体现,所以在题中我们应填写 “*str1”和 “*str1+=*str2+”。 64 【正确答案】 b=m j%i n 【试题解析】 函数中的变量 i和 j分别存放两个形参的最小数和最大数,在语句i=a和 j=b执行之前,要将 a和 b分别变为最小数和最大数,当 a b时,程序使用中间变量将两者交换,所以题中第 个空中应当填写 “b=m”;为求两个整数的最大公约数,程序的 where循环条件必须为 j整除 i成立,所以题中第二个空中 应当填写 “j%i”;程序要通过 i的值返回最大公约数,因此在循环中要将每次整除的公钓数赋给 i,以保证最后返回的是两个,整数的最大公约数,所以第三个空中应当填写 “n”。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1