国家二级C语言机试(选择题)模拟试卷229(题后含答案及解析)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家二级C语言机试(选择题)模拟试卷229(题后含答案及解析) 题型有:1.
1.以下选项中非法的C语言字符常量是
A.’\b’
B.’\007’
C.’aa’
D.’\xaa’
正确答案:C
解析:一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来作为字符常量。

知识模块:C语言基础知识
2.在调用函数时,如果参数是简单变量,它与对应形参之间的数据传递方式是( )。

A.单向值传递
B.地址传递
C.由实参传给形参,再由形参传回实参
D.传递方式由用户指定
正确答案:A
解析:C语言规定,简单变量或数组元素为实参时,是单向值传递,即实参可以改变形参的值,但形参不能改变实参的值。

知识模块:函数与数组
3.数据库应用系统中的核心问题是
A.数据库设计
B.数据库系统设计
C.数据库维护
D.数据库管理员培训
正确答案:A
解析:在数据库应用系统中的一个核心问题就是设计一个能满足用户要求,性能良好的数据库,这就是数据库设计。

所以数据库设计是数据库应用的核心。

知识模块:公共基础知识
4.合法的C语言标识符是( )。

A._1_
B.2_8
C.void
D.unsigned
正确答案:A
解析:用户的标识符只能由字母或下划线开始,其他任何字符开始均会出错。

一般强调文见其义的命名方法。

但是C语言中的保留字不能用作用户的标识符。

而选项C和D全部为保留字,选项B中以数字开头,这些都不正确。

知识模块:C语言基础知识
5.以下叙述中错误的是( )。

A.gets函数用于从终端读入字符串
B.getehar函数用于从磁盘文件读入字符
C.fputs函数用于把字符串输出到文件
D.fwrite函数用于以二进制形式输出数据到文件
正确答案:B
解析:本题考查字符处理函数和文件读写函数,属于基础知识。

其中B选项的getchar函数用于从终端读入字符。

知识模块:基本语句
6.有两个关系R,S如下,由关系R和S通过运算得到关系T,则所使用的操作为()。

A.并
B.自然连接
C.笛卡尔积
D.差
正确答案:D
解析:由关系可以看出,关系T是由关系R中减去关系R和关系S共有的元组得到的,所以答案选择D。

知识模块:数据库设计基础
7.数据库设计过程不包括
A.概念设计
B.逻辑设计
C.物理设计
D.算法设计
正确答案:D
解析:数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和物理设计。

知识模块:公共基础知识
8.以下关于逻辑运算符两侧运算对象的叙述中正确的是()。

A.可以是任意合法的表达式
B.只能是整数0或非0整数
C.可以是结构体类型的数据
D.只能是整数0或1
正确答案:A
解析:逻辑运算符两侧的运算对象可以任意合法的表达式,最终会根据两侧表达式计算出的数值来判定该逻辑表达式为真(1)或假(0)。

答案选A。

知识模块:数据类型、运算符与表达式
9.关于字符数组定义中存在语法错误的是( )。

A.char ss[][20]={‘‘right’’};
B.char*ss[6];ss[1]=‘‘right?’’;
C.char*ss[]={‘‘right?’’};
D.char ss[6][20];ss[1]=‘‘right?’’;
正确答案:D
解析:本题考查字符数组,选项D中定义了二维数组ss,可以用于存储字符串,但是字符串的存储不能通过赋值,仅可以初始化或者输入得到,而选项C 和A不同,选项B为指针数组,对于指针变量可以保存常量字符串的地址。

知识模块:函数和数组
10.C语言程序中,运算对象必须是整型数的运算符是
A./
B.%
C.&&
D.*
正确答案:B
解析:%要求参与运算的运算量为整型,其他三个运算符对于参与运算的运算量没有直接要求。

知识模块:C语言基础知识
11.关于结构体说明和变量定义中,正确的是( )。

A.typedef struct abc{int n;double m;}ABC;ABC x,y;
B.struct abc{int n;float m};struct abc x,y;
C.struct ABC{int n;float m;}struct ABC x,y;
D.struct abc{int n;float m;};abc x,y;
正确答案:A
解析:结构体的定义是正常的C语言语句。

选项B中结构体定义中每个成员后面的分号都不能省略,选项C结构体类型定义完毕后的}外没加分号,选项D中定义变量要加上关键字struct。

