最新计算机二级C语言真题及答案
更新时间:2024-05-20 19:19:01 阅读量: 综合文库 文档下载
2012年3月全国计算机等级考试二级C语言真题
一、 选择题 1、 下列叙述中正确的是:
A、循环队列是队列的一种顺序存储结构 B、循环队列是队列的一种链式存储结构 C、循环队列是非线性结构 D、循环队列是一直逻辑结构 2、 下列叙述中正确的是
A、栈是一种先进先出的线性表 B、队列是一种后进先出的线性表 C、栈和队列都是非线性结构 D、以上三种说法都不对 3、 一棵二叉树共有25个节点,其中5个时子节点,那么度为1的节点数为 A、4 B、6 C、10 D、16 4、 在下列模式中,能够给出数据库物理存储结构与物理存取方法的是 A、内模式 B、外模式 C、概念模式 D、逻辑模式 5、 在满足实体完整性约束的条件下 A、 一个关系中可以没有候选关键词 B、 一个关系中只能有一个候选关键词 C、 一个关系中必须有多个候选关键词 D、 一个关系中应该有一个或者多个候选关键词 6、 有三个关系R、S和T如下: S A a b B 1 2 C 2 1 R A a b c A a b B 1 2 3 B 2 3 C 2 1 1 C 1 1 T
则由关系R和S得到关系T的操作是
A、自然连接 B、并 C、差 D、交 7、 软件生命周期中的活动不包括
A、软件维护 B、市场调研 C、软件测试 D、需求分析 8、 下面不属于需求分析阶段任务的是
A、确定软件系统的功能需求 B、确定软件系统的系统的系能需求 B、制定软件集成测试计划 D、需求规格说明书审评 9、 在黑盒测试方式中,设计测试用例的主要根据是
A、程序外部功能 B、程序内部逻辑 C、程序数据结构 D、程序流程图 10、 在软件设计中不使用的工具是
A、系统结构图 B、程序流程图 C、PAD图 D、数据流图(DFD图) 11、针对简单程序设计,以下叙述的实施步骤正确的是 A、确定算法和数据结构、编码、调试、整理文档 B、编码、确定算法和数据结构、调试、整理文档 C、整理文档、确定算法和数据结构、编码、调试 D、确定算法和数据结构、调试、编码、整理文档 12、关于C语言中数的表示,以下叙述正确的是
A、只有整型数在允许范围内能精确无误的表示,实型数会有误差 B、只要在在允许范围内整型和实型都能精确表示
C、只有实型数在允许范围内能精确无误的表示,整型数会有误差 D、只有八进制表示的数在不会有误差 13、以下关于算法叙述错误的是
A、算法可以用伪代码、流程图等多种形式来描述 B、一个正确的算法必须有输入 C、一个正确的算法必须有输出
D、用流程图可以描述的算法可以用任何一种计算机高级语言编写成程序代码 14、以下叙述错误的是
A、一个C程序可以包含多个不同名的函数 B、一个C程序只能有一个主函数
C、C程序在书写时,有严格的缩进要求,否则不能编译通过 D、C程序的主函数必须用main作为函数名 15、设有以下语句
Char ch1,ch2, scanf(”%c%c”,&ch1,&ch2);
若要为变量ch1和ch2分别输入字符A和B,正确的输入形式应该是 A、A和B之间用逗号间隔 B、A和B之间不能有任何间隔符 C、A和B之间可以用回车间隔 D、A和B之间用空格间隔 16、以下选项中非法的字符常量是
A、’\\102’ B、’\\65’ C、’\\xff’ D、’\\019’ 17、有以下程序 #include
Int A=0,B=0,C=0;
C=(A-=A-5);(A=B,B+=4); Printf(“%d, %d, %d\\n”,A,B,C) }
程序运行后输出的结果是
A 0,4,5 B 4,4,5 C 4,4,4 D 0,0,0
18、设变量均已正确定义并且赋值,以下与其他三组输出结构不同的一组语句是 A、x++; printf((“%d\\n”,x); B、n=++x; printf((“%d\\n”,n); C、++x; printf((“%d\\n”,x); D、n=x++; printf((“%d\\n”,n);
19、以下选项中,能表示逻辑值“假”的是
A 1 B 0.000001 C 0 D 100.0 20、有以下程序 #include
Scanf(“%d”,&a);
If(a++<9) printf((“%d\\n”,a); Else printf((“%d\\n”,a--); }
程序运行时键盘输入9<回车>,则输出的结构是 A、10 B 11 C 9 D 8 21、有以下程序 #include
For (n=0;n<3;n<++) {switch(s) { case 0; Case 1;s+=1;
Case 2;s+=2;break; Case 3;s+3; Case 4;s+=4; }
printf((“%d\\n”,s); } }
程序运行后的结果是
A 1,2,4 B 1,3,6 C 3,10,14 D 3,6,10 22、若k是int类型变量,且有以下for语句 For(k=-1;k<0;k++) printf(****\\n”); 下面关于语句执行情况的叙述中正确的是
A、循环体执行一次 B、循环体执行两次 C、循环体一次也不执行 D、构成无限循环 23、有以下程序 #include
{char A,B,C; B=’1’;C=’A’
For(A=0;A<6;A++)
{if(A%2) putchar(B+A); Else putchar(C+A); } }
程序运行后输出的结果是
A 1B3D5F B ABCDFE C A2C4E6 D 123456 24、设有如下定义语句 Int m[ ]={2,4,6,8},*k=m;
以下选项中,表达式的值为6的是
A *(k+2) B k+2 C *k+2 D *k+=2
25、fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。在下列划线处应该填写的是
#include
Viod fun(int x[N]) {int m;
For(m=N-1;m>0;m--) scanf(“%d\\n”, ); }
A &x[++m] B &x[m+1] C x+(m++) D x+m 26、若有函数
Viod fun(double a[], int *n) {………}
以下叙述中正确的是 A、 调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送 B、 形参a和n都是指针变量 C、 形参a是一个数组名,n是指针变量 D、 调用fun函数时将把double型实参数组元素一一对应地传送给形参a数组 27、有以下程序 #include
{int a,b,k,m,*p1,*p2; k=1,m=8;
p1=&k,p2=&m;
a=/*p1-m; b=*p1+*p2+6;
printf(“%d ”,a); printf(“%d\\n”,b); }
编译时编译器提示错误信息,你认为出错的语句是 A、a=/*p1-m B、b=*p1+*p2+6 C、k=1,m=8; D、p1=&k,p2=&m; 28、以下选项中有语法错误的是
A char *str[ ]={“guest”}; B、char str[10 ]={“guest”};
C、char *str[3] *str[1]={“guest”}; D、char str[3][10];str[1]={“guest”};
29、avg函数的功能是求整型数组中的前若干个元素的平均值,设数组元素个数最多不超过10,则下列函数说明语句错误的是
A、int avg(int *a,int n); B、int avg(int a[10],int n); C、int avg(int a,int n) ; D、int avg(int a[],int n); 30、有以下函数 #include
#include
{ printf(“%d\\n”,strren”ATS\\n012\\1”) );} 程序运行后的输出结果是
A 3 B 8 C 4 D 9 31、有以下函数 #include
{ char a[20],b[20],c[20]; scanf(”%s%s”,a,b); get(c);
printf(”%s%s\\n”,a,b,c); }
程序运行时从第一行开始输入 this is a cat!<回车>,则输出结果是 A thisisacat! B this is a C thisis a cat! D thisisa cat! 32、有以下函数 #include
{if(c>’x’) fun(c-1); printf (“%c”,c); }
main() {fun”z”;}
程序运行输出结果是
A xyz B wxyz C zyxw D zyx 33、有以下函数 #include
for(i=0;i<=n;i++) printf(“*”); printf(“#”); main()
{ func(3); printf(“????”); func(4); printf(“\\n”); } 程序运行输出结果是
A ****#????***# B ***#????*****# C **#????*****# D ****#????*****# 34、有以下函数 #include
do {s[j]=s[j]+s[j+1];} wihle(++j<2); }
main()
{int k,a[10]={1,2,3,4,5};
for(K+1;k<3;k++) fun(a);
for(K+1;k<5;k++) printf(“%d”,a[k]); printf(“\\n”); }
程序运行输出结果是
A 12345 B 23445 C 34756 D 35745 35、有以下函数 #include
printf(“%d,”,S[k+j]); printf(“%d\\n”,S(k-j))); }
程序运行输出结果是
A 98,18 B 39,11 C39,18 D98,11 36、有以下函数 #include
{int x[10]={1,2,3,4,5,6,7,8,9,10},i=0; While(i<=4) {exch(&x[i])’i++;}
for(i=0;i<5;i++) printf(“%d”,x[i]); printf(“\\n”); }
程序运行输出结果是
A 2 4 6 8 10 B 1 3 5 7 9 C 1 2 3 4 5 D 6 7 8 9 10 37、设有以下程序段 Struct MP3 {char name[20]; Char color; Float price; }std,*ptr; ptr=& std;
若要引用结构体变量std中的color成员,写法错误的是
A std.color B ptr-> color C std-> color D (*ptr) .color 38、有以下函数 #include
{int mun; char name[10]; int age;}; viod fun(struct stu *p)
{ printf(“%s\\n”,p->name);} mian()
{ struct stu x[3]={{01,”zhang”,20},{02,”wang”,19},{03,”zhao”,18}}; fun(x+2);
}
程序运行输出结果是
A zhang B zhao C wang D 19 39、有以下函数 #include
{int a=12,c; c=(a<<2)<<1; printf(“%d\\n”,c): }
程序运行输出结果是
A 3 B 50 C 2 D 96
40、以下函数不能用于向文件写入数据的是
A ftell B fwrite C fputc D fprintf
二、 填空题 1、将长度为n的顺序存储在线性表中删除一个元素,最坏情况下需要移动表中的元素个数为( )。 2、设循环队列的存储空间为Q(1:3),初始状态为front=rear=30。现经过一系列入队与退队运算后,front=16,rear=15,则循环队列中有( )个元素。
3、数据库管理系统提供的数据语言中,负责数据的增、删、改和查询的是( )。 4、在将E-R图转换到关系模式时,实体和联系都可以表示成( )。
5、常见的软件工程方法有结构化方法和面向对象方法,类、继承以及多态性等概念属于( )。
6、设变量a和b已定义为int类型,若要通过scanf(”a=%d,b=%d”,&a,&b);语句分别给a和b输入1和2,则正确的数据输入内容是( )。 7、以下程序的输出结果是( )。 #include
a+=a%=9; printf(“%d\\n”,a); }
8、设a、b、c都是整型变量,如果a的值为1,b的值为2,则执行c=a++||b++;语句后,变量b的值是( ).
9、有以下程序段 s=1.0;
for(k=1,k<=n;k++) s=s+1.0(k*(k+1)); printf(“%f\\n”,s);
请填空,使以下程序段的功能与上面的程序段完全相同。 s=1.0; k=1; while( )
{ s=s+1.0(k*(k+1)); k=k+1;} printf(“%f\\n”,s);
10、以下程序段的输出结果是( ) #include
{ char a,b;
for(a=0;a<20;a+=7) { b=a; putchar(b+’0’); } }
11、以下程序段的输出结果是( ) #include
{ char *ch[4]={“red”,”green”,”blue”}; Int i=0;
While(ch[i]);
{ putchar(ch[i][0]; i++; } }
12、 有以下程序 #include
{int arr[]={1,3,5,7,2,4,6,8{, i, start; Scanf(“%d”, &start); For(i=0,i<3,i++)
printf(“%d”,arr[(start+i)%8]); }
若在程序运行时输入整数10 <回车>,则输出结果为( )。
13、 以下程序的功能是输出a数组中的所有字符串,请填空 #include
{char *a[]={“ABC”,”DEFGH”,”IJ”,”KLMNOP”}; Int i=0;
For(;i<4;i++) printf(“%s\\n”, ); }
14、以下程序的输出结果是( )。 #include
{ char *p, *q, *r;
p=q=r=(char *)malloc(sizeof(char)*20); strcpy(p,”attaboy,welcome!”);
printf(“%c%c%c\\n”,p[11], q[3], r[4]);
free(p); }
15、设文件test.txt中原已写入字符串Begin,执行以下程序后,文件中的内容为( )。 #include
fp=fopen(“test.txt”,”w+”); fputs(“test”,fp); fclose(fp); }
(1)【答案】A
【解析】为了充分利用存储空间,可以把顺序队列看成一个环状空间,即把顺序队列的头尾指针相连,这样的队列称之为循环队列。它是对顺序队列的改进,故循环队列是队列的一种顺序存储结构 (2)【D】
【解析】栈是一种后进先出的线性表,队列是一种先进先出的线性表,二者均是线性结构,故选项A)、B)、C)均不对,答案为选项D)。 (3)【D】
【解析】由二叉树的性质n0=n2+1可知,度为0的结点数(即叶子结点数)=度为2的结点数+1,根据题意得知,度为2的结点数为4个,那么25-5-4=16即为度为1的结点数,选项D)正确 (4)、【答案】A
【解析】内模式也称存储模式,它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,对应于物理级,它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述。所以选项A)正确。 (5)【答案】D
【解析】在关系R中如记录完全函数依赖于属性(组)X,则称X为关系R中的一个候选关键字。在一个关系中,候选关键字可以有多个且在任何关系中至少有一个关键字。所以在满足数据完整性约束的条件下,一个关系应该有一个或多个候选关键字,所以选项D)正确。 (6)【答案】C
【解析】R和S的差是由属于R但不属于S的元组组成的集合,运算符为“-”。记为T=R-S。根据本题
关系R和关系S运算前后的变化,可以看出此处进行的是关系运算的差运算 (7)【答案】B
【解析】通常把软件产品从提出、实现、使用、维护到停止使用(退役)的过程称为软件生命周期。可以将软件生命周期分为软件定义、软件开发及软件运行维护三个阶段。软件生命周期的主要活动阶段是可行性研究与计划制定、需求分析、软件设计、软件实现、软件测试、运行和维护。软件生命周期不包括市场调研。
(8)【答案】C
【解析】需求分析是对待开发软件提出的需求进行分析并给出详细的定义。主要工作是编写软件需求规格说明书及用户手册。需求分析的任务是导出目标系统的逻辑模型,解决“做什么”的问题。制定软件集成测试计划是软件设计阶段需要完成的任务 (9)【答案】A
【解析】黑盒测试也称功能测试或数据驱动测试,设计测试用例着眼于程序外部结构、不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。 (10)【答案】D
【解析】软件设计包括概要设计和详细设计,软件概要设计中,面向数据流的设计方法有变换型系统结构图和事务型数据流两种。软件详细设计,程序流程图(PDF)和PAD(问题分析图)是过程设计的常用工具。数据流图(DFD图)是软件定义阶段结构化分析方法常用的工具。 (11)【答案】A)
【解析】简单程序设计的步骤是首先要确定算法和数据结构,然胡编码、调试,最后整理相关文档。 (12)【答案】A)
【解析】实型数据在内存中存储的二进制位数是有限的,例如float型数据在内存中有24位二进制尾数。而一个十进制实数转化为二进制实数时,其有效数字位数有可能会超过尾数的存储长度,从而导致有效数字丢失而产生误差。 (13)【答案】B)
【解析】一个正确的算法可以有零个或者多个输入,必须有一个或者多个输出。 (14)【答案】C)
【解析】一个C程序有且只有一个主函数 main()。一个C 程序可以包含多个不同名字的子函数。C程序在书写时没有严格的缩进要求。
(15)【答案】B)
【解析】考察C语言中输入格式,因为在输入格式中定义好了”%c%c”,其中没有任何符号,所以中间不能加任何字符,包含不能加逗号、回车和空格,因为这些也算是字符。所以在输入时也不可以有任何间隔符号。
(16)【答案】D)
【解析】字符常量有两种表示方法:
一种是用该字符的图形符号,如'b' ,'y','*'。另外还可以用字符的ASCII码表示,即用反斜符(\\)开头,后跟字符的ASCII码,这种方法也称为转义序列表示法,具体方法是:有两种形式:一种是用字符的八进制ASCII码,表示为:\\odd.这里,ddd是八进制值(o可以省略)。另一种使用字符的十六进制ASCII码值,表示为 \\0xhh或0Xhh 这里hh是两位十六进制值。 本题中D)选项?\\019'使用是八进制表示,不应该出现9,所以错误。 (17)【答案】A)
【解析】考察C语言关于赋值的应用,首先执行a-=a-5,即a=a-(a-5),使得a的值为5,然后执行c=(a-=a-5),即将a的值5赋给变量c,使得c的值也为5。然后执行下句逗号表达式中的a=b,把b的值0赋给a,此时a的值为0,然后执行b=b+4,使得b的值为4。最后打印输出。 (18)【答案】D)
【解析】本题考察自增运算符,++x表示先将x值加1后再用,x++表示先使用x值,用后加1,所以本题中ABC选项都会输出x+1的值,只有D选项会输出x值。 (19)【答案】C)
【解析】在C语言中非0的值表示真,0表示假。 (20)【答案】A)
【解析】考察if语句和自增自减运算符,判断条件中if(a++<9)是先用后加,即a的值为9,所以条件不成立,但是a已经进行了自增1操作,a的值此时为10。执行else语句时,因为打印a--,是先用后减,所以先输出10,然后a的值变为9。 (21)【答案】C)
【解析】本题考察switch语句的应用,case分支后面如果没有break,那么就会顺序执行下面的case,直到遇到break跳出。所以第一次循环后s的值为3打印输出。第二次s的值为:s=s+3,s=s+4,即为10,打印输出。第三次没有匹配成功直接执行default语句,s=s+4,所以s的值为14,打印输出。
(22)【答案】A)
【解析】考察for循环语句,本题中k初始值为-1,执行一次循环体,执行完后k值为0,不满足k<0条件,推出循环,所以执行了一次。 (23)【答案】C)
【解析】考察for语句和if语句,第一次循环a的值为0 ,a%2也为0 ,条件不满足所以打印的是(c+a)即变量c的值“A”。第二次a的值为1,条件a%2的值为1,条件满足打印字符(b+a)即字符 “2”。第三次a的值为2,条件不满足,打印(a+c)即字符”C”。同理打印后续字符为“4E6”。 (24)【答案】A)
【解析】考察数组和指针的概念,本题中*k指向数组m的首地址。*(k+2)现将指针后移两个元素,即为m[2]的首地址,然后取出m[2]的值6,所以选择A选项。选项B的值是一个地址无意义。选项C的值为4。选项D使得m[0]的值为4。 (25)【答案】D)
【解析】考察指针的概念和应用,数组名本身就是地址,所以不需要在用&符号。C选项不能对所有元素赋值而是反复再给一个数值赋值且是死循环。 (26)【答案】B)
【解析】函数中的形参a[]已经退化为一个指针,所以AC都不对,D选项中只是传入一个指针,并没有把数组的元素挨个赋值,正确选项为B。 (27)【答案】A)
【解析】选项A中a = /*p1-m;表示方式不正确,未能正确表示出含义。 (28)【答案】D)
【解析】考察指针数组的概念,D选项中str为二维字符数组,不能够直接把一个字符串赋值到二维数组的某一行中。 (29)【答案】C)
【解析】考察函数声明基本用法,C选项中函数的第一形参没有指名是数组,代表的是一个整型数,声明不正确。 (30)【答案】B)
【解析】考察转义字符的用法,strlen函数的作用是求得字符串长度,\\n与\\1均是反义字符各表示一个字符所以打印值为8。
(31)【答案】C)
【解析】考察scanf和gets输入字符串的区别,scanf语句接收字符时遇到空格就作为一个字符串的结束,所以a数组中为this ,b数组中为is,但是getchar函数见到回车才认为结束所以c数组为 a cat!。所以打印结果如选项C。 (32)【答案】A)
【解析】考察函数的嵌套调用,当运行fun(?z?),调用fun(?y?),然后嵌套调用fun(?x?),输出结果为先输出x,然后输出y,最后输出z。 (33)【答案】D)
【解析】考察for循环函数调用,执行fun(3)是输出****,然后输出#,执行fun(4)时输出*****,然后输出#,所以选项D)正确。 (34)【答案】D)
【解析】考察静态局部变量,静态局部变量属于静态存储方式,它具有以下特点: (1)静态局部变量在函数内定义,它的生存期为整个源程序。
(2)静态局部变量只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋以0值。
(4) 根据静态局部变量的特点, 可以看出它是一种生存期为整个源文件的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。 根据这个特点,函数第一次调用时,会将数组a变为35345,当第二次调用时,函数内的j值为2,所以会将数组a的第三个元素更改为7,所以最终结果为35745,选项D)正确。 (35)【答案】B)
【解析】考察宏定义的使用,根据该宏的定义,S(k+j)=(k+j)*k+j*2=39, S(k-j)=(k-j)*k-j*2=11,所以答案为39,11选项B)正确。 (36)【答案】D)
【解析】通过分析代码,可以看出来,函数的作用就是把数组某个元素的变为这个元素位置加5后对用的元素值,所以执行完之后输出数组x的前五个元素的值,其实就是数组x的后五个元素的值,即6 7 8 9 10。
(37)【答案】C)
【解析】考察结构体的用法,在引用结构体中的成员变量时,可以使用?.?来引用,当指针指向结构体时,可以使用?->?来指向结构体重的成员,C选项引用错误。 (38)【答案】B)
【解析】考察结构体的用法,结构体数组存储了三个人的信息,x+2代表了指向第三个元素,所以输出name为Zhao。 (39)【答案】D)
【解析】考察移位操作,执行c=(a<<2)<<1语句时,首先是 a左移两位,其等效于将a乘以4,得到48,然后将48左移一位,相当于是乘以2,所以结果为c=96,选项D正确。 (40)【答案】A)
【解析】考察文件的操作,函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。调用函数ftell()就能非常容易地确定文件的当前位置。不能写入数据,其他三个选项都可以向文件中写入。 二、填空题
(1)【答案】【1】n-1
【解析】在顺序表中删除一个元素,最坏情况是删除第一个元素,后面的(n-1)个元素均要向前移动,所以此处填n-1。
(2)【答案】【2】29
【解析】通过题干的描述可知此循环队列共30个空间,另外队尾指针rear的值小于队头指针front的值,所以利用公式(rear-front+30)0=29,可知此循环队列的元素个数为29。 (3)【答案】【3】数据操纵语言
【解析】数据操纵语言DML(Data Manipulation Language),用户通过它可以实现对数据库的基本操作。例如,对表中数据的查询、插入、删除和修改。 在DML中,应用程序可以对数据库作插、删、改、排、检等五种操作。 (4)【答案】【4】关系
【解析】关系数据库逻辑设计的主要工作是将E-R图转换成指定RDBMS中的关系模式,这种转换是比较直接的,实体与联系都可以表示成关系。 (5)【答案】【5】面向对象方法
【解析】面向对象方法是一种基于对象模型的程序设计方法,包括面向对象分析、面向对象设计、面向
对象编程,是目前应用范围最广的设计方法。其中对象模型包括六个要素:封装、抽象、模块化、层次结构、类、并发性。面向对象方法的主要特征是封装、继承和多态性,所以此空应填面向对象方法。 (6)【答案】a=1,b=2
【解析】scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息,其调用格式为: scanf(\格式化字符串>\,<地址表>),scanf(\中a=%d,b=%d之间有逗号,在输入数据时也要加逗号,如果去掉逗号,输入时就不用逗号,而用空格,tab键或回车键将各个数据隔开。 (7)【答案】2
【解析】a+=a%=9; 其中a%=9等价于a=a%9; 结果为1, 所以a+=a%=9等价于a=a+1,故答案为2. (8)【答案】2
【解析】a||b 若a,b都为假,则a||b为假,其他都为真. 如果a为真时,则对b不进行真假,所以对于c=a++||b++, 因为a++时为真,所以b++不进行判断,b的值保持不变,故b=2。 (9)【答案】k<=n
【解析】for 和while都是循环语句,可以实现相同的功能.。 (10)【答案】074
【解析】本题第一次循环时a的值为0,b的值为0所以打印字符?0?。第二次循环时a的值为7,b的值为7,所以打印字符?7?。第三次a的值为14,b的值为4,打印字符?4?。 (11)【答案】rgb
【解析】char * ch[4]是指针数组,数组元素全为char类型指针, 由于数组元素均为指针,因此ch[i]是指第i个字符串的指针,ch[i][0]为指向第i个字符串的首地址。 (12)【答案】572
【解析】第一次循环打印arr[10%8]即arr[2]的值,为5。第二次循环打印arr[11%8]即arr[3]的值,为7。第三次循环打印arr[12%8]即arr[4]的值,为2。 (13)【答案】a[i]
【解析】char *a[] 为指针数组, a[i]为指向第i个字符串的指针。 (14)【答案】cab
【解析】p=q=r=(char*)malloc(sizeof(char)*20);等价于
r=(char*)malloc(sizeof(char)*20); q=r; p=q,所以p,q,r,指向相同的地址。 (15)【答案】test
【解析】fopen函数功能是打开一个文件,函数原型FILE * fopen(const char * path,const char * mode); 当mode为w+,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件.fputs将字符串写入到fp中.所以文件内容为test。 C语言程序设计
(考试时间90 分钟,满分100 分)
一、选择题((1)—(10)、(21)—(40)每题2 分,(11)—(20)每题1 分,共70 分) (11)以下叙述中正确的是
A)在C语言程序中,main 函数必须放在其他函数的最前面 B)每个后缀为.C的C语言源程序都可以单独进行编译 C)在C语言程序中,只有main 函数才可单独进行编译 D)每个后缀为.C的C语言源程序都应该包含一个main函数
(12)C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是 A)预定义标识符(如库函数中的函数名)可用作用户标识符,但失去原有含义 B)用户标识符可以由字母和数字任意顺序组成
C)在标识符中大写字母和小写字母被认为是相同的字符 D)关键字可用作用户标识符,但失去原有含义
(13)以下选项中表示一个合法的常量是(说明:符号□表示空格) A)9□9□9 B)0Xab C)123E0.2 D)2.7e
(14)C语言主要是借助以下哪个功能来实现程序模块化 A)定义函数 B)定义常量和外部变量 C)三种基本结构语句 D)丰富的数据类型 (15)以下叙述中错误的是
A)非零的数值型常量有正值和负值的区分 B)常量是在程序运行过程中值不能被改变的量 C)定义符号常量必须用类型名来设定常量的类型 D)用符号名表示的常量叫符号常量
(16)若有定义和语句:int a,b; scanf(\以下选项中的输入数据,不能把值3 赋给变量a、5 赋 给变量b 的是
A)3,5, B)3,5,4 C)3 ,5 D)3,5 (17)C语言中char 类型数据占字节数为 A)3 B)4 C)1 D)2
(18)下列关系表达式中,结果为“假”的是
A)(3+4)>6 B)(3!=4)>2 C)3<=4||3 D)(3<4)==1
(19)若以下选项中的变量全部为整型变量,且已正确定义并赋值,则语法正确的switch 语句是 A)switch(a+9) B)switch a*b { case c1:y=a-b; { case 10:x=a+b; case c1:y=a+b; default :y=a-b;
} }
C)switch(a+b) D)switch (a*b+b*b)
{ case1 : case3:y=a+b;break; { default :break; case0 : case4:y=a-b; case 3:y=a+b; break; } case 2:y=a-b; break; }
(20)有以下程序 # include
int a=-2,b=0; while(a++&&++b); printf(\}
程序运行后的输出结果是 A)1,3 B)0,2 C)0,3 D)1,2
(21)设有定义:int x=0,*p;,立即执行以下语句,正确的语句是 A)p=x; B)*p=x; C)p=NULL; D)*p=NULL; 2012 年9 月笔试真卷及答案详解 第3 页(共12 页) (22)下列叙述中正确的是
A)可以用关系运算符比较字符串的大小 B)空字符串不占用内存,其内存空间大小是0 C)两个连续的单引号是合法的字符常量 D)两个连续的双引号是合法的字符串常量 (23)有以下程序 #include
char a='H';
a=(a>='A'&&a<='Z')?(a-'A'+'a'):a; printf(\}
程序运行后的输出结果是 A)A B)a C)H D)h (24)有以下程序 #include
int f(int x)
{return x*x+1;}
程序运行后的输出结果是
A)ABE B)BDI C)BCF D)BCD
(25)设有定义:int x[2][3];,则以下关于二维数组x 的叙述错误的是 A)x[0]可看作是由3 个整型元素组成的一维数组 B)x[0]和x[1]是数组名,分别代表不同的地址常量 C)数组x 包含6 个元素
D)可以用语句x[0]=0;为数组所有元素赋初值0
(26)设变量p 是指针变量,语句p=NULL;,是给指针变量赋NULL 值,它等价于 A)p=\)p='0'; C)p=0; D)p=''; (27)有以下程序 #include
{ int a[]={10,20,30,40},*p=a,i; for(i=0;i<=3;i++){a[i]=*p;p++;} printf(\}
A)30 B)40 C)10 D)20 (28)有以下程序 #include
void fun(int a[][N],int b[]) { int i,j; for(i=0;i 2012 年9 月笔试真卷及答案详解 第4 页(共12 页) { b[i]=a[i][0]; for(j=1;j for(i=0;i A)2,4,8 B)3,6,9 C)3,5,7 D)1,3,5 (29)有以下程序(strcpy 为字符串复制函数,strcat 为字符串连接函数) #include { char a[10]=\strcpy(a+1,b+2); puts(strcat(a,c+1)); } 程序运行后的输出结果是 A)a12xyz B)12yz C)a2yz D)bc2yz (30)以下选项中,合法的是 A)char str3[]={'d', 'e', 'b', 'u', 'g', '\\0'}; B)char str4; str4=\C)char name[10]; name=\D)char str1[5]= \(31)有以下程序 #include { char *s=\while(s[k+1]!='\\0') { k++; if(k%2==0){a=a+(s[k]-'0'+1);continue;} a=a+(s[k]-'0'); } printf(\} 程序运行后的输出结果是 A)k=6 a=11 B)k=3 a=14 C)k=4 a=12 D)k=5 a=15 (32)有以下程序 #include { char a[5][10]={\int i,j; char t; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(a[i][0]>a[j][0]) 2012 年9 月笔试真卷及答案详解 第5 页(共12 页) { t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;} puts(a[1]); } 程序运行后的输出结果是 A)fwo B)fix C)two D)owo (33)有以下程序 #include void fun1(int a, int b) { printf(“%d%d”,a,b); } void fun2( ) { a=3; b=4; } main() { fun1(5,6); fun2(); printf(\} 程序运行后的输出结果是 A)1 2 5 6 B)5 6 3 4 C)5 6 1 2 D)3 4 5 6 (34)有以下程序 #include num=num+n;printf(\} void main() { func(3);func(4);printf(\程序运行后的输出结果是 A)4 8 B)3 4 C)3 5 D)4 5 (35)有以下程序 #include void main() { int a=1,b=40,*q=&a; fun(&a,&b,q); printf(\} 程序运行后的输出结果是 A)42 B)0 C)1 D)41 (36)有以下程序 #include struct STU{char name[9];char sex;int score[2];}; void f(struct STU a[]) { struct STU b={\a[1]=b; } main() { struct STU c[2]={{\f(c); printf(\printf(\} 程序运行后的输出结果是 A)Zhao,m,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 (37)以下叙述中错误的是 A)可以用trpedef 说明的新类型名来定义变量 B)trpedef 说明的新类型名必须使用大写字母,否则会出编译错误 C)用trpedef 可以为基本数据类型说明一个新名称 D)用trpedef 说明新类型的作用是用一个新的标识符来代表已存在的类型名 (38)以下叙述中错误的是 A)函数的返回值类型不能是结构体类型,只能是简单类型 B)函数可以返回指向结构体变量的指针 C)可以通过指向结构体变量的指针访问所指结构体变量的任何成员 D)只要类型相同,结构体变量之间可以整体赋值 (39)若有定义语句 int b=2; 则表达式(b<<2)/(3||b)的值是 A)4 B)8 C)0 D)2 (40)有以下程序 #include { FILE *fp;int i,a[6]={1,2,3,4,5,6}; fp=fopen(\ for(i=0;i<6;i++) fprintf(fp,\rewind(fp); for(i=0;i<6;i++) fscanf(fp,\fclose(fp); for(i=0;i<6;i++) printf(\} 程序运行后的输出结果是 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 二、填空题(每空2 分,共30 分) (6)请写出与 !(a<=b)等价的C语言表达式 【6】 。 (7)以下程序运行时从键盘输入:1.0 2.0,输出结果是:1.000000 2.000000,请填空。 #include 2012 年9 月笔试真卷及答案详解 第7 页(共12 页) main() { double a; float b; scanf(“ 【7】 ”,&a,&b); printf(\\\n\} (8)有以下程序 #include { int n1=0,n2=0,n3=0; char ch; while((ch=getchar())!='!') switch(ch) { case '1':case '3': n1++;break; case '2':case '4': n2++;break; default : n3++;break; } printf(\} 若程序运行时输入01234567!<回车>,则输出结果是 【8】 。 (9)有以下程序 #include for(i=1;i<9;i+=2)sum+=i; printf(\} 程序运行后的输出结果是 【9】 。 (10)有以下程序 #include { d=n;n=n/10;printf(\} 程序运行后的输出结果是【10】 。 (11)有以下程序 #include { int i=3,*p=&i,*r; r=st(p);printf(\} 程序运行后的输出结果是 【11】 。 (12)以下程序的输出结果是 【12】 #include 2012 年9 月笔试真卷及答案详解 第8 页(共12 页) #define N 3 #define M(n) (N+1)*n main() { int x; x=2*(N+M(2)); printf(\} (13)若有定义语句:char str[]=\,则字符串str 在内存中实际占【13】 字节。 (14)有以下程序 #include t=fun(3); printf(\} 程序运行后的输出结果是【14】 。 (15)以下函数的功能是输出链表结点中的数据,形参指针h 已指向如下链表 h A B C \\0 请填空。 struct slist{ char data; struct slist *next}; void fun(struct slist *h) { struct slist *p; p=h; while(p) { printf(\【15】 ; } printf(\} 2012 年9 月笔试真卷及答案详解 第9 页(共12 页) 2012年9月全国计算机等级考试 二级C语言程序设计答案及详解 一、选择题 (11)B) 【解析】每一个C 语言的文件或函数都可以单独编译,但只有main 函数的才可以执行。 (12)A) 【解析】预定义标识符是C语言中的标识符,在C语言中也有特定的含义,如函数printf、 scanf、sin 等和编译预处理命令名(如define 和include)。预定义标识符可以作为用户标识符使用,只是这样会 失去系统规定的原义。 (13)B) 【解析】0xab 是十六进制表示的常量。 (14)A) 【解析】C语言用函数实现软件的模块化设计。 (15)C) 【解析】C语言中,常常用一个标识符来代表一个常量,称为符号常量。符号常量在使用之 前要先定义,定义格式如下: #define<符号常量名>(常量) 其中,<符号常量名)用标识符,习惯上用大写字母,<常量>可以是数字常量,也可以是字符 (16)f)Tj/F5 1C) 【解析】题目中用scanf 函数以整数的形式输入a,b 的值。选项C)整型数字3 后面有一个 空格,当输入空格时,scanf 函数输入就会终止。 (17)C) 【解析】C语言中char 类型数据占字节数为1. (18)B) 【解析】由于3!=4 的结果为1,而1>2 的结果为假。 (19)D) 【解析】使用switch 语句直接处理多个分支,其一般形式为: switch(表达式) 2012 年9 月笔试真卷及答案详解 第10 页(共12页) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; ?? case 常量表达式n: 语句n; break; default: 语句n+1; break; } switch 语句的执行流程是:首先计算switch 后面圆括号中表达式的值,然后用此值依次与各个case 的常量表 达式比较,若圆括号中表达式的值与某个case 后面的常量表达式的值相等,就执行此case 后面的语句,执行后 遇break 语句就退出switch 语句;若圆括号中表达式的值与所有case 后面的常量表达式都不等,则执行default 后面的语句n+1,然后退出switch 语句。 (20)D) 【解析】由于a 的初始值等于-2,所以while 循环语言执行两次结束,此时变量a 的值等于 1,变量b 的等于2。 (21)C) 【解析】定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它 地址,系统会随机给它分配一个地址。 (22)D) 【解析】两个连续的双引号:\,是一个字符串常量,称为“空串”。 (23)D) 【解析】由于a 的值为'H',符合(a>='A'&&a<='Z'),所以条件表达式的值等于(a-'A'+'a'),即 'h'。 (24)B) 【解析】在函数main()中,第一次执行for 循环时,b 的值等于1,此时输出字母B;第二次 执行for 循环时,b 的值等于3,此时输出字母D;第三次执行for 循环时,b 的值等于8,此时输出字母I。 (25)D) 【解析】x[0]可看作是由3 个整型元素组成的一维数组,不可以用语句x[0]=0,为数组所有 元素赋初值0。 (26)C) 【解析】给指针变量p 赋NULL 值,NULL 是在stdio.h 头文件中定义的预定义符,其代码 值为0,当执行p=NULL;语句后,称p 为空指针。因为NULL 的代码值为0,所以p=NULL;语句等价于p='\\0';或 p=0;。 (27)A) 【解析】因为指针变量p 的初始值指向数组a,所以执行for 循环语句后,数组a 中的元素 的值不变。 (28)B) 【解析】函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数 中执行完fun(x,y)后,数组y 中的元素为二维数组x[N][N]每一行的最大元素。 (29)C) 【解析】程序执行后strcpy(a+1,b+2)后,字符数组a 的值为“a2”,再进行字符串的连接 strcat(a,c+1),此时字符数组a 的值为“a2yz”。 (30)A) 【解析】选项A)是定义了字符数组str3[],并对其赋初值。 (31)C) 【解析】这个程序的执行过程如下:当k=0 时,s[1]=2!= '\\0',k++=1,a=0+(s[1]- '\\0')=2;当 k=1 时,s[2]=1!= '\\0',k++=2,a=2+(s[2]- '\\0'+1)=2+(1+1)=4;当k=2 时,s[3]=3!= '\\0',k++=3,a=4+(s[3]- '\\0')=4+3=7; 2012 年9 月笔试真卷及答案详解 第11 页(共12页) 当k=3 时,s[4]=4!= '\\0',k++=4,a=7+(s[4]- '\\0'+1)=7+(4+1)=12;当k=4 时,s[5]= '\\0'结束循环,输出变量k 和 a 值。 (32)A) 【解析】这个程序的执行过程是当i=0 时,j=1,a[0][0]=oa[3][0]=f;置换a[2][0]=f, a[3][0]=t;此时,a[2][0]=f,a[1][0]=t, 再置换a[2][0]=t,a[1][0]=f,;当i=3时,j=4,a[3][0]=f=a43][0]=f;不置换;所以a[1]的结果为fwo。 (33)B) 【解析】函数fun1()的作用是输出局部变量a 和b 的值,在主函数中执行fun1(5,6)的结果是 输出5,6;函数fun2()的作用是给变量a 和b 分别赋值3,4;执行fun2()的作用是输出3,4。 (34)A) 【解析】在函数func(int n)中定义了局部静态变量num,,其初始值等于1,所以在主函数中 执行func(3),输出4,此时静态变量num的值等于4,当退出函数func(3)时,其值不会丢失,所以当在执行func(4) 时,输出8。 (35)C) 【解析】执行fun(&a,&b,q);语句时,在内存中开辟了一块内存空间,存放变量a 与b 的和, 并用指针变量q 引用它,但是当这条语句执行结束,这块内存空间又释放了,指针这量q 仍然引用的是变量a 的地址,所以输出结果为1。 (36)D) 【解析】在主函数中,定义了结构体STU数组c[2],并对其赋初始值。执行f(c)时,在函数 f()中,把结构体变量b 的值赋给了c[1]。 (37)B) 【解析】typedef 语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的 数据类型,原来类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示。 (38)A) 【解析】函数的返回值类型可以是结构体类型。 (39)B) 【解析】变量b 的值等于2,其向左移动2 位,其值等于8,即b<<2 的值等于8。而3||b 做 或运算的结果等于1。所以表达式(b<<2)/(3||b)的值等于8。 (40)D) 【解析】在程序中定义了一个整型数组a[6],并对它赋初值,并以写入的方式打开了文件 d2.dat。然后利用一个for 循环把数组a 中的元素数据写入文件d2.dat 中,调用函数rewind 把将文件内部的位置 指针重新指向一个文件的开头,再利用for 循环语句把文件中的数据依次写入到倒序排列的数组a 中,最后输出 数组a 中的数组元素。 二、填空题 (6)【6】(a<=b)||(a>b) 2012 年9 月笔试真卷及答案详解 第12 页(共12页) 【解析】表达式!(a<=b)含义是对a 小于等于b 取非,所以与其等价的表达式是(a<=b)||(a>b)。 (7)【7】%lf%f 【解析】对于变量a 和b 的输入采用实数的形式,所以scanf 函数的输入格式符为 %lf%f。 (8)【8】224 【解析】当从键盘上输入01234567!时,根据程序中switch()语句,当输入的字符为'1'、'3'时,变量n1++; 所以n1 的值等于2;当输入的字符为'2'、'4'时,变量n2++;所以n2的值等于2;当输入的字符为其他字符时, 变量n3++;所以n3 的值等于4。所以答案为224。 (9)【9】16 【解析】程序的功能是求1、3、5、7 之和,等于16。 (10)【10】4321 【解析】在程序的while 循环中,每次求出n 的个位上的数字,然后n 的值减小10 位,所以输出结果为4321。 (11)【11】7 【解析】函数*st()的作用是返回*a 与*c 中较大数的指针,所以在主函数中,执行st(p)时,返回变量k 的指 针,因而输出结果为7。 (12)【12】22 【解析】根据C语言中对带参数的宏的定义,2*(N+M)2))=2*(3+(3+1)*2)=22。 (13)【13】2 【解析】在C语言中在每个字符串的最后都增加一个字符串结束标识字符'\\0',所以本题中的字符串在内存 中占有2 个字节。 (14)【14】6 【解析】根据函数的迭代,f(3)=3*f(2)=3*2*f(1)=3*2*1*f(1)=3*2*1*1=6。 (15)【15】 p->next 【解析】在while 循环中输出循环链表的每个结点,p->next 指向当前结点的下一个结点。__ 2010年9月全国计算机等级考试二级C语言笔试试题 一、选择题(每小题2分,共70分) (1)下列叙述中正确的是 A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 D)上述三种说法都不对 (2)下列叙述中正确的是 A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化 B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化 C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 D)上述三种说法都不对 (3)软件测试的目的是 A)评估软件可靠性 B)发现并改正程序中的错误 C)改正程序中的错误 D)发现程序中的错误 (4)下面描述中,不属于软件危机表现的是 A)软件过程不规范 B)软件开发生产率低 C)软件质量难以控制 D)软件成本不断提高 (5)软件生命周期是指 A)软件产品从提出,实现,使用维护到停止使用退役的过程 B)软件从需求分析、设计、实现到测试完成的过程 C)软件的开发过程 D)软件的运行维护过程 (6)面向对象方法中,继承是指 A)一组对象所具有的相似性质 B)一个对象具有另一个对象的性质 C)各对象之间的共同性质 D)类之间共享属性和操作的机制 (7)层次型、网状型和关系型数据库划分原则是 A)记录长度 B)文件的大小 C)联系的复杂程度 D)数据之间的联系方式 (8)一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员,与实体计算机之间的联系是 A)一对一 B)一对多 C)多对多 D)多对一 (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)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构 (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)字符串:\(16)表达式a+=a-=a=9的值是 A)9 B)_9 C)18 D)0 (17)若变量已正确定义,在if (W)printf(“%d\\n,k”);中,以下不可替代W的是 A)a<>b+c B)ch=getchar() C)a==b+c D)a++ (18)有以下程序 #include {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 (19)若有定义语句int a, b;double x;则下列选项中没有错误的是 A)switch(x%2) B)switch((int)x/2.0 {case 0: a++; break; {case 0: a++; break; case 1: b++; break; case 1: b++; break; default : a++; b++;} default : a++; b++;} C)switch((int)x%2) D)switch((int)(x)%2) {case 0: a++; break; {case 0.0: a++; break; case 1: b++; break; case 1.0: b++; break; default : a++; b++;} default : a++; b++;} (20)有以下程序 #include {int a=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 (21)有以下程序 #include<stdio.h> main() {int y=10; while(y--); printf(”Y=%d\n”,Y);} 程序执行后的输出结果是 A)y=0 B)y= -1 C)y=1 D)while构成无限循环 (22)有以下程序 #include<stdio .h> main() {char s[]=”rstuv\;printf(”%c\n”,*s+2);} 程序运行后的输出结果是 A)tuv B)字符t的ASCII码值 C)t D)出错 (23)有以下程序 #include<stdio.h> #include<string.h> main() {char x[]=”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 (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 (25)以下程序段完全正确的是 A)int *p; scanf(\&p); B)int *p; scanf(“%d”,p); C)int k, *p=&k; scanf(\); D)int k, *p:; *p= &k; scanf(“%d”,p); (26)有定义语句:int *p[4];以下选项中与此语句等价的是 A)int p[4]; B)int **p; C)int *(p[4]); D)int (*p)[4]; (27)下列定义数组的语句中,正确的是 A)int N=10;int x[N]; B)#define N 10 int x[N]; C)int x[0..10]; D)int x[]; (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]; (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); } void f(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> void fun(int*a;int n) {int i、j、k、t; for (i=0;i<n一1;1+=2) {k=i;‘ for(j=i;j t=a〔i];a〔i]=a[k];a〔k]=t;}} main() {int aa[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 (31)下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST\要求的是 A)if(strcmp(s2,s1)==0)ST; B)if(sl==s2)ST; C)if(strcpy(s l ,s2)==1)ST;D)if(sl-s2==0)ST; (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++];); (33)有以下程序( strcat函数用以连接两个字符串) #include<stdio.h> #include<string .h> main() {char a[20]=”ABCD\OEFG\0”,b[]=”IJK”; strcat(a,b);printf(”%s\\n”,a); } 程序运行后的输出结果是 A)ABCDE\\OFG\\OIJK B)ABCDIJK C)IJK D)EFGIJK(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() {char s1[100]=”ab cd EFG!”; fun(s1); printf(”%s\\n”,s1); } 程序运行后的输出结果是 A)ab cd EFG! B)Ab Cd EFg! C)aB cD EFG! D)ab cd EFg! (35)有以下程序 #include<stdio.h> void fun(int x) {if(x/2>1)fun(x/2);printf(”%d”,x);} main() {fun(7);printf(”\\n”);} 程序运行后的输出结果是 A)1 3 7 B)7 3 1 C)7 3 D)3 7 (36)有以下程序 #include<stdio.h> int fun() {static int x=1; x+=1;return x; } main() {int i;s=1; for(i=1;i<=5;i++)s+=fun(); printf(”%d\n”,s); } 程序运行后的输出结果是 A)11 B)21 C)6 D)120 (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 (38)有以下程序 #include<stdio.h> main() {int s,t,A=10;double B=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 (39)若有以下语句 Typedef struct S {int g; char h;}T; 以下叙述中正确的是 A)可用S定义结构体变量 B)可用T定义结构体变量 C)S是struct类型的变量 D)T是struct S类型的变量 (40)有以下程序 #include<stdio.h> main() {short c=124; c=c___;printf(“%d\n”、C);} 若要使程序的运行结果为248,应在下划线处填入的是 A)>>2 B)|248 C)&0248 D)< (1)一个栈的初始状态为空。首先将元素5,4,3,2,1依次入栈,然后退栈一次,再将元素 A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为【1】 (2)在长度为n的线性表中,寻找最大项至少需要比较【2】次。 (3)一棵二叉树有10个度为1的结点,7个度为2的结点,则该二叉树共有【3】个结点。 (4)仅由顺序、选择(分支)和重复(循环)结构构成的程序是【4】程序。 (5)数据库设计的四个阶段是:需求分析,概念设计,逻辑设计【5】。 (6)以下程序运行后的输出结果是【6】。 #include<stdio.h> main() {int a=200,b=010; printf(”%d%d\\n”,a,b); } (7)有以下程序 #include<stdio.h> main() {int x,Y; scanf(”%2d%ld”,&x,&y); printf(”%d\n”,x+y); } 程序运行时输入:1234567程序的运行结果是【7】。 (8)在C语言中,当表达式值为0时表示逻辑值“假”,当表达式值为【8】时表示逻辑值“真”。 (9)有以下程序 #include<stdio.h> main() {int i,n[]={0,0,0,0,0}; for (i=1;i<=4;i++) {n[i]=n[i-1]*3+1; printf(”%d \);} } 程序运行后的输出结果是【9】。 (10)以下fun函数的功能是:找出具有N个元素的一维数组中的最小值,并作为函数值返回.请填空(设N已定义) int fun(int x[N]) {int i,k=0; for(i=0;i #include<stdio.h> int*f(int *p,int*q); main() {int m=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】 (12)以下fun函数的功能是在N行M列的整形二维数组中,选出一个最大值作为函数值 返回,请填空。(设M,. N已定义) int fun(int a[N][M)) {int i,j,row=0,col=0; for(i=0;i #include<stdio.h> main() {int n[2],i,j; for(i=0;i<2;i++)n[i]=0; for(i=0;i<2;i++) for(j=0;j<2;j++)n[j]=n[i]+1; printf(”%d\\n”,n[1]); } 程序运行后的输出结果是【13】 (14)以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。请在输出语句中填写代表最大值的输出项。 #include<stdio.h> main() {int a〔10],*p,*s; for(p=a;p-a<10;p++)scanf(”%d”,p); for(p=a,s=a;p-a<10;p++)if(*p>*s)S=P; printf(\”,【14】); } (15)以下程序打开新文件f.txt,并调用字符输出函数将a数组中的字符写入其中,请填空。 #include<stdio.h> main() {【15】*fp; char a[5]={’1’,’2’,’3’,’4’,’5’},i; fp=fopen(”f .txt”,”w”); for(i=0;i<5;i++)fputc(a[i],fp); fclose(fp); } 2011年3月全国计算机等级考试二级C语言笔试试题 一、 选择题 (1)下列关于栈叙述正确的是 A)栈顶元素最先能被删除 B)栈顶元素最后才能被删除 C)栈底元素永远不能被删除 D)以上三种说法都不对 (2)下列叙述中正确的是 A)有一个以上根结点的数据结构不一定是非线性结构 B)只有一个根结点的数据结构不一定是线性结构 C)循环链表是非线性结构 D)双向链表是非线性结构 (3)某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层) A)3 B)4 C)6 D)7 (4)在软件开发中,需求分析阶段产生的主要文档是 A)软件集成测试计划 B)软件详细设计说明书 C)用户手册 D)软件需求规格说明书 (5)结构化程序所要求的基本结构不包括 A)顺序结构 B)GOTO跳转 C)选择(分支)结构 D)重复(循环)结构 (6)下面描述中错误的是 A)系统总体结构图支持软件系统的详细设计 B)软件设计是将软件需求转换为软件表示的过程 C)数据结构与数据库设计是软件设计的任务之一 D)PAD图是软件详细设计的表示工具 (7)负责数据库中查询操作的数据库语言是 A)数据定义语言 B)数据管理语言 C)数据操纵语言 D)数据控制语言 (8)一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是 A)1:1联系 B)1:m联系 C)m:1联系 D)m:n联系 (9)有三个关系R、S和T如下: 则由关系R和S得到关系T的操作是 A)自然连接 B)交 C)除 D)并 (10)定义无符号整数类为UInt,下面可以作为类UInt实例化值的是 A)-369 B)369 C)0.369 D)整数集合{1,2,3,4,5} (11)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是 A)C语言程序仅可以编译执行B)C语言程序仅可以解释执行 C)C语言程序既可以编译执行又可以解释执行 D)以上说法都不对 (12)以下叙述中错误的是 A)C语言的可执行程序是由一系列机器指令构成的 B)用C语言编写的源程序不能直接在计算机上运行 C)通过编译得到的二进制目标程序需要连接才可以运行 D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件 (13)以下选项中不能用作C程序合法常量的是 A)1,234 B)'\\123' C)123 D)\ (14)以下选项中可用作C程序合法实数的是 A).1e0 B)3.0e0.2 C)E9 D)9.12E (15)若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是 A)a=(b=4)=3; B)a=b=c+1; C)a=(b=4)+c; D)a=1+(b=c=4); (16)有以下程序段 char name[20]; int num; scanf(\ 当执行上述程序段,并从键盘输入:name=Lili num=1001<回车>后,name的值为 A)Lili B)name=Lili C)Lili num= D)name=Lili num=1001 (17)if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是 A)必须是逻辑值 B)必须是整数值 C)必须是正数 D)可以是任意合法的数值 (18)有以下程序 #include main() { int x=011; printf(\ } 程序运行后的输出结果是 A)12 B)11 C)10 D)9 (19)有以下程序 #include scanf(\ while(s>0) { switch(s) { case 1:printf(\ case 2:printf(\ case 3:printf(\ default:printf(\ scanf(\ } } 运行时,若输入1 2 3 4 5 0<回车>,则输出结果是 A)6566456 B)66656 C)66666 D)6666656 (20)有以下程序段 int i,n; for(i=0;i<8;i++) { n=rand()%5; switch (n) { case 1: case 3:printf(\ case 2: case 4:printf(\ case 0:exit(0); } printf(\ } 以下关于程序段执行情况的叙述,正确的是 A)for循环语句固定执行8次 B)当产生的随机数n为4时结束循环操作 C)当产生的随机数n为1和2时不做任何操作 D)当产生的随机数n为0时结束程序运行 (21)有以下程序 #include { char s[]=\ int i,n=0; for(i=0;s[i]!=0;i++) if(s[i]>='0'&&s[i]<='9') n++; printf(\ } 程序运行后的输出结果是 A)0 B)3 C)7 D)8 (22)若i和k都是int类型变量,有以下for语句 for(i=0,k=-1;k=1;k++) printf(\ 下面关于语句执行情况的叙述中正确的是 A)循环体执行两次 B)循环体执行一次 C)循环体一次也不执行 D)构成无限循环 (23)有以下程序 #include { char b,c; int i; b='a'; c='A'; for(i=0;i<6;i++) { if(i%2) putchar(i+b); else putchar(i+c); } printf(\ } 程序运行后的输出结果是 A)ABCDEF B)AbCdEf C)aBcDeF D)abcdef (24)设有定义:double x[10],*p=x;,以下能给数组x下标为6的元素读入数据的正确语句是 A)scanf(\ B)scanf(\ C)scanf(\ D)scanf(\ (25)有以下程序(说明:字母A的ASCII码值是65) #include { if(*s%2) printf(\ s++; } } main() { char a[]=\ fun(a); printf(\ } 程序运行后的输出结果是 A)BY B)BT C)YT D) YE (26)有以下程序段 #include { ?getchar()!='\\n');?} 以下叙述中正确的是 A)此while语句将无限循环 B) getchar()不可以出现在while语句的条件表达式中 C)当执行此while语句时,只有按回车键程序才能继续执行 D)当执行此while语句时,按任意键程序就能继续执行 (27)有以下程序 #include { int x=1,y=0; if(!x) y++; else if(x==0) if (x) y+=2; else y+=3; printf(\ } 程序运行后的输出结果是 A)3 B)2 C)1 D) 0 (28)若有定义语句:char s[3][10],(*k)[3],*p;,则以下赋值语句正确的是 A)p=s; B)p=k; C)p=s[0]; D)k=s; (29)有以下程序 #include { if(*c>='a'&&*c<='z') *c=*c-('a'-'A'); c++; }} main() { char s[81]; gets(s); fun(s); puts(s); } 当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是 A)hello beijing B)Hello Beijing C)HELLO BEIJING D)hELLO Beijing (30)以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #include { int i=0; while(i A)x+i B)&x[i+1] C)x+(i++) D)&x[++i] (31)有以下程序 #include { char a[30],b[30]; scanf(\ gets(b); printf(\ } 程序运行时若输入: how are you? I am fine<回车> 则输出结果是 A)how are you? B)how I am fine are you? I am fine C)how are you? I am fine D)how are you? (32)设有如下函数定义 int fun(int k) { if (k<1) return 0; else if(k==1) return 1; else return fun(k-1)+1; } 若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是 A)2 B)3 C)4 D)5 (33)有以下程序 #include { if (x!=y) return ((x+y)/2); else return (x); } main() { int a=4,b=5,c=6; printf(\ } 程序运行后的输出结果是 A)3 B)6 C)8 D)12 (34)有以下程序 #include { static int x=1; x*=2; return x; } main() { int i,s=1; for(i=1;i<=3;i++) s*=fun(); printf(\ } 程序运行后的输出结果是 A)0 B)10 C)30 D)64 (35)有以下程序 #include { int k=5,j=2; printf(\ } 程序运行后的输出结果是 A)197 B)143 C)33 D)28 (36)设有定义:struct {char mark[12];int num1;double num2;} t1,t2;,若变量均已正确赋初值,则以下语句中错误的是 A)t1=t2; B)t2.num1=t1.num1; C)t2.mark=t1.mark; D)t2.num2=t1.num2; (37)有以下程序 #include struct ord { int x,y;}dt[2]={1,2,3,4}; main() { struct ord *p=dt; printf(\ } 程序运行后的输出结果是 A)1,2 B)4,1 C)3,4 D)2,3 (38)有以下程序 struct S{ int a,b;}data[2]={10,100,20,200}; main() { struct S p=data[1]; printf(\ } 程序运行后的输出结果是 A)10 B)11 C)20 D)21 (39)有以下程序 main() { unsigned char a=8,c; c=a>>3; printf(\ 程序运行后的输出结果是 A)32 B)16 C)1 D)0 (40)设fp已定义,执行语句fp=fopen(\后,以下针对文本文件file操作叙述的选项中正确的是 A)写操作结束后可以从头开始读 B)只能写不能读 C)可以在原有内容后追加写 D)可以随意读和写 二、填空题 (1)有序线性表能进行二分查找的前提是该线性表必须是 【1】 存储的。 (2)一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为 【2】 。 (3)对软件设计的最小单位(模块或程序单元)进行的测试通常称为 【3】 测试。 (4)实体完整性约束要求关系数据库中元组的 【4】 属性值不能为空。 (5)在关系A(S,SN,D)和关系B(D,CN,NM)中,A的主关键字是S,B的主关键字是D,则称 【5】 是关系A的外码。 (6)以下程序运行后的输出结果是 【6】 。 main() { int a; a=(int)((double)(3/2)+0.5+(int)1.99*2); printf(\ (7) 有以下程序 #include { int x; scanf(\ if(x>15) printf(\ if(x>10) printf(\ if(x>5) printf(\ } 若程序运行时从键盘输入12<回车>,则输出结果为 【7】 。 (8)有以下程序(说明:字符0的ASCII码值为48) main() { char c1,c2; scanf(\ c2=c1+9; printf(\ } 若程序运行时从键盘输入48<回车>,则输出结果为 【8】 。 (9)有以下函数 void prt(char ch,int n) { int i; for(i=1;i<=n;i++) printf(i%6!=0?\ 执行调用语句prt('*',24);后,函数共输出了 【9】 行*号。 (10)以下程序运行后的输出结果是 【10】 。 #include main() { int x=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf(\ } (11)己知a所指的数组中有N个元素。函数fun的功能是,将下标k(k>0)开始的后续元素全部向前移动一个位置。请填空。 void fun(int a[N],int k) { int i; for(i=k;i (12)有以下程序,请在 【12】 处填写正确语句,使程序可正常编译运行。 #include { double x,y,(*p)(); scanf(\ p=avg; printf(\ } double avg(double a,double b) { return((a+b)/2);} (13)以下程序运行后的输出结果是 【13】 。 #include { int i,n[5]={0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf(\ printf(\ } (14)以下程序运行后的输出结果是 【14】 。 #include { char *p; int i; p=(char*)malloc(sizeof(char)*20); strcpy(p,\ for(i=6;i>=0;i--) putchar(*(p+i)); printf(\ } (15)以下程序运行后的输出结果是 【15】 。 #include { FILE *fp; int x[6]={1,2,3,4,5,6},i; fp=fopen(\ fwrite(x,sizeof(int),3,fp); rewind(fp); fread(x,sizeof(int),3,fp); for(i=0;i<6;i++) printf(\ printf(\ fclose(fp); } 2011年9月全国计算机等级考试二级笔试试卷 一、选择题(每小题 2 分,共 70 分) 1.下列叙述中正确的是 。 A.算法就是程序 B.设计算法时只需要考虑数据结构的设计 C.设计算法时只需要考虑结果
正在阅读:
最新计算机二级C语言真题及答案05-20
暨南大学《经济学》考博历年真题详解(宏观经济学部分)04-07
校园里无主人的红领巾-文档资料04-17
在全市2021年重点工作暨“十四五”规划编制座谈会上的讲话08-27
第3章 国际物流与国际贸易07-21
浙江林学院天目学院经济管理系本科生毕业论文工作规范 - 图文07-08
学区“控辍保学”年度工作开展情况总结08-05
2013年全国各地中考历史分类汇编九上第四单元 - 图文05-04
The Adverbial Clause(状语从句)03-04
计算机基础实训任务书 - 图文03-29
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 真题
- 二级
- 答案
- 语言
- 计算机
- 最新
- 河南省郑州市2017-2018学年高三第二次模拟考试文数试题 Word版含
- 从马车到飞机
- 八年级英语牛津版8A_Unit_2_School_life_练习
- 八年级信息技术下册教案(湖南电子音像2012年版)(郴州市北湖区鲁
- 云南省水富县17学年高二数学下学期阶段检测试题(三)理
- 人教版五年级语文下册期中试卷及双项细目表
- 苏教版小学体育二年级下册全册教案表格式2
- 浙江省台州市八校2015-2016学年下学期期中联考八年级思想品德试
- 《犟龟》阅读测试练习及答案
- 2018高考数学压轴卷广东省揭阳市第三中学2017届高三下学期第11周
- 导数相关概念练习
- 市场营销多选题
- 八万煤气柜监理细则
- 讲话稿:在全区优秀年轻后备干部培训班座谈会上的讲话
- 人教版九年级化学期中测试题(下学期)
- 电力信息技术在电力系统开发方面的应用
- 项目投资练习题及答案
- 关于学习公司管理工作会议精神的心得体会
- 2017年江西二级建造师继续教育选修课习题及答案
- 专科经济数学试题与答案