1、二级 C 语言笔试-248 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.设有如下程序段:int x=2002, y=2003;printf(“ % d/n“, (x, y);则以下叙述中正确的是_。(分数:2.00)A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出B.运行时产生出错信息C.输出值为 2002D.输出值为 20032.若已经定义的函数有返回值,则以下关于该函数调用的叙述中错误的是_。(分数:2.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.函数调用可
2、以作为一个函数的形参3.以下叙述正确的是_。(分数:2.00)A.构成 C 程序的基本单位是函数B.可以在函数中定义另一个函数C.main()函数必须放在其他函数之前D.所有被调用的函数一定要在调用之前进行定义4.设有定义:int a=2, b=3, c=4;则以下选项中值为 0 的表达式是_。(分数:2.00)A.(! a=1) int i, j;i=sizeof((分数:2.00)A.; j=strlen(a);else return f(n-1)+1;main()int i, j=0;for(i=1; i3; i+)j+=f(i);printf(“% d/n“, j);程序运行后的输出结
3、果是_。(分数:2.00)A.4B.3C.2D.19.程序中对 fun 函数有如下说明:void * fun();此说明的含义是_。(分数:2.00)_10.C 语言中用于结构化程序设计的 3 种基本结构是_。(分数:2.00)A.顺序结构、选择结构、循环结构B.if、switch、breakC.for、while、do-whileD.if、for、continue11.以下程序的输出结果是_。int a, b;void fun()a=100;b=200;main()int a=5, b=7;fun();printf(“% d % d /n“, a, b);(分数:1.00)A.100200B
4、.57C.200100D.7512.以下能正确定义二维数组的是_。(分数:1.00)A.int a3;B.int a3=2*3;C.int a3=;D.int a23=1), 2, 3,4;13.以下程序的输出结果是_。long fun(int n)long s;if(n=1 | n=2)s=2;else s=n-fun(n-1);return s;main()printf(“% 1d/n“, fun(3); (分数:1.00)A.1B.2C.3D.414.若有以下程序段(n 所赋值的是八进制数):int m=32767, n=032767;printf(“% d, % o/n“, m, n)
5、;执行后输出结果是_。(分数:1.00)A.32767, 32767B.32767, 032767C.32767, 77777D.32767, 07777715.有以下程序:main()int m=3, n=4, x;x=-m+;x=x+8/+n;printf(“% d/n“, x);程序运行后的输出结果是_。(分数:1.00)A.3B.5C.-1D.-21616.以下定义语句中正确的是_。(分数:1.00)A.char a=A b=B;B.float a=b=19.0;C.int a=10, *b=D.float *a, b=17.以下叙述中错误的是_。(分数:1.00)A.用户所定义的标识
6、符允许使用关键字B.用户所定义的标识符应尽量做到“见名知意”C.用户所定义的标识符必须以字母或下划线开头D.用户所定义的标识符中,大、小写字母代表不同标识18.有以下程序:main()int a33, *p, i;p=for(i=0; i9; 1+)pi=i;for(i=0; i3; i+)printf(“% d“, a1i);程序运行后的输出结果是_。(分数:1.00)A.0 1 2B.1 2 3C.2 3 4D.3 4 519.以下叙述正确的是_。(分数:1.00)A.可以把 define 和 if 定义为用户标识符B.可以把 define 定义为用户标识符,但不能把 if 定义为用户标识
7、符C.可以把 if 定义为用户标识符,但不能把 define 定义为用户标识符D.define 和 if 都不能定义为用户标识符20.数据库设计的根本目标是要解决_。(分数:1.00)A.数据共享问题B.数据安全问题C.大量数据存储问题D.简化数据维护21.以下程序的输出结果是_。int f()static int i=0;int s=1;s+=i; i+;return s;main()int i, a=0;for(i=0; i5; i+)a+=f();printf(“% d/n“ ,(分数:2.00)A.;22.s1 和 s2 已正确定义并分别指向两个字符串。若要求:当 s1 所指串大于 s
8、2 所指串时,执行语句 S。则以下选项中正确的是_。(分数:2.00)A.if(s1s2)S;B.if(strcmp(s1, s2)S;C.if(strcmp(s2, s1)0)S;D.if(strcmp(s1, s2)0)S;23.有以下程序:# define P 3yoid F(int x) return(p*x*x); main()printf(“% d/n“, F(3+5); 程序运行后的输出结果是_。(分数:2.00)A.192B.29C.25D.编译出错24.有以下程序:int f(int b4)int i, j, s=0;for(j=0; j4; j+)i=j;if(i2)i=3
9、-j;S+=bij;return s;main()int a44=1, 2, 3, 4, 0, 2, 4, 6, 3, 6, 9, 12, 3, 2, 1, 0;printf(“%d/n“, f((分数:2.00)A.);main()int i;for(i=1; ix; i+)incre();incre()static int x=1;x*=x+1;printf(“ % d“, x);(分数:2.00)A.3 3B.2 2C.2 6D.2 526.有以下程序:main()int m, n, p;scanf(“m=% dn=% dp=% d“, printf(“% d % d % d/n“, m
10、, n, p);若想从键盘上输入数据,使变量 m 中的值为 123,n 中的值为 456,p 中的值为 789,则正确的输入是_。(分数:2.00)A.m=123n=456p=789B.m=123 n=456 p=789C.m=123,n=456,p=789D.123 456 78927.设有以下函数:f(int(分数:2.00)A.int b=0;static int c=3;b+; c+;return(a+b+c);如果在下面的程序28.对于长度为 n 的线性表,在最坏的情况下,下列各排序法所对应的比较次数中正确的是_。(分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序
11、为 nD.快速排序为 n(n-1)/229.设变量 x 为 float 型且已经赋值,则以下语句中能够将 x 中的数值保留到小数点后面两位,并将第三位四舍五入的是_。(分数:2.00)A.x=x*100+0.5/100.0B.x=(x*100+0.5)/100.0C.x=(int)(x*100+0.5)/100.0D.x=(x/100+0.5)*100.030.以下叙述中错误的是_。(分数:2.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句31.有以下程序:void swapl(int c0,
12、int c1)int t;t=coo; coo=o1o; c1o=t;void swap2(int * c0, int * c1)int t;t=*c0; *c0=*c1; *c1=t;main()int a2=3, 5, b2=A3, 5);swapl(a, a+1); swap2(printf(“%d%d%d%d/n“, a0, a1, b0,b1);程序运行后的输出结果是_。(分数:2.00)A.3 5 5 3B.5 3 3 5C.3 5 3 5D.5 3 5 332.有如下程序;int func(int a, int b)return(a+b); main()int x=2, y=5,
13、 z=8, r;r=func(func(x, y), z); printf(“% /d/n“, r); 该程序的输出的结果是_。A) 12 B) 13 C) 14 D) 15(分数:2.00)A.B.C.D.33.有以下程序:int a=3;main()int s=0;int a=5; s+=a+ ;s+=a+; printf(“% d/n“, s);程序运行后的输出结果是_。(分数:2.00)A.8B.10C.7D.1134.有定义语句:int a=1, b=2, c=3, x;,则以下选项中各程序段执行后,x 的值不等于 3 的是_。(分数:2.00)A.if(ca)x=1;else if
14、(ba)x=2;else x=3;B.if(a3)x=3;else if(a2)x=2;else x=1;C.if(a3)x=3;if(a2)x=2;if(a1)x=1;D.if(ab)x=b;if(bc)x=c;if(ca)x=a;35.以下程序中函数 setup 的功能是返回形参指针 s1 和 s2 所指字符串中较小字符串的首地址:# includestdio. h# includestring. hchar * scmp(char * s1, char * s2)if(strcmp(s1, s2)0)return(s1);else return(s2);main()int i; char
15、 string20, str320;for(i=0; i3; i+)gets(stri);strcpy(string, scmp(str0, str1);strcpy(string, scmp(string, str2);printf(“% s/n“, string);若运行时依次输入:abcd、abba 和 abc3 个字符串,则输出结果为_。(分数:2.00)A.abcdB.abbaC.abcD.abca36.下列叙述中正确的是_。(分数:2.00)A.软件交付使用后还需要维护B.软件一旦交付使用就不需要维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令37.有以
16、下程序段:int n, t=1, s=0;scanf(“% d“, dos=s+t; t=t-2; )while(t!=n);为使程序不陷入死循环,从键盘输入的数据应该是_。(分数:2.00)A.任意正奇数B.任意负偶数C.任意正偶数D.任意负奇数38.以下循环体的执行次数是_。main()int i, j;for(i=0, j=1; i=j+1; i+=2, j-)printf(“% d/n“, i);(分数:2.00)A.3B.2C.1D.039.若指针 p 已正确定义,要使 p 指向两个连续的整型动态存储单元,不正确的语句是_。(分数:2.00)A.p=2*(int*)malloc(si
17、zeof(int);B.p=(int*)mallet(2*sizeof(int);C.p=(int*)malloc(2*2);D.p=(int*)calloc(2, sizeof(int);40.有以下程序:main()int a=1, b;for(b=1; b=10; b+)if(a=8)break;if(a % 2=1)a+=5; continue;a-=3;printf(“% d/n“, B) ;程序运行后的输出结果是_。(分数:2.00)A.3B.4C.5D.6二、填空题(总题数:15,分数:30.00)41.诊断和改正程序中错误的工作通常称为 【1】 。(分数:2.00)填空项 1:
18、_42.在关系数据库中,把数据表示成二维表,每一个二维表称为 【2】 。(分数:2.00)填空项 1:_43.下面程序的运行结果: 【3】 。int f(int a, int n)if(n1) return a0+f(else return ao;main()int aa3=1, 2, 3, s;s=f( printf(“% d/n“, s);(分数:2.00)填空项 1:_44.以下函数 rotate 的功能是:将 a 所指 N 行 N 列的二维数组中的最后一行放到 b 所指二维数组的第 0 列中,把 a 所指二维数组中的第 0 行放到 b 所指二维数组的最后一列中,b 所指二维数组中其他数
19、据不变。# define N 4void rotate(int aN, int bN)int i, j;for(i=0; iN; i+)biN-1=a0i; 【4】 =aN-1i;(分数:2.00)填空项 1:_45.有以下程序:main()int t=1, i=5;for(; i=0; i-)t*=i;printf(“% d/n“, t);执行后的输出结果是 【5】 。(分数:2.00)填空项 1:_46.已知字符 A 的 ASCII 代码值为 65,以下程序运行时若从键盘输入:B33回车,则输出结果是 【6】 。# includemain()char a, b;a=getchar(); s
20、canf(“% d“, a=a-A+0; b=b*2;printf(“% c % c/n“, a, b);(分数:2.00)填空项 1:_47.若有以下程序:main()int p, a=5;if(p=a!=0)printf(“% d/n“, p);elseprintf(“% d/n“, p+2);执行后的输出结果是 【7】 。(分数:2.00)填空项 1:_48.以下主程序运行后的输出结果是 【8】 。main()int i, m=0, n=0, k=0;for(i=9; i=ii; i+)switch(i/10)case 0:m+; n+; break;case 10:n+; break;
21、default:k+; n+;printf(“% d % d % d/n“, m, n, k);(分数:2.00)填空项 1:_49.设在主函数中有以下定义和函数调用语句,且 fun 函数为 void 类型;请写出 fun 函数的首部 【9】 ,要求形参名为 b。main()double s1022;int n;fun(s);(分数:2.00)填空项 1:_50.以下程序中,fun 函数的功能是求 3 行 4 列二维数组每行元素中的最大值,请填空。void fun(int, int, int(*)4, int*);main()int a34=12, 41, 36, 28, 19, 33, 15
22、, 27, 3, 27, 19, 1, b3, i;fun(3, 4, a, b);for(1=0; i3; i+)printf(“% 4d“, bi);printf(“/n“);void fun(int m, int n, int ar4, int * bar)int i, j, x;for(i=0; im; i+)x=ari0;for(j=0; jn; j+)if(xarij)x=arij;【10】 =x;(分数:2.00)填空项 1:_51.以下程序的输出结果是 【11】 。# define MCNA(m)2*m# define MCNB(n, m)2*MCRA(n)+m# define
23、 f(x)(x*x)main()int i=2, j=3;printf(“% d/n“, MCRB(j, MCRA(i);(分数:2.00)填空项 1:_52.以下程序运行后的输出结果是 【12】 。fun(int a)int b=0; static int c=3;b+; c+;return(a+b+c);main()int i, a=5;for(i=0; i3; i+)printf(“% d % d“, i, fun(a);printf(“/n“);(分数:2.00)填空项 1:_53.以下程序运行后的输出结果是 【13】 。# include string. hcbar *ss(char
24、 *s)char *p, t;p=s+1; t=*s;while(-p)*(p-1)=*p; p+;*(p-1)=t;return s;main()char *p, str10=“abcdefgh“;p=ss(str);printf(“% s/n“, p);(分数:2.00)填空项 1:_54.下面程序的功能:将字符数组 a 中下标值为偶数的元素从小到大排列,其他元素不变。请填空。# includestdio. h# includestring. hmain()char a=“clanquage“, t;int i, j, k;k=strlen(A) ;for(i=0; i=k-2; i+=2
25、)for(j=i+2;jk; j+=2)if( 【14】 )t=ai; ai=aj; aj=t; puts(A) ;printf(“/n“);(分数:2.00)填空项 1:_55.下面程序的功能:输出 100 以内能被 3 整除且个位数为 6 的所有整数,请填空。# includestdio. hmain()int i, j;for(i=0; i10 或 i=9; i+)j=i*10+6;if( 【15】 )continue;printf(“% d“, j);(分数:2.00)填空项 1:_二级 C 语言笔试-248 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40
26、,分数:70.00)1.设有如下程序段:int x=2002, y=2003;printf(“ % d/n“, (x, y);则以下叙述中正确的是_。(分数:2.00)A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出B.运行时产生出错信息C.输出值为 2002D.输出值为 2003 解析:解析 printf 函数的输出项(x,y)是逗号表达式,因此 y 的值是整个表达式的值,故输出值为2003。2.若已经定义的函数有返回值,则以下关于该函数调用的叙述中错误的是_。(分数:2.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.
27、函数调用可以作为一个函数的形参 解析:解析 swapl(a,a+1)是将 a,a+1 的地址进行传递,运行 swapl 以后,a0,a1的值不发生改变,而 swap2(则以下选项中值为 0 的表达式是_。(分数:2.00)A.(! a=1) int i, j;i=sizeof((分数:2.00)A.; j=strlen(a);else return f(n-1)+1;main()int i, j=0;for(i=1; i3; i+)j+=f(i);printf(“% d/n“, j);程序运行后的输出结果是_。(分数:2.00)A.4B.3 C.2D.1解析:解析 本题考查函数的递归调用。本题
28、中的函数 f 是递归函数,主函数中语句 j+=f(i)共执行了两次,首次执行时 j=j+f(i)=0+f(1)=f(1)=1;第二次执行时 j=j+f(2)=1+f(2)。其中 f(2)=f(1)+1-1+1=2,因此 j=1+f(2)=1+2=3,即 printf 语句输出结果为 3。9.程序中对 fun 函数有如下说明:void * fun();此说明的含义是_。(分数:2.00)_解析:解析 C 语言中函数的定义分为有参函数的定义和无参函数的定义。无参函数的定义形式为:类型标识符函数名() 说明部分语句有参函数的定义有两种形式:类型标识符函数名(形式参数列表)形式参数说明 说明部分语句或
29、类型标识符函数名(类型名 形参 1,类型名 形参 2,) 说明部分语句10.C 语言中用于结构化程序设计的 3 种基本结构是_。(分数:2.00)A.顺序结构、选择结构、循环结构 B.if、switch、breakC.for、while、do-whileD.if、for、continue解析:解析 本题主要考查结构化程序设计的基本结构。结构化程序设计有 3 种基本结构:顺序结构、选择结构、循环结构。11.以下程序的输出结果是_。int a, b;void fun()a=100;b=200;main()int a=5, b=7;fun();printf(“% d % d /n“, a, b);(
30、分数:1.00)A.100200B.57 C.200100D.75解析:解析 函数 fun 中的 a 和 b 是全局变量,在 main 函数中全局变量 a 和 b 不起作用。因此调用函数fun 后 main 中 a 和 b 的值不变,a=5、b=7。12.以下能正确定义二维数组的是_。(分数:1.00)A.int a3;B.int a3=2*3; C.int a3=;D.int a23=1), 2, 3,4;解析:解析 (1)二维数组的定义二维数组的定义方式为:类型说明符数组名常量表达式常量表达式。二维数组在内存中是按行优先的顺序存放的,即先存放第一行的元素,再存放第二行的元素,依次类推。(2
31、)二维数组元素的引用二维数组元素的表示形式为:数组名下标下标,下标可以是整型常量或整型表达式;其范围为:0(常量表达式-1)。(3)二维数组的初始化可以用以下方法对二维数组元素初始化。分行给二维数组赋初值,例如;int a22=(1, 2), 3, 4);这种赋值方式比较直观,把第 1 个大括号内的数据赋给第 1 行的元素,第 2 个大括号内的数据赋给第 2 行的元素,即按行赋值。可以将所有数据写在一个大括号内,按数组排列的顺序对各个元素赋初值。可以对部分元素赋初值,没有初始化的元素值为 0。如果对全部数组元素赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。13.以下程序
32、的输出结果是_。long fun(int n)long s;if(n=1 | n=2)s=2;else s=n-fun(n-1);return s;main()printf(“% 1d/n“, fun(3); (分数:1.00)A.1 B.2C.3D.4解析:解析 在主函数中调用 fun 时,形参 n=3,所以 fun 中变量 s=n-fun(n-1)=3-fun(2)=3-2=1,即fun(3)=1。14.若有以下程序段(n 所赋值的是八进制数):int m=32767, n=032767;printf(“% d, % o/n“, m, n);执行后输出结果是_。(分数:1.00)A.327
33、67, 32767 B.32767, 032767C.32767, 77777D.32767, 077777解析:解析 “%o”以八进制无符号形式输出整数,n=032767 中的 032767 是整数的八进制形式,当以“%o”格式输出 n 时,结果仍为 32767。15.有以下程序:main()int m=3, n=4, x;x=-m+;x=x+8/+n;printf(“% d/n“, x);程序运行后的输出结果是_。(分数:1.00)A.3B.5C.-1D.-216 解析:解析 本题主要考查+执行的次序。执行过 x=-m+;后,x=-3,m=4;执行 x=x+8/+n;时8/+n=1;因此最
34、后 x=-216。16.以下定义语句中正确的是_。(分数:1.00)A.char a=A b=B;B.float a=b=19.0;C.int a=10, *b= D.float *a, b=解析:解析 选项 A 中 a=A b=B中缺少一个逗号;B 中只能定义一个,如 a=19.0;D 中 b 是 float 类型的,不能取指针地址。17.以下叙述中错误的是_。(分数:1.00)A.用户所定义的标识符允许使用关键字 B.用户所定义的标识符应尽量做到“见名知意”C.用户所定义的标识符必须以字母或下划线开头D.用户所定义的标识符中,大、小写字母代表不同标识解析:解析 在 C 语言中,用户所定义的
35、标识符不能使用关键字。18.有以下程序:main()int a33, *p, i;p=for(i=0; i9; 1+)pi=i;for(i=0; i3; i+)printf(“% d“, a1i);程序运行后的输出结果是_。(分数:1.00)A.0 1 2B.1 2 3C.2 3 4D.3 4 5 解析:解析 p 指向的 a 的首地址,由于 C 语言是行优先存储的,一维数组 p 就依次存放了 a 中从第 0行到第 2 行的所有元素,因此 a1i就对应了 p3p5。19.以下叙述正确的是_。(分数:1.00)A.可以把 define 和 if 定义为用户标识符B.可以把 define 定义为用户
36、标识符,但不能把 if 定义为用户标识符 C.可以把 if 定义为用户标识符,但不能把 define 定义为用户标识符D.define 和 if 都不能定义为用户标识符解析:解析 if 是 C 语言中的保留字,所以不能作为用户标识符;define 是 C 语言中的预编译命令,由于 C 语言中的预编译命令都是以#开头,所以 define 可以作为用户标识符。20.数据库设计的根本目标是要解决_。(分数:1.00)A.数据共享问题 B.数据安全问题C.大量数据存储问题D.简化数据维护解析:解析 数据库集中了各种应用的数据,进行统一的构造与存储,从而使它们能够被不同的应用程序所使用。21.以下程序的
37、输出结果是_。int f()static int i=0;int s=1;s+=i; i+;return s;main()int i, a=0;for(i=0; i5; i+)a+=f();printf(“% d/n“ ,(分数:2.00)A.;解析:解析 函数 f 中变量 i 为静态变量,函数 f 调用结束后变量 i 所占据的存储单元不会释放,而在主函数中 f 被调用 5 次,具体过程如下。第 1 次调用 f:s=s+i=1+0=1,i=i+1=1,主函数中 a=a+f()=O+1=1第 2 次调用 f:s=s+1=1+1=2,i=i+1=2,丰函数中 a=a+f()=1+2=3第 3 次调
38、用 f:s=s+1=1+2=3,i=i+1=3,主函数中 a=a+f()=3+3=6第 4 次调用 f:s=s+i=1+3=4,i=i+1=4,主函数中 a=a+r()=6+4=10第 5 次调用 f:s=s+i=1+4=5,i=i+4=5,主函数中 a=a+f()=10+5=15所以 printf 语句的输出结果为 15。22.s1 和 s2 已正确定义并分别指向两个字符串。若要求:当 s1 所指串大于 s2 所指串时,执行语句 S。则以下选项中正确的是_。(分数:2.00)A.if(s1s2)S;B.if(strcmp(s1, s2)S;C.if(strcmp(s2, s1)0)S;D.i
39、f(strcmp(s1, s2)0)S; 解析:解析 C 语言中,用 strcmp(s1,s2)来比较串 s1 和 s2 的大小,当 s1s2 时,strcmp 的值为正数;当 s1=s2 时,strcmp 的值为 0;当 s1s2 时,strcmp 的值为负数。因此 D 选项的 if 语句正确。23.有以下程序:# define P 3yoid F(int x) return(p*x*x); main()printf(“% d/n“, F(3+5); 程序运行后的输出结果是_。(分数:2.00)A.192B.29C.25D.编译出错 解析:解析 F 函数没有返回值,但是函数体中又有 retu
40、rn,因此编译出错。24.有以下程序:int f(int b4)int i, j, s=0;for(j=0; j4; j+)i=j;if(i2)i=3-j;S+=bij;return s;main()int a44=1, 2, 3, 4, 0, 2, 4, 6, 3, 6, 9, 12, 3, 2, 1, 0;printf(“%d/n“, f((分数:2.00)A.);main()int i;for(i=1; ix; i+)incre();incre()static int x=1;x*=x+1;printf(“ % d“, x);(分数:2.00)A.3 3B.2 2C.2 6 D.2 5解
41、析:解析 C 语言规定如果全局变量与局部变量同名,则在局部变量的作用域内全局变量不起作用。程序开头定义的变量 x 为全局变量,函数 incre 中定义的变量 x 是局部静态变量,存放在静态存储区,incre 调用结束后不释放 x 占据的存储单元。main 函数中使用的 x 是全局变量 x=3,所以 main 函数中调用函数 incre 两次。调用过程如下。第 1 次调用:x=x*(x+1)=1(1+1)=2,printf 函数输出 2;第 2 次调用:x=x*(x+1)=2(2+1)=6,printf 函数输出 6。26.有以下程序:main()int m, n, p;scanf(“m=% d
42、n=% dp=% d“, printf(“% d % d % d/n“, m, n, p);若想从键盘上输入数据,使变量 m 中的值为 123,n 中的值为 456,p 中的值为 789,则正确的输入是_。(分数:2.00)A.m=123n=456p=789 B.m=123 n=456 p=789C.m=123,n=456,p=789D.123 456 789解析:解析 输入变量的值的时候,输入的格式要和输入语句中那些控制格式字符串的格式一致。27.设有以下函数:f(int(分数:2.00)A.int b=0;static int c=3;b+; c+;return(a+b+c);如果在下面的
43、程序 解析:解析 本题考查静态变量的问题。函数 f 中 c 是静态变量存放在静态存储区,在程序的整个运行期间都不释放占据的存储单元。函数 f 被调用 3 次,调用过程如下。第 1 次调用;a=2、b=0、c=3,执行 b+和 c+后 b=1、c=4,f(a)=a+b+c=2+1+4=7第 2 次调用:a=2、b=0、c=4执行 b+和 c+后 b=1、c=5,f(a)=a+b+c=2+1+5=8第 3 次调用:a=2、b=0、c=5,执行 b+和 c+后 b=1、c=6,f(a)=a+b+c=2+1+6=9所以输出结果为选项 A。28.对于长度为 n 的线性表,在最坏的情况下,下列各排序法所对
44、应的比较次数中正确的是_。(分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/2 解析:解析 存最坏情况下,快速排序退化为冒泡排序,冒泡排序法的基本过程参见本题的理论链接。冒泡排序的每个元素都要与它前面的元素相比较,因此比较次数为(n-1)+(n-2)+1=n(n-1)/2。29.设变量 x 为 float 型且已经赋值,则以下语句中能够将 x 中的数值保留到小数点后面两位,并将第三位四舍五入的是_。(分数:2.00)A.x=x*100+0.5/100.0B.x=(x*100+0.5)/100.0 C.x=(int)(x*100+0.5)/
45、100.0D.x=(x/100+0.5)*100.0解析:解析 选项 A 的功能是将 x 的值放大 100 倍,然后与 0.0005 相加;选项 C 的功能是将 x 中的数值保留到小数点后面两位后强制转换为整型;选项 D 的功能是将 x 与 50 相加;正确答案为选项 B。30.以下叙述中错误的是_。(分数:2.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句解析:解析 C 语言中,只有一个分号的语句称为空语句,程序执行时并不产生任何的动作,但是随意加分号会产生错误,例如 D 选项所说到情况,这样就产生了错误。31.有以下程序:void swapl(int c0, int c1)int t;t=coo; coo=o1o; c1o=t;void swap2(int * c0, int * c1)int t;t=*c0; *c0=*c1; *c1=t;main()int a2=3, 5, b2=A3, 5);swapl(a, a+1); swap2(printf(“%d%d%d%d/n“, a0, a1, b0,b1);程序运行后的输出结果是_。(分数:2.00)A.3 5 5 3 B.5 3 3 5C.3 5 3 5D.5 3 5 3解析:解析 swapl(a,a+1