全国计算机等级考试二级C语言模拟试题13
一、选择题(每题2分,共计70分) |
| 1.线性表若采用链式存储结构时,要求内存中可用存储单元的地址 A)必须是连续的 B)部分地址必须是连续的 C)一定是不连续的 D)连续不连续都可以 |
| A B C D |
| 2.在待排序的元素序列基本有序的前提下,效率最高的排序方法是 A)冒泡排序 B)选择排序 C)快速排序 D)归并排序 |
| A B C D |
| 3.下列叙述中,错误的是 A)数据的存储结构与数据处理的效率密切相关 B)数据的存储结构与数据处理的效率无关 C)数据的存储结构在计算机中所占的空间不一定是连续的 D)一种数据的逻辑结构可以有多种存储结构 |
| A B C D |
| 4.希尔排序属于 A)交换排序 B)归并排序 C)选择排序 D)插入排序 |
| A B C D |
| 5.下列叙述中,不属于结构化分析方法的是 A)面向数据流的结构化分析方法 B)面向数据结构的Jackson方法 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)投影、选择、连接是从二维表行的方向进行的运算 B)并、交、差是从二维表的列的方向来进行运算 C)投影、选择、连接是从二维表列的方向进行的运算 D)以上3种说法都不对 |
| A B C D |
| 10.关系数据库管理系统应能实现的专门的关系运算包括 A)排序、索引、统计 B)选择、投影、连接 C)关联、更新、排序 D)显示、打印、制表 |
| A B C D |
| 11.下列常数中不能作为C语言常量的是 A)0xabc B)2.5e-0.2 C)32 D)0747 |
| A B C D |
| 12.设int型的数据长度为2个字节,则unsigned int 类型数据的取值范围是 A)-127~128 B)0~255 C)0~65535 D)0~32768 |
| A B C D |
| 13.已知int t=6,s;则执行语句s=(++t)+(t++);后,s的值是 A)12 B)13 C)14 D)15 |
| A B C D |
| 14.已知int x=6,y=2,z;则执行表达式z=x=x>y后,变量z的值为 A)0 B)1 C)4 D)5 |
| A B C D |
| 15.下列说法中正确的是 A)一个C程序是从命令行开始执行的 B)C程序中有些执行语句不用分号(;)结束 C)分号不是C语句的一部分,是C语句之间的分隔符 D)命令行必须用“#”开头,最后不能加“;”号,命令行不是C程序中的语句 |
| A B C D |
| 16.现有以下程序段 #include main() { int a,b,c; scanf("a=%*d%d,b=%d%*d,c=%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); } 若输出的结果为a=20,b=30,c=40,则以下能够正确输入数据的是 A)a=10 20,b=20 30,c=40 B)20,30,40 C)a=20,b=30,c=40 D)a=10 20,b=30 20,c=40 [注]: “ ”表示空格, |
| A B C D |
| 17.有如下程序段 #include "stdio.h" main() { int a=10,b=50,c=30; a=a>30?1:2; b=b>30?1:2; c=c>30?1:2; printf("%d,%d,%d\n",a,b,c);} 则执行结果为 A)2,1,2 B)1,2,1 C)1,1,2 D)2,1,1 |
| A B C D |
| 18.阅读如下程序段 #include "stdio.h" main() { int a=45,b=40,c=50,d; d=a>30?b:c; switch(d) { case 30 : printf("%d,",a); case 40 : printf("%d,",b); case 50 : printf("%d,",c); default : printf("#");}} 则输出的结果是 A)40,50, B)50,# C)40,# D)40,50,# |
| A B C D |
| 19.若有定义 int k=10;,则下列程序的输出结果为 do{ printf("%d",k--); } while(!k); A)9 B)10 C)10987654321 D)没有输出 |
| A B C D |
| 20.阅读下列程序段,则程序的输出结果是 #include "stdio.h" main() { int a=10,b=10,k; for(k=0;a>8;b=++k) printf("%d,%d,",a--,--b); printf("\n");} A)10,10,10,0, B)10,9,9,0, C)10,10,9,1, D)9,9,9,1, |
| A B C D |
| 21.下列程序的运行结果是 #include "stdio.h" main() { int a,b,m; for(a=5;a>=1;a--) { m=0; for(b=a;b<=5;b++) m=m+a*b;} printf("%d\n",m);} A)30 B)15 C)20 D)10 |
| A B C D |
| 22.阅读下面程序段 #include "stdio.h" main() { char c; c=(′z′-′a′)/2+′A′; putchar(c);} 输出结果为 A)M B)N C)O D)Q |
| A B C D |
| 23.下列说法中不正确的是 A)C语言规定,不能在一个函数的内部再定义函数 B)在没有声明函数返回值类型的情况下,C默认的函数返回值类型为int型 C)函数的类型可以是整型、实型、字符型,但不能是指针型 D)函数可以没有形参,但函数名后的一对圆括号不能省略 |
| A B C D |
| 24.现有如下程序,则程序的输出结果为 #include "stdio.h" int f(int a,int b) { int c; if(a>0&&a<10)c=(a+b)/2; else c=a*b/2; return c;} main() { int a=8,b=20,c; c=f(a,b); printf("%d\n",c);} A)随机数 B)80 C)28 D)14 |
| A B C D |
| 25.阅读如下程序段,则程序段的执行后的输出结果为 #include "stdio.h" main() { char c; int i; char count(); int p(char); for(i=0;i<30;i++)c=count(); p(c);} char count() { char str=′A′; str+=1; return(str);} p(char c) { putchar(c); putchar(′\n′);} A)A B)B C)a D)b |
| A B C D |
| 26.阅读如下程序段,则执行后的结果为 #include "stdio.h" main() { int a,*p,*q,**w; p=&a; q=&a; w=&p; *p=5%6; *q=5; **w=3; printf("%d\n",a);} A)无确定值 B)1 C)5 D)3 |
| A B C D |
| 27.现有下列程序段 #include "stdio.h" void JFT(int *a,int *b,int *c,int *d,int *e) { int i,j,k,m; for(i=0;i<*a;i++) for(j=0;j<*b;j++) for(k=0;k<*c;k++) for(m=0;m<*d;m++)*e++;} main() { int a=10,b=10,c=10,d=10,e=0; JFT(&a,&b,&c,&d,&e); printf("%d\n",e);} 则程序段的输出结果是 A)10000 B)1000 C)10001 D)0 |
| A B C D |
| 28.以下能对二维数组c进行正确的初始化的语句是 A)int c[3][]={{3},{3},{4}}; B)int c[][3]={{3},{3},{4}}; C)int c[3][2]={{3},{3},{4},{5}}; D)int c[][3]={{3},{},{3}}; |
| A B C D |
| 29.阅读下列程序段,则程序段实现的功能是 #include "stdio.h" main() { int k[10]; int j; for(j=0;j<10;j++) scanf("%d",&k[j]); for(j=9;j>=0;j--) printf("%d,",k[j]);} A)输入10个数据的顺序输入并输出 B)输入10个数据的逆序存放 C)输入10个数据的逆序输出 D)以上叙述均错误 |
| A B C D |
| 30.阅读程序,则执行后的结果为 #include "stdio.h" main() { int i,m,n; for(i=0;i<3;i++) { m=test1(); n=test2();} printf("%d,%d\n",m,n);} test1() { int x=0; x++; return x;} test2() { static int x=0; x++; return x;} A)1,1 B)1,3 C)3,1 D)3,3 |
| A B C D |
| 31.阅读下面程序,则程序的输出结果为 #include "stdio.h" main() { int c[]={1,2,3,4,5,6}; int *p; p=c; printf("%d,",*p); printf("%d\n",*++p);} A)1,2 B)2,1 C)1,1 D)2,2 |
| A B C D |
| 32.阅读如下程序段,则程序在先后输入love和china后,输出结果是 #include #include main() { char a[30],b[30]; int k; gets(a); gets(b); k=strcmp(a,b); if(k>0)puts(a); else if(k<0)puts(b);} A)love B)china C)lovechina D)没有输出结果 |
| A B C D |
| 33.阅读下面程序,则执行后的结果为 #include "stdio.h" #include "string.h" #define N 10 #define M 10 char *find(char (*a)[M],int n) { char *q; int i; q=a[0]; for(i=0;i return q;} main() { char s[N][M]={"tomeetme","you","and","he","china"}; char *p; int n=5,i; p=find(s,n); puts(p);} A)he B)and C)you D)tomeetme |
| A B C D |
| 34.若有以下程序段,则选项中值为2的是 struct a{int n,*next;}; int x=1,y=2,z=3; struct a s[3],*p=s; s[0].next=&x;s[1].next=&y;s[2].next=&2; A)*(p++)->next B)*(++p)->next C)(*p).next D)(p++)->next |
| A B C D |
| 35.阅读下面程序,此程序的功能为 #include "stdio.h" main(int argc,char *argv[]) { FILE *p1,*p2; int c; p1=fopen(argv[1],"r"); p2=fopen(argv[2],"a"); c=fseek(p2,0L,2); while((c=fgetc(p1))!=EOF)fputc(c,p2); fclose(p1); fclose(p2);} A)实现将p1打开的文件中的内容复制到p2打开的文件 B)实现将p2打开的文件中的内容复制到p1打开的文件 C)实现将p1打开的文件中的内容追加到p2打开的文件内容之后 D)实现将p2打开的文件中的内容追加到p1打开的文件内容之后 |
| A B C D |
二、填空题(每空2分,共计30分) | |
| 1.用链表表示线性表的突出优点是 【1】 。 | |
| 输入答案,中间不含空格: | |
| 2.子程序通常分为两类: 【2】 和函数,前者是命令的抽象,后者是为了求值。 | |
| 输入答案,中间不含空格: | |
| 3.软件的 【3】 设计又称为总体结构设计,其主要任务是建立软件系统的总体结构。 | |
| 输入答案,中间不含空格: | |
| 4.对软件是否能达到用户所期望的要求的测试称为 【4】 。 | |
| 输入答案,中间不含空格: | |
| 5.实体之间的联系可以归结为一对一联系、一对多(或多对多)的联系与多对多联系。如果一个学校有许多教师,而一个教师只归属于一个学校,则实体集学校与实体集教师之间的联系属于 【5】 的联系。 | |
| 输入答案,中间不含空格: | |
| 6.阅读下面的程序,当程序在执行时,如果输入的是′A′,则输出结果为 【6】 。 #include "stdio.h" main() { char a; a=getchar(); switch(a) { case 65: printf("%c",′A′); case 66: printf("%c",′B′); default :printf("%s\n","other");}} |
| 输入答案,中间不含空格: |
| 7.阅读下面程序段,则执行后的输出结果为 【7】 。 #include "stdio.h" main() { int a=1; for(;a<=15;) if(++a%5!=2)continue; else printf("%d",a); printf("\n");} |
| 输入答案,中间不含空格: |
| 8.阅读下列程序,则执行后的结果为 【8】 。 #include "stdio.h" fun(int x,int y) { int z; z=x;x=y;y=z;} main() { int a,b; a=100;b=640; fun(a,b); printf("%d,%d\n",a,b);} |
| 输入答案,中间不含空格: |
| 9.阅读以下程序,使程序输出结果为30,4.000000,请填空。 #include "stdio.h" main() { int a=30,b=40,c; double 【9】 ,s; s=fun(&a,&b,&c); printf("%d,%lf\n",c,s);} double fun(int *a,int *b, 【10】 ) { *c=*a%*b; return(4.0); } |
| 输入答案,中间不含空格: |
| 10.下面程序段的功能是从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符。请填空。 #include "stdio.h" fun(char *x,char *y,char *z) { char t,*p; p=z; while(*x!=′\0′&&*y!=′\0′) { t=*x<*y?*x++:*y<*x?*y++: 【11】 ; if(*p==′\0′)*p=t; else if(t!=*p)*++p=t;} if(*x!=′\0′) while(*x!=′\0′) if(*x!=*p)*++p=*x++; else x++; if(*y!=′\0′)while(*y!=′\0′) if(*y!=*p)*++p=*y++; else y++; *++p=【12】;} sort(char *s) { int i,j,k; char t,*p; p=s; for(k=0;*p!=′\0′;k++)p++; for(i=0;i {【13】}} main() { char s1[100],s2[100],s3[200]; scanf("%s",s1); scanf("%s",s2); sort(s1); sort(s2); s3[0]=′\0′; fun(s1,s2,s3); printf("%s\n",s3);} |
| 输入答案,中间不含空格: |
| 11.以下函数set用来建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾。单向链表的头指针作为函数值返回,请填空。 struct node{ char data; struct node *next; }; struct node *set() { struct node *t1,*t2,*t3; char ch; t1=(struct node*)malloc(sizeof(struct node)); t3=t2=t1; ch=getchar(); while(ch!=′\n′) { t2= 【14】 malloc(sizeof(struct node)); t2->data=ch; t3->next=t2; t3=t2; ch=getchar();} t3->next=′\0′ ; 【15】 } |
| 输入答案,中间不含空格: |