您的当前位置:首页正文

全国计算机等级二级考试C语言试题及答案

2021-04-19 来源:爱站旅游
导读全国计算机等级二级考试C语言试题及答案
一、选择题

在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分.

(1)程序流程图中带有箭头的线段表示的是 C

A)图元关系 B)数据流 C)控制流 D)调用关系 (2)下面不属于软件设计原则的是 C

A)抽象 B)模块化 C)自底向上 D)信息隐蔽 (3)下列选项中,不属于模块间耦合的是 C

A)数据耦合 B)标记耦合 C)异构耦合 D)公共耦合

(4)下列叙述中,不属于软件需求规格说明书的作用的是 D A)便于用户、开发人员进行理解和交流 B)反映出用户问题的结构,可以作为软件开发工作的基础和依据

C)作为确认测试和验收的依据 D)便于开发人员进行需求分析 (5)算法的时间复杂度是指C

A)执行算法程序所需要的时间 B)算法程序的长度 C)算法执行过程中所需要的基本运算次数

D)算法程序中的指令条数

(6)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是B

A)堆排序 B)直接插入排序 C)快速排序 D)B)和C)

(7)栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是B

A)ABCED B)DCBEA C)DBCEA D)CDABE (8)数据库设计包括两个方面的设计内容,它们是A

A)概念设计和逻辑设计 B)模式设计和内模式设计 C)内模式设计和物理设计 D)结构特性设计和行为特性设计 (9)关系表中的每一横行称为一个A

A)元组 B)字段 C)属性 D)码

(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字 (键或码)为 C A)课号,成绩 B)学号,成绩 C)学号,课号 D)学号,姓名,成绩

(11)以下不正确的叙述是 D

A)在C程序中,逗号运算符的优先级最低 B)在C程序中,APH和aph是两个不同的变量

C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变 D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值

(12)请选出可用作C语言用户标识符的是B

A)void,define,WORD B)a3_b3,_123,IF C)FOR,-—abc,Case D)2a,Do,Sizeof

(13)以下选项中,不能作为合法常量的是B

A)1.234e04 B)1.234e0。4 C)1.234e+4 D)1。234e0 (14)在C语言中,运算对象必须是整型数的运算符是A

A)% B)\\ C)%和\\ D)**

(15)若变量均已正确定义并赋值,以下合法的C语言赋值语句是A

A)x=y==5; B)x=n%2.5; C)x+n=i; D)x=5=4+1;

(16)有以下程序段

char ch; int k; ch=′a′; k=12;

printf(”%c,%d,”,ch,ch,k); printf(\"k=%d \\n”,k);

已知字符a的ASCII码值为97,则执行上述程序段后输出结果是 D

A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值

C)a,97,12k=12 D)a,97,k=12

(17)已知字母A的ASCII代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是 B A)kk〉=′A′&&kk<=′Z′ B)!(kk〉=′A′||kk<=′Z′) C)(kk+32)〉=′a′&&(kk+32)<=′Z′ D)isalpha(kk)&&(kk〈91)

(18)当变量c的值不为2、4、6时,值也为\"真\"的表达式是 B A)(c==2)||(c==4)||(c==6) B)(c〉=2&& c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c〉=2&& c〈=6)&&(c%2!=1)

(19)若有条件表达式 (exp)?a++:b-—,则以下表达式中能完全等价于表达式(exp)的是 B

A)(exp==0) B)(exp!=0) C)(exp==1) D)(exp!=1) (20)以下不正确的定义语句是 B

A)double x[5]={2。0,4。0,6.0,8.0,10。0}; B)int y[5]={0,1,3,5,7,9}; C)char c1[]={′1′,′2′,′3′,′4′,′5′}; D)char c2[]={′\\x10′, ′xa′, ′\\x8′}; (21)下列程序执行后的输出结果是 B main()

{ int a[3][3], *p,i; p=&a[0][0];

for(i=1; i<9; i++)p[i]=i+1; printf(\"%d\\n\",a[1][2];)

A)3 B)6 C)9 D)随机数

(22)设有以下程序段 B int x=0,s=0;

while(!x!=0)s+=++x; printf(\"%d”,s); 则

A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 (23)下面程序段的运行结果是 C char *s=\"abcde”; s+=2;printf(”%d”,s);

A)cde B)字符′c′ C)字符′c′的地址 D)无确定的输出结果

(24)阅读下列程序,则执行后的结果为 A #include ”stdio.h” main()

{ int c[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56}; printf(”%x,%x\\n”,c[2][2],*(*(c+1)+1));} A)3e,6 B)62,5 C)56,5 D)3E,6

(25)下面判断正确的是 C

A)char *a=”china”;等价于 char *a;*a=”china\"; B)char str[5]={”china\"};等价于char str[]={\"china”};

