计算机等级考试二级c语言试题分析_第1页
计算机等级考试二级c语言试题分析_第2页
计算机等级考试二级c语言试题分析_第3页
计算机等级考试二级c语言试题分析_第4页
计算机等级考试二级c语言试题分析_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C、 123E0、 2 D、2、7e 全国计算机等级考试(二级 C语言)试卷分析 、选择题(每小题1分,共40小题,共40分) 前面得10道题涉及计算机基础知识 (数据结构、 数据库、 软件工 程等方面知识) ,在这里就不针对计算机基础知识部分进行分析。 11、以下叙述中正确得就是()。 在C语言程序中,main函数必须放在其她函数得最前面 每个后缀为、C得C语言源程序都应该包含一个main函数 【解析】Bo C语言就是一种成功得系统描述语言,具有良好得移植 性,每个后缀为、C得C语言源程序都可以单独进行编译;C语言程序 中,不管包含多少个后缀为、C得程序文件,但就是一定有且仅有一个 main

2、函数,而且main函数在程序中可以放在任何其她函数之前或之后。 12、C语言中得标识符分为关键字、预定义标识符与用户标识符, 以下叙述正确得就是()。 A、预定义标识符(如库函数中得函数名)可用做用户标识符,但失 去原有含义 B、用户标识符可以由字母与数字任意顺序组成 C、在标识符中大写字母与小写字母被认为就是相同得字符 D、关键字可用做用户标识符,但失去原有含义 【解析】A。用户标识符不能以数字开头,C语言中标识符就是区分 大小写得,关键字不能用做用户标识符。 13、以下选项中表示一个合法得常量就是(说明:符号口表示空 格)()。 A、 B、 每个后缀为C得C语言源程序都可以单独进行编译 C

3、、 在C语言程序中,只有main函数才可单独进行编译 D、 C、 123E0、 2 D、2、7e A、9 口 9 口 9 B、OXab 【解析】Bo当用指数形式表示浮点数据时,E得前后都要有数据, 并且E得后面数要为整数;整型常量:0123表示八进制整型常量,Oxab 表示 十六 进制 整型 常量,123为十 进制整型常 量,123L表示长 整型 常量, 123U表示 无符号整型常量,123UL表示无符 号长整型 常量。答案A没有 这种常量,如果加上双引号就是可以表示字符串常量。 14、C语言主要就是借助以下哪个功能来实现程序模块化?() 【解析】Ao C语言就是由函数组成得,函数就是C语言得

4、基本单位。 所以可以说C语言主要就是借助定义函数来实现程序模块化。 15、以下叙述中错误得就是()0 【解析】Co在C语言中,可以用一个标识符来表示一个常量,称 之为符号常量。符号常量在使用之前必须先定义,其一般形式为: #define 标识符常量。 16、若有定义与语句:int a , b;scanf(%d , %d, &a, &b);以下 选项中得输人数据,不能把值3赋给变量a、5赋给变量b得就是()。 C、3 5 解析】Co在输入3与5之间除逗号外不能有其她字符。答案B 与A就是可以得,原因就是用seanf函数输入时,从左往右对应给值, 右边多余得值不输入进去。 17、C

