10年九月.docx
- 文档编号:5866205
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:11
- 大小:24.78KB
10年九月.docx
《10年九月.docx》由会员分享,可在线阅读,更多相关《10年九月.docx(11页珍藏版)》请在冰豆网上搜索。
10年九月
2010年9月全国计算机二级C语言笔试试题
一、选择题(每小题2分,共70分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。
请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。
(11)以下关于结构化程序设计的叙述中正确的是
A)一个结构化程序必须同时由顺序、分支、循环三种结构组成
B)结构化程序使用goto语句会很便捷
C)在C语言中,程序的模块化是利用函数实现的
D)由三种基本结构构成的程序只能解决小规模的问题
【答案与解析】C、C语言中有顺序、选择(分支)、循环三种基本结构,这三种基本结构组成的算法可以任何复杂的问题,但并不是所有的程序都要用到这三种结构。
goto语句称为无条件转向语句,滥用goto语句会是程序流程毫无规律,可读性变差,应尽量避免使用。
(12)以下关于简单程序设计的步骤和顺序的说法中正确的是
A)确定算法后,整理并写出文档,最后进行编码和上机调试
B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档
C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档
D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构
【答案与解析】B、本题考查程序设计基本知识。
简单程序设计首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理出文档。
(13)以下叙述中错误的是
A)C程序在运行过程中所有计算都以二进制方式进行
B)C程序在运行过程中所有计算都以十进制方式进行
C)所有C程序都需要编译链接无误后才能运行
D)C程序中整型变量只能存放整数,实型变量只能存放浮点数
【答案与解析】B、本题考查C语言基础知识。
编写C语言源程序要经过编译链接生成二进制文件才能执行,B选项错误的。
(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
【答案与解析】A、本题考查算术运算符的基本用法。
B选项是语句,不是表达式首先排除。
A、B、C中求余符号%要求左右两边必须是整型,只有A符合。
(15)以下选项中能表示合法常量的是
A)整数:
1,200 B)实数:
1.5E2.0 C)字符斜杠:
’\’ D)字符串:
"\007"
【答案与解析】D、本题考查各类型常量的正确表示形式。
整数里面没有逗号,实型数e的后面必须是整数,字符斜杠应为’\\’.本题只有D选项是正确的,表示只有一个字符的字符串,而且是一个八进制转义字符。
(16)表达式a+=a-=a=9的值是
A)9 B)_9 C)18 D)0
【答案与解析】D、本题考查连续赋值。
连续赋值是从右向左依次运算。
首先9赋值给a,然后将a-a赋值给a,a变为0,再将a+a赋值给a,得0,答案选D选项。
(17)若变量已正确定义,在if(W)printf(“%d\n,k”);中,以下不可替代W的是
A)a<>b+c B)ch=getchar() C)a==b+c D)a++
【答案与解析】A、在C语言中没有<>这种形式的运算符。
(18)有以下程序
#include
main()
{int a=1,b=0;
if(!
a)b++;
else if(a==0)if(a)b+=2;
else b+=3;
printf(”%d\n”,b);
}
程序运行后的输出结果是
A)0 B)1 C)2 D)3
【答案与解析】A、本题考查if-else的嵌套。
本题中整体是一个if-else语句,if控制b++;else后面跟if语句,这个if语句控制一个if-else语句。
!
a为假,执行else后面的if语句,a==0为假,后面的if-else不再执行。
整个过程中b均为再赋值,故仍保持原值为0
(19)若有定义语句inta,b;doublex;则下列选项中没有错误的是
A)switch(x%2) B)switch((int)x/2.0)
{case0:
a++;break; {case0:
a++;break;
case1:
b++;break; case1:
b++;break;
default:
a++;b++; default:
a++;b++;
} }
C)switch((int)x%2) D)switch((int)(x)%2)
{case0:
a++;break; {case0.0:
a++;break;
case1:
b++;break; case1.0:
b++;break;
default:
a++;b++; default:
a++;b++;
} }
【答案与解析】C、本题考查switch结构。
switch后面括号内必须是整形或字符型的表达式,case后面必须是对应类型的常量表达式。
符合要求的只有C选项。
(20)有以下程序
#include
main()
{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、本题是C语言的简单计算。
题中随着循环,a取1,3,5的时候执行循环体,均被加到b上去,后面有一个b除10取余,当b小于10的时候不变,b原值为2加完1,3后均没有大于10,最后一轮循环加了5之后变为11,除10取余后为1。
而a在最后一次循环的时候,也从5变为了7。
最终答案选择B选项。
(21)有以下程序
#include<stdio.h>
main()
{inty=10;
while(y--);
printf(”y=%d\n”,y);
}
程序执行后的输出结果是
A)y=0 B)y=-1 C)y=1 D)while构成无限循环
【答案与解析】B、本题考查循环的简单计算。
while的循环体是空语句,所以我们看能不能结束循环,当while后面y--为0时结束循环,不会死循环,结束时y又自减1了。
所以最后y值为-1。
B选项正确。
(22)有以下程序
#include<stdio.h>
main()
{chars[]="rstuv";
printf(‘%c\n’,*s+2);
}
程序运行后的输出结果是
A)tuv B)字符t的ASCII码值 C)t D)出错
【答案与解析】C、本题考查字符数据类型。
*s值为'r',加2后变为't',本题答案选C。
(23)有以下程序
#include<stdio.h>
#include<string.h>
main()
{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
【答案与解析】B、本题考查了sizeof和strlen的功能。
sizeof是求结构所占字节,要存放长度为6的那个字符串,需要长度为7的一维字符数组,所以x数组的占字节数为7。
strlen是求字符串长度的,是指从参数的字符地址开始到第一个’\0’之间的字符个数,x[0]被赋予0,实际上是被赋了’\0’,因为0是’\0’的ASCII码值,第一个就是字符串结束的标志,所以长度为0。
(24)有以下程序
#include<stdio.h>
int f(int x);
main()
{int n=1,m;
m=f(f(f(n)));printf(“%d\n”,m);
}
int f(int x)
{return x*2;}
程序运行后的输出结果是
A)1 B)2 C)4 D)8
【答案与解析】D、本题考查简单的函数嵌套调用。
f函数的功能是x的2倍,显然最里面的fun(n)的值为2,fun
(2)为4,fun(4)为8。
最终m被赋值为8。
输出结果为D选项。
(25)以下程序段完全正确的是
A)int*p; scanf("%d",&p); B)int*p; scanf(“%d”,p);
C)intk,*p=&k; scanf("%d",p); D)intk,*p;*p=&k; scanf(“%d”,p);
【答案与解析】D,指针变量都要遵循先定义,然后赋值,最后进行运算。
A,B只定义没赋值,C选项没定义,所以错误。
(26)有定义语句:
int*p[4];以下选项中与此语句等价的是
A)int p[4]; B)int **p; C)int *(p「4」); D)int(*p)「4」;
【答案与解析】C、本题考查运算符的优先级和结合性。
[]的优先级高于*,故题干中语句与C选项等价。
(27)下列定义数组的语句中,正确的是
A)int N=10; B)#defineN10
int x[N]; intx[N];
C)int x[0..10]; D)intx[];
【答案与解析】B、本题考查数组的基础知识。
定义数组时数组名后面的[]内必须是常量,而若要在定义时缺省这个数字,必须定义同时进行数组的初始化。
本题中只有B选项正确。
(28)若要定义一个具有5个元素的整型数组,以下错误的定义语句是
A)int a[5]=﹛0﹜; B)int b[]={0,0,0,0,0};
C)int c[2+3]; D)int i=5,d[i];
【答案与解析】D、本题考查数组的基础知识。
定义数组时数组名后面的[]内必须是常量,而若要在定义时缺省这个数字,必须定义同时进行数组的初始化。
D选项里面i是变量了,错误。
答案应选择D。
(29)有以下程序
#include<stdio.h>
void f(int*p);
main()
{int 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
【答案与解析】D、本题考察函数值传递的问题。
f函数参数为指针,容易让人误解为传址的问题,但实际上只是简单传值问题,调用后实参没有改变。
故答案选D。
(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
t=a[i];a[i]=a[k];a[k]=t;
}
}
main()
{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、本题是考查基本的读程序的能力。
fun函数的功能是将传进来的数组中下标为偶数的元素按降序排列。
答案选择A选项。
(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;
【答案与解析】A、本题考查字符串操作的基本知识。
strcmp函数是比较字符串的,相同则返回0,strcpy函数是复制比较的函数。
s1、s2引导两个字符串,单独拿出来是作为字符指针,除非表示同一个字符串,否则恒不相等。
(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++];);
【答案与解析】C、本题考查字符串的基本操作。
要正确复制一个字符串,除了要复制所有的字符以外,还要包括字符串结束符’\0’,本题C选项中,当s移动到’\0’处时,*s值为0跳出循环,无法将最后一个’\0’复制到t中,无法完成字符串的复制。
本题答案选C。
(33)有以下程序(strcat函数用以连接两个字符串)
#include<stdio.H>
#include<string.h>
main()
{chara[20]=“ABCD\OEFG\0”,b[]=“IJK”;
strcat(a,b);printf(“%s\n”,a);
}
程序运行后的输出结果是
A)ABCDE\OFG\OIJK B)ABCDIJK C)IJK D)EFGIJK
【答案与解析】B、本题考察字符串操作函数。
strcat的功能是将后面字符指针引导的字符串连接到前面一个字符指针引导的字符串上去,是直接连在结束标识’\0’的位置,故IJK会直接从D后面连接,答案选择B选项。
(34)有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母
#include<stdio.h>
#include<ctype.h>
void fun(char*p)
{int i=0;
while(p[i])
{if(p[i]==’’&&islower(p「i-1」))p[i-1]=p[i-1]-‘a’+‘A’;
i++;
}
}
main()
{chars1[100]=“abcdEFG!
”;
fun(s1);printf(“%s\n”,s1);
}
程序运行后的输出结果是
A)ab cd EFG!
B)Ab Cd EFg!
C)aB cD EFG!
D)ab cd EFg!
【答案与解析】C、本题考查字符指针的基本运算。
根据对if语句的理解,fun函数的功能是字符串中当一个字符为小写字母且其后面为空格时,就将其变为大写字母。
本题选C答案。
(35)有以下程序
#include<stdio.h>
void fun(intx)
{if(x/2>1)fun(x/2);
printf(“%d”,x);
}
main()
{fun(7);printf(“\n”);}
程序运行后的输出结果是
A)137 B)731 C)73 D)37
【答案与解析】D、本题考查函数递归调用的问题。
本题中递归调用了fun函数,根据对fun函数观察发现,要输出对应x的值,必须先执行了前面的if语句,if直接控制是否再次调用fun函数,显然要输出x的值,肯定要先执行完可能的内层fun函数调用。
执行fun就肯定有输出,因此最先输出的肯定是最内层的x值,当x为3时x/2>1为假了,故最内层应输出3,接着输出7调用结束。
答案应选择D。
(36)有以下程序
#include<stdio.h>
intfun()
{staticintx=1;
x+=1;returnx;
}
main()
{inti;s=1;
for(i=1;i<=5;i++)s+=fun();
printf(“%d\n”,s);
}
程序运行后的输出结果是
A)11 B)21 C)6 D)120
【答案与解析】B、本题主要考查变量存储类别的问题。
static是说明静态类变量,其生存周期一直延续到整个程序结束。
静态类变量定义时只初始化一次,若定义时未初始化,则系统会默认初始0。
本题中在五次调用fun函数的过程中,返回结果一次为2,3,4,5,6依次累加到s上去,s最后值为21,最终输出s值,结果为B选项
(37)有以下程序
#inctude<stdio.h>
#include<stdlib.h>
Main()
{int*a,*b,*c;
a=b=c=(int*)malloc(sizeof(int));
*a=1;*b=2,*c=3;
a=b;
printf(“%d,%d,%d\n”,*a,*b,*c);
}
程序运行后的输出结果是
A)3,3,3 B)2,2,3 C)1,2,3 D)1,1,3
【答案与解析】A、本题中a、b、c三个整型指针均指向同一个存储单元,其值都相等。
一个整型的存储单元里面只能存放一个整型的数据,即最后一次被赋的值3。
故最后输出结果为A选项。
(38)有以下程序
#include<stdio.h>
main()
{ints,t,A=10;doubleB=6;
s=sizeof(A);t=sizeof(B);
printf(“%d,%d\n”,s,t);
}
在VC6平台上编译运行,程序运行后的输出结果是
A)2,4 B)4,4 C)4,8 D)10,6
【答案与解析】C、本题考查基本数据字节长的问题。
基本数据类型在不同的编译环境下会不同。
sizeof的功能是求字节长,在VC6平台上,int类型和double类型的数据所占字节数分别为4和8。
(39)若有以下语句
TypedefstructS
{intg;charh;}T;
以下叙述中正确的是
A)可用S定义结构体变量 B)可用T定义结构体变量
C)S是struct类型的变量 D)T是structS类型的变量
【答案与解析】C、本题考查结构体以及定义新类型名的基本概念。
typedef作用是定义新的类型名称,原来的类型名依然有效。
按照题干定义后,可以用structS或者T来定义结构体变量。
(40)有以下程序
#include<stdio.h>
main()
{shortc=124;
c=c_______;
printf(“%d\n”、c);
}
若要使程序的运行结果为248,应在下划线处填入的是
A)>>2 B)|248 C)&0248 D)<<1
【答案与解析】D、本题考查简单的移位运算。
左移n位过程中若无1被舍去,则原数变为原来的2的n次方倍,右移变为原来的2的n次方分之一倍。
c经过运算变为原来的二倍,恰好可以用过右移一位来得到,选D答案。
二、填空题(每空2分,共30分)
请将每空的正确答案写在答题卡【1】至【15】序号的横线上,答在试卷上不得分。
(6)以下程序运行后的输出结果是【6】。
#include<stdio.h>
main()
{inta=200,b=010;
printf(“%d%d\n”,a,b);
}
【答案与解析】2008、本题考查整型进制转换的问题。
整型变量a,b定义时被赋值分别以十进制和八进制,然后均以十进制输出,原010转化成十进制为8。
故答案为2008。
(7)有以下程序
#include<stdio.h>
main()
{int x,y;
scanf(“%2d%1d”,&x,&y);printf(“%d\n”,x+y);
}
程序运行时输入:
1234567程序的运行结果是【7】。
【答案与解析】15、本题考查格式输入。
%和d之间用整数表示读取宽度。
显然第一个数字读取为12赋值给x,第二个数字读取为3赋值给y,故最终输出结果为15。
(8)在C语言中,当表达式值为0时表示逻辑值“假”,当表达式值为【8】时表示逻辑值“真”。
【答案与解析】非0
(9)有以下程序
#include<stdio.h>
main()
{inti,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{n[i]=n[i-1]*3+1;printf(“%d”,n[i]);}
}
程序运行后的输出结果是【9】。
【答案与解析】141340、本题是循环的简单计算。
本题中当i为1时n[1]被赋值为1并输出,当i为2时n[2]被赋值为1*3+1即4,同理n[3],n[4]被赋值为13和40并输出。
所以答案为141340
(10)以下fun函数的功能是:
找出具有N个元素的一维数组中的最小值,并作为函数值返回。
请填空。
(设N已定义)
intfun(intx[N])
{inti,k=0;
for(i=0;i if(x[i] returnx[k]; } 【答案与解析】i、本题考查C语言简单算法。 本题中x[k]是用来存放数组最小值的,所以k始终是那个最小值的下标。 (11)有以下程序 #include<stdio.h> int*f(int*p,int*q); main() {intm=1,n=2,*r=&m; r=f(r,&n);printf(“%d\n”,*r); } int*f(int*p,int*q) {return(*p>*q)? p: q;} 程序运行后的输出结果是【11】 【答案与解析】2、本题考查函数以及条件表达式。 f函数的功能是比较两个整型地址上的值的大小并返回较大值的地址。 调用时将m和n的地址作为实参调用的,最终
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 九月
![提示](https://static.bdocx.com/images/bang_tan.gif)