知识模块:结构体及文件操作
12.以下不构成无限循环的语句或语句组是
A.n=0;do{++n;}while(n<=0);
B.n=0;while(1){n++;}
C.n=10;while(n);{n--;}
D.for(n=0,i=1;;i++)n+=i;
正确答案:A
解析:选项B)中while(1)永远为真所以进入死循环,选项C)中while(n=10)同理,选项D)中for循环没有循环限定条件也将进入无限循环,只有选项A)中while(n<=0)循环判定成立,循环将不进入无限循环。

知识模块:C语言程序设计
13.以下叙述中正确的是
A.break语句不能用于提前结束for语句的本层循环
B.continue语句使得整个循环终止
C.使用break语句可以使流程跳出switch语句体
D.在for语句中,continue与break的效果是一样的,可以互换
正确答案:C
解析:用break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体,从而提前结束循环。

而continue语句的作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。

知识模块:C语言程序设计
14.若变量已正确定义for( x=0,y=0; ( y!=99 && x<4 ); x++ )则以上for 循环()。

A.执行4次
B.执行3次
C.执行无限次
D.执行次数不定
正确答案:A
解析:for语句的一般形式为”for(表达式1; 表达式2; 表达式3 ) {循环体语句}”,其执行流程是先计算表达式1,之后计算表达式2,根据表达式2的值来判定是否进行循环,若为真,则执行循环体,循环体执行完毕之后再计算表达式3的值。

该循环的循环条件是(y!=99 && x<4),每次循环后x自增1,x由0自增到3,循环执行4次,答案选A。

知识模块:循环结构程序设计
15.下列选项中,能够满足“只要字符串s1等于字符串s2,则执行ST”要求的是
A.if(s1==s2)ST;
B.if(strcpy(s1,s2)==1)ST;
C.if(strcmp(s2,s1)==0)ST;
D.if(s1-s2==0)ST;
正确答案:C
解析:在C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数strcmp( ),如果这个函数的返回值等于0,说明两个字符串相等。