5、语言中char类型数据占字 节数为()。 A、3 B、4 C、 1A、定义函数 B、定义常量与外部变量 C、 三种基本结构语句 D、丰富得数据类型 A、 非零得数值型常量有正值与负值得区分 B、 常量就是在程序运行过程中值不能被改变得量 C、 定义符号常量必须用类型名来设定常量得类型 D、 用符号名表示得常量叫符号常量 A、3, 5, B、 3, 5, 4 【解析】Co在标准C (ANSI-C )中,char类型数据占1个字节。 18、下列关系表达式中,结果为“假”得就是()。 C、3v=4| 3 D、(32为假。 19、若以下选项中得变量全部为整型变量,且已正确定义并赋值, 则语法正确得sw

6、itch语句就是()。 A、switch(a+9) case cl : y=a-b; case c2 : y=a+b; B、switch a*b case l0 : x=a+b; default : y=a-b; C、switch(a+b) casel : case3 : y=a+b;break; caseO : case4 : y=a-b; D、switch(a*a+b*b) A、(3+4)6 B、(3!=4)2 default :break; case 3 :y=a+b;break; case 2 :y=a-b;break; 【解析】D。选项A, switch 语句中要求case后面必须就

7、是常量, 二就是执行到自然结束。 20、有以下程序: #in clude mai n() int a=-2 , b=0; while(a+&+b); 程序运行后得输出结果就是()。 A、1 , 3 B、0 , 2 C、0 , 3 D、1 , 2 【解析】Do while循环第一次结束后a, b取值为:-1 , 1;第二次 结束后a, b得值为:0, 2;第三次没有执行循环体(空语句),只就 是判断了 一下a+就是否为真,因a为0,所以a+为假,但a得值加1, 所以a得值变成1,但&运算符得第一个表达式为假时,第二个表达式 1 , 2。 是()。 【解析】C。对于指针变量P,如果

8、没有把P指向一个指定得值,则 说明指针变量P内得值就是NULL,即空值,也就就是说没有存放任何存 储空间得地址,所以*p就是不能被赋值得。定义指针变量不赋初始值时 默认为NULL。 不能就是变量;选项B, a*b 要用括号括起来;选项C,case与后面得 数字用空格隔开。注意switch 语句语句结束得方式:一就是见到break ; printf(%d , %dn, a, b); 不计算,所以+b不执行,故 b得值还就是2。所以,最终 a, b得值为 21、设有定义:int x=0 , p;,立刻执行以下语句,正确得语句就 A、p=x; B、*p=x; C、 p=NULL; D、*p=NULL

9、; 22、下列叙述中正确得就是()。A、 可以用关系运算符比较字符串得大小 【解析】Do比较两个字符串大小用函数strcomp(s ,t),不能用关 系运算符比较字符串得大小;空字符串有结束符(0 ),所以也要占用 1字节;两个连续得单引号就是不合法,单引号中间必须有一个字符(普 通字符或转义字符);两个连续得双引号表示得就是空字符串。 23、有以下程序: #in elude mai n() rhar a= &a= 2 )?(a - A + a ): a; 程序运行后得输出结果就是()。 A A B、 a C、 H D、 h 解析】Do多元运算符问号前面表达式为真,所以(a- A +

10、a) 赋值给a,括号里得运算就是把大写字母变成小写字母,所以答案应为 选项Do 24、有以下程序: #in elude int f(int x); mai n() int a , b=0; for(a=0;a= A prin tf(%cn ,a); b=b+f(a);putchar( A +b); int f(int x) return x * xl; 程序运行后得输出结果就是()。 A、ABE B、BDI C BCF D、BCD 得就是()0 x0与xl就是数组名,分别代表不同得地址常量 【解析】Do对于二维数组来说,数组得名字x就是一个二级指针 常量;第一维表示行地址,比如:x0表示第一行

11、得地址,而且就是个 地址(一级指针)常量,所以x0就是不能赋值得。 P就是指针变量,语 句P=NULL;就是给 指针变量 赋NULL 【解析】B。第一次循环时,b=1 , 输出结果为B; 第二次循环时, b=3,输出结果为 D; 第三次循环时, b=8,输出结果为 25、设有定义: int x23;,则 以下关于二维数组X得叙述错误 A、 x0可瞧做就是由3个整型元素组成得一维数组 B、 C、 数组X包含6个元素 D、 可以用语句x0=0;为数组所有元素赋初值0 26、设变量 b=b+f(a);putchar( A +b); 值,它等价于() 27、有以下程序: #inelude mai n(

12、) A、p=; B、p二0; C、p=0; D、p=; 【解析】Co 在C语言中 NULL等价于整数0o int a=10 ,20,30, 40,*p=a,j; for(i=0;iv=3;i+)ai=* p;p+; printf(%dn ,a2); 程序运行后得输出结果就是()0 #defi ne N 3 int i for(i=0;iN;i+) bi=ai0; for(j=0;jN;j+) mai n() ,2,3,4,5,6,7,8,9,yN,i; fun(x ,y); for(i=0;iN;i+) A、30 B、40 C、 10 D、20 【解析】 Ao for循环中第一次循环时,a0=

13、*p ,因为有p=a;故相 当于 a0=*a ;根据一维数组得定式:ai=*(a+i) ,说明每次循环就是 将数组得当前元素赋值给自己,后面每次循环依此类推。所以,for循 环结束后,数组a得值并没有变化,由于数组下标就是由0开始,所以 a2得值就是30 0 28、有以下程序: #i nclude void fun (i nt aN ,int b) if(aijbi) bi=aij; int xNN=1 printf( “ d,” ,yi); 程序运行后得输出结果就是()。 a得第一行得最大值就是3,第二行得最大值就是6,第二行得最大值就 是9,所以答案就是3, 6, 9。 29、有以下程序(

14、strcpy 为字符串复制函数,strcat 为字符串连接 函数): 【解析】Co第一次执行字符串得复制函数后,字符串a中得值就 是a2,第二次执行得就是字符串得连接函数,连接后,a字符串变成了 a2yz,再输出,所以 运行结果为a2yz。本题最主要得就是了解字符串名 加一个整型常量所代表得字符串就是什么,比如:有char a10=abc; 定义,则字符串a得值就是abc;而字符串a+1得值就是bc ;字符串a+2 得值就是C;字A、2, 4, 8, B、3, 6, 9, C、3, 5, 7, D、1 , 3, 5, 【解析】B。fun 函数功能就是把数组a得每一行得最大值赋给b, #i nc

