全国计算机二级C语言笔试模拟88.docx
- 文档编号:11458918
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:26
- 大小:27.30KB
全国计算机二级C语言笔试模拟88.docx
《全国计算机二级C语言笔试模拟88.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言笔试模拟88.docx(26页珍藏版)》请在冰豆网上搜索。
全国计算机二级C语言笔试模拟88
二级C语言笔试模拟88
一、选择题
1.数据的存储结构是指。
A.数据所占的存储空间量
B.数据的逻辑结构在计算机中的表示
C.数据在计算机中的顺序存储方式
D.存储在外存中的数据
答案:
B
[解答]数据的存储结构是指数据元素在计算机内存中的表示,即数据的机内表示。
2.简单的交换排序方法是。
A.快速排序
B.选择排序
C.堆排序
D.冒泡排序
答案:
D
[解答]所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。
3.以下叙述中正确的是______。
A.C语言的源程序不必通过编译就可以直接运行
B.C语言中的每条可执行语句最终都将被转换成二进制的机器指令
C.C源程序经编译形成的二进制代码可以直接运行
D.C语言中的函数不可以单独进行编译
答案:
B
[解答]C语言编写的程序必须经过编译、连接后才可以执行,选项A错误;C语言编译后生成的二进制代码是目标文件,需进一步连接生成.exe文件方可执行,选项C错误;C语言中函数可以单独编译。
4.数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及
A.数据的存储结构
B.计算方法
C.数据映象
D.逻辑存储
答案:
A
[解答]数据结构作为计算机的一门学科,主要研究和讨论以下三个方面的问题:
①数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;②在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;③对各种数据结构进行的运算。
5.下列哪一条不属于数据库设计的任务?
A.设计数据库应用结构
B.设计数据库概沦结构
C.设计数据库逻辑结构
D.设计数据库物理结构
答案:
A
[解答]数据库设计工作量大而且过程复杂,既是一项数据库工程也是一项庞大的软件工程。
考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段:
需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库的运行和维护。
6.数据库系统的核心是。
A.数据模型
B.数据库管理系统
C.数据库
D.数据库管理员
答案:
B
[解答]数据库系统由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台5个部分构成。
其中数据库管理系统是数据库系统的核心,它负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等工作。
7.在数据库管理技术的发展中,数据独立性最高的是。
A.人工管理
B.文件系统
C.数据库系统
D.数据模型
答案:
C
[解答]在人工管理阶段,数据无法共享,冗余度大,不独立,完全依赖程序:
在文件系统阶段,数据共享性差;在数据库系统阶段,共享性好,独立性高。
8.算法具有五个特性,以下选项中不属于算法特性的是______。
A.有穷性
B.简洁性
C.可行性
D.确定性
答案:
B
9.下列程序的执行结果是。
#include<stdio.h>
main()
{inta,b,c;
a=b=2;
c=(a++)-1;printf("%Ad,%d",a,C);
c+=-a+++(++B);printf("%d,%d",a,C);
}
A.3,14,1
B.3,14,2
C.2,04,1
D.2,14,1
答案:
A
[解答]本题主要考查自加运算符(++、--)的使用。
①前缀变量“++i,--i”,在使用i之前,先使i的值加1或者减1,再使用此时的表达式的值参与运算;②后缀变量“i++、i--”,先使用此时的表达式的值参与运算,在使用i之后,再使i的值加1或者减1。
题中计算表达式c=(a++)-1时先使用a的值进行计算,结果为c=2-1=1,然后将a的值加1,即执行完此语句后a的值是3,表达式c+=-a+++(++B)等价于c=c+(-a++)+(++B),c=1+(-3)+3=1,此时a=4,b=3。
10.下列程序的运行结果是。
inty=5,x=14;
y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d”,x,y);
A.x=27,y=27
B.x=12,y=13
C.x=15,y=14
D.x=y-27
答案:
C
[解答]逗号表达式的解题思路是从左到右,依次求解,整个逗号表达式的值就是最后一个表达式的值。
表达式(x=3*y,x+1)中,依次是x=3*y=3*5=15,表达式x+1=16,但没有给x或y赋值,所以x还是等于15;第3个表达式x-1=15-1=14,所以y的值为14。
11.以下不能定义为用户标识符的是______。
A.scanf
B.Void
C._3com
D.int
答案:
D
[解答]本题选项D中int为C语言的保留字,是错误的。
注意:
C语言的标识符是区分大小写的,void是C语言的保留字,而Void不是C语言的保留字,故Void也可定义为用户标识符。
12.以下C语言用户标识符中,不合法的是
A._1
B.AaBc
C.a_b
D.a--b
答案:
D
[解答]标识符由字母、下划线、数字三个方面组成,开头必须是字母或下划线。
13.下列不是合法的C语言语句是。
A.a=5
B.{inti;
i++;}
C.;
D.{;}
答案:
A
[解答]选项A)是一个表达式,它后面没有分号结尾(C语言中规定语句必须以分号结束),所以它不是语句;选项B)用一个花括号把几条语句括起来了,这是一个复合语句;选项C)中只有一个分号,是一个空语句;选项D)是个复合语句,也是一个空语句。
14.下列能正确定义且赋初值的语句是。
A.intn1=n2=10;
B.charc=32;
C.floatf=f+1.1;
D.doublex=12.3E2.5;
答案:
B
[解答]C语言规定,可以在定义变量的同时给变量赋初值,称为变量初始化。
选项A)中在给n1和n2进行赋初值,但变量n2没有定义;选项C)中定义变量f时,不能在赋值表达式的右边出现变量f自身,所以选项C)错误;选项D)用指数表达式的常量中,字母E后面的数应该为整数,而不应该为小数形式。
因此,选项B)正确。
15.已知
intt=0;
while(t=1){…}
则以下叙述正确的是。
A.循环控制表达式的值为0
B.循环控制表达式的值为1
C.循环控制表达式不合法
D.以上说法都不对
答案:
B
[解答]这里要注意“=”与“==”的用法,t=1是将t赋值为1,所以循环控制表达式的值为1。
16.有以下程序:
#include<stdio.h>
main()
{intx=8;
for(;x>0;x--)
{if(x%3)
{printf("%d,",x--);continue;}
printf("%d,",--x);
}
}
程序的运行结果是______。
A.7,4,2
B.8,7,5,2
C.9,7,6,4
D.8,5,4,2
答案:
D
[解答]本题考查for循环语句。
x=8,for循环条件为真,8%3=2,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值8,然后将x的值减1,此时x=7。
然后执行continue语句结束本次循环。
执行x--表示式,得x=6,for循环条件为真.6%3=0,则if条件表达式为假,执行第二个输出语句,先将x的值减1得x=5,然后输出x的值5。
执行x--表示式,得x=4,for循环条件为真,4%3=1,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值4,然后将x的值减1,此时x=3。
然后执行continue语句结束本次循环。
执行x--表示式,得x=2,for循环条件为真,2%3=2,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值2,然后将x的值减1,此时x=1。
执行x--表示式,得x=0,for循环条件为假,循环结束。
17.有以下程序
#include
main()
{intx=8;
for(;x>0;x--)
{if(x%3)
{printf("%d,",x--);continue;}
printf("%d,",--x);
}
}
程序的运行结果是______。
A.7,4,2
B.8,7,5,2
C.9,7,6,4
D.8,5,4,2
答案:
D
18.有以下程序:
main()
{inty=10;
while(y--);printf("y=%d\n",y);
}
程序执行后的输出结果是______。
A.y=0
B.y=-1
C.y=1
D.while构成无限循环
答案:
B
[解答]whik语句一般形式为:
While(表达式)语句;
其语句先判断表达式,后执行语句。
而表达式y--先返回y的当前值,再进行-1运算。
19.下列能正确定义一维数组的选项是。
A.inta[5]={0,1,2,3,4,5};
B.chara[]={0,1,2,3,4,5};
C.chara={'A','B','C');
D.inta[5]="0123";
答案:
B
[解答]在定义数组时,如果赋给的初始值个数大于数值的长度,这样就会越界,因此选项A错误;选项C中定义的是一个字符变量C;选项D)中整型数组a中只能存储整型数据,而不能存储字符串常量“0123”。
20.要求通过while循环不断读入字符,当读入字母N时结束循环。
若变量已正确定义,以下正确的程序段是______。
A.while((ch=getchar())!
='N')printf("%c",ch);
B.while(ch=getchar()!
='N')printf("%c",ch);
C.while(ch=getchar()=='N')printf("%c",ch);
D.while((ch=getchar())=='N')printf("%c",ch);
答案:
A
[解答]因为while一是以条件为假时结束循环,因此选项C、D不正确。
“!
=”的优先级比“=”高,因此“ch=getchar()!
='N'”相当于“ch=(getchar!
='N')”,ch并不能得到输入的字符,只能得到true或者false值。
21.有以下程序:
#include<stdio.h>
main()
{
inti,j;
for(i=3;i>=1;i--)
for(j=1;j<=2;j++)printf("%d",i+j);
printf("\n");
}
}
程序运行的结果是______。
A.234
345
45
B.432
C.23
543
23
D.45
3434
答案:
D
[解答]本题主要考查for循环语句的嵌套。
外层主循环执行了3次,嵌套的循环语句每轮执行2次,每次输出i+j的值,推出嵌套循环语句后换行。
22.以下程序段的输出结果是______。
main()
{chars1[10],s2[10],s3[10];
scanf("%s",s1);gets(s2);gets(s3);
puts(s1);puts(s2);puts(s3);
}
输入数据如下:
(此处<CR>代表回车符)
aaa<CR>
bbb<CR>
A.aaa
bbb
B.aaa
bbb
C.aaa\0bbb\0
D.aaabbb
答案:
B
[评析]scanf是标准输入函数,在输入字符串aaa时,实际的内容为“aaa\0”,“\0”是由系统自动加入的;gets的功能是从终端读入一行字符,即一直读到换行符为止,并由系统自动以“\0”代替换行符。
23.若有定义:
inta[4][10];,则以下选项中对数组元素a[i][j]引用错误的是______。
(o<=i<4,0<=j<=10
A.*(&a[0][0]+10*i+j)
B.*(a+i)+j
C.*(*(a+i)+j)
D.*(a[i]+j)
答案:
B
[评析]本题中选项B是错误的引用,*(a+i)+j只代表了a[i][j]的地址。
24.有下列函数定义:
fun(floath)
{printf("%f,%f\n",h,h*h);}
该函数的类型是。
A.int类型
B.float类型
C.void类型
D.函数无类型说明,定义有错
答案:
A
[解答]本题考查默认函数的函数值的类型。
在函数定义时,由于函数没有说明其类型,系统默认一律自动按整型处理,因此,函数的类型为int类型。
25.现有如下程序段
#include"stdio.h"
#include"string.h"
main()
{chara[]="acfijk";/*这里是有序的字符序列*/
charb[]="befijklqswz";/*这里是有序的字符序列*/
charc[80],*p;
inti=0,j=0,k=0;
while(a[i]!
二'\0'&&b[j]!
='\0')
{if(a[i]<b[j])c[k++]=a[i++];
elseif(a[i]>b[j])c[k++]=b[j++];
else{c[k++]=b[j++];
i++;}}
while(a[i]=='\0'&&b[j]!
='\0')
c[k++]=b[j++];
while(a[i]!
='\0'&&b[j]=='\0')
c[k++]=a[i++];
c[k]='\0';
puts(c);}
则输出结果是
A.acfijkbefijklqswz
B.abceffiijjkklqswz
C.befijklqswzacfijk
D.abcefijklqswz
答案:
D
[解答]这个题目的功能是实现两个有序字符串,合并成一个新的有序的字符串。
26.下列程序的输出结果是。
#include<stdio.h>
voidmain()
{intb[6]={2,4,6,8,10,12};
int*p=b,**q=&p;
printf("%d",*(p++));
printf("%d,",**q);
}
A.4,4
B.2,2
C.4,5
D.2,4
答案:
D
[解答]首先定义了一个指向一维数组b的指针p,一个指向指针p的指针变量q,输出*(p++)是先输出*p即b[0]的值,再将指针p指向数组的下一个元素b[1],输出**q是输出指针p所指单元的内容,即b[1]的值。
27.有以下程序
#include<stdio.h>
main()
{inta[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;
for(i=0;1<5;i++)s=s+a[b[i]];
printf("%d\n",s);
}
程序运行后的输出结果是
A.6
B.10
C.11
D.15
答案:
C
[解答]当i=0时a[b[0]]=1;当i=1时a[b[1]]=3;当i=2时a[b[2]]=2;当i=3时a[b[3]]=4;当i=4时a[b[4]]=1。
将以上各数值相加得11,故选C。
28.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是
main()
{int*p,*q,a,b;
p=&a;
printf("inputa:
");
scanf("%d",*p);}
A.*p表示的是指针变量p的地址
B.*p表示的是变量a的值,而不是变量a的地址
C.*p表示的是指针变量p的值
D.*p只能用来说明p是一个指针变量
答案:
B
[命题目的]考查格式输入语句scanf的使用。
[解题要点]本题经过定义语句和赋值后,p表示的是变量a的地址,*P表示的是变量a的值。
[考点链接]变量地址的表示方法。
29.若有说明chars1[30]="abc",s2[]="defghi";,则在使用函数strcat(s1,s2)后,结果是。
A.s1的内容更新为abcdefgi
B.s1的内容更新为defghi\0
C.s1的内容更新为defghiabc\0
D.s1的内容更新为abcdefghi\0
答案:
D
[解答]streat(s1,s2)是把s2字符串连接到s1字符串的末尾,要保证s1能容纳下连接后的字符串。
30.有以下程序:
#include<stdio.h>
main()
{intc=35;printf("%d\n",e&c);}
程序运行后输出结果是()。
A.0
B.70
C.35
D.1
答案:
C
[解答]按位与运算符“&”的运算规则是:
如果两个相应的二进制位都为1,则该位的结果为1,否则为0。
因为本题中相与的两个数相同,即对应位的二进制数相等,所以结果为其值本身。
31.有以下程序
structSTU
{charname[10];intnum;floatTotalScore;};
voidf(structSTU*p)
{structSTUs[2]={{"SunDan",20044,550},{"Penghua",20045,537}},*q=s;
++p;++q;*p=*q;
}
main()
{structSTUs[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
f(s);
printf("%s%d%3.0f\n",s[1].name,s[1].num,s[1].TotalScore);
}
程序运行后的输出结果是________。
A.SunDan20044550
B.Penghua20045537
C.LiSiGuo20042580
D.SunDan20041703
答案:
B
32.有以下函数:
charfun(char*P)
{returnp;}
该函数的返回值是。
A.无确切的值
B.形参p中存放的地址值
C.一个临时存储单元的地址
D.形参p自身的地址值
答案:
B
[解答]本题考查函数返回值的知识。
函数返回值是通过函数中的return语句获得,return语句中表达式的值就是所求函数的值,该表达式的值必须与函数的类型一致。
若类型不一致,则以函数值的类型为准,由系统进行转换。
33.若有说明语句:
double*p,a;则能通过scanf语句正确给输入项读入数据的程序段是。
A.*p=&a;sCanf("%1f",p);
B.*p=&a;scanf("%f",p);
C.p=&a;scanf("%1f",*p);
D.p=&a;scanf("%1f",p);
答案:
D
[解答]p=&a是将a的地址赋给指针变量P。
*p=&a是错误的书写方式,其正确的表达形式应该是int*p=&a;或者int*P;p=&a;scanf函数的格式是scanf(格式控制,地址列表),在选项D)中,P本身就代表着一个地址。
34.C语言库函数fgets(str,n,fp)功能是______。
A.从中指向的文件中读取长度n的字符串存入int指向的内存
B.从fp指向的文件中读取长度不超过n-1的字符串存入str指向的内存
C.从fp指向的文件中读到n个字符串存入str指向的内存
D.从str读取至多n个字符到文件fp
答案:
B
[评析]fgets函数的作用是从指定的文件读入—个字符串。
fgets(str,n,fp);中的n为要求得到的字符的个数,但只从fp指向的文件输入n-1个字符,然后在最后加—个“\0”字符,因此得到的字符串共有n个字符。
35.变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。
若要求将a的高4位取反,低4位不变,所要执行的运算是。
A.a.b
B.a||b
C.a&b
D.a<<4
答案:
A
[解答]A选项中a^b=10101101,选项B中a||b=11111101,选项C中a&b=01010000,选项D中a<<4=11010000,故选项A正确。
36.下列程序的运行结果为
#include<stdio.h>
main()
{structdate
{intyear,month,day;
)today;
printf("%d\n",sizeof(structdate));
}
A.8
B.6
C.10
D.12
答案:
B
[解答]解答本题需要注意两个知识点:
①结构体变量的长度是其内部成员长度的总和,本题中,structdate中包含year、month、day这3个整型变量,一个整型变量占2个字节;②sizeof是求所占字节数的运算符。
37.有以下程序
inta=2;
intf(intn)
{staticinta=3;
intt=0;
if(n%2){staticinta=4;t+=a++;}
else{staticinta=5;t+=a++;}
returnt+a++;
}
main()
{ints=a,i;
for(i=0;i<3;i++)s+=f(i);
printf("%d\n",s);
}
程序运行后的输出结果是______。
A.26
B.28
C.29
D.24
答案:
C
38.在C语言中,只有在使用时才占用内存单元的变量,其存储类型是
A.auto和register
B.extern和register
C.auto和static
D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国计算机 二级 语言 笔试 模拟 88