C)char *s=\"china\";等价于 char *s;s=”china”; D)char c[4]=”abc”,d[4]=\"abc\";

等价于char c[4]=d[4]=\"abc”;

(26)若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是 D

A)a[2][!1] B)a[2][3] C)a[0][3] D)a[1>2][!1] (27)有定义语句:char s[10];,若要从终端给s输入5个字符,错误的输入语句是 D A)gets(&s[0]); B)scanf(\"%s\; C)gets(s); D)scanf(”%s”,s[1]);

(28)有以下程序

(29)#include #define f(x) (x*M) main() { int i1,i2; i1=f(2); i2=f(1+1);

printf(\"%d %d\\n\}

程序的运行结果是 B

A)12 12 B)11 7 C)11 11 D)12 7 (29)若有以下说明和定义 union dt

{ int a; char b; double c;}data; 以下叙述中错误的是 D

A)data的每个成员起始地址都相同 B)变量data所占内存字节数与成员c所占字节数相等

C)程序段:data。a=5;printf(”%f\\n”,data。c);输出结果为5. D)data可以作为函数的实参

(30)有以下程序 #include{FILE *fp;int k,n,a[6]={1,2,3,4,5,6}; fp=fopen(”d2。dat”,\"w”); fprintf(fp,\"%d%d%d\\n”,a[0],a[1],a[2]); fprintf(fp,”%d%d%d\\n”,a[3],a[4],a[5]); fclose(fp);

fp=fopen(”d2.dat”,\"r”); fscanf(fp,”%d%d”,&k,&n);printf(”%d%d\\n”,k,n); fclose(fp); }

程序运行后的输出结果是 D

A)1 2 B)1 4 C)123 4 D)123 456 (31)若已定义

int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i; 其中 则对a数组元素不正确的引用是 D

A)a[p-a] B)*(&a[i]) C)p[i] D)a[10] (32)有以下程序 #include

void fun(int *s,int n1,int n2) { int i,j,t; i=n1; j=n2;

while(i〈j) {t=s[i];s[i]=s[j];s[j]=t;i++;j—-;}

}

main()

{ int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9); fun(a,0,9);

for(k=0;k〈l0;k++)printf(\"%d”,a[k]); printf(”\\n\"); }

程序的运行结果是 C

A) B) C) D)

(33)阅读下列程序,当运行函数时,输入asd af aa z67,则输出为 A

#include int fun (char *str) { int i,j=0;

for(i=0;str[i]!=′ \\0′;i++)

if(str[i]!=′ ′)str[j++]=str[i]; str[j]= ′\\0′; } main() {

char str[81]; int n;

printf(\"Input a string : ”); gets(str); puts(str); fun(str);

printf(”%s\\n”,str);}

A)asdafaaz67 B)asd af aa z67 C)asd D)z67 (34)有以下程序 int fun(int n)

{if(n==1)return 1; else

return(n+fun(n-1)); }

main() {int x;

scanf(”%d”,&x); x=fun(x);printf(\"%d\\n\ }

执行程序时,给变量x输入10,程序的输出结果是 A A)55 B)54 C)65 D)45 (35)下面程序段中,输出*的个数是 C char *s=”\a\\018bc\";

for(;*s!='\\0’;s++)printf(\"*\"); A)9 B)5 C)6 D)7 (36)C语言结构体类型变量在程序运行期间 B

A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元 B)所有的成员一直驻留在内存中

C)只有最开始的成员驻留在内存中 D)部分成员驻留在内存中 (37)已知函数的调用形式为fread(buf,size,count,fp),参数buf的含义是 C

A)一个整型变量,代表要读入的数据项总数 B)一个文件指针,指向要读的文件 C)一个指针,指向要读入数据的存放地址 D)一个存储区,存放要读的数据项

(38)设有以下语句 char x=3,y=6,z; z=x^y〈<2;

则z的二进制值是 B

A) B) C) D)

(39)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是 A A)auto和register B)extern和register C)auto和static D)static和register

(40)设有定义语句int (*f)(int);,则以下叙述正确的是 B

A)f是基类型为int的指针变量 B)f是指向函数的指针变量,该函数具有一个int类型的形参

C)f是指向int类型一维数组的指针变量 D)f是函数名,该函数的返回值是基类型为int类型的地址

二、填空题

请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。 (1)测试用例包括输入值集和 【1】 值集。 (2)在树形结构中,树根结点没有 【2】 。

(3)数据结构分为逻辑结构与存储结构,线性链表属于 【3】 。 (4)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体\"项目主管\"与实体”项目\"的联系属于 【4】 的联系。

(5)数据库设计分为以下6个设计阶段:需求分析阶段、 【5】 、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。

(6)阅读下面程序段,则执行后输出的结果是 【6】 。 #include \"stdio.h\" main()

{ char fun(char,int); char a=′A′; int b=13; a=fun(a,b); putchar(a);}

