二级C语言分类模拟题513
(总分:52.50,做题时间:90分钟)
一、选择题(总题数:35,分数:52.50)
1.以下程序段的输出结果是
char s[]="//141/141abc/t";
printf ("%d/n",strlen(s));
(分数:1.00)
 A.9 关于printf函数正确的是
 B.12
 C.13
 D.14
解析:[解析] 本题考核的知识点是字符串的长度。字符数组中可以存放字符串,但字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中存放的有效字符个数,即,"/0"之前的字符数。 字符数组s中依次存放的字符是: "/"1"4"1"141"a"b"c"/t"和最后一个字符串结束标记 "/0",故字符串的长度是9。所以,4个选项中A为所选。
2.结构化程序所要求的基本结构不包括______。
(分数:2.00)
 A.顺序结构
 B.GOTO跳转 
 C.选择(分支)结构
 D.重复(循环)结构
解析:[解析] 1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式的结构化程序设计方法,因此本题答案为B。
3.下面程序的运行结果是______。
for(i=3;i<7;i++)printf((i%2)?("**%d/n"):("##%d/n"),i);
(分数:2.50)
 A.**3##4**5**6
 B.##3**4##5**6
 C.##3**4##5##6
 D.**3##4**5##6 
解析:[解析] 本题考查printf函数的输出格式和条件表达式“?:”的使用。①printf函数输出时“**%d/n”和“##%d/n”中的“##”和“**”都是直接输出。②条件表达式的基本格式为:“a?b:c”。它的运算规则为:当a为非0时,整个表达式的值取b的值,当a为0时,整个表达式取c的值。
4.有以下程序
#include<stdio.h>
main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<=3;j++)
{
if(j%2)continue;
x++;
}
x++;
}
printf("x=%d/n",x);
}
程序执行后的输出结果是______。
(分数:2.00)
 A.x=8 
 B.x=4
 C.x=6
 D.x=12
解析:[解析] 本题考查的是for循环的嵌套。外循环的循环变量i从0递增到1会循环2次,内循环的循环变量j从0递增到3会循环4次。但是内循环中有一条if语句,每当j%2为真,即j为奇数时会跳过下面的x++;语句,所以4次内循环只有2次执行到x++;语句,再加上外循环中包含的2条x++;语句,所以每次外循环会使x自增4次,2次外循环下来x的值为8。故应该选择A。
5.设某棵树的度为3,其中度为3,1,0的节点个数分别为3,4,15。则该树中总节点数为______。
(分数:1.00)
 A.22
 B.30 
 C.35
 D.不可能有这样的树
