全国计算机等级考试二级C语言模拟试题10
一、选择题(每题2分,共计70分) |
| 1.下列数据结构中,按先进后出原则组织数据的是 A)线性链表 B)栈 C)循环链表 D)顺序表 |
| A B C D |
| 2.具有3个结点的二叉树有 A)2种形态 B)4种形态 C)7种形态 D)5种形态 |
| A B C D |
| 3.设有下列二叉树: 对此二叉树前序遍历的结果为 A)ZBTYCPXA B)ATBZXCYP C)ZBTACYXP D)ATBZXCPY |
| A B C D |
| 4.结构化程序设计主要强调的是 A)程序的规模 B)程序的效率 C)程序设计语言的先进性 D)程序易读性 |
| A B C D |
| 5.程序的3种基本控制结构是 A)过程、子过程和分程序 B)顺序、选择和重复 C)递归、堆栈和队列 D)调用、返回和转移 |
| A B C D |
| 6.下列叙述中,不属于测试的特征的是 A)测试的挑剔性 B)完全测试的不可能性 C)测试的可靠性 D)测试的经济性 |
| A B C D |
| 7.需求分析中开发人员要从用户那里了解 A)软件做什么 B)用户使用界面 C)输入的信息 D)软件的规模 |
| A B C D |
| 8.下列关系模型中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是 A)选择 B)连接 C)投影 D)并 |
| A B C D |
| 9.下列叙述中,正确的是 A)用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系 B)用E-R图只能表示实体集之间一对一的联系 C)用E-R图只能表示实体集之间一对多的联系 D)用E-R图表示的概念数据模型只能转换为关系数据模型 |
| A B C D |
| 10.“年龄在18~25之间”这种约束是属于数据库当中的 A)原子性措施 B)一致性措施 C)完整性措施 D)安全性措施 |
| A B C D |
| 11.下列关于C语言的说法不正确的是 A)C语言既具有高级语言的一切功能,也具有低级语言的一些功能 B)C语言中的每一条执行语句都必须用分号结束,分号不是C语言的一部分,是语句之间的分隔符号 C)注释可以出现在程序中任意合适的地方 D)命令行后面不能加分号,命令行不是C语言的语句 |
| A B C D |
| 12.下列关于标识符的说法中错误的是 A)合法的标识符是由字母、数字和下划线组成 B)C语言的标识符中,大写字母和小写字母被认为是两个不同的字符 C)C语言的标识符可以分为三类,即关键字、预定义标识符和用户标识符 D)用户标识符与关键字不同时,程序在执行时将给出出错信息 |
| A B C D |
| 13.下列关于复合语句和空语句的说法错误的是 A)复合语句是由“{”开头,由“}”结尾的 B)复合语句在语法上视为一条语句 C)复合语句内,可以有执行语句,不可以有定义语句部分 D)C程序中的所有语句都必须由一个分号作为结束 |
| A B C D |
| 14.现有格式化输入语句,scanf("x=%d],sum]y=%d,line]z=%dL",&x,&y,&z);,现在已知在输入数据后,x,y,z的值分别是12,34,45,则下列数据是正确的输入格式的是 A)12,34,45 B)x=12,y=34,z=45 C)x=12C,sumy=34,z=45 D)x=12 ,sum y=34,line z=45 [注]:“ ”表示空格 |
| A B C D |
| 15.现有如下程序段,此程序段编译有错误,则程序段的错误出在 #include main() { int a=30,b=40,c=50,d; d=a>30?b:c; switch(d){ case a:printf("%d,",a); case b:printf("%d,",b); case c:printf("%d,",c); default:printf("#"); } } A)default:printf("#");这个语句 B)d=a>30?b:c;这个语句 C)case a:printf("%d,",a); case b:printf("%d,",b); case c:printf("%d,",c);这三个语句 D)switch(d)这个语句 |
| A B C D |
| 16.下列语句中,错误的是(x,y,a,b假设已经定义好) A)while(x=y)x--; B)do x++ while(x==10); C)while(0); D)do y++;while(a==b); |
| A B C D |
| 17.下列说法中错误的是 A)只能在循环体内使用break语句 B)在循环体内使用break语句可以使流程跳出本层循环体,从而提前结束本层循环 C)在while和do-while循环中,continue语句并没有使整个循环终止 D)continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环判断 |
| A B C D |
| 18.下面关于字符常量的说法错误的是 A)一个字符常量代表ASCII字符集中的一个字符 B)单引号中的大写字母和小写字母代表不同的字符常量 C)字符常量只能包含一个字符 D)字符常量可以用单引号或双引号括起来 |
| A B C D |
| 19.现有如下程序 #include "stdio.h" int fun(int x) { printf("x=%d\n",++x);} main() { fun(12+5);} 则程序的输出结果是 A)12 B)13 C)17 D)18 |
| A B C D |
| 20.现有如下程序段 #include "stdio.h" int aa(int x,int y); main() { int a=24,b=16,c; c=aa(a,b); printf("%d\n",c);} int aa(int x,int y) { int w; while(y) { w=x%y; x=y; y=w;} return x;} 则程序段的输出结果是 A)8 B)7 C)6 D)5 |
| A B C D |
| 21.下列说法错误的是 A)函数调用时,函数名必须与所调用的函数名字完全相同 B)实参的个数必须与形式参数的个数一致 C)实参可以是表达式,在类型上必须与形参一一匹配 D)C语言规定,函数必须先定义,后调用(函数的返回值类型为int或char时除外) |
| A B C D |
| 22.函数的值通过return语句返回,下面关于return语句的形式描述错误的是 A)return表达式; B)return(表达式); C)一个return语句可以返回多个函数值 D)一个return语句只能返回一个函数值 |
| A B C D |
| 23.现有如下程序段 #include "stdio.h" int *fun(int *a,int *b) { int c; c=*a%*b; return &c;} main() { int a=5,b=19,*c; c=fun(&a,&b); printf("%d\n",++*c);} 则程序段执行后的结果为 A)8 B)7 C)6 D)5 |
| A B C D |
| 24.现有如下程序段 #include "stdio.h" main() { int k[30]={12,324,45,6,768,98,21,34,453,456}; int count=0,i=0; while(k[i]) { if(k[i]%2==0‖k[i]%5==0)count++; i++; } printf("%d,%d\n",count,i);} 则程序段的输出结果为 A)7,8 B)8,8 C)7,10 D)8,10 |
| A B C D |
| 25.现有如下定义语句 int *p,s[20],i; p=s; 表示数组元素s[i]的表达式不正确的是 A)*(s+i) B)*(p+i) C)*(s=s+i) D)*(p=p+i) |
| A B C D |
| 31.现在有如下程序 #include "stdio.h" main() { char s[80]; int i,j; gets(s); for(i=j=0;s[i]!=′\0′;i++) if(s[i]!=′H′) s[j]=′\0′; puts(s);} 这个程序段的功能是删除输入的字符串中字符′H′,则空线上应当添入的是 A)s[j++]=s[i];j++; B)s[j]=s[i++];j++; C)s[j++]=s[i]; D)s[j]=s[i]; |
| A B C D |
| 32.阅读下列程序段,则程序的输出结果为 #include "stdio.h" #define M(X,Y)(X)*(Y) #define N(X,Y)(X)/(Y) main() { int a=5,b=6,c=8,k; k=N(M(a,b),c); printf("%d\n",k);} A)3 B)5 C)6 D)8 |
| A B C D |
| 33.若有以下定义和语句 struct a { int n,m;}; struct a st[3]={{1,20},{2,19},{3,21}}; struct a *p=st; 则以下错误的引用是 A)(p++)->n; B)st[0].n; C)(*p).n; D)p=&st.m; |
| A B C D |
| 34.下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非空,要实现此功能则应该添入的选项是 struct node{ float x;struct node *next;}; connect(struct node *t1, struct node *t2) { if(t1->next==NULL)t1->next=t2; else connect( ,t2); } A)t1.next B)++t1.next C)t1->next D)++t1->next |
| A B C D |
| 35.阅读如下程序段 #include "stdio.h" void fc(FILE *); main(int argc,char *argv[]) { FILE *fp; int i=1; while(--argc>0) { fp=fopen(argv[i++],"r"); fc(fp); fclose(fp);}} void fc(FILE *p) { char c; while((c=getc(p))!=′#′) putchar(c-32); } 这个程序段编译、连接以后生成可执行文件50.exe,假定磁盘当前目录下有3个文 本文件,其文件名和内容分别为: 文件名 内容 k1.txt china# k2.txt ese# k3.txt year# 当在DOS当前目录下键入:50?k1.txt?k2.txt?k3.txt 示回车),则输出结果为 A)china?ese?year B)Chinaeseyear C)CHINA?ESE?YEAR D)CHINAESEYEAR |
| A B C D |
| 31.现在有如下程序 #include "stdio.h" main() { char s[80]; int i,j; gets(s); for(i=j=0;s[i]!=′\0′;i++) if(s[i]!=′H′) s[j]=′\0′; puts(s);} 这个程序段的功能是删除输入的字符串中字符′H′,则空线上应当添入的是 A)s[j++]=s[i];j++; B)s[j]=s[i++];j++; C)s[j++]=s[i]; D)s[j]=s[i]; |
| A B C D |
| 32.阅读下列程序段,则程序的输出结果为 #include "stdio.h" #define M(X,Y)(X)*(Y) #define N(X,Y)(X)/(Y) main() { int a=5,b=6,c=8,k; k=N(M(a,b),c); printf("%d\n",k);} A)3 B)5 C)6 D)8 |
| A B C D |
| 33.若有以下定义和语句 struct a { int n,m;}; struct a st[3]={{1,20},{2,19},{3,21}}; struct a *p=st; 则以下错误的引用是 A)(p++)->n; B)st[0].n; C)(*p).n; D)p=&st.m; |
| A B C D |
| 34.下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非空,要实现此功能则应该添入的选项是 struct node{ float x;struct node *next;}; connect(struct node *t1, struct node *t2) { if(t1->next==NULL)t1->next=t2; else connect( ,t2); } A)t1.next B)++t1.next C)t1->next D)++t1->next |
| A B C D |
| 35.阅读如下程序段 #include "stdio.h" void fc(FILE *); main(int argc,char *argv[]) { FILE *fp; int i=1; while(--argc>0) { fp=fopen(argv[i++],"r"); fc(fp); fclose(fp);}} void fc(FILE *p) { char c; while((c=getc(p))!=′#′) putchar(c-32); } 这个程序段编译、连接以后生成可执行文件50.exe,假定磁盘当前目录下有3个文 本文件,其文件名和内容分别为: 文件名 内容 k1.txt china# k2.txt ese# k3.txt year# 当在DOS当前目录下键入:50?k1.txt?k2.txt?k3.txt 示回车),则输出结果为 A)china?ese?year B)Chinaeseyear C)CHINA?ESE?YEAR D)CHINAESEYEAR |
| A B C D |
二、填空题(每空2分,共计30分) | |
| 1.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、 【1】 和选择排序等。 | |
| 输入答案,中间不含空格: | |
| 2.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。这种情况称为 【2】 。 | |
| 输入答案,中间不含空格: | |
| 3. 【3】 是一种信息隐蔽技术,目的在于将对象的使用者和对象的设计者分开。 | |
| 输入答案,中间不含空格: | |
| 4.为了便于对照检查,测试用例应由输入数据和预期的 【4】 两部分组成。 | |
| 输入答案,中间不含空格: | |
| 5. 【5】 是从二维表列的方向进行的运算。 | |
| 输入答案,中间不含空格: | |
| 6.阅读下面语句,则程序的执行结果是 【6】 。 #include "stdio.h" main() { int a=-1,b=1,k; if((++a<0)&&!(b--<=0)) printf("%d,%d\n",a,b); else printf("%d,%d\n",b,a);} |
| 输入答案,中间不含空格: |
| 7.阅读下面语句,则执行后的输出结果为 【7】 。 #include "stdio.h" main() { char a,b; for(a=′0′,b=′9′;a printf("%c%c",a,b); printf("\n");} |
| 输入答案,中间不含空格: |
| 8.阅读下面程序,则执行后程序的结果为 【8】 。 #include "stdio.h" main() { int a=0,b=0; while(a<15)a++; while(b++<15); printf("%d,%d\n",a,b);} |
| 输入答案,中间不含空格: |
| 9. 下列程序的输出结果是 【9】 , 【10】 。 #include main() { float a=-1.3;b=1.3; printf("%f,%f",fabs(a),fabs(b);} |
| 输入答案,中间不含空格: |
| 10.设有以下定义和语句,则*(*(p+2)+1)的值为 【11】 。 int a[3][2]={10,20,30,40,50,60},(*p)[2]; p=a; |
| 输入答案,中间不含空格: |
| 11.有下列程序,功能是把输入的十进制长整型数以十六进制的形式输出,请填空。 #include "stdio.h" main() { char b[17]={"0123456789ABCDEF"}; int c[50],d,i=0,base=16; long n; scanf("%ld",&n); do{c[i]=nºse;i++;n= 【12】 ;} while(n!=0); for(--i;i>=0;--i) { d= 【13】 ;printf("%c",b[d]);} printf("H\n");} |
| 输入答案,中间不含空格: |
| 12.现有如下程序段,则程序段的输出结果为 【14】 。 #include "stdio.h" int fun() { static int k; return k;} main() { int m; m=fun(); printf("%d\n",m);} |
| 输入答案,中间不含空格: |
| 13.有如图所示的双链表结构,请根据图示完成结构体的定义。 lheaddatarchildstruct aa { int data; 【15】 } node; |
| 输入答案,中间不含空格: |