char fun(char a,int b) { char k; k=a+b; return k;}

(7)函数fun的返回值是 【7】 fun(char *a,char *b) { int num=0,n=0; while(*(a+num)!='\\0')mm++;

while(b[n]){*(a+num)=b[n];num++;n++;} return num; }

(8)以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是:

2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10. 请填空。

#include 〈stdio。h〉 #define N 80

int fun(int a[], int n) { int i,j=1;

for(i=1;imain()

{ int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}, i, n=19; printf(\"The original data : \\n\");

for(i=0; iprintf(”\\nThe data after deleted: \\n”); for(i=0; i〈n; i++)printf(\"%3d”,a[i]); printf(\"\\n\\n”); }

(9)以下程序的运行结果是 【10】 。 #include main()

{ int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0:a++; break; case 1: b++; break; }

case 2:a++; b++; break; case 3:a++; b++; }

printf(”a=%d,b=%d\\n\); }

(10)以下程序的输出结果是 【11】 。 fun (int x,int y,int z) { z =x*x+y*y;} main ()

{ int a=31; fun (6,3,a) printf (\"%d\", a) }

(11)函数my_cmp( )的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s〉t时返回正值,s} return 【12】 ; }

(12)以下程序的输出结果是 【13】 。 void reverse(int a[],int n) { int i,t;

for(i=0;i〈n/2;i++)

{ t=a[i]; a[i]=a[n-1—i];a[n—1—i]=t;} }

main()

{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8);

for(i=6;i〈10;i++)s+=b[i]; printf(\" %d\\n”,s); }

(13)以下说明语句中, 【14】 是结构体类型名。 typedef struct { int n;

char ch[8]; } PER;

(14)以下程序的作用是:从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上.请填空。

#include {FILE *fp; char ch; fp=fopen( 【15】 ); ch=fgetc(fp);

while(!feof(fp)) { putchar(ch); ch=fgetc(fp); } putchar(’\\n’);fclose(fp); } (1)【1】 输出 【解析】 软件测试用例是为了有效发现软件缺陷面编写的包含测试目的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性.软件测试用例包括:输入值集和输出值集.测试用例是软件测试的核心。

(2)【2】 前件 【解析】 在树形结构中,每一个结点只有一个前件,称为父结点;没有前件的结点只有一个,称为树的根结点;每一个结点可以有多个后件,它们都称为该结点的子结点;没有后件的结点称为叶子结点. (3)【3】 存储结构 【解析】 数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构;数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间前后件关系的信息。 (4)【4】 一对多(或1∶N) 【解析】 两个实体集间的联系实际上是实体集间的函数系,这种函数关系可以有3种,即一对一(1∶1)的联系、一对多(1∶N)或多对一(N∶1)的联系和多对多(N∶N)的联系。 (5)【5】 概念设计阶段 【解析】 数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。

(6)【6】 N 【解析】 函数说明语句中的类型名必须与函数返回值的类型一致。本题实现的是在字符'A’的ASCII码值上加上一个常数,使之变成另一个ASCII码值,从而输出字符。

(7)【7】 字符串a和b的长度之和 【解析】 本题首先通过第一个while循环计算字符串a的长度,再通过第二个循环,将字符串a和b相连,最后返回连接后的总长度。

8)【8】!= 【9】 return j 【解析】 本题程序的流程是:让i,j都从1开始,其中j用于控制删除后剩下的数中的下标,i用于搜索原数组中的元素。j始终是新数组已有元素中最后一个元素的下一个元素的下标,所以if()中的条件是a[j—1]!=a[i],其中a[j—1]就是新数组中的最后一个元素,若条件成立则表示出现了不同的值,所以a[i]要留到新数组中。注本题中i、j的初值都要从1开始,该算法只能用于数组已排序的题目中。

(9)【10】 a=2,b=1 【解析】 本题考查了 switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case 常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部

switch结构后,继续执行了外部switch结构的 case 2:分支,最后a和b的值分别为2和1. (10)【11】 31 【解析】 在函数调用时,形参值的改变,不会改变实参值。 (11)【12】 *s—*t 【解析】 两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符,则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就以两个当前字符的差返回,所以在空框处应填入*s—*t,保证在s > t时,返回正值,当s < t时,返回负值. (12)【13】 22 【解析】 在main函数中,调用reverse函数将b数组中的前8个成员进行互置,执行完毕后,b数组中的成员为{8,7,6,5,4,3,2,1,9,10},然后再执行for循环结构,将b[6],b[7].。.b[9]的值相加,结果为22。

(13)【14】 PER 【解析】 本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量. (14)【15】 “filea。dat”,“r” 【解析】 fopen函数的调用方式通常为 fopen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并且是要读取文件中的内容,所以空白处应当填入 \"filea.dat”,\"r”.

因篇幅问题不能全部显示,请点此查看更多更全内容