15、lude #in clude mai n() char a10=abc ,b10=012 ,c10=xyz; strcpy(a+1 , b+2); puts(strcat(a , c+1); 程序运行后得输出结果就是()。 A、al2xyz B、 12yz C、 a2yz D、 bc2yz 符串b+3得值就是0,即不空串。 30、以下选项中,合法得就是()。 A、char str3= d , e , b , u , g , 0 ; B、char str4;str4=hello world; C、 char n ame10; name=ch in a; 解析】A。选项B不能把一个字符串赋值给一个

16、字符变量str4 ; 选项C与D犯了同样得错误就是把字符串赋给了数组名,数组名就是一 个指针常量,常量就是不能被赋值得。 31、有以下程序: #includevstdio 、 h mai n() char *s=234; int k=0 while (sk+1!= 0 k+; if(k%2=0)a=a+(sk- 0 +1);continue; a=a+(sk- 0); 程序运行后得输出结果就是()。 A、 k=6 a=11 B、k=3 a=14 C、k=4 a=12 D、k=5 a=15 【解析】C。输出结果:k=1 a=2 k=2 a=4 k=3 a=7 k=4 a=12 32、有以下程序:

17、 #includevstdio 、 h mai n() ,two ,three ,four ,five;D、char strl5=pass ,str26;str2=strl; ,a=0; prin tf(k=%d a=%dn ,k,a); char a510=o ne C、5 6 1 2 D 3 4 5 6 int i char t for(i=0;iv4;i+) for(j=i+1;jv5;j+) if(ai0aj0) t=ai0;ai0=aj0;aj0=t; puts(a1); 程序运行后得输出结果就是()。 【解析】Ao for循环完成得功能就是把二维数组a得第一列得字母 按从小到大排序

18、,其她列得字母不变。排序方法就是类冒泡排序。 33、有以下程序: int a=1 , b=2; void fun 2() a=3;b=4; mai n() funl(5 , 6);fun2(); printf(%d %dn , a, b); 程序运行后得输出结果就是()。 A、 1 2 5 6 B、5 6 3 4A、fwo B、 fix C、two D、 owo #in cludevstdio 、h void fun 1( int a ,int b) prin tf( %d %d ,a,b); 解析】Bo funl就是输出局部变量得值,fun2就是把全局变量得 值改成3与4,所以输出得结果就是

19、5634。当全局变量与局部变量同名 时,在重 叠得作用域中,局部 变量起作用(可怜原则,即谁得作用域小 谁就在重叠得作用域中起作用)。 34、有以下程序: #in elude void fun c(i nt n) static int num=1; num=num+n;pnntf(%d , num); mai n() func(3) ;fu nc;prin tf(n); 程序运行后得输出结果就是()o A、4 8 B、 3 4 C、3 5 D、4 5 解析】Ao第一调用func函数时输出4,第二次调用func函数时 num得值并不会释放,仍然就是上次(第一次调用func函数时)修改后 得值4,

20、第二次调用结果为8,所以输出结果就是4 8。本题考得就是静 态局部变量得作用域与生存期(存 放在静态存储区)不一致得情况,第 一次调用完后,静态局部变量num得值为4,存放到静态存储区,函数 func执行结束,其作用域消失,但存放在静态存储区得num变量得值4 还在,但仍然不能拿出来用,只能 等下次再进入作用域时,即第二次调 用函数func时,又 进入静态 局部 变量num得作用 域,此时,变量num 又可以拿出来使用,由于 已经存在静态存储区,所以 不用重新定义该变 量,可以直接从静态存储区取出变量num得值(4)来使用,所以第二 次调用后,num得值变成了 8 o 35、有以下程序: #i

21、ncludevstdio 、 h99; #include s=(i nt *)malloc(sizeof(i nt); *s=* pl+* p2; free(s); mai n() int a=1 , b=40, *q=&a; fun(&a , &b, q); printf(%dn ,*q); 程序运行后得输出结果就是()。 【解析】C。fun函数功能就是新开辟内存空间(地址s)存放a与 b得值(通过&a、&b将地址复制给p1、p2),q得地址并没有变化,所 以应该还就是指向地址a。 36、有以下程序: #include struct STUchar n

