全国计算机二级C语言模拟646.docx
《全国计算机二级C语言模拟646.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言模拟646.docx(24页珍藏版)》请在冰豆网上搜索。
全国计算机二级C语言模拟646
二级C语言模拟646
一、选择题
1.有以下程序:
#include<stdio.h>
main()
{
charc[2][5]={"6938","8254"},*p[2];
inti,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);
}
程序运行后的输出结果是______。
A.6938
B.9824
C.4528
D.6385
答案:
D
[解答]本题中首先是将二维字符数组c赋值指针数组p,然后遍历p找到两个字符串中的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为6385。
2.以下叙述中正确的是______。
A.break语句不能用于提前结束for语句的本层循环
B.使用break语句可以使流程跳出switch语句体
C.continue语句使得整个循环终止
D.在for语句中,continue与break的效果是一样的,可以互换
答案:
B
[解答]break跳出switch语句或循环语句,contiune结束本次循环,继续进行剩余的循环。
所以答案选择B。
3.程序调试的任务是______。
A.设计测试用例
B.验证程序的正确性
C.发现程序中的错误
D.诊断和改正程序中的错误
答案:
D
[解答]程序调试的任务是诊断和改正程序中的错误。
4.有以下程序
#include<stdio.h>
main()
{
intx=8;
for(;x>0;x--)
{
if(x%3)
{
printf("%d,",x--);
continue;
}
printf("%d,",--x);
}
}
程序的运行结果是______。
A.8,5,4,2,
B.8,7,5,2,
C.9,7,6,4,
D.7,4,2,
答案:
A
[解答]第一次x为8,输出8,第二次x为6,输出5,第三次x为4,输出4,第四次x为2,输出2,循环结束,所以答案选择A。
5.有以下程序:
#include<stdio.h>
structSTU{charname[9];charsex;intscore[2];};
voidf(structSTUa[])
{structSTUb={"Zhao",'m',85,90};
a[1]=b;
}
main()
{structSTUc[2]={{"Qian",'f',95,92},{"Sun",'m',98,99}};
f(c);
printf("%s,%c,%d,%d,",c[0].name,c[0].sex,c[0].score[0],c[0].score[1]);
printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[0],c[1].score[1]);
}
程序运行后的输出结果是______。
A.2hao,m,85,90,Sun,m,98,99
B.2hao,m,85,90,Qian,f,95,92
C.Qian,f,95,92,Sun,m,98,99
D.Qian,f,95,92,Zhao,m,85,90
答案:
D
[解答]f函数是为结构体数组的第二个数赋值,数组的第一个数没有变化,所以正确答案应选D。
6.下列字符串是标识符的是______。
A.aa
B.a-class
C.int
D.LINE1
答案:
A
7.有以下程序
intf(intb[][4])
{inti,j,s=0;
for(j=0;j<4;j++)
{i=j;
if(i>2)i=3-j;
s+=b[i][j];
}
returns;
}
main()
{inta[4][4]={{1,2,3,4},{0,2,4,6},{3,6,9,12),{3,2,1,0}};
printf("%d\n",f(a));
}
执行后的输出结果是
A.12
B.11
C.18
D.16
答案:
D
[解答]本题考核的知识点是二维数组的定义、赋初值和对;维数组元素的引用。
分析程序可知,函数f()中的for循环作用,是将数组前三行中的对角线上的元素,即b[0][0]、b[1][1],b[2][2]和第一行的第四列元素即b[0][3]累加到变量s中,然后将s的值返回。
在主函数中首先定义了一个4行4列的二维数组,接着通过输出语句输出函数f(a)的返回值。
调用f(a)的返回值为a[0][0]+a[1][1]+a[2][2]+a[0][3]=1+2+9+4=16。
所以,4个选项中选项D符合题意。
8.关系数据模型
A.只能表示实体间的1:
1联系
B.只能表示实体间的1:
n联系
C.只能表示实体间的m:
n联系
D.可以表示实体间的上述3种联系
答案:
D
[解答]数据模型用来表示实体间的联系,但不同的数据库管理系统支持不同的数据模型。
常用的数据模型有层次模型、网状模型和关系模型,层次模型不能表示多对多联系,网状模型和关系模型都能表示任意一种联系。
9.构成C程序的三种基本结构是
A.顺序结构、转移结构、递归结构
B.顺序结构、嵌套结构、递归结构
C.顺序结构、选择结构、循环结构
D.选择结构、循环结构、嵌套结构
答案:
C
10.设计软件结构是在软件生命周期的。
A.软件定义期
B.软件开发期
C.软件维护期
D.以上3个都不是
答案:
B
[解答]设计软件结构是在软件概要设计阶段进行的,而概要设计属于软件开发期。
11.以下选项中,能用作用户标识符的是______。
A._0_
B.8_8
C.void
D.unsigned
答案:
A
[解答]C语言中的标识符由字母、下划线、数字组成,且开头必须是字母或下划线。
另外,关键字不能作为标识符。
B选项中以数字8开头,所以错误。
C选项与D选项中用的是关键字void与unsigned,所以错误。
12.以下叙述中正确的是______。
A.用C语言编写的程序只能放在一个程序文件中
B.C程序书写格式严格,要求一行内只能写一个语句
C.C程序中的注释只能出现在程序的开始位置和语句的后面
D.C程序书写格式自由,一个语句可以写在多行上
答案:
D
[解答]C语言编写的程序可以放置于多个程序文件中,所以A选项错误。
C程序中的一行可以有多条语句,所以B选项错误。
C语言中的注释语句可以与原语句放在一行,也可以不放在一行,所以C选项错误。
13.下列叙述中正确的是______。
A.程序执行的效率与数据的存储结构密切相关
B.程序执行的效率只取决于程序的控制结构
C.程序执行的效率只取决于所处理的数据量
D.以上三种说法都不对
答案:
A
[解答]数据的存储结构、程序处理的数据量、程序的算法等都会影响程序执行效率。
14.若已有定义语句:
inta,b,c;,且变量已正确赋初值,则以下选项中正确的赋值表达式是______。
A.a=(b=c)+8;
B.(a=b)=c=9;
C.a=(b==c)='A';
D.a+b=c+1;
答案:
A
[解答]赋值运算符左边必须是一个变量,B、D选项错误;C选项中,(b==c)是个表达式,语法错误,故排除C选项,故答案为A选项。
15.一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为______。
A.219
B.229
C.230
D.231
答案:
B
[解答]二叉树中,度为0的结点数等于度为2的结点数加1,即n2=n0-1,叶子结点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B选项。
16.有以下程序:
main()
{inta[]={2,4,6,8,10),y=0,x,*P;
P=&a[1];
for(x=1;x<3;x++)y+=p[x];
printf("%d\n",y);
}
程序运行后的输出结果是______。
A.10
B.11
C.14
D.15
答案:
C
[解答]指针变量p指向数组元素a[1],则p[1]即为a[2],p[2]即为a[3],执行第一次for循环时,y=y+p[1]=0+a[2]=6,第二次执行for循环,y=y+p[2]=6+a[3]=14,此时x为3,for循环条件不满足,退出循环,输出y的值为14。
17.整型变量x和Y的值相等,且为非0值,则以下选项中结果为0的表达式是______。
A.X‖Y
B.X|Y
C.X&Y
D.X^Y
答案:
D
[解答]“‖”为或运算符,当其左右表达式中只要一个为非零则整个表达式的值1。
|是按位或,&是按位与,^是按位异或,这三位运算符是按值的二进制位来比较的。
18.以下不能输出字符A的语句是______(注:
字符A的ASCII码值为65,字符a的ASCII码值为97)。
A.printf("%c\in",65);
B.printf("%c\in",'a'-32);
C.printf("%d\n",'A');
D.printf("%c\n",'B'-1);
答案:
C
[解答]%d输出整数,所以选择C。
19.下列关系表达式中,结果为“假”的是______。
A.(3+4)>6
B.(3!
=4)>2
C.3<=4||3
D.(3<4)=1
答案:
B
[解答]在一个表达式中,括号的优先级高,先计算3!
=4,为真即是1,1>2为假。
20.若有定义语句:
chars[10]="1234567\0\0";
则strlen(s)的值是______。
A.7
B.8
C.9
D.10
答案:
A
[解答]strlen()函数的功能是计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。
本题中,从第_一个字符开始,遇到第一个结束标识'\0'为止,注意’\0'不占字符串长度,所以字符串长度为7。
因此A选项正确。
21.若有定义:
int*p[3];,则以下叙述中正确的是______。
A.定义了一个基类型为int的指针变量p,该变量具有3个指针
B.定义了一个指针数组p,该数组含有3个元素,每个元素都是基类型为int型的指针
C.定义了一个名为*p的整型数组,该数组含有3个int类型元素
D.定义了一个可指向一维数组的指针变量p,所指一维数组具有3个int类型元素
答案:
B
22.若变量已正确定义为float型,要通过输入语句:
scanf("%f%f%f",&a,&b,&c);给a赋值11.0,b赋值22.0,c赋值33.0,不正确的输入形式是______。
A.11
22
33
B.11.0,22.0,33.0
C.11.0
22.033.0
D.1122
33
答案:
B
[解答]B中不应该加“,”号。
23.有以下定义和语句
structworkers
{intnum;charname[20];charc;
struct
{intday;intmonth;intyear;}s;
};
structworkersw,*pw;
pw=&w;
能给w中year成员赋值为1980的语句是______。
A.w.s.year=1980;
B.w.year=1980;
C.pw->year=1980;
D.*pw.year=1980;
答案:
A
[解答]嵌套的结构体定义,要访问内层的成员,需要一层层用“.”访问,所以答案选择A。
24.若有定义语句:
chars[10]="1234567\0\0";
则strlen(s)的值是______。
A.7
B.8
C.9
D.10
答案:
A
[解答]本题考查的是字符串的长度。
字符数组中可以存放字符串,但字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中存放的有效字符个数,即\0之前的字符数。
字符数组s中依次存放的字符是:
1234567和2个字符串结束标记\0,故字符串的长度是7,所以应该选择A。
25.以下选项中,合法的实数是______。
A.1.5E2
B.E1.1
C.2.10E
D.1.9E1.4
答案:
A
[解答]用尾数指数形式表示浮点数时,E的右侧必须是整数且不能为空。
26.有以下程序:
#include<stdio.h>
main()
{intm=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf("%d,%d,%d,%d\n",m,n,*p,*q);
程序运行后的输出结果是______。
A.2,1,1,2
B.1,2,1,2
C.2,1,2,1
D.1,2,2,1
答案:
D
[解答]intm=1,n=2,*p=&m,*q=&n,*r;即指针变量p指向m,指针变量q指向n,r=p;p=q;q=r;即通过指针变量r,将指针p和指针q的指向交换。
因此最后输出1,2,2,1。
所以选择D选项。
27.若有以下定义和语句:
#include<stdio.h>
chars1[10]="abcd!
",*s2="\n123\\";
printf("%d%d\n",strlen(s1),strlen(s2));
则输出结果是______。
A.107
B.105
C.55
D.58
答案:
C
[解答]strlen函数的功能是返回字符串的长度,求字符串长度时,遇到结束标识“\0”为止,但是长度不包括结束标识。
字符数组s]的后5个元素没有赋值,都为“\0”,即“abcd!
”后为“\0”。
所以strlen(s1)的值为5。
字符指针s2所指向的字符串中,“\n”为转义字符换行符,表示1个字符;“\\”也为转义字符,代表“\”,也是1个字符,其后为字符串结柬标识“\0”;所以strlen(s2)的值也为5。
因此C选项正确。
28.C语言主要是借助______的手段来实现程序模块化。
A.定义函数
B.定义常量和外部变量
C.使用丰富的数据类型
D.使用三种基本结构语句
答案:
A
[解答]C语言程序的模块化通过函数来体现,所以选择A选项。
29.下面选项中的程序段,没有编译错误的是______。
A.char*sp,s[10];sp="Hello";
B.char*sp,s[10];s="Hello";
C.charstr1[10]="computer",str2[10];str2=str1;
D.charmark[];mark="PROGRAM";
答案:
A
[解答]char类型指针可以用字符串赋值,字符数组在定义时可以,其他地方不能直接用字符串赋值。
30.以下不能对文件进行输出的库函数是______。
A.fwite
B.fpute
C.fpout
D.fprintf
答案:
C
[解答]fputs函数的功能是用来向指定文件输出一个字符串。
fwrite函数的功能是用来向文件写数据块。
fprintf函数按照格式向文本文件中输出数据。
这三者都是库函数,而fpout.不是库函数,故选择C选项。
31.设有如下函数定义
#include<stdio.h>
intfun(intk)
{if(k<1)return0;
elseif(k==1)return1;
elsereturnfun(k-1)+1;
}
若执行调用语句:
n=fun(3);,则函数fun总共被调用的次数是______。
A.3
B.2
C.4
D.5
答案:
A
[解答]首先n=fun(3),3被当作参数传递进去,进行了第一次调用,3被当作参数传进去后,程序会执行语句elsereturnfun(k-1)+1,进行了第二次调用,而参数是3-1也就是2。
2被当作参数传进去后,程序会执行语句elsereturnfun(k-1)+1,进行了第三次调用,而参数是2-1也就是1。
1被当作参数传进去后,程序会执行语句elseif(k==1)return1;不再递归调用,因此最终结果为3次,选项A正确。
32.以下程序执行后x的值是。
#include<stdio.h>
main()
{intx,y=252,i=386,*m=&y,*z=&i;
x=(z==m);
printf("%d",x);
}
A.252
B.1
C.0
D.运行时出错,x无定值
答案:
C
[解答]指针变量m和z分别指向整型变量y,i,所以这两个指针变量中存储的地址是不同的,变量x接受的是一个关系运算结果0(因为m和z两个地址是不同的),所以x为0。
33.下列说法不正确的是。
A.调用函数时,实参可以是表达式
B.调用函数时,实参与形参可以共用内存单元
C.调用函数时,将实参的值复制给形参,使实参变量和形参变量在数值上相等
D.调用函数时,实参与形参的类型必须一致
答案:
B
[解答]本题考查函数调用的基本概念。
调用函数时,实参的形式可以是具体的数值,也可以是表达式。
实参将数值或表达式的值传递给形参,因而两者的类型必须保持一致:
形参在运算过程中会发生改变,但不一定会影响到实参值,所以可知两者不共用内存单元。
34.有以下程序
#include<stdio.h>
voidmain()
{
intn=2,k=1;
while(!
(k>0||n++));
printf("%d%d\n",k,n);
}
程序运行后的输出结果是______。
A.02
B.13
C.57
D.12
答案:
D
[解答]在程序中整型变量n的初始值等于2,整型变量k的初始值等于1,在执行while语句时,由于表达式k的值大于0为真,所以不再需要判断“n++”是否为真,“(k>0||n++)”表达式的值为真。
“!
(k>0||n++)”表达式的值为假,所以while语句中的条件不满足,循环语句不会执行,变量n的值也不会加1,所在输出变量k和n的值是1和2。
35.有两个关系R、S如下:
由关系R通过运算得到关系S,则所使用的运算为______。
A.选择
B.投影
C.插入
D.连接
答案:
B
[解答]投影运算是指对于关系内的域指定可引入新的运算。
本题中S是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系。
所以选择B选项。
36.有如下程序:
#include<stdio.h>
intchange(int*data)
{
return(*data)++;
}
main()
{
intdata=123;
change(&data);
printf("%d,",data);
data=change(&data);
printf("%d,",data);printf("\n");
}
程序运行后的输出结果是______。
A.124,124,
B.123,124,
C.124,123,
D.123,123,
答案:
A
[解答]本题程序执行过程为:
调用change函数,将变量data地址传入函数,返回当前指针指向的变量值123,之后此变量加一,data=124。
输出data=124。
再次调用函数,返回当前指针指向的变量值124,然后此地址内存中变量加一,data=125,然后将返回值124赋给变量data=124,最后输出data=124。
故A选项正确。
37.以下程序的输出结果是
#include<stdio.h>
main()
{inti=0,a=0;
while(i<20)
{for(;;){if((i%10)==0)break;elsei--;}
i+=11;a+=i;
}
printf("%d\n",A);
}
A.21
B.32
C.33
D.11
答案:
B
38.阅读以下程序:
#include<stdio.h>
main()
{intx;
scanf("%d",&x);
if(x--<5)printf("%d",x);
elseprintf("%d",x++);
}
程序运行后,如果从键盘输入5,则输出结果是______。
A.3
B.4
C.5
D.6
答案:
B
39.已知字母A的ASCII码为十进制的65,下面程序
main()
{charch1,ch2;
ch1='A'+'5'-'3';
ch2='A'+'6'-'3';
printf("%d,%c\n",ch1,ch2);
}
的输出是_________。
A.67,D
B.B,C
C.C,D
D.不确定的值
答案:
A
[解答]由于字符“5”和“3”的ASCII码相差为2,所以ch1经过运算后的值应为65+2=67;同理,ch2经过运算后的值应为65+3=68,即是字符“D”。
40.有以下程序
#include<stdio.h>
voidfun(char*t,char*s)
{while(*t!
=0)t++;
while((*t++=*s++)!
=0);
}
main()
{charss[10]="acc",aa[10]="bbxxyy";
fun(ss,aa);printf("%s,%s\n",ss,aa);
}
程序的运行结果是______。
A.accbbxxyy,bbxxyy
B.acc