解析:[解析] 在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度,树中的节点数即为树中所有节点的度数之和再加1。假设本题中度为2的节点数为n,总节点数为m,m=3×3+1×4+n×2+1,叶子节点数15=m-(3+4+n),得n=8,则m=9+4+8×2+1=30。故答案为B选项。
6.有以下程序:
#include<stdio.h>
main()
{
char c[2][5]={"6938","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)p[i]=c[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-"0";
printf("%d/n",s);
}
程序运行后的输出结果是______。
(分数:1.00)
 A.6938
 B.9824
 C.4528
 D.6385 
解析:[解析] 本题中首先是将二维字符数组c赋值指针数组p,然后遍历p到两个字符串中
的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为6385。
7.在一个C程序中( )。
(分数:1.00)
 A.main函数必须出现在所有函数之前
 B.main函数可以在任何地方出现 
 C.main函数必须出现在所有函数之后
 D.main函数必须出现在固定位置
解析:[解析] 一个完整的C语言程序有且仅有一个主函数(main()函数)。程序总从main()函数的第一条语句开始执行,到main()函数的最后一条语句结束,其他函数都是在执行main()函数时,通过函数调用或嵌套调用而得以执行的。C语言规定,main()函数在程序中的位置是任意的,故选项A、选项C和选项D均不正确。所以,B选项为所选。
8.有以下程序
#include<stdio.h>
main()
{ int i=1;
i=i^i;
printf("%d/n",i);
}
程序运行后的输出结果是______。
(分数:1.00)
 A.0 
 B.-1
 C.1
 D.7
解析:[解析] ^是按位异或,1^1结果为0,答案选择A。
9.阅读以下程序
#include <stdio.h>
main()
{ int case;
float printF;
printf("请输入2个数:");
scanf("%d%f",&case,&printF);
printf("%d%f/n",case,printF);
}
该程序在编译时产生错误,其出错原因是______。
(分数:1.00)
 A.定义语句出错,case是关键字,不能用作用户自定义标识符 
 B.定义语句出错,pfintF不能用作用户自定义标识符
 C.定义语句无错,scanf不能作为输入函数使用
 D.定义语句无错,printf不能输出case的值
解析:[解析] 用户自定义标识符不能使用关键字,case是关键字之一,所以选择A。
10.有以下程序
main( )
{ int i,s=0;
for(i=1;i<l0;i+=2) s+=i+1
printf("%d/n",s);
}
程序执行后的输出结果是 ______。
(分数:2.00)
 A.自然数1~9的累加和
 B.自然数1~10的累加和
 C.自然数1~9中奇数之和
 D.自然数1~10中偶数之和 
解析:[解析] 本题中s=(1+1)+(3+1)+(5+1)+(7+1)+(9+1)=2+4+6=8+10。
11.有三个关系R、S和T如下:
R
A
B
C
a
l
2
b
2
1
c
3
1
S
A
D
c
4
T
A
B
C
D
c
3
1
4
则由关系R和S得到关系T的操作是______。
(分数:1.00)
 A.自然连接 
 B..交
 C.投影
 D..并
解析:[解析] 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T中元素可以判断R和S做的是自然连接操作。
12.程序段:int x=12; double y=3.141593; printf("%d%8.6f", x, y);的输出结果是______。
(分数:1.00)
 A.123.141593 
 B.□□□□□□123.141593
 C.12,3.141593
 D.123.1415930
解析:[解析] 本题考查printf函数的输出格式控制符,%m.nf表示指定输出的实型数据的宽度为m(包含小数点),并保留n位小数。但输出数据的小数位大于n时,截去右边多余的小数,并对截去部分的第一位小数做四舍五入处理;当输出数据的小数位小于n时,在小数位的最右边补0,使输出数据部分宽度为n。若给出的总宽度m小于n加上整数位数和小数点,则自动突破m的限制;反之,数字右对齐,左边补空格。本题中3.141593数值长度为8,小数位数为6,因此左端没有空格,故正确答案为A。
13.有以下程序
#include<stdio.h>
main()
{int y=10;
while(y--);
printf("y=%d/n",y);
}
程序执行后的输出结果是______。
(分数:1.00)
 A.y=-1 
 B.y=0
 C.y=1
 D.while构成无限循环
解析:[解析] 当y为0时,y--表达式为0,条件为假,循环结束,执行判断条件后y为-1,所以选择A。
14.有以下程序
#include<stdio.h>
int fun()
{static int x=1;
x*=2;return x;
}
main()
{int i,s=1;
for(i=1;i<=2;i++)s=fun();
printf("%d/n",s);
}
程序运行后的输出结果是______。
(分数:1.00)
 A.0
 B.1
 C.4 
 D.8
解析:[解析] 第一次循环返回2,第二次循环返回4,所以输出4,答案选择C。
15.下列关于C语言文件的叙述中正确的是______。
(分数:1.00)
 A.文件由一系列数据依次排列组成,只能构成二进制文件
 B.文件由结构序列组成,可以构成二进制文件或文本文件
 C.文件由数据序列组成,可以构成二进制文件或文本文件 
 D.文件由字符序列组成,其类型只能是文本文件
解析:[解析] 本题考查文件的概念,文件是由数据序列组成,可以构成二进制文件或文本文件,所以答案为C选项。
16.下列叙述中正确的是______。
(分数:1.00)
 A.算法的空间复杂度与算法所处理的数据存储空间有关 
 B.算法的空间复杂度是指算法程序控制结构的复杂程度
 C.算法的空间复杂度是指算法程序中指令的条数
 D.压缩数据存储空间不会降低算法的空间复杂度
解析:[解析] 算法的时间复杂度是指执行这个算法所需要的内存空间,包括3个部分:输入数据所占的存储空间;程序本身所占的存储空间;算法执行过程中所需要的额外空间。为了降低算法的空间复杂度,主要应减少输入数据所占的存储空间以及额外空间,通常采用压缩存储技术。故A选项正确。
17.有以下程序:
void ss(char *s,char t)
{while(*s)
{if(*s==t)*s=t-"a"+"A";
s++;
}
}
main()
{char strl[100]="abcddfefdbd",c="d";
ss(strl,c);
printf("%s/n",strl);
}
程序运行后的输出结果是______。
(分数:2.00)