全国计算机二级C语言笔试试题详细分析版Word文档格式.docx
- 文档编号:18152945
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:30
- 大小:1.54MB
全国计算机二级C语言笔试试题详细分析版Word文档格式.docx
《全国计算机二级C语言笔试试题详细分析版Word文档格式.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言笔试试题详细分析版Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
它不仅包括描述事物的数据本身,而且还包括相关事物之间的联系。
以上选项只有D说明了数据之间的联系,D正确。
(8)一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员、与实体计算机之间的联系是
A)一对一 B)一对多 C)多对多 D)多对一
一个工作人员可以使用多台计算机,而一台计算机可被多个人使用这是一个多对多的关系,C正确。
(9)数据库设计中反映用户对数据要求的模式是
A)内模式 B)概念模式 C)外模式 D)设计模式
(10)有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是
A)自然连接 B)交 C)投影 D)并
(11)以下关于结构化程序设计的叙述中正确的是
A)一个结构化程序必须同时由顺序、分支、循环三种结构组成
B)结构化程序使用goto语句会很便捷
C)在C语言中,程序的模块化是利用函数实现的
D)由三种基本结构构成的程序只能解决小规模的问题
(12)以下关于简单程序设计的步骤和顺序的说法中正确的是
A)确定算法后,整理并写出文档,最后进行编码和上机调试
B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档
C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档
D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构
答案:
D
(13)以下叙述中错误的是
A)C程序在运行过程中所有计算都以二进制方式进行
B)C程序在运行过程中所有计算都以十进制方式进行
C)所有C程序都需要编译链接无误后才能运行
D)C程序中整型变量只能存放整数,实型变量只能存放浮点数
(14)有以下定义:
int
a;
long
b;
double
x,y;
则以下选项中正确的表达式是
A)a%(int)(x-y) B)a=x!
=y;
C)(a*y)%b D)y=x+y=x
(15)以下选项中能表示合法常量的是
A)整数:
1,200 B)实数:
1.5E2.0 C)字符斜杠:
‘\’ D)字符串:
"
\007"
答案:
选项A错误,整数由0到9的数字组成,但这里有一个逗号。
选项B错误,指数形式的实数要求E的后边必须是整数。
选项C错误,因为以\开头的称为转义字符,系统遇到\会向后找一个或多个字符与\组成转义字符,而这里存在语法解析错误。
如果要表示字符\,正确的方式为:
‘\\’
选项D正确,\007为转义字符,\后边带1到3位数字表示为八进制数。
(16)表达式a+=a-=a=9的值是
A)9 B)_9 C)18 D)0
答案:
+=和-=和=都是赋值运算符,运算方向从右向左。
先执行a=9,再执行a-=9,结果a=0
再执行a+=0,最终结果为0。
(17)若变量已正确定义,在if(W)printf(“%d\n,k”);
中,以下不可替代W的是
A)a<>b+c B)ch=getchar() C)a==b+c D)a++
选项A,<
>
在c语言中不是一个运算符,所以该表达式存在语法错误不能用在w的位置。
if后边的表达式可以是关系表达式、逻辑表达式、也可以是其它合法的表达式,如果是其它表达式其运算规则为:
0值表示假,非0值表示真。
所以b、c、d三项都正确。
(18)有以下程序
#include<
stdio.h>
main()
{int
a=1,b=0;
if(!
a)b++;
else
if(a==0)if(a)b+=2;
b+=3;
printf(”%d\n”,b);
}
程序运行后的输出结果是
A)0 B)1 C)2 D)3
(19)若有定义语句inta,b;
doublex;
则下列选项中没有错误的是
A)switch(x%2)
B)switch((int)x/2.0
{case0:
a++;
break;
{case0:
case1:
b++;
case1:
default:
default:
}
}
C)switch((int)x%2)
D)switch((int)(x)%2)
{case0.0:
case1.0:
(20)有以下程序
#include<
{inta=1,b=2;
while(a<
6){b+=a;
a+=2;
b%=10;
}
printf(”%d,%d\n”,a,b);
A)5,11 B)7,1 C)7,11 D)6,1
案:
B
这道题目考察对while循环的掌握
跟踪程序运行正如:
开始:
:
a=1、b=2、
第一次循环:
b=3、a=3、b=3
第二次循环:
b=6、a=5、b=6
第三次循环:
b=11、a=7、b=1
最终结果a=7、b=1
最后输出:
7,1
(21)有以下程序
#include<stdio.h>
{inty=10;
while(y--);
printf(”Y=%d\n”,Y);
程序执行后的输出结果是
A)y=0 B)y=-1 C)y=1 D)while构成无限循环
(22)有以下程序
#include<stdio.h>
{chars[」=”rstuv"
;
printf(”%c\n”,*s+2);
A)tuv B)字符t的ASCII码值 C)t D)出错
C
第4行定义字符数组s,并初始化如下:
r
s
t
u
v
\0
使用字符串给字符数组初始化会自动在后边加一个\0字符。
第5行输出*s+2的值,这是一个表达式,*运算符比+运算符优先,*s表示数组的第一个元素’r’,因为s表示数组第一元素的地址,所以*s就表示该地址上的数据。
*s+2即’r’+2,字符在内存存储的是它的ASCII值,所以’r’+2其实就是’r’的ASCII值加2,但是最终输出什么要看printf函数的格式控制符,这里格式控制符是%c表示要输出字符,所以’r’+2的字符是’t’。
(23)有以下程序
#include<stdio.h>
#include<string.h>
{charx[]=”STRING”;
x[0」=0;
x[1]=’\0’;
x[2」=’0’;
printf(”%d
%d\n”,sizeof(x),strlen(x));
A)6
1 B)7
0 C)6
3 D)7
1
这道题目是考察大家对sizeof函数和strlen函数的掌握。
sizeof函数的作用是计算出存储变量在内存中占用的空间大小,单位是字节,比如一个字符在内存占一个字节。
如果是数组则计算出所有数组元素占用的空间大小,如果是结构体变量则计算出该结构体变量所有成员占用的空间大小。
strlen函数是计算出字符数组的长度或字符串的长度,计算时如果遇到\0则停止计算。
第5行定义字符数组x,并初始化为:
S
T
R
I
N
G
第6行分别给第一、二、三个元素赋值,如下:
‘0’
第一个元素赋值为整数0,字符的ASCII值为整数,0就是转义字符\0的ASCII值,也就是说第一个元素被赋值为\0。
第二个元素赋值为\0。
第三个元素赋值为字符0,注意:
’0’不等于’\0’
第7行输出sizeof(x)和strlen(x)的值,sizeof(x),一个字符元素在内存占用1个字节,x数组共包括7个字符(包括最后的\0),所以sizeof(x)的值为7
strlen(x)的值是多少呢?
它遇到\0就退出,由于第一个元素就是\0所以strlen函数还没有计算就停止统计了,所以最终统计的数值就是0。
sizeof(x)和strlen(x)的值分别为7、0。
(24)有以下程序
Int
f(int
x);
n=1,m;
m=f(f(f(n)));
printf(”%d\n”,m);
int
x)
{return
x*2;
A)1 B)2 C)4 D)8
8
(25)以下程序段完全正确的是
A)int*p;
scanf("
%d"
&p);
B)int*p;
scanf(“%d”,p);
C)intk,*p=&
k;
p);
D)intk,*p:
;
*p=&
(26)有定义语句:
int*p[4];
以下选项中与此语句等价的是
A)int
p[4];
B)int
**p;
C)int
*(p「4」);
D)int(*p)「4」;
(27)下列定义数组的语句中,正确的是
N=10;
B)#defineN10
int
x[N];
intx[N];
x[0..10];
D)intx[];
解析:
C语言规定定义数组的大小必须为常量表达式。
选项A由于N为变量,所以intx[N]错误。
选项B由于N为符号常量,所以intx[N]正确
选项C定义格式错误。
选项D定义数组没有指定长度,所以错误。
如果在定义时进行了初始化可以不指定数组的长度,如:
intx[]={1,2,3};
(28)若要定义一个具有5个元素的整型数组,以下错误的定义语句是
a[5]=﹛0﹜;
b[]={0,0,0,0,0};
c[2+3];
D)int
i=5,d[i];
以上选项只有选项D是变量,所以错误。
(29)有以下程序
void
f(int*p);
a[5]={1,2,3,4,5},*r=a;
f(r);
printf(”%d\n”;
*r);
voidf(int*p)
{p=p+3;
printf(”%d,”,*p);
A)1,4 B)4,4 C)3,1 D)4,1
案:
(30)有以下程序(函数fun只对下标为偶数的元素进行操作)
#include<stdio.h>
voidfun(int*a;
intn)
{inti、j、k、t;
for(i=0;
i<n一1;
i+=2)
{k=i;
‘
for(j=i;
j<
n;
j+=2)if(a[j]>
a〔k])k=j;
t=a〔i];
a〔i]=a[k];
a〔k]=t;
{intaa「10」={1、2、3、4、5、6、7},i;
fun(aa、7);
for(i=0,i<
7;
i++)printf(”%d,”,aa[i]));
printf(”\n”);
A)7,2,5,4,3,6,1 B)1,6,3,4,5,2,7 C)7,6,5,4,3,2,1 D)1,7,3,5,6;
2,1
A
第2行到第10行为fun函数
第14行定义数组aa,并初始化为
1
2
3
4
5
6
7
与定义了整型变量i
调用fun函数,将aa的首地址和数组的实际大小7作为实参传递给了fun的形参a和n。
开始执行fun函数。
第4行定义四个整型变量i、j、k、t
第5行到第10行是一个大的for循环结构,从第5行的for结构可以看出i的值从0到4,并且x每次循环后加2,i的值分别是0、2、4,所以外层循环的次数是3次。
第8行也是一个for循环,当i等于0时,j从0循环到6,取值为:
0、2、4、6
第8行的作用是分别拿数组下标为0、2、4、6的元素和下标为i的元素比较,找到下标为0、2、4、6的这几个元素最大的。
找到后退出本层循环,执行第9行语句,
第9行语句的作用是将找到的比下标为i的元素最大的元素和元素i交换位置。
当i=0,第8行分别使用1、3、5、7元素和1进行比较,7是最大所以将7和1交换位置如下:
当i=2,第8行分别用使用3(aa[2])、5(aa[4])、1(aa[6])和3(aa[2])比较,5是最大值所以将5和3交换,如下:
当i=4,第8行分别使用3(aa[4])、1(aa[6])和3(aa[4])进行比较,没有找到最大值,所以k和i的值是相等的还是第7行赋的值。
执行第9行交换aa[4]和aa[4]值,等于没有交换。
至此fun函数执行完毕,返回main函数执行第16行输出aa数组的元素。
由于调用fun是将aa的数组地址传递过去了,这称为传址调用,所以在fun函数已对数组元素进行修改,如下:
所以程序最终输出:
7,2,5,4,3,6,1
(31)下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST"
要求的是
A)if(strcmp(s2,s1)==0)ST;
B)if(sl==s2)ST;
C)if(strcpy(sl,s2)==1)ST;
D)if(sl-s2==0)ST;
字符串比较函数strcmp专门是比较两个字符是否相等的,
如果字符串1等于字符串2则返回0
如果字符串1大于字符串2则返回一个正整数
如果字符串1小于字符串2则返回一个负整数
所以选项A是正确的。
(32)以下不能将s所指字符串正确复制到t所指存储空间的是
A)while(*t=*s){t++;
s++;
B)for(i=0;
t[i]=s[i];
i++);
C)do{*t++=*s++;
}while(*s);
D)for(i=0,j=0;
t[i++]=s[j++];
);
D)for(i=0,j=0;
首先要明确:
【++自增运算符】的优先级大于【*取值运算符】
do{*t++=*s++;
}while(*s);
相当于:
*t=*s;
s++;
t++;
当*s='
\0'
时,while已经退出,*s也就没法拷贝给*t了
(33)有以下程序(strcat函数用以连接两个字符串)
#include<string.h>
{chara[20]=”ABCD\OEFG\0”,b[]=”IJK”;
strcat(a,b);
printf(”%s\n”,a);
A)ABCDE\OFG\OIJK
B)ABCDIJK
C)IJK
D)EFGIJK
第5行定义两个字符数组,a和b,注意看a中的元素,第5个元素是\0
第6行,strcat(a,b),表示将字符串b连接到a的后边,连接的过程是这样的:
先在a中找到\0,从\0处开始将b字符串连接,连接时其实是将b的每个字符赋值到对应a数组元素的位置:
a
E
F
将上图中灰色的位置用b中的字符替换,如下:
J
K
然后在最后加\0
这就是最终连接后的结果:
ABCDIJK
如果b字符串为:
”IJ\0K”,它中间也有一个\0
连接时会只将IJ放到a的后边,如下:
(34)有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母
#include<ctype.h>
fun(char*p)
i=0;
while(p[i])
{if(p[i]==’’&&islower(p「i-1」))p[i-1]=p[i-1]-‘a’+‘A’;
i++;
{chars1[100]=”abcdEFG!
”;
fun(s1);
printf(”%s\n”,s1);
A)ab
cd
EFG!
B)Ab
Cd
EFg!
C)aB
cD
D)ab
第3到11行是自定义函数fun
第12行到17行为main函数
第14行定义s1数组,并初始化为:
b
c
d
!
第15行调用fun函数,并将s1的首地址作为形参传递给fun的形式参数p,开始执行fun函数
第5行定义整型变量i,并赋初始值0
第6到10行是一个while循环,循环条件p[i],i的值从0开始,每次循环最后第9行执行i++,当i=0时p[i]表示s1数组的第1个元素,i=1时p[i]表示s1数组的第2个元素,等等,直到p[i]的值为0退出循环
第8行判断p[i]的值是否为空格,并且p[i-1]是不是小写字母,p[i-1]表示p[i]的前一个元素,如果两个条件都满足则执行p[i-1]=p[i-1]-'
a'
+'
A'
这表示将p[i-1]转换为大写字母。
请看上边的s1数组存储结构,总共有s1[2]、s1[5]、s1[9]三个空格,但是这些空格的前一个元素分别是:
s1[1]、s1[4]、s1[8],只有s1[1]和s1[4]是小写字母,s1[8]不是小写字母,所以只将s1[1]和s1[4]这两个元素执行p[i-1]=p[i-1]-'
表达式转换成大写字母,如下:
fun函数调用结束,返回main函数执行第16行,输出s1:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国计算机 二级 语言 笔试 试题 详细 分析