1、二级 C语言模拟 639及答案解析(总分:129.00,做题时间:90 分钟)一、选择题(总题数:40,分数:61.00)1.以下选项中关于 C语言常量的叙述错误的是_。(分数:1.00)A.常量可分为数值型常量和非数值型常量B.常量分为整型常量、实型常量、字符常量和字符串常量C.经常被使用的变量可以定义成常量D.所谓常量,是指在程序运行过程中,其值不能被改变的量2.有以下程序: # include stdio.h void fun(char *c,int d) *c=*c+1,d=d+1; printf(“%c,%c“, *c,d); main() char b=“a“,a=“A“; fun
2、(b,a);printf(“%c,%c/n“,b,a); 程序运行后的输出结果是_。(分数:1.00)A.b,B,b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B3.若 a为 int类型,且其值为 3,则执行完表达式 a+=a-=a*a后,a 的值是 _ 。(分数:1.00)A.-3B.9C.-12D.64.有以下程序 #include stdio.h main() FILE *fp; int a10=1,2,3,0,0,i; fp=topen(“d2.dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp
3、); fclose(fp); fp=fopen(“d2.dat“,“rb“); fread(a,sizeof(int),10,fp); fclose(fp); for(i=0;i10;i+) printf(“%d,“,ai); 程序的运行结果是_。(分数:1.00)A.1,2,3,0,0,1,2,3,0,0,B.1,2,3,1,2,3,0,0,0,0,C.123,0,0,0,0,123,0,0,0,0,D.1,2,3,0,0,0,0,0,0,0,5.若变量已正确定义并赋值,符合 C语言语法的表达式是(分数:2.00)A.a=a+7;B.a=7+b+c,a+C.int(12.3%4)D.a=a+
4、7=c+b6.有以下程序: #includestdio.h int f(int n); main() int a=3,s; s=f(a);s=s+f(a); printf(“%d/n“,s); int f(int n) static int a=1; n+=a+; return n; 程序运行后的输出结果是_。(分数:1.00)A.9B.8C.7D.107.算术运算符和圆括号有不同的运算优先级,对于表达式:a+b+c*(d+e),关于执行顺序,以下说法正确的是_。(分数:1.00)A.先执行(d+e)得 r2,再执行 c*r2得 r3,再执行 a+b得 r1,最后执行 r1+r3得表达式最后结
5、果B.先执行 a+b得 r1,再执行(d+e)得 r2,再执行 c*r2得 r3,最后执行 r1+r3得表达式最后结果C.先执行(d+e)得 r2,再执行 c*r2得 r3,再执行 b+r3得 14,最后执行 a+r4得表达式最后结果D.先执行 a+b得 r1,再执行 r1+c得 r5,再执行(d+e)得 r2,最后执行 r5*r2得表达式最后结果8.下列选项中,能够满足“只要字符串 s1等于字符串 s2,则执行 ST”要求的是_。(分数:2.00)A.if(s1-s2=0)ST;B.if(s1=s2)ST;C.if(strcp)r(s1,s2)=1)ST;D.if(strcmp(s2,s1)
6、=0)ST;9.为了避免在嵌套的条件语句 if.else中产生二义性,C 语言规定:else 子句总是与_配对。(分数:2.50)A.缩排位置相同 ifB.前面最近的 ifC.其他后面后最近的 ifD.前面最近未配对的 if10.以下程序拟实现计算 s=1+2*2+3*3+n*n+,直到 s1000 为止。 #includestdio.h main() int s,n; s=1; n=1; do n=n+1;s=s+n*n; while(s1000); printf(“s=%d/n“,s); 程序运行后,不能得到正确结果,以下修改方案正确的是_。(分数:1.00)A.把 n=n+1;改为 n=
7、n*n;B.把 s=1;改为 s=0;C.把 n=1;改为 n=0;D.把 while(s1000);改为 while(s=1000);11.下列不属于软件工程的 3个要素的是 _ 。(分数:2.00)A.32具B.过程C.方法D.环境12.以下选项中关于程序模块化的叙述错误的是_。(分数:2.00)A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序B.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序13.若有以下定义和语句: #includ
8、estdio.h char s110=“abcd!“,*s2=“/n123/“; printf(“%d%d/n“,strlen(s1),strlen(s2); 则输出结果是_。(分数:1.00)A.10 7B.10 5C.5 5D.5 814.有以下程序: #includestdio.h main() int a,b; for(a=0;a3;a+) scanf(“%d“, switch(b) default:printf(“%d,“,b+1);continue; case 1:printf(“%d,“,b+1); case 2:pfintf(“%d,“,b+1);continue; 执行时输入
9、:1 2 3回车,则输出结果是_。(分数:1.00)A.2,2,3,4,4,4,B.2,3,4,C.2,2,3,4,D.2,3,3,4,5,6,15.有以下程序 #includestdio.h struct Sint n;int a20; voidf(struct S*p) int i,j,t; for(i=0;ip-n-1;i+) for(j=i+1;jp-n;j+) if(p-aip-aj)t=p-ai;p-ai=p-aj;p-aj=t; main() int i;struct S s=10,2,3,1,6,8,7,5,4,10,9; f( for(i=0;is-n;i+)printf(“
10、%d,“,s.ai); 程序运行后的输出结果是_。(分数:1.00)A.10,9,8,7,6,5,4,3,2,1,B.1,2,3,4,5,6,7,8,9,10,C.2,3,1,6,8,7,5,4,10,9,D.10,9.8,7,6,1,2,3,4,5,16.有以下程序: #include stdio.h #include string.h main() char str20=“One* World“, “One* Dream!“,* p=str1; printf(“% d,“, strlen(p); printf( “% s/n“, p); 程序运行后的输出结果是_。(分数:2.00)A.10
11、, One * Dream!B.9, One * Dream!C.9, One * WorldD.10, One * World17.以下关于指针的叙述正确是_。(分数:1.00)A.所有类型的指针变量所占内存的大小是一样的B.指针变量所占内存的大小与其类型有关,char 型指针变量只占 1个字节,double 型指针变量占 8个字节C.指针变量可直接指向任何类型的变量,而不会出现编译或运行错误D.指针变量既可以直接指向结构体,也可直接指向结构体中某个成员,而不会出现编译或运行错误18.以下程序的输出结果是_。 point(char*pt); main() char b4=“a“,“c“,“s
12、“,“f“),*pt=b; pt=point(pt); printf(“%c/n“,*pt); point(char*p) p+=3; return p; (分数:2.00)AsBcCfDa19.有下列程序段: int n, t=1, s=0; scanf(“%d“, dos=s+t; t=t-2; while(t!=n); 为使此程序段不陷入循环,从键盘输入的数据应该是_。(分数:2.50)A.任意正奇数B.任意负偶数C.任意正偶数D.任意负奇数20.以下选项中,能表示逻辑值“假”的是_。(分数:1.00)A.1B.0.000001C.0D.100.021.表示关系 abc 的 C语言表达式
13、为 _ 。(分数:1.00)A.(a=B) A; void f(A c) /*注意:c 是结构变量名 */ int j; c.b+=1; c.p+=2; main( ) int i; A a=1,2; f(a); printf(“%d,%d/n“,a.b,a.p); 程序运行后的输出结果是_。(分数:2.00)A.2,4B.1,2C.1,4D.2,323.以下叙述中正确的是 _。(分数:1.00)A.用 C程序实现的算法必须要有输入和输出操作B.用 C程序实现的算法可以没有输出但必须要输入C.用 C程序实现的算法可以没有输入但必须要有输出D.用 C程序实现的算法可以既没有输入也没有输出24.有
14、以下程序 int b=2; int func(int*A) b+*a;return(B) ; main() int a2,res2; res+=rune( else return(x); main() int a=4,b=5,c=6; printf(“%d/n“,fun(2*a,fun(b,c); 程序的运行结果是_。(分数:2.00)A.6B.3C.8D.1226.下列定义数组的语句中,正确的是_。(分数:2.00)A.int N=10;int xN;B.#define N 10int xN;C.int x010;D.int x;27.有以下程序 #includestdio.h main()
15、 FILE *fp; int i, a6=1, 2, 3, 4, 5, 6; fp=fopen(“d2.dat“, “w+“); for(i=0; i6; i+)fprintf(fp, “%d/n“, ai); rewind(fp); for(i=0; i6; i+)fscanf(fp, “%d“, fclose(fp); for(i=0; i6; i+)printf(“%d,“, ai); 程序运行后的输出结果是_。(分数:2.00)A.6, 5, 4, 3, 2, 1,B.1, 2, 3, 4, 5, 6,C.4, 5, 6, 1, 2, 3,D.1, 2, 3, 3, 2, 1,28.以
16、下程序的输出结果是 #include int a33=1,2,3,4,5,6,7,8,9,*p;main( ) p=(int *)malloc(sized(int);f(p,a) ;printf(“%d/n“,*p);free(p);f(int *s,int p 3) *s=p11; A.1 B.4 C.7 D.5A B C D D解析 本题考查了二维数组元素引用的方法。题中用动态存储分配函数 malloc分配了一个 int型数据长度大小的内存,然后指针 p指向了这段内存,函数 f( )中对 p所指向的数据进行了赋值,p11为二维数组第二行第二列的元素,对应于实参 a的元素 5,所以输出结果为
17、 5。(分数:2.00)A.1B.4C.7D.529.以下选项中不合法的标识符是 _ 。(分数:1.00)A.printB.FORC. b=c; c=a; main( ) int a=10, b=20, c=30; fun(a,b,c); printf(“%d,%d,%d/n“,c,b,a); 程序运行后的输出结果是_。(分数:2.50)A.10,20,30B.30,20,10C.20,30,10D.0,0,031.以下叙述中正确的是_。(分数:1.00)A.简单 C语句必须以分号结束B.C程序中的每一行只能写一条语句C.C语言程序中的注释必须与语句写在同一行D.C语句必须在一行内写完32.软
18、件生命周期中,花费最多的阶段是_。(分数:2.50)A.详细设计B.软件编码C.软件测试D.软件维护33.数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算以及 _ 。(分数:1.00)A.数据的存储结构B.计算方法C.数据映象D.逻辑存储34.若程序中有宏定义行: #define N 100 则以下叙述中正确的是_。(分数:1.00)A.在编译程序对 C源程序进行预处理时用 100替换标识符 NB.宏定义行中定义了标识符 N的值为整数 100C.上述宏定义行实现将 100赋给标识符 ND.在运行时用 100替换标识符 N35.下列程序的运行结果是_。 #inclu
19、destdio.h #define ADD(x) x+x main() int m=1, n=2, k=3; int s=ADD(m+n)*k; printf(“s=%d“, s); (分数:2.50)A.sum=18B.sum=10C.sum=9D.sum=2536.有以下程序 #includestdio.h main() int i,sum; for(i=1;i6;i+)sum+=i; printf(“%d/n“,sum); 程序运行后的输出结果是_。(分数:2.00)A.随机值B.0C.15D.1637.有以下程序: #include stdio.h main( ) chair ch=“
20、B“; while (ch“E“) printf(“%d“, ch-“A“); ch+; printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.123B.ABCC.abcD.01238.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是_。(分数:1.00)A.(c=2 for (;a;) b + = a; a - = + + c; printf(“%d,%d,%d/n“,a,b,c); 则程序的输出结果是_。(分数:2.50)A.1,14,3B.0,14,3C.0,18,3D.0.14,6二、程序填空题(总题数:1,分数:30.00)41.请补充 main()函
21、数,该函数的功能是:计算每个学生成绩的平均分,并把结果保存在数组 aver中。 例如,当 scoreNM=83.5, 82, 86, 65, 67, 80, 91.5, 84, 99, 95, 90.5, 95, 86, 95, 97时,3个学生的平均分为 76.7 89.9 92.7。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 main()函数的横线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #define N 3 #define M 5 void main() int i, j;
22、static float scoreNM=83.5, 82, 86, 65, 67, 80, 91.5, 84, 99, 95, 90.5, 95,86, 95, 97; float averN; system(“CLS“); for(i=0; iN; i+) 1; for(i=0; iN; i+) for(j=0; jM; j+) 2; averi/=M; for(i=0; i printf(“/nstudent%d/taverage=%5.1f, i+1, averi); averi=0 averi+=scoreij解析 由程序中可知,数组 aver中存放的是每个学生的平均成绩,其初始值应
23、该为 0,因此第一处填“averi=0”;求平均成绩的算法是先将各科成绩相加放在 aver中,再求其平均分,因此第二处填“averi+=scoreij”。(分数:30.00)三、程序修改题(总题数:1,分数:18.00)42.给定程序 MODI1.C中,函数 fun的功能是:判断输入的任何一个正整数 n,是否等于某个连续正整数序列之和。若是,则输出所有可能的序列,否则输出“不能分解”。 例如:当输入 100时,输出:100=9+10+11+12+13+14+15+16 100=18+19+20+21+22 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数
24、,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h void fun(int n) int j, b, c, m, flag=0; for(b=1; b=n/2; b+) /*found*/ n=m; c=b; while(m!=0 c+ /*found*/ if(m!=0) printf(“%d=“, n); for(j=b; jc-1; j+)printf(“%d+“, j); printf(“%d/n“, j); flag=1; if(flag=0) printf(“不能分解/n“); main() int n; printf(“请输入一个整数:“);
25、scanf(“%d“, fun(n); (分数:18.00)_四、程序设计题(总题数:1,分数:20.00)43.已知学生的记录由学号和学习成绩构成,N 名学生的数据已存入 a结构体数组中。请编写函数 fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib.h #include stdio.h #include string.h #include conio.
26、h #define N 10 typedef struct ss/*定义结构体*/ char num10; int s; STU; fun(STU a, STU*s) void main() STU aN=“A01“,81,“A02“,89,“A03“,66,“A04“,87,“A05“,77,“A06“,90,“1A07“,79,“A08“,61,“A09“,80,“A10“,71,m; int i; system(“CLS“); printf(“*The original data*“); for(i=0;iN;i+) printf(“No=%s Mark=%d/n“,ai.num,ai.
27、s); fun(a, printf(“*THE RESULT*in“); printf(“The top;%s,%d/n“,in.num,m.s); (分数:20.00)_二级 C语言模拟 639答案解析(总分:129.00,做题时间:90 分钟)一、选择题(总题数:40,分数:61.00)1.以下选项中关于 C语言常量的叙述错误的是_。(分数:1.00)A.常量可分为数值型常量和非数值型常量B.常量分为整型常量、实型常量、字符常量和字符串常量C.经常被使用的变量可以定义成常量 D.所谓常量,是指在程序运行过程中,其值不能被改变的量解析:解析 常量是在程序运行时,其值不能被改变的量,跟是否经常
28、使用没关系,所以 C错误。2.有以下程序: # include stdio.h void fun(char *c,int d) *c=*c+1,d=d+1; printf(“%c,%c“, *c,d); main() char b=“a“,a=“A“; fun(b,a);printf(“%c,%c/n“,b,a); 程序运行后的输出结果是_。(分数:1.00)A.b,B,b,A B.b,B,B,AC.a,B,B,aD.a,B,a,B解析:解析 本题考查了函数的调用。首先主函数定义了两个字符型数据 b和 a,给 b赋值为字母 a,a赋值为字母 A,调用 fun(b,a)函数,*c=*c+1,a
29、的 ASCII码值加 1后为 b,A 的 ASCII码值加 1后为B,输出第一组值,排除 C、D 选项。B 选项的值此时为小 b,排除 B选项,所以本题答案为 A。3.若 a为 int类型,且其值为 3,则执行完表达式 a+=a-=a*a后,a 的值是 _ 。(分数:1.00)A.-3B.9C.-12 D.6解析:解析 C 语言中对赋值运算的运算的运算顺序是自右向左。本题中,计算 a*a之后,a 的值依然为3,表达式 a*a的值为 9;a-=9, a=3-9=-6:a+=-6,a=-6+-6=-12。4.有以下程序 #include stdio.h main() FILE *fp; int a
30、10=1,2,3,0,0,i; fp=topen(“d2.dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2.dat“,“rb“); fread(a,sizeof(int),10,fp); fclose(fp); for(i=0;i10;i+) printf(“%d,“,ai); 程序的运行结果是_。(分数:1.00)A.1,2,3,0,0,1,2,3,0,0, B.1,2,3,1,2,3,0,0,0,0,C.123,0,0,0,0,123,0,0,0,0,D.
31、1,2,3,0,0,0,0,0,0,0,解析:解析 fwrite 函数将数组 a写入文件,写入两遍,读出后为选项 A的值,所以选择 A。5.若变量已正确定义并赋值,符合 C语言语法的表达式是(分数:2.00)A.a=a+7;B.a=7+b+c,a+ C.int(12.3%4)D.a=a+7=c+b解析:6.有以下程序: #includestdio.h int f(int n); main() int a=3,s; s=f(a);s=s+f(a); printf(“%d/n“,s); int f(int n) static int a=1; n+=a+; return n; 程序运行后的输出结果
32、是_。(分数:1.00)A.9 B.8C.7D.10解析:解析 题目中静态局部变量 a,在静态存储区内分配存储单元,在程序整个运行期间都不释放。所以第一次调用函数执行 n+=a+;时 a先与 n相加在再进行自增。n 的值为 4,a 的值为 2,且 a变量执行完后空间没有释放。再执行 s=s+f(a)时,s 的值为 4,调用 f(a)函数时 n的返回值为 n=3+2=5,且此时a的值为 3了。所以 s的值为 9。7.算术运算符和圆括号有不同的运算优先级,对于表达式:a+b+c*(d+e),关于执行顺序,以下说法正确的是_。(分数:1.00)A.先执行(d+e)得 r2,再执行 c*r2得 r3,
33、再执行 a+b得 r1,最后执行 r1+r3得表达式最后结果B.先执行 a+b得 r1,再执行(d+e)得 r2,再执行 c*r2得 r3,最后执行 r1+r3得表达式最后结果 C.先执行(d+e)得 r2,再执行 c*r2得 r3,再执行 b+r3得 14,最后执行 a+r4得表达式最后结果D.先执行 a+b得 r1,再执行 r1+c得 r5,再执行(d+e)得 r2,最后执行 r5*r2得表达式最后结果解析:解析 题意表达式中,圆括号的优先级最高,乘法运算符次之,加法运算符最低,同优先级中,加法运算符的结合性从左向右结合,所以题意中的表达式执行顺序是:先执行 a+b得 r1,再执行(d+e
34、)得r2,再执行 c*r2得 r3,最后执行 r1+r3得表达式最后结果,本题答案为 B。8.下列选项中,能够满足“只要字符串 s1等于字符串 s2,则执行 ST”要求的是_。(分数:2.00)A.if(s1-s2=0)ST;B.if(s1=s2)ST;C.if(strcp)r(s1,s2)=1)ST;D.if(strcmp(s2,s1)=0)ST; 解析:解析 在 C语言中,要对两个字符串的大小进行比较,就需要调用字符串比较函数 strcmp,如果这个函数的返回值等于 0,说明两个字符串相等,因此 D选项正确。9.为了避免在嵌套的条件语句 if.else中产生二义性,C 语言规定:else
35、子句总是与_配对。(分数:2.50)A.缩排位置相同 ifB.前面最近的 ifC.其他后面后最近的 ifD.前面最近未配对的 if 解析:10.以下程序拟实现计算 s=1+2*2+3*3+n*n+,直到 s1000 为止。 #includestdio.h main() int s,n; s=1; n=1; do n=n+1;s=s+n*n; while(s1000); printf(“s=%d/n“,s); 程序运行后,不能得到正确结果,以下修改方案正确的是_。(分数:1.00)A.把 n=n+1;改为 n=n*n;B.把 s=1;改为 s=0;C.把 n=1;改为 n=0;D.把 while
36、(s1000);改为 while(s=1000); 解析:解析 题意中,需要求得 n平方和并赋给 s,直到 s大于 1000为止。题目的程序中使用do.while()循环来实现,每次循环都是将 n自增 1后求平方,再累加给 s,while 循环条件是当 s大于1000时,才继续循环,所以本题程序的运行结果是 1+2*2=5,不是正确结果,需要将 while的循环条件:s1000 修改为 s=1000,含义是:当 s=1000 时继续循环,否则 s1000 后终止循环,本题答案为D。11.下列不属于软件工程的 3个要素的是 _ 。(分数:2.00)A.32具B.过程C.方法D.环境 解析:解析
37、软件工程包括 3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段:工具支持软件的开发、管理和文档生成:过程支持软件开发的各个环节的控制、管理。12.以下选项中关于程序模块化的叙述错误的是_。(分数:2.00)A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 B.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序解析:解析 程序模块化思想中,可以采用自顶向下、逐步细化的方法。所以选项 A中“自底向上”的说法是锗误的。13.若有以下定
38、义和语句: #includestdio.h char s110=“abcd!“,*s2=“/n123/“; printf(“%d%d/n“,strlen(s1),strlen(s2); 则输出结果是_。(分数:1.00)A.10 7B.10 5C.5 5 D.5 8解析:解析 strlen 函数返回字符串的长度,求字符串长度时,遇到结束标志/0为止,但是长度不包括结束标识。字符数组 s1的后 5个元素没有赋值,都为/0,即“abcd!”后为/0。所以strlen(s1)的值为 5。字符指针 s2所指向的字符串中,/n 为转义字符换行符,表示 1个字符,/也为转义字符,代表/,也是 1个字符,其
39、后为字符串结束标识0;所以 strlen(s2)的值也为 5。因此 C选项正确。14.有以下程序: #includestdio.h main() int a,b; for(a=0;a3;a+) scanf(“%d“, switch(b) default:printf(“%d,“,b+1);continue; case 1:printf(“%d,“,b+1); case 2:pfintf(“%d,“,b+1);continue; 执行时输入:1 2 3回车,则输出结果是_。(分数:1.00)A.2,2,3,4,4,4,B.2,3,4,C.2,2,3,4, D.2,3,3,4,5,6,解析:解析
40、continue 语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。在switch.case语句中,如果没有 break会导致多个分支重叠。因此,输入 1,2,3,则 1执行 case 1:printf(“%d,“,b+1);case 2:printf(“%d,“,b+1);continue;后结束。2 则执行 case 2:printf(“%d,“,b+1);continue;3 则执行 default:printf(“%d,“,b+1);continue;得到的结果是2,2,3,4。故答案为 C选项。15.有以下程序 #includestdio.h struct Sint n;int
41、 a20; voidf(struct S*p) int i,j,t; for(i=0;ip-n-1;i+) for(j=i+1;jp-n;j+) if(p-aip-aj)t=p-ai;p-ai=p-aj;p-aj=t; main() int i;struct S s=10,2,3,1,6,8,7,5,4,10,9; f( for(i=0;is-n;i+)printf(“%d,“,s.ai); 程序运行后的输出结果是_。(分数:1.00)A.10,9,8,7,6,5,4,3,2,1,B.1,2,3,4,5,6,7,8,9,10, C.2,3,1,6,8,7,5,4,10,9,D.10,9.8,7
42、,6,1,2,3,4,5,解析:解析 本题的子函数珀勺功能是对结构体变量 s中第二个成员数组中所有的数据进行从小到大的冒泡排序,因此结果是 B。16.有以下程序: #include stdio.h #include string.h main() char str20=“One* World“, “One* Dream!“,* p=str1; printf(“% d,“, strlen(p); printf( “% s/n“, p); 程序运行后的输出结果是_。(分数:2.00)A.10, One * Dream! B.9, One * Dream!C.9, One * WorldD.10,
43、One * World解析:解析 p 是指向二维字符数组第二行“One Dream!”的数组指针,所以长度是 10,打印输出的也是该字符串。17.以下关于指针的叙述正确是_。(分数:1.00)A.所有类型的指针变量所占内存的大小是一样的 B.指针变量所占内存的大小与其类型有关,char 型指针变量只占 1个字节,double 型指针变量占 8个字节C.指针变量可直接指向任何类型的变量,而不会出现编译或运行错误D.指针变量既可以直接指向结构体,也可直接指向结构体中某个成员,而不会出现编译或运行错误解析:解析 专门用来存放变量地址的变量称为“指针变量”,所有地址值所占字节都是一样的,故指针变量所占
44、内存大小一样,A 选项正确,B 选项错误。由于一个变量的地址(指针)还隐含有这个变量的类型信息,所以不能随意把一个地址存放到任何一个指针变量中去,只能把具有相同类型的变量的地址,存放到这个指针变量中,结构体变量与某个成员类型不同,不能用同样的指针指向它们,C、D 选项错误。18.以下程序的输出结果是_。 point(char*pt); main() char b4=“a“,“c“,“s“,“f“),*pt=b; pt=point(pt); printf(“%c/n“,*pt); point(char*p) p+=3; return p; (分数:2.00)AsBcCf Da解析:19.有下列程
45、序段: int n, t=1, s=0; scanf(“%d“, dos=s+t; t=t-2; while(t!=n); 为使此程序段不陷入循环,从键盘输入的数据应该是_。(分数:2.50)A.任意正奇数B.任意负偶数C.任意正偶数D.任意负奇数 解析:解析 本题主要考查 do-while循环,因为变量 t的初始值等于 1,经过第一次 do-while循环后,执行 t=t-1这条语句一次,所以变量 t的值为-1,判断关系表达式 t!=n是否成立,如果关系表达式成立,则执行第二次循环,如果关系表达式不成立,退出循环。由此可见,只要输入变量 n的值为负奇数,则一定会使 t!=n成立,故退出 do
46、-while循环。20.以下选项中,能表示逻辑值“假”的是_。(分数:1.00)A.1B.0.000001C.0 D.100.0解析:解析 本题考查逻辑值假,在程序中非 0字符表示逻辑真,0 表示逻辑假,所以答案选择 C。21.表示关系 abc 的 C语言表达式为 _ 。(分数:1.00)A.(a=B) A; void f(A c) /*注意:c 是结构变量名 */ int j; c.b+=1; c.p+=2; main( ) int i; A a=1,2; f(a); printf(“%d,%d/n“,a.b,a.p); 程序运行后的输出结果是_。(分数:2.00)A.2,4B.1,2 C.1,4D.2,3解析:解析 结构体变量可以作为函数的参数和返回值。作为函数的实参时,可以实现函数的传值调用。