1、二级 C语言分类模拟题 561及答案解析(总分:47.50,做题时间:90 分钟)一、选择题(总题数:30,分数:47.50)1.有以下程序: int f1(double a) return a*a; int f2(int x,int y) double a,b; a=f1(x); b=f1(y); return a+b; main() double w; w=f2(2.1,4.0); ) 变量 w的值是_。(分数:2.00)A.20.21B.20C.20.0D.0.02.若变量已正确定义,下列正确的程序段是 _ 。(分数:2.00)A.while(ch=getchar()=“/N“)putc
2、har(ch);B.while(ch=getchar()=“/n“)putchar(ch);C.while(ch=getchar()!=“/N“)putchar(ch);D.while(ch=getchar()!=“/n“)putchar(ch);3.下列叙述中错误的是_。(分数:1.00)A.一个 C语言程序只能实现一种算法B.C程序可以由多个程序文件组成C.C程序可以由一个或多个函数组成D.一个 C函数可以单独作为一个 C程序文件存在4.以下选项中错误的是 _(分数:1.00)A.char *sp; gets(sp);B.char sp5 gets(sp);C.char *sp=“1234
3、5“; gets(sp);D.charsp5“/0“ gets(sp)5.以下程序段中,不能实现条件“如果 ab 则 x=10,否则 x=-10”的是_。(分数:1.00)A.x=(a=b)?-10:10;B.if(ab)x=10;else x=-10;C.x=-10;if(ab)x=10;D.if(ab)x=10;if(ba)x=-10;6.有以下程序段 int i, n; for(i=0; i8; i+) n=rand()%5; switch(n) case 1: case 3:printf(“%d/n“, n); break; case 2: case 4:printf(“%d/n“,
4、n); continue; case 0:exit(0); printf(“%d/n“, n); 以下关于程序段执行情况的叙述,正确的是_。(分数:2.00)A.当产生的随机数 n为 4时结束循环操作B.当产生的随机数 n为 0时结束程序运行C.当产生的随机数 n为 1和 2时不做任何操作D.for循环语句固定执行 8次7.算法的有穷性是指_。(分数:2.50)A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用8.以下选项中,合法的数值型常量是_。(分数:1.00)A.3.2B.“X“C.099D.0xEH9.若函数调用时的实
5、参为变量时,以下关于函数形参和实参的叙述中正确的是_。(分数:2.00)A.函数的形参和实参分别占用不同的存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的实参和其对应的形参共占同一存储单元10.计算机能直接执行的程序是_。(分数:1.00)A.源程序B.目标程序C.汇编程序D.可执行程序11.有以下程序,最后输出的值为_。 main() int a44 =1,4,3,2), 8 6,5,7, 3,7,2,5, 4,8,6,1, i, j, k, t; for(i=0; i4; i+) for(j=0; j3; j+) for(k=j+i; k4;
6、 k+ if(ajiaki) t=aji; aji=aki; aki=t; for(i=0; i4; i+) printf(“% d,“, aii); (分数:2.50)A.1,6,5,7B.8,7,3,1C.4,7,5,2D.1,6,2,112.以下叙述中错误的是_。(分数:1.00)A.在一个程序中,每个模块均可以独立编译运行B.程序“模块化”有利于任务的分解简化C.允许对函数单独进行编译,是 C语言实现“模块化”的基础D.采用模块化结构,可以提高编程效率13.在数据结构中,从逻辑上可以把数据结构分为_。(分数:1.00)A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结
7、构D.内部结构和外部结构14.有以下程序 #includestdio.h main() int i;j; for(i=1;i4;i+) for(j=i;j4;j+)printf(“%d*%d=%d“,i,j,i*j); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.1*1=1 1*2=2 1*3=32*2=4 2*3=63*3=9B.1*1=1 1*2=2 1*3=32*1=2 2*2=43*1=3C.1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=9D.1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=915.有下列程序: #inc
8、ludestdio.h main() int a=6, b=7, m=1; switch(a%2) case 0: m+; break; case 1: m+; switch(b%2) default: m+; case 0: m+; break; printf(“%d/n“, m); 程序的运行结果是_。(分数:2.50)A.3B.2C.4D.116.有以下程序(注:字符 a的 ASCII码值为 97): #includestdio.h main() char *s=“abc“; do printf(“%d“, *s%10); +s; while(*s); 程序运行后的输出结果是_。(分数:
9、1.00)A.abcB.789C.7890D.97989917.下列程序中函数 sort()的功能是对数组 a中的数据进行由大到小的排序。 #includestdio.h void sort(int a, int n) int i, j, t; for(i=0; in-1; i+) for(j=i+1+1; jn; j+) if(aiaj) t=ai; ai=aj; aj=t; main() int a10=1, 2, 3, 4, 5. 6, 7, 8, 9, 10, i; sort( for(i=0; i10; i+)printf(“%d, “, ai); 程序运行后的输出结果是_。(分数:
10、2.50)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.1,8,7,6,5,4,3,2,9,10,D.1,2,10,9,8,7,6,5,4,3,18.以下关于 C语言数据类型的叙述中正确的是_。(分数:2.50)A.C基本数据类型包括:分为整型、实型、浮点型、字符型四种B.实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式C.若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D.若只处理“真”和“假”两种逻辑值,应使用逻辑类型19.以下叙述中正确的是_。(分数:1.00)A.任何情况下都不能用函数名
11、作为实参B.函数既可以直接调用自己,也可以间接调用自己C.函数的递归调用不需要额外开销,所以效率很高D.简单递归不需要明确的结束递归的条件20.设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成绩),则表 SC的关键字(键或码)为_。(分数:1.00)A.课号,成绩B.学号,成绩C.学号,课号D.学号,姓名,成绩21.以下 fun函数的功能是将形参 s所指字符串内容颠倒过来: void fun(char*s) int i,j,k; for(i=0,j=strlen(s)_; ij;i+,j-) k=si;si=sj;sj=
12、k; 在横线处应填入的内容是_。(分数:1.00)A.+1B.-1C.+0D.,k=022.若二维数组 a有 m列,则在 aij前的元素个数为_。(分数:2.00)A.j*m+iB.i*m+jC.j*m+i+1D.i*m+j+l23.能将高级语言程序转换成目标语言程序的是_。(分数:1.00)A.调试程序B.解释程序C.编译程序D.编辑程序24.有以下程序 #include stdio.h main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.
13、00)A.25B.20C.45D.3625.设已定义 x为 double类型变量: #includestdio.h main() float x=323.82631; printf(“%.2e/n“,x); 则以上语句_。(分数:2.00)A.输出格式描述符的域宽不够,不能输出B.输出为 32.38e+01C.输出为 3.24e+002D.输出为 3.24e226.有以下程序: # include stdio.h struct stu int num; char name10; int age; void fun(struct stu *p) printf(“%s/n“,p-name); ma
14、in() struct stu x3=(01, “Zhang“ ,20),02,“Wang“ ,19,03, “Zhao“ ,18; fun(x+2); 程序运行后的输出结果是_。(分数:1.00)A.ZhangB.ZhaoC.WangD.1927.语句“pfintf(“a/bhow“are“y/bou/n“);”的输出结果是_。(分数:2.50)A.a/bhow“are“y/bouB.a/bhow“are“y/bouC.how“are“youD.ahow“are“y/bou28.有以下程序: #include stdio.h #define PT 3.5; #define S(x) PT*
15、x * x; main( ) int a=1, b=2; printf(“%4.1f/n“,S(a+b); 程序运行后的输出结果是_。(分数:2.00)A.7.5B.31.5C.程序有错无输出结果D.14.029.已知 int类型的变量占 4个字节,现有以下程序段: #include stdio.h main() int a=1,2,3,4,5; printf(“% d“, sizeof(a); 则程序段的输出结果是_。(分数:2.50)A.5B.10C.15D.2030.下列叙述中错误的是_。(分数:1.00)A.一个 C语言程序只能实现一种算法B.C程序可以由多个程序文件组成C.C程序可以
16、由一个或多个函数组成D.一个 C函数可以单独作为一个 C程序文件存在二级 C语言分类模拟题 561答案解析(总分:47.50,做题时间:90 分钟)一、选择题(总题数:30,分数:47.50)1.有以下程序: int f1(double a) return a*a; int f2(int x,int y) double a,b; a=f1(x); b=f1(y); return a+b; main() double w; w=f2(2.1,4.0); ) 变量 w的值是_。(分数:2.00)A.20.21B.20C.20.0 D.0.0解析:2.若变量已正确定义,下列正确的程序段是 _ 。(分
17、数:2.00)A.while(ch=getchar()=“/N“)putchar(ch);B.while(ch=getchar()=“/n“)putchar(ch);C.while(ch=getchar()!=“/N“)putchar(ch);D.while(ch=getchar()!=“/n“)putchar(ch); 解析:解析 本题考查两个知识点:C 语言用“/n“这个字符常量表示换行;getchar 函数的作用是从终端输入一个字符,当遇到换行时结束输入。3.下列叙述中错误的是_。(分数:1.00)A.一个 C语言程序只能实现一种算法 B.C程序可以由多个程序文件组成C.C程序可以由一个
18、或多个函数组成D.一个 C函数可以单独作为一个 C程序文件存在解析:解析 一个 C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C语言程序可以实现多种算法。4.以下选项中错误的是 _(分数:1.00)A.char *sp; gets(sp); B.char sp5 gets(sp);C.char *sp=“12345“; gets(sp);D.charsp5“/0“ gets(sp)解析:5.以下程序段中,不能实现条件“如果 ab 则 x=10,否则 x=-10”的是_。(分数:1.00)A.x=(a=b)?-10:10;B.if(ab)x=10;else x=-10;C.x
19、=-10;if(ab)x=10;D.if(ab)x=10;if(ba)x=-10; 解析:解析 D 选项:如果 ab,则 x=10,如果 ba,则 x=-10,其中没有对 a=b进行判断,A 选项不能实现题目中功能,选择 D选项。B 选项:如果 ab,则 x=10,否则 x=-10,能实现题目中功能。C 选项:首先赋值 x=-10,如果 ab,则 x=10,即在 a=b 情况下有 x=-10,能实现题目中功能。A 选项:条件运算符?运算过程为:如果 a=b,x=-10,否则 x=10,能实现题目中功能。故选择 D选项。6.有以下程序段 int i, n; for(i=0; i8; i+) n=
20、rand()%5; switch(n) case 1: case 3:printf(“%d/n“, n); break; case 2: case 4:printf(“%d/n“, n); continue; case 0:exit(0); printf(“%d/n“, n); 以下关于程序段执行情况的叙述,正确的是_。(分数:2.00)A.当产生的随机数 n为 4时结束循环操作B.当产生的随机数 n为 0时结束程序运行 C.当产生的随机数 n为 1和 2时不做任何操作D.for循环语句固定执行 8次解析:解析 n 为 0时执行 exit(0);函数结束,所以产生的随机数为 0时,函数结束。答
21、案选择 B。7.算法的有穷性是指_。(分数:2.50)A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用解析:解析 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。算法的有穷性是指算法程序的运行时间是有限的,因此本题答案为 A。8.以下选项中,合法的数值型常量是_。(分数:1.00)A.3.2 B.“X“C.099D.0xEH解析:解析 以 0开头,表示八进制,但八进制的每位小于 8,C 选项错误;D 选项,0 x 和 H冲突都是表示十六进制,排除 D选项;x为字符型常量不是数值型常量,B 选项错误,故答案
22、选 A。9.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。(分数:2.00)A.函数的形参和实参分别占用不同的存储单元 B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的实参和其对应的形参共占同一存储单元解析:解析 本题考查的知识点是:函数的形参和实参。在定义函数时函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C 语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存
23、中,实参单元与形参单元是不同的单元。故本题应该选择 A。10.计算机能直接执行的程序是_。(分数:1.00)A.源程序B.目标程序C.汇编程序D.可执行程序 解析:解析 计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe,所以选择 D选项。11.有以下程序,最后输出的值为_。 main() int a44 =1,4,3,2), 8 6,5,7, 3,7,2,5, 4,8,6,1, i, j, k, t; for(i=0; i4; i+) for(j=0; j3; j+) for(k=j+i; k4; k+ if(ajiaki) t=aji; aji=aki; aki=t; for(i
24、=0; i4; i+) printf(“% d,“, aii); (分数:2.50)A.1,6,5,7 B.8,7,3,1C.4,7,5,2D.1,6,2,1解析:解析 本题用多重 for循环的嵌套来实现对二维数组的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。12.以下叙述中错误的是_。(分数:1.00)A.在一个程序中,每个模块均可以独立编译运行 B.程序“模块化”有利于任务的分解简化C.允许对函数单独进行编译,是 C语言实现“模块化”的基础D.采用模块化结构,可以提高编程效率解析:解析 在程序设计时,用一个个小
25、模块来实现不同的功能,每个程序设计人员分别完成一个或多个小模块,称这样的程序设计方法为“模块化”。由一个个功能模块构成的程序结构称为模块化结构,使用模块化结构程序设计,有利于任务的分解简化,选项 B正确;C 语言允许对函数单独进行编译,从而可以实现模块化,选项 C正确;采用模块化结构,可以使不同模块的程序员分别编写和调试,大大提高了编程效率,选项 D正确;在 C语言程序中,每个模块并不一定能够单独编译运行,选项 A错误,本题答案A。13.在数据结构中,从逻辑上可以把数据结构分为_。(分数:1.00)A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.内部结构和外部结构解
26、析:解析 逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间一对一的关系,非线性结构表示数据元素之间一对多或多对一的关系。14.有以下程序 #includestdio.h main() int i;j; for(i=1;i4;i+) for(j=i;j4;j+)printf(“%d*%d=%d“,i,j,i*j); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.1*1=1 1*2=2 1*3=32*2=4 2*3=63*3=9 B.1*1=1 1*2=2 1*3=32*1=2 2*2=43*1=3C.1*1=11*2=2 2*2=41*3=3 2*3=6
27、 3*3=9D.1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=9解析:解析 外层循环 i,值分别为 1 2 3,内层循环 j分别为 1 2 3、2 3 和 3,所以答案为 A。15.有下列程序: #includestdio.h main() int a=6, b=7, m=1; switch(a%2) case 0: m+; break; case 1: m+; switch(b%2) default: m+; case 0: m+; break; printf(“%d/n“, m); 程序的运行结果是_。(分数:2.50)A.3B.2 C.4D.1解析:解析 本题考查 sw
28、itch语句及 break的用法。第一个 switch语句,因为 a=6,a%2=0,所以执行“case 0,m+;”,将 m加 1,遇到 break语句跳出 switch语句,结束循环。不执行下面的 switch。16.有以下程序(注:字符 a的 ASCII码值为 97): #includestdio.h main() char *s=“abc“; do printf(“%d“, *s%10); +s; while(*s); 程序运行后的输出结果是_。(分数:1.00)A.abcB.789 C.7890D.979899解析:解析 字符指针 s指向字符串“abc“,dowhile()循环中首先
29、将 s指向的字符与 10进行求余操作,然后打印出余数,再将指针 s向后移动一个位置,指向下一个字符;第一次循环,s 指向的字符“a“的ASCII码为 97,所以与 10求余输出结果为 7,同时 s向后移动一位,指向字符“b“,while()判断条件为true;第二次循环 s指向的字符“b“的 ASCII码为 98,与 10求余输出结果为 8,同时 s向后移动一位,指向字符“c“,while()判断条件为 true;第三次循环 s指向的字符“c“的 ASCII码为 99,与 10求余输出结果为 9,同时 s向后移动一位,指向空字符“/0“,空字符的 ASCII码为 0,所以 while()判断条
30、件为false,循环结束,输出结果为 789,故答案选 B选项。17.下列程序中函数 sort()的功能是对数组 a中的数据进行由大到小的排序。 #includestdio.h void sort(int a, int n) int i, j, t; for(i=0; in-1; i+) for(j=i+1+1; jn; j+) if(aiaj) t=ai; ai=aj; aj=t; main() int a10=1, 2, 3, 4, 5. 6, 7, 8, 9, 10, i; sort( for(i=0; i10; i+)printf(“%d, “, ai); 程序运行后的输出结果是_。(
31、分数:2.50)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.1,8,7,6,5,4,3,2,9,10, D.1,2,10,9,8,7,6,5,4,3,解析:解析 本程序中的函数 sort(int a,int n)实现的功能是将数组 a中的前 n个数进行从大到小排序。sort( for(i=0,j=strlen(s)_; ij;i+,j-) k=si;si=sj;sj=k; 在横线处应填入的内容是_。(分数:1.00)A.+1B.-1 C.+0D.,k=0解析:解析 本题考查字符串处理函数 strlen。strlen 计算一个字符串的长度,包含
32、结尾符,所以本题中 j的初始化应该是从最后一个字符开始,所以应该将得到的字符串长度减 1,选项 B正确。22.若二维数组 a有 m列,则在 aij前的元素个数为_。(分数:2.00)A.j*m+iB.i*m+j C.j*m+i+1D.i*m+j+l解析:23.能将高级语言程序转换成目标语言程序的是_。(分数:1.00)A.调试程序B.解释程序C.编译程序 D.编辑程序解析:解析 用高级语言编写的程序为“源程序”,而计算机只能识别和执行由 0和 1组成的二进制指令,所以高级语言必须先用一种称为“编译程序”的软件,把源程序翻译成二进制形式的“目标程序”。24.有以下程序 #include stdi
33、o.h main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.25 B.20C.45D.36解析:解析 本题考查的是数组名的概念。当数组名出现在表达式中时,它类似于一个指针常量,该指针始终指向该数组第 1个元素的位置,它的指向不能被改变。但它又与普通的指针常量有所区别:对数组名使用 sizeof运算符时,得到整个数组所占内存的大小;而对于指针常量,返回的始终是 2(一个指针占2个字节的内存)。所以,要获得数组 t的第 i个元素的内容,
34、既可以使用常规的 ti表达式,也可以将数组名 t看作一个指针常量,使用表达式*(t+i)来获取数组 t的第 i个元素的内容。在本题中,for 循环会循环 5次,循环变量 i从 0开始每次增加 2,所以 s=t0+t2+t4+t6+t8=25。25.设已定义 x为 double类型变量: #includestdio.h main() float x=323.82631; printf(“%.2e/n“,x); 则以上语句_。(分数:2.00)A.输出格式描述符的域宽不够,不能输出B.输出为 32.38e+01C.输出为 3.24e+002 D.输出为 3.24e2解析:26.有以下程序: # i
35、nclude stdio.h struct stu int num; char name10; int age; void fun(struct stu *p) printf(“%s/n“,p-name); main() struct stu x3=(01, “Zhang“ ,20),02,“Wang“ ,19,03, “Zhao“ ,18; fun(x+2); 程序运行后的输出结果是_。(分数:1.00)A.ZhangB.Zhao C.WangD.19解析:解析 fun(x+2)表示的是结构体数组中的第 3个元素即03,“Zhao“,18,而输出的是 name元素,所以答案为 B。27.语句
36、“pfintf(“a/bhow“are“y/bou/n“);”的输出结果是_。(分数:2.50)A.a/bhow“are“y/bouB.a/bhow“are“y/bouC.how“are“you D.ahow“are“y/bou解析:28.有以下程序: #include stdio.h #define PT 3.5; #define S(x) PT* x * x; main( ) int a=1, b=2; printf(“%4.1f/n“,S(a+b); 程序运行后的输出结果是_。(分数:2.00)A.7.5B.31.5C.程序有错无输出结果 D.14.0解析:解析 宏定义不是 C语句,末尾
37、不需要分号。所以语句“printf(“%4.1f/n“,s(a+b);”展开后为“printf(“%4.1f/n“,3.5;*a+b*a+b;);”所以程序会出现语法错误。29.已知 int类型的变量占 4个字节,现有以下程序段: #include stdio.h main() int a=1,2,3,4,5; printf(“% d“, sizeof(a); 则程序段的输出结果是_。(分数:2.50)A.5B.10C.15D.20 解析:解析 int 类型的数组 a初始化了 5个整数,它隐含地定义了 a数组大小为 5个元素,而一个 int变量占 4个字节,所以程序输出 20。30.下列叙述中错误的是_。(分数:1.00)A.一个 C语言程序只能实现一种算法 B.C程序可以由多个程序文件组成C.C程序可以由一个或多个函数组成D.一个 C函数可以单独作为一个 C程序文件存在解析:解析 一个 C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C语言程序可以实现多种算法。