计算机类 二级 C
2014年全国计算机等级《二级C语言程序设计》考前押密试题(3) 43 题 含答案 C
1 单选题 1 / 43
若已定义:int a口一(0,1,2,3,4,5,6,7,8,9),*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是( )。
A a[p-a] B *(&a[i]) C p[i] D *(*(a十i))
查看答案 D. *(*(a十i))
2 单选题 2 / 43
视图设计一般有3种设计次序,下列不属于视图设计次序的是( )。
A 自顶而下 B 由内向外 C 由外向内 D 自底向上
查看答案 C. 由外向内
3 单选题 3 / 43
下列运算符中优先级最高的算符是( )。
A ! B % C -= D &&
查看答案 A. !
4 单选题 4 / 43
有以下程序: int fun(int n) { if(n==1)retHrn 1; else return(n+fun(n—1)): ) main() { int x; scanf(”%d”,&x);x=fun(x);printf(”%d\n”, x): } 执行程序时,给变量X输入10,程序的输出结果是( )。
A 55 B 54 C 65 D 45
查看答案 A. 55
5 单选题 5 / 43
以下能正确定义一维数组的选项是( )。
A int a[5]={0.1,2.3.4,5); B char a口={0,1,2,3,4,5); C char a={'A’,'B','C'); D int a[5]=”0123”;
查看答案 B. char a口={0,1,2,3,4,5);
6 单选题 6 / 43
下列程序执行后的输出结果是( )。 void func(int*a,int b[]) {b[o]=*a+b;) main() { int a,b[5]; a=0;b[0]=3; rune(&a.b);printf(”%d\n”,b[o]); }
A 6 B 7 C 8 D 9
查看答案 A. 6
7 单选题 7 / 43
下列4个关于C语言的结论中错误的是( )。
A 可以用do while语句实现的循环一定可以用while语句实现 B 可以用for语句实现的循环一定可以用while语句实现 C 可以用while语句实现的循环一定可以用for语句实现 D do-while语句与while语句的区别仅是关键字“while”出现的位置不同
查看答案 D. do-while语句与while语句的区别仅是关键字“while”出现的位置不同
8 单选题 8 / 43
以三级模式为框架形成的3种数据库中,真实存在于计算机外存的数据库是( )。
A 概念数据库 B 用户数据库 C 物理数据库 D 逻辑数据库
查看答案 B. 用户数据库
9 单选题 9 / 43
与“y一(x>O?1:x<0?—1:0)”;的功能相同的if语句是( )。
A if(x>0)y=1; B if(x) else if(x0)y=1; else y=0; else if(x%0)y=-1; else y=0; C y=-1 D y=0; if(x) if(x>=O) if(x>O)y=1; if(xi>=O)y=1; else if(x==0)y=0; else y=-1; else y=-1;
查看答案 B. if(x) else if(x0)y=1; else y=0; else if(x%0)y=-1; else y=0;
10 单选题 10 / 43
数据库系统的核心是( )。
A 数据模型 B 数据库管理系统 C 数据库 D 数据库管理员
查看答案 B. 数据库管理系统
11 单选题 11 / 43
若有以下的定义:“int t[a][2];”,能正确表示t数组元素地址的表达式的是( )。
A &.t[3][2] B t[3] C t[1] D t[2][2]
查看答案 C. t[1]
12 单选题 12 / 43
有以下程序 #include struct tt {int x;struct tt*y;)*P; struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a); main() { int i; P—a: . for(i=1;i<=2;i++)(printf(”%d,”,p->x);P =P->y:} ) 程序的运行结果是( )。
A 20,30, B 30,17, C 15,30, D 20,15,
查看答案 D. 20,15,
13 单选题 13 / 43
以下选项中正确的实型常量是( )。
A 0 B 3.1415 C 0.329×102 D 871
查看答案 B. 3.1415
14 单选题 14 / 43
有下列函数定义: int fun(double a,double b) {return a*b;) 若下列选项中所用变量都已经正确定义并赋值,错误的函数调用是( )。
A if(fun(x,y)){……) B z—fun(fun(X,y),fun(X,y)); C z—fun(fun(X,y)X,y); D fun(x,y);
查看答案 C. z—fun(fun(X,y)X,y);
15 单选题 15 / 43
有以下程序: main() {int a=0,b=0; a=10; /*给a赋值 b=20; 给b赋值 */ printf(”a+b=%d\n”,a+b);//输出计算机结果 ) 程序运行后的输出结果是( )。
A a+b=10 B a+b=30 C 30 D 出错
查看答案 A. a+b=10
16 单选题 16 / 43
以下程序的输出结果是( )。 main() {int i,a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf(”%d%d%d%d\n”,a[0][3],a[1][2], a[2][1],a[3][0]; }
A 0650 B 1470 C 5430 D 输出值不定
查看答案 A. 0650
17 单选题 17 / 43
下述程序的运行结果是( )。 # include #include main() { char*s1=”abDui¨; char*s2=”ABdUG”: int t; t=strcmp(s1,s2); printf(”%d”,t); }
A 正数 B 负数 C 零 D 不确定的值
查看答案 A. 正数
18 单选题 18 / 43
语句“printf(”a\bre”\'hi\’y\\\bou\n”);”的输出结果是( )。
A a\bre\'hi\'y'\\\bou B a\bre\'hi\\y\bou C re'hi'you D abre'hi'y\bou
查看答案 C. re'hi'you
19 单选题 19 / 43
下面程序段的输出结果是( )。 int i=32770:printf(”%d\n”,i);
A 32769 B 32767 C -32766 D 输出不确定数
查看答案 C. -32766
20 单选题 20 / 43
下列运算符中优先级最低的算符是( )。
A || B ! = C <一 D 十
查看答案 A. ||
21 单选题 21 / 43
有以下程序: #include main() { char c1='A',c2='Y'; printf(”%d,%d\n”,c1,c2); ) 程序的输出结果是( )。
A 因输出格式不合法,无正确输出 B 65,90 C A,Y D 65.89
查看答案 D. 65.89
22 单选题 22 / 43
设有定义:“int a;float b;”,执行“scanf(”%2d%f”,&a,&b);”语句时,若从键盘输入876543.o<回车>,a和b的值分别是( )。
A 876和543.000000 B 87和6.000000 C 87和543.000000 D 76和543.000000
查看答案 B. 87和6.000000
23 单选题 23 / 43
设有二元关系R和三元关系s,下列运算合法的是( )。
A Rn S B RU S C R-S D R×S
查看答案 D. R×S
24 单选题 24 / 43
有以下程序: #include main() { int i; for(i一1;i<一5;i++) (if(i%2)printf(”*”); e|se continue; printf(”#”); } printf(”$\n”); 程序的输出结果是( )。
A *#*#*#$ B #*#*#*$ C *#*#$ D #*#*$
查看答案 A. *#*#*#$
25 单选题 25 / 43
结构化程序设计的3种结构是( )。
A 顺序结构、选择结构、转移结构 B 分支结构、等价结构、循环结构 C 多分支结构、赋值结构、等价结构 D 顺序结构、选择结构、循环结构
查看答案 D. 顺序结构、选择结构、循环结构
26 单选题 26 / 43
下面for语句的循环次数为( )。 for(x=1,y=0;(Y!=19)&&(x<6);x++);
A 是无限循环 B 循环次数不定 C 最多执行6次 D 最多执行5次
查看答案 D. 最多执行5次
27 单选题 27 / 43
语句:“printf(”%d”,(a=2)&&(b=-2));”的输出结果是( )。
A 无输出 B 结果是不确定 C -1 D 1
查看答案 D. 1
28 单选题 28 / 43
以下程序的输出结果是( )。 void fun(int*a,int i,int j) {int t; if(i<I) (t=a[i];a[i]=a[j];a[j]=t; i++;j--; fun(a,i,j); ) } main() {int x[]={2,6,1.8),i; fun(x,0,3): for(i=0;i<4;i++)printf(”%2d”,x[i]); printf(”\n”); )
A 1,2,6,8 B 8,6,2,1 C 8,l,6,2 D 8,6,1,2
查看答案 C. 8,l,6,2
29 单选题 29 / 43
常采用的两种存储结构是( )。
A 顺序存储结构和链式存储结构 B 散列方法和索引方式 C 链表存储结构和数组 D 线性存储结构和非线性存储结构
查看答案 A. 顺序存储结构和链式存储结构
30 单选题 30 / 43
有以下程序: main() { int x=102,y=012; printf(”%2d,%2d\n”,x,y); } 执行后输出结果是( )。
A 10,01 B 02,12 C 102,10 D 02,10
查看答案 C. 102,10
31 单选题 31 / 43
运行下列程序,若从键盘输入字符“a”,则输出结果是( )。 char C; c=getchar(); if(c>='a'&&c<='g')c=c+4; else if(c>='g'&&c<='z')c=c-21; else print{(”input error!\n”); putchar(c):
A f B t C e D d
查看答案 C. e
32 单选题 32 / 43
相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。
A 可重用性差 B 安全性差 C 非持久性 D 冗余性
查看答案 D. 冗余性
33 单选题 33 / 43
若有以下定义和语句:“double r=99,*p=&r;*P=r;”,则以下正确的叙述是( )。
A 两个*p含义相同,都说明给指针变量P赋值 B 在“double r=99,*p=&r;”中,把r的地址赋值给了P所指的存储单元 C 语句“*p=r;”把变量r的值赋给指针变量P D 语句“*p=r;”取变量r的值放回r中
查看答案 B. 在“double r=99,*p=&r;”中,把r的地址赋值给了P所指的存储单元
34 单选题 34 / 43
有以下程序段: int k,j,s; for(k=2;k<6;k++,k++) { s=1; for(j=k;j<6;j++)s+=j; ) print[(”%d\n”,s); 程序段的输出结果是( )。
A 9 B 1 C 11 D 10
查看答案 D. 10
35 单选题 35 / 43
设有以下定义 union data ( int dl;f|aat d2;)dem0; 则下面叙述中错误的是( )。
A 变量dem0与成员d2所占的内存字节数相同 B 变量dem0中各成员的地址相同 C 变量dem0和各成员的地址相同 D 若给demo.d1赋99后,dem0.d2中的值是99.0
查看答案 D. 若给demo.d1赋99后,dem0.d2中的值是99.0
36 单选题 36 / 43
算法分析的目的是( )。
A 找l叶{数据结构的合理性 B 找出算法中输入和输出之间的关系 C 分析算法的易懂性和可靠性 D 分析算法的效率以求改进
查看答案 D. 分析算法的效率以求改进
37 单选题 37 / 43
设有如下定义: int arr[]={6,7,8,9,10}; int*ptr; ptr=art; *(ptr2)=2: printf(”%d,%a\n”,*ptr,*(ptr2)); 则下列程序段的输出结果为( )。
A 8,10 B 6,8 C 7,9 D 6,2
查看答案 D. 6,2
38 单选题 38 / 43
设有程序段: int k=12; while(k=1)k=k-1: 则下列描述中正确的是( )。
A while循环执行10次 B 循环是无限循环 C 循环体语句一次也不执行 D 循环体语句执行一次
查看答案 C. 循环体语句一次也不执行
39 单选题 39 / 43
有下列程序: main() {int i,s=0,t[]={1,2,3,4,5,6,7,8,9); for(i=0;i<9;i+=2)s+-*(t+i); printf(”%d\n”,s); ) 程序执行后的输出结果是( )。
A 45 B 20 C 25 D 36
查看答案 C. 25
40 单选题 40 / 43
有下列程序: #include main() { int a=6,b=7,m=1; switch(a%2) { case 0:m++;break; case 1:m++; switch(b%2) {default:m++; case 0:m++;break; ) ) printf(”%d\n”,m); 程序的运行结果是( )。
A 3 B 2 C 4 D 1
查看答案 B. 2
41 主观题 41 / 43
请补充main()函数,该函数的功能是:输入两个正整数numl和num2,求这两个数的最大公约数和最小公倍数。 例如,若输人的两个正整数为12,4,则它们的最大公约数为4,最小公倍数为12。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在main()函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include void main() { int a,b,numl,num2,t; system(”CLS”): printf(”\nlnput tWO numbers:\n”); scanf(”%d,%d”,&numl,&num2); if(numl<NUM2) { a=num2; b=numl; } else { a=num1: b=num2: ) while(【1】) { t=【2】 a=b; b=t; } printf("greatest common divisor: %d\n”,a); printf(”least common multiple: %d\n”,【3】);
查看答案 【1】B!=0 【2】A%B 【3】numl*num2/a
42 主观题 42 / 43
下列给定程序中,函数proe()的功能是:对M名学生的学习成绩,按从高到低的顺序找出前m(m<10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include%stdlib.h> #include #include #include #include%malloe.h> #define M 10 typedef struct ss { char num[10]; int s; } STU; STU *proc(STU a[],int m) { STU b[-M],*t; int i,j,k; //****found**** *t=calloc(m,sizeof(STU)); for(i=0;i for(k=0;k<M;K++) { for(i=j=0;i<M;I++) if(b[i].s>b[j].s)j=i; //****found**** t[k].num=b[j].num; t[k].s=b[j].S; b[j].s=0; } return t: } void outresuh(STU a[],FILE *pf) f int i; for(i=0;i<M;I++) fprintf(pf,”No=%s Mark=%d\n”, a[i] mum,a[i].s); fprintf(pf,”\n\n”); ) void main() {STU stu[M]={{¨A01”,81},{¨A02”,89}, {¨A03”,66},{”A04”,87),{”A05”,77), {”A06”,90),{"A07”,79),{”A08”,61), {”A09”,80},{”A10”,71)); STU+pOrder; int i,m; system(”CLS”); printf(”****THE RESULT****\n”); outresuh(stu,stdout); print{(”\nGive the number of the students who have better score:”); scanf(”%d”,&m); while(m>10) printf(”\nGive the number of the students who have better score:”); scanf(”%d”,&m); } p()rder=proc(stu,m); printf(”****THE RESULT****\n”); printf(”The lop:\n”); for(i=0:i<M:I++) printf(”%s%d\n”,pOrder[i].hum, pOrder[i].s); free(pOrder); )
查看答案 (1)错误:*t=EAlloC(m,sizEoF(STU)); 正确:t=(struCtSS*)CAlloC(m,sizEoF(STU));(2)错误:t[kJ.num=B[j].num; 正确:t[k]-h[j+;
43 主观题 43 / 43
学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc(),其功能是:按分数的高低排列学生的记录,高分在前。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。 试题程序: # include #define M 16 typedef s truct { char num[10]; inl S; ) STREC; void proc(STREC a[]) int i,j; STREC t; for(i=1;i<M;I++)&NBSP; *用冒泡法按从高到低 排序*/ for(j=0;j<M-1;J++) if(a[j].s 的记录,高分在前*/ {t=aEP;a[j]=a[j+1];a[j+1]=t;} } void main () { STREC,sluEM]={{ ”GA005”,85),{¨GA003”, 76}, {”GA002“,69},{¨GA004”,815}.{¨GA001”,91}, {"GA007”,72},{“GA008”,64),{"GA006”,87}, {¨GA015”,85},i”GAO13”,91},{”GA012”,64}, {"GA014”,91},{”GA011”,66},{¨GA017”,64}, {”GA018”,64},{¨GA016”,72}}; in/i; proc(stu): prinlf(”The data afwr sorted:\n”); for(i=0;i<M:I++) { if(i%4==0) //每行输出4个学生记录 printf(”\n”); printf(”%sM”,stu[i].num,stu[i].s); } printf(”\n”): }
查看答案 voiDproC(STRECA[]){ inti,j; STRECt; for(i=1;i<M;i++)//用冒泡法按从高到低排序 for(j=0;j%M-1;j++) if(a[j].s<a[j+1].s)//按分数的高低排列学生的记录,高分在前 {t=a[j];arj]=a[j+1];a[j+1]=t;)