22、 ame9;char sex;i nt score2; void f(struct STU a) struct STU b=Zhao ,m ,85,90); a1=b; mai n() void fun (i nt *pl ,int *p2 , int *s) A、42 B、0 C、 1 D 41 f ,95,92,Sun , m 98,struct STUc2=Qia n 99; f(c); printf( ” %s %c %d, %d,,c0、name,c0 、sex, c0、 score0 , co、score1); printf(%s , %c, %d, %dn , c1、name,c

23、1、sex , c1、scoreo c1 、score1); 元素)赋值,数组得第一个元素没有变化,所以正确答案应选D。 37、以下叙述中错误得就是()0 typedef说明得新类型名必须使用大写字母,否则会出编译错误 用typedef说明新类型得作用就是用一个新得标识符来代表已 存在得类型名 解析】Bo typedef就是用来定义新类型,或定义原有类型得别名 (新名称)。用typedef说明得 类型不就 是必须用大写,而就是习惯上 用大写0 38、以下叙述中错误得就是()0 A、函数得返回值类型不能就是结构体类型,只能就是简单类型 B、函数可以返回指向结构体变量得指针A、 Zhao, m,

24、85 , 90, Sun, m 98, 99 B、 Zhao, 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 程序运行后得输出结果就是()。 【解析】Do f 函数就是为结构体数组得第二个元素(结构体类型得 A、 可以用typedef说明得新类型名来定义变量 B、 C、 用typedef可以为基本数据类型说明一个新名称 D、 for=(i=0;i6;i+) fpi ntf(fp ,%dn , ai); rewi nd(fp);

25、for(i=0;i6;i+) fsca nf(fp ,%d , &a5-i); fclose(fp); for(i=0;i%6;i+) prin tf(%d , ai); 程序运行后得输出结果就是()o A、 4 , 5 , 6 , 1, 2 , 3 , B、 1, 2 , 3 , 3 , 2 , 1, C 1, 2 , 3 , 4 , 5 , 6 , D 6 , 5 , 4 , 3 , 2 , 1, 【解析】Do这个就是对文件得操作,把数组得数写到文件里,然 后再从文件里倒序读出。所以输出结果为6 , 5 , 4 , 3 , 2 , 10 C可以通过指向结构体变量得指针访问所指结构体

26、变量得任何成 D、只要类型相同,结构体变量之间可以整体赋值 【解析】A。函数返回值类型可以就是简单类型与结构体类型0 39、若有定义语句int b=2;,则表达式(b2)/(3 II b)得 值就是()。 A、4 B、8 C 0 D、2 【解析】Bo 2得二进制数为010,移两位后得二进制数为01000 , 转成十制数为8, (3|2)为真即1 , 8/ 1=8 ,所以结果为80 40、有以下程序: #i nclude mai n() FILE *fp; int i ,a6=1 , 2, 3, 4, 5, 6; fp=fo pen (d2 dat , w+); 、基本操作题(共18分) str

27、就是一个由数字与字母字符组成得字符串,由变量num传入字 符串长度。请补 充函数proc(),该函数得功能就是:把字 符串str中得 数字字符转换成数字并存放到整型数组bb中,函数返回数组bb得长度。 例如,Str=abcl23de45f967 ,结果为:1234567。 注意:部分源程序给出如下。 请勿改动main()函数与其她函数中得任何内容,仅在函数proc() 得横线上填入所编写得若干表达式或语句。 试题程序: #include #defi ne M 80 int bbM; int i , n=0; for(i=0 ; ivnum ; i+) if( 【1】) bb n=【2】; n+

28、; return 【3 】 void mai n()int p roc(char str ,int bb , int num) #in clude char strM; int num=O , n, i; prin tf(E nter a stri ng gets(str); 程序改错题(共24分) 请修改程序中得错误,使它能得到正确结果。 main()函数,不得增行或删行,也不 得更改程序得 结构。 试题程序:下列给定 程序中,函数proc() 得功能就是:读入一个字符串(长度 20),将该字符串中得所有字符按 ASCII码升序排序后输出。 例如,输入op dye ,则应输出 deopy 。

29、 :n); while(str nu m) nu m+; n=proc(str , bb, nu m); prin tf(nbb=); for(i=0;i= 0 &stri= 0 &stri= 9 ” 将每 个数字字 符转化为数字放在整型数组bb 中, 因此,【2】处填 “stri 0;由函数proc()可知,变量n 中存放整型数组bb中得元 素个数, 最后要返回到主函数当中 ,因此, 【3】处填n。 注意:不要改动 #in clude #in clude #include vsonio 、 h /*fo un d* int p roc(char str) char c; unsigned i , j; for(i=0;ivstrle n( str)-1;i+) for(j=i+1;jvstrle n( str);j+) if(stristrj) c=strj /*fou nd* strj=stri+; stri=c; void mai n() ch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论