知识模块:C语言程序设计
16.有以下程序#include <stdio.h> main( ) { FILE
*pf;char *s1=“China”,*s2=“Beijing”;pf=fopen(“abc.dat”,”wb+”);fwrite(s2,7,1,pf);rewind(pf);/*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);} 以上程序执行后abc.dat文件的内容是
A.Chinang
B.China
C.ChinaBeijing
D.BeijingChina
正确答案:A
解析:本题主要查函数fwtite的使用。

函数fwrite的凋用形式为:int fwrite(chat*pt,unsigned sizc,unsigncd n,FILE*fp);其功能是把pt所指向的n*size 个字节输出到fn所指文件中。

在本题中fwritc(s2,7,1,pf);的功能是把字符串“Beijing”输入到文件abc.dat中,然后调用rewind(pf),把文件位置指针回到文件开头,再调刚fwrite(s1,5,1,pf)把字符串“china”写入到文件abc.dat 中,所以此时文件abc.dat的内容为Chinang。

知识模块:结构体、共用体、位运算及文件操作
17.有以下程序#include<stdio.h>main( ) {int i,j,m=55;for(i=1;i<=3;i++) for(j=3;j<=i;j++)m=m%j;printf(“%d\n”,m);}程序的运行结果是
A.0
B.1
C.2
D.3
正确答案:B
解析:在程序中,内层循环判断条件为““j<=i”,而i的初值为3,故当外层循环变量i的值为1和2时,内层循环体都不会被执行。

只有当i和j都等于3时循环才会执行一次。

因为m的值为55对3求余结果为1。

知识模块:C语言程序设计
18.有以下程序#include <stdio.h>#define N 4void fun(int a[][N], int b[]){ int i;for (i=0; i<N; i++) b[i] = a[i][i] - a[i][N-1-i];}main( ){ int x[N][N]={{1, 2, 3, 4}, {5, 6, 7, 8}, {9,10,11,12}, {13,14,15,16}}, y[N], i;fun (x, y);for (i=0; i<N; i++) printf(“%d,”, y[i]); printf(“\n”); }程序运行后的输出结果是()。

A.-3,-1,1,3,
B.-12,-3,0,0,
C.0,1,2,3,
D.-3,-3,-3,-3,
正确答案:A
解析:函数fun( )的功能是计算b[i]:b[0]=a[0][0]-a[0][3]=-3,
b[1]=a[1][1]-a[1][2]=-1,b[2]=a[2][2]-a[2][1]=1,b[3]=a[3][3]-a[3][0]=3,所以计算得到的y值为选项A)。

知识模块:函数
19.有以下程序#include<stdio.h>int fun(int a,int b){return a+b;} main( ){int x=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf(“%d\n”,r);}程序运行后的输出结果是
A.15
B.21
C.20
D.31
正确答案:B
解析:本题考查函数的调用,函数fun功能为求两个数据的和。

主函数中表达式r=fun(fun(x,y),z--),首先计算内层调用fun(x,y),计算结果为13,然后外层调用fun(13,8),结果为21。

知识模块:函数和数组
20.有以下程序#include <stdio.h>int f(int x,int y){return ((y-x)*x);}main( ){ int a=3,b=4,c=5,d; d=f(f(a,b),f(a,c)); printf(“%d\n”,d);}程序运行后的输出结果是
A.10
B.8
C.9
D.7
正确答案:C
解析:本题考查函数的嵌套调用。

首先计算f(a,b)与f(a,c),f(a,b)=(b-a)*a=3,f(a,c)=(c-a)*a=6,然后计算f(3,6)=(6-3)*3=9。

知识模块:函数和数组
21.若有以下程序#include<stdio.h>void sp(int*a){ int b=2;main( ){int k=3,*p=&k;a=&b;sp(p);*a=*a*2;printf(“%d,%d\n”,k,*p);printf(“%d,”,*a);} }则程序的输出结果是A.4,3,4
B.4,3,3
C.6,3,6
D.6,6,6
正确答案:B
解析:主函数中定义指针变量p指向k,调用函数sp(p),将k的地址传递给形参指针a,函数转到sp运行,a指向b的地址,表达式*a=*a*2,相当于b=b*2,得到*a的数据4输出。

函数调用结束,此时a和b的空间撤销,而对实参k和p 的值并没有改变,仍旧是3。

知识模块:编译预处理和指针
22.有以下程序#include <stdio.h>void fun(char * *p){ + +p; printf(“%s\n”, *p);}main( ){ char *a[ ]=(“Morning”,”Afternoon”,”Evening”,”Night”);fun(a);} 程序
的运行结果是
A.fternoon
B.Morning
C.orning
D.Afternoon
正确答案:D
解析:在程序中,指针的指针变量a和p都是指向字符串的指针。

执行fun(a )语句时,p指向的是字符串数组a的第一个字符串“Morning”,p自加1之后,*p指向了字符串数组a的第2个字符串“Afternoon”。

知识模块:编译预处理和指针
23.设有定义char str[] = “Hello”;则语句printf(“%d %d”, sizeof(str), strlen(str));的输出结果是
A.5 5
B.6 6
C.6 5
D.5 6
正确答案:C
解析:本题考查sizeof和strlen对字符串的处理不同之处,sizeof求出字符串的字符个数,包括结尾符。

Strlen求出字符串的实际字符,不包括结尾符。

所以答案为6,5,C选项正确。

24.已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。

以下不能将变量c中的大写字母转换为对应小写字母的语句是
A.c=(‘A’+c)%26-’a’
B.c=c+32
C.c=c-’A’+’a’
D.c=(c-’A’)%26 +’a’
正确答案:A
解析:根据题意可知,小写字母比与之对应的大写字母的ASCII码大32,A 选项中字符A加上c表示的大写字符再对字母个数26取余,本身这个表达式没有任何含义所以选择A选项。

25.设有定义doublea[10],*s=a;以下能够代表数组元素a[3]的是
A.(*s)[3]
B.*(s+3)
C.*s[3]
D.*s+3
正确答案:B
解析:指针的赋值首先基类型必须一致,s二维数组名,是二维数组的首地
址,其基类型是一个具有10个元素的字符数组。

p是一个字符指针变量,其基类型是一个字符,k是一个行指针,其基类型是具有3个元素的字符型数组。

所以A、C、D中两项的基类型不一致。

而B选项,s[0]是二维数组s的第一个元素,其代表第一行元素构成的数组的首地址,其相当于一维数组的数组名,其基类型是一个字符类型,和p基类型一致。

因此B选项正确。

相关文档
最新文档