1、二级 C 语言-79 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.算法就是程序B.设计算法时只需要考虑数据结构的设计C.设计算法时只需要考虑结果的可靠性D.以上三种说法都不对2.下列叙述中正确的是_。(分数:1.00)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结点的数据结构不一定是线性结构C.循环链表是非线性结构D.双向链表是非线性结构3.下列关于二叉树的叙述中,正确的是_。(分数:1.00)A.叶子结点总是比度为 2 的结点少一个B.叶子结点总是比度为 2 的结点多一个C
2、.叶子结点数是度为 2 的结点数的两倍D.度为 2 的结点数是度为 1 的结点数的两倍4.软件生命周期中的活动不包括_。(分数:1.00)A.市场调研B.需求分析C.软件测试D.软件维护5.某系统总体结构图如下图所示: (分数:1.00)A.7B.6C.3D.26.程序调试的任务是_。(分数:1.00)A.设计测试用例B.验证程序的正确性C.发现程序中的错误D.诊断和改正程序中的错误7.下列关于数据库设计的叙述中,正确的是_。(分数:1.00)A.在需求分析阶段建立数据字典B.在概念设计阶段建立数据字典C.在逻辑设计阶段建立数据字典D.在物理设计阶段建立数据字典8.数据库系统的三级模式不包括_
3、。(分数:1.00)A.概念模式B.内模式C.外模式D.数据模式9.有三个关系 R、S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A D c 4 T A B C D c 3 1 4 则由关系 R 和 S 得到关系 T 的操作是_。(分数:1.00)A.自然连接B.交C.投影D.并10.下列选项中属于面向对象设计方法主要特征的是_。(分数:1.00)A.继承B.自顶向下C.模块化D.逐步求精11.以下选项中关于程序模块化的叙述错误的是_。(分数:1.00)A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序B.把程序分成若干相对独立、功能单一的模块
4、,可便于重复使用这些模块C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序12.以下叙述中正确的是_。(分数:1.00)A.C 程序书写格式严格,要求一行内只能写一个语句B.C 程序书写格式自由,一个语句可以写在多行上C.C 程序中的注释只能出现在程序的开始位置和语句的后面D.用 C 语言编写的程序只能放在一个程序文件中13.以下不合法的数值常量是_。(分数:1.00)A.8.0E0.5B.1e1C.011D.0xabcd14.以下关于 C 语言数据类型使用的叙述中错误的是_。(分数:1.00)A.若只处理“真”和“假”两种
5、逻辑值,应使用逻辑类型B.若要保存带有多位小数的数据,可使用双精度类型C.若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D.整数类型表示的自然数是准确无误差的15.设有定义: int k=0; 以下选项的四个表达式中与其他三个表达式的值不相同的是_。(分数:1.00)A.+kB.k+=1C.k+D.k+116.有如下程序段: int x=12; double-y=3.141593; printf(“%d%8.6f“,x,y); 其输出结果是_。(分数:1.00)A.123.141593B.12 3.141593C.12,3.141593D.123.141593017.已知字
6、符 A 的 ASCII 代码值是 65,字符变量 c1 的值是 A,c2 的值是 D。则执行语句printf(“%d,%d“,c1,c2-2);的输出结果是_。(分数:1.00)A.A,68B.65,66C.A,BD.65,6818.以下选项中,当 x 为大于 1 的奇数时,值为 0 的表达式是_。(分数:1.00)A.x%2=1B.x/2C.x%2!=0D.x%2=019.有以下程序 #include stdio.h main() int x; scanf(“%d“, if(x=3);else if(x!=10) printf(“%d/n“,x); 程序运行时,输入的值在哪个范围才会有输出结
7、果_。(分数:1.00)A.大于 3 且不等于 10 的整数B.不等于 10 的整数C.大于 3 或等于 10 的整数D.小于 3 的整数20.有以下程序 #include stdio.h main() int a=7; while(a-); printf(“%d/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.-1B.0C.1D.721.有以下程序 #include stdio.h main() char b,c; int i; b=“a“; c=“A“; for(i=0;i6;i+) if(i%2) putchar(i+b); else putchar(i+c); print
8、f(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.aBcDeFB.ABCDEFC.AbCdEfD.abcdef22.有以下程序 #include stdio.h main() int i,j,x=0; for(i=0;i2;i+) x+; for(j=0;j=3;j+) if(j%2) continue; x+; x+; printf(“x=%d/n“,x); 程序执行后的输出结果是_。(分数:1.00)A.x=8B.x=4C.x=6D.x=1223.有以下程序 #include stdio.h double f(double x); main() double a=0; in
9、t i; for(i=0;i30;i+=10) a+=f(double)i); printf(“%3.0f/n“,a); double f(double x) return x*x+1; 程序运行后的输出结果是_。(分数:1.00)A.401B.503C.500D.140424.若有以下函数首部 int fun(double x10,int*n) 则下面针对此函数的函数声明语句中正确的是_。(分数:1.00)A.int fun(double*,int*);B.int fun(double,int);C.int fun(double *x,int n);D.int fun(double x,in
10、t *n);25.有以下程序 #include stdio.h main() int m=1,n=2,*p= r=p;p=q;q=r; printf(“%d,%d,%d,%d/n“,m,n,*p,*q); 程序运行后的输出结果是_。(分数:1.00)A.2,1,2,1B.1,2,1,2C.1,2,2,1D.2,1,1,226.若有以下定义 int x10,*pt=x; 则对 x 数组元素的正确引用是_。(分数:1.00)A.pt+3B.* for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.25B.20C.
11、45D.3628.有以下程序 #include stdio.h #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+) bi=aii; main() int xN=1,2,3,4,5,6,7,8,9,10,yN,i; fun(x,y); for(i=0;iN;i+) printf(“%d,“,yi); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.1,0,7,0,B.1,2,3,4,C.1,4,5,9,D.3,4,8,10,29.以下选项中正确的语句组是_。(分数:1.00)A.char *s;s=“BOOK!“
12、);B.char *s;s=“BOOK!“;C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;30.若有以下定义和语句 #include stdio.h char s110=“abcd!“,*s2=“/n123/“; printf(“%d%d/n“,strlen(s1),strlen(s2); 则输出结果是_。(分数:1.00)A.10 7B.10 5C.5 5D.5 831.有以下程序 #include stdio.h void fun1(char *P) char *q; q=p; while(*q!=“/0“) (*q)+; q+; main() char
13、a=“Program“,*p; p= fun1(p); printf(“%s/n“,a); 程序执行后的输出结果是_。(分数:1.00)A.ProhsbnB.PrphsbnC.ProgsbnD.Program32.有以下函数 int aaa(char *s) char *t=s; while(*t+); t-; return(t-s); 以下关于 aaa 函数功能叙述正确的是_。(分数:1.00)A.求字符串 s 的长度B.比较两个串的大小C.将串 s 复制到串 tD.求字符串 s 所占字节数33.有以下程序 #include stdio.h int fun(int a,int b) if(b
14、=0) return a; else return(fun(-a,-b); main() printf(“%d/n“,fun(4,2); 程序的运行结果是_。(分数:1.00)A.1B.2C.3D.434.以下选项中叙述错误的是_。(分数:1.00)A.C 程序函数中定义的赋有初值的静态变量,每调用一次函数赋一次初值B.在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内C.C 程序函数中定义的自动变量,系统不自动赋确定的初值D.C 程序函数的形参不可以说明为 static 型变量35.有以下程序段 struct st int x; int *y; *pt; int a
15、=1,2,b=3,4; struct st c2=10,a,20,b; pt=c; 以下选项中表达式的值为 11 的是_。(分数:1.00)A.+pt-xB.pt-xC.*pt-yD.(pt+)-x36.有以下程序 #include stdio.h struct S int n;int a20; void f(int *a,int n) int i; for(i=0;in-1;i+) ai+=i; main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(s.a,s.n); for(i=0;is.n;i+) printf(“%d,“,s.ai);
16、程序运行后的输出结果是_。(分数:1.00)A.1,2,3,6,8,7,5,4,10,9,B.3,4,2,7,9,8,6,5,11,10,C.2,3,1,6,8,7,5,4,10,9,D.2,4,3,9,12,12,11,11,18,9,37.有以下程序 #include stdio.h #include string.h typedef struct char name9;char sex;float score2; STU; void f(STU a) STU b=“Zhao“,“m“,85.0,90.0; int i; strcpy(a.name,b.name); a.sex=b.sex
17、; for(i=0;i2;i+) a.scorei=b.scorei; main() STU c=“Qian“,“f“,95.0,92.0; f(c); printf(“%s,%c,%2.0f,%2.0f/n“,c.name,c.sex,c.score0,c.score1); 程序的运行结果是_。(分数:1.00)A.Qian,f,95,92B.Qian,m,85,90C.Zhao,f,95,92D.Zhao,m,85,9038.有以下程序 #include stdio.h #define f(x) x*x*x main() int a=3,s,t; s=f(a+1); t=f(a+1); p
18、rintf(“%d,%d/n“,s,t); 程序运行后的输出结果是_。(分数:1.00)A.10,64B.10,10C.64,10D.64,6439.有以下程序 #include stdio.h main() char a=4; printf(“%d/n“,a=a1); 程序的运行结果是_。(分数:1.00)A.40B.16C.8D.440.设文件指针 fp 已定义,执行语句“fp=fopen(“file“,“w“);”后,以下针对文本文件 file 操作叙述的选项中正确的是_。(分数:1.00)A.写操作结束后可以从头开始读B.只能写不能读C.可以在原有内容后追加写D.可以随意读和写二、程序
19、填空题(总题数:1,分数:20.00)41.给定程序中,函数 fun 的功能是:计算下式前 n 项的和作为函数值返回。 (分数:20.00)三、程序改错题(总题数:1,分数:20.00)42.给定程序 MODI1.C 中函数 fun 的功能是:判断一个整数是否是素数,若是返回 1,否则返回 0。在main 函数中,若 fun 返回 1 则输出“YES”,若 fun 返回 0 则输出“NO!”。 请改正程序中的错误,使该程序能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include stdio.h int fun(int m) in
20、t k=2; while(k=m else return 0: main() int n; printf(“/nPlease enter n;“); scanf(“%d“, if(fun(n) printf(“YES/n“); else printf(“NO!/n“); (分数:20.00)_四、程序设计题(总题数:1,分数:20.00)43.请编写一个函数 fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。 主函数中 x 是数组名,n 是 x 中的数据个数,max 存放最大值,index 存放最大值所在元素的
21、下标。 注意:部分源程序存在文件 PROG1.C 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入编写的若干语句。 给定源程序: #include stdlib.h #include stdio.h void fun(int a,int n,int *max,int *d) main() int i,x20,max,index,n=10; for(i=0;in;i+) xi=rand()%50; printf(“%4d“,xi); printf(“/n“); iun(x,n, printf(“Max=%5d,Index=%4d/n“,max,index)
22、; (分数:20.00)_二级 C 语言-79 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.算法就是程序B.设计算法时只需要考虑数据结构的设计C.设计算法时只需要考虑结果的可靠性D.以上三种说法都不对 解析:解析 算法是指解题方案的准确而完整的描述,算法既不等于程序,也不等于计算方法,因此 A错误。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构,因此 B 和 C 错误。2.下列叙述中正确的是_。(分数:1.00)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结
23、点的数据结构不一定是线性结构 C.循环链表是非线性结构D.双向链表是非线性结构解析:解析 线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,也最多有一个后件,因此 B 正确。因为有一个以上根结点的数据结构一定是非线性结构,所以 A 错误。循环链表和双向链表都是线性结构的数据结构。3.下列关于二叉树的叙述中,正确的是_。(分数:1.00)A.叶子结点总是比度为 2 的结点少一个B.叶子结点总是比度为 2 的结点多一个 C.叶子结点数是度为 2 的结点数的两倍D.度为 2 的结点数是度为 1 的结点数的两倍解析:解析 根据二叉树的基本性质 3:在任意一棵二叉树中,度为 0 的叶子结点总是
24、比度为 2 的结点多一个,因此答案为 B。4.软件生命周期中的活动不包括_。(分数:1.00)A.市场调研 B.需求分析C.软件测试D.软件维护解析:解析 软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶段。主要活动包括:可行性研究与计划、需求分析、软件设计、软件实现、软件测试、运行和维护,因此本题答案为 A。5.某系统总体结构图如下图所示: (分数:1.00)A.7B.6C.3 D.2解析:解析 根据总体结构图可以看出该树的深度为 3,比如:XT 系统功能 2功能 2.1,就是最深的度数的一个表现,因此本题答案为 C。6.程序调试的任务是_。(分数:1.00)A.设计测试用例B.验
25、证程序的正确性C.发现程序中的错误D.诊断和改正程序中的错误 解析:解析 程序调试的任务是诊断和改正程序中的错误,因此本题答案为 D。7.下列关于数据库设计的叙述中,正确的是_。(分数:1.00)A.在需求分析阶段建立数据字典 B.在概念设计阶段建立数据字典C.在逻辑设计阶段建立数据字典D.在物理设计阶段建立数据字典解析:解析 数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实和完善的,因此选择 A。8.数据库系统的三级模式不包括_。(分数:1.00)A.概念模式B.内模式C.外模式D.数据模式 解析:解析 数据库系统的三级模式是概念模式、外模式和内模式,不包括数据模式,因此选择
26、D。9.有三个关系 R、S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A D c 4 T A B C D c 3 1 4 则由关系 R 和 S 得到关系 T 的操作是_。(分数:1.00)A.自然连接 B.交C.投影D.并解析:解析 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,因此根据 T 中元组可以判断关系 R 和 S 做的是自然连接操作,答案为A。10.下列选项中属于面向对象设计方法主要特征的是_。(分数:1.00)A.继承 B.自顶向下C.模块化D.逐步求精解析:解析 面向对象设计方法的基本
27、概念有对象、类和实例、消息、继承与多态性,因此选择 A。11.以下选项中关于程序模块化的叙述错误的是_。(分数:1.00)A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 B.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序解析:解析 采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序,所以 A 错误。12.以下叙述中正确的是_。(分数:1.00)A.C 程序书写格式严格,要求一行内只能写一个语句B.C 程序书写格式自由,一个
28、语句可以写在多行上 C.C 程序中的注释只能出现在程序的开始位置和语句的后面D.用 C 语言编写的程序只能放在一个程序文件中解析:解析 C 程序书写格式自由,A、C、D 错误。13.以下不合法的数值常量是_。(分数:1.00)A.8.0E0.5 B.1e1C.011D.0xabcd解析:解析 E 前 E 后有数字,E 后数字为整数,所以 A 错误。14.以下关于 C 语言数据类型使用的叙述中错误的是_。(分数:1.00)A.若只处理“真”和“假”两种逻辑值,应使用逻辑类型 B.若要保存带有多位小数的数据,可使用双精度类型C.若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D.
29、整数类型表示的自然数是准确无误差的解析:解析 C 语言不存在逻辑类型,所以 A 错误。单精度 float 类型可提供 6 位有效数字,双精度double 类型可提供 16 位有效数字,所以要保存带有多位小数的数据,要使用双精度类型,所以 B 选项正确。结构体类型可以保存不同类型数据,所以 C 正确,整数的表示是不存在误差的,所以 D 选项正确。15.设有定义: int k=0; 以下选项的四个表达式中与其他三个表达式的值不相同的是_。(分数:1.00)A.+kB.k+=1C.k+ D.k+1解析:解析 k+表达式值为 k 的值,其余为 k+1 的值。所以 C 错误。16.有如下程序段: int
30、 x=12; double-y=3.141593; printf(“%d%8.6f“,x,y); 其输出结果是_。(分数:1.00)A.123.141593 B.12 3.141593C.12,3.141593D.123.1415930解析:解析 x 和 y 之间没有间隔符,%8.6f 表示占据 8 个字符,小数点后有 6 位,所以答案为 A。17.已知字符 A 的 ASCII 代码值是 65,字符变量 c1 的值是 A,c2 的值是 D。则执行语句printf(“%d,%d“,c1,c2-2);的输出结果是_。(分数:1.00)A.A,68B.65,66 C.A,BD.65,68解析:解析
31、在 C 语言中,字符型数据在内存中的存储形式是 ASCII 码值。当需要以整型格式输出字符时,输出的也是 ASCII 码值。字符“A“和“D“的 ASCII 码值分别为 65 和 68。18.以下选项中,当 x 为大于 1 的奇数时,值为 0 的表达式是_。(分数:1.00)A.x%2=1B.x/2C.x%2!=0D.x%2=0 解析:解析 x 为大于 1 的奇数,x%2 的值为 1,x%2=0 为假,所以选择 D。19.有以下程序 #include stdio.h main() int x; scanf(“%d“, if(x=3);else if(x!=10) printf(“%d/n“,x
32、); 程序运行时,输入的值在哪个范围才会有输出结果_。(分数:1.00)A.大于 3 且不等于 10 的整数 B.不等于 10 的整数C.大于 3 或等于 10 的整数D.小于 3 的整数解析:解析 大于 3 执行 else 语句,不等于 10,就会输出 x 的值,所以选择 A。20.有以下程序 #include stdio.h main() int a=7; while(a-); printf(“%d/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.-1 B.0C.1D.7解析:解析 当 a 为 0 时,a-表达式为 0,条件为假,循环结束,执行判断条件后 a 为-1,所以选择
33、A。21.有以下程序 #include stdio.h main() char b,c; int i; b=“a“; c=“A“; for(i=0;i6;i+) if(i%2) putchar(i+b); else putchar(i+c); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.aBcDeFB.ABCDEFC.AbCdEf D.abcdef解析:解析 i 为奇数,输出小写字符“a“加 i,i 为偶数,输出大写字符“A“加 i。答案选择 C。22.有以下程序 #include stdio.h main() int i,j,x=0; for(i=0;i2;i
34、+) x+; for(j=0;j=3;j+) if(j%2) continue; x+; x+; printf(“x=%d/n“,x); 程序执行后的输出结果是_。(分数:1.00)A.x=8 B.x=4C.x=6D.x=12解析:解析 本题考查的是 for 循环的嵌套。外循环的循环变量 i 从 0 递增到 1 会循环两次,内循环的循环变量 j 从 0 递增到 3 会循环 4 次。但是内循环中有一条 if 语句,每当 j%2 为真,即 j 为奇数时会跳过下面的 x+;语句,所以 4 次内循环只有两次执行到 x+;语句,再加上外循环中包含的两条 x+;语句,所以每次外循环会使 x 自增 4 次,
35、两次外循环后 x 的值为 8。故应该选择 A。23.有以下程序 #include stdio.h double f(double x); main() double a=0; int i; for(i=0;i30;i+=10) a+=f(double)i); printf(“%3.0f/n“,a); double f(double x) return x*x+1; 程序运行后的输出结果是_。(分数:1.00)A.401B.503 C.500D.1404解析:解析 for 循环进入循环体的 i 分别为 0、10、20,调用 f 函数返回分别为 1、101、401,累加为503,所以选择 B。24
36、.若有以下函数首部 int fun(double x10,int*n) 则下面针对此函数的函数声明语句中正确的是_。(分数:1.00)A.int fun(double*,int*); B.int fun(double,int);C.int fun(double *x,int n);D.int fun(double x,int *n);解析:解析 本题考查的是函数的声明。函数声明的一般形式为: 函数类型 函数名(参数类型 1,参数名 1,参数类型 2,参数名 2); 其中,参数名可以省略。本题中的 fun 函数有两个参数,一个类型是 double 型一维数组,另一个是 int型指针。而在 C 语
37、言中,一维数组用作函数参数和该数组元素的指针类型是等价的。所以本题的正确答案是选项 A。25.有以下程序 #include stdio.h main() int m=1,n=2,*p= r=p;p=q;q=r; printf(“%d,%d,%d,%d/n“,m,n,*p,*q); 程序运行后的输出结果是_。(分数:1.00)A.2,1,2,1B.1,2,1,2C.1,2,2,1 D.2,1,1,2解析:解析 m 和 n 值不变化,p 和 q 的指向发生交换,p 指向 n,q 指向 m,所以答案选择 C。26.若有以下定义 int x10,*pt=x; 则对 x 数组元素的正确引用是_。(分数:
38、1.00)A.pt+3B.* for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.25 B.20C.45D.36解析:解析 本题考查的是数组名的概念。当数组名出现在表达式中时,它类似于一个指针常量,该指针始终指向该数组第 1 个元素的位置,它的指向不能被改变。但它又与普通的指针常量有所区别:对数组名使用 sizeof 运算符时,得到整个数组所占内存的大小;而对于指针常量,返回的始终是 2(一个指针占2 个字节的内存)。所以,要获得数组 t 的第 i 个元素的内容,既可以使用常规的 ti表达式,也可以将数组名
39、 t 看作一个指针常量,使用表达式*(t+i)来获取数组 t 的第 i 个元素的内容。在本题中,for 循环会循环 5 次,循环变量 i 从 0 开始每次增加 2,所以 s=t0+t2+t4+t6+t8=25。28.有以下程序 #include stdio.h #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+) bi=aii; main() int xN=1,2,3,4,5,6,7,8,9,10,yN,i; fun(x,y); for(i=0;iN;i+) printf(“%d,“,yi); printf(“/n“); 程序的运行结
40、果是_。(分数:1.00)A.1,0,7,0, B.1,2,3,4,C.1,4,5,9,D.3,4,8,10,解析:解析 本题考查的是二维数组的定义、赋初值和对二维数组元素的引用。分析程序可知,函数fun()中的 for 循环作用,是将数组前 4 行中的对角线上的元素,即 a00、a11、a22和 a33分别赋到 b0、b1、b2、b3中。在主函数中首先定义了一个 4 行 4 列的二维数组 x,并初始化为1,2,3,4,5,6,7,8,9,10。然后调用 fun()函数,将 x 的对角线元素赋给一维数组 y。接着通过循环输出数组 y 中的值。从数组 x 的初始化列表中我们可以看出,这 4 个值
41、依次为 1,0,7,0。29.以下选项中正确的语句组是_。(分数:1.00)A.char *s;s=“BOOK!“);B.char *s;s=“BOOK!“; C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;解析:解析 字符指针可以用字符串常量赋值,字符数组不可以,所以答案选择 B。30.若有以下定义和语句 #include stdio.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解
42、析:解析 s1 的长度为 5,s2 字符串末尾“/”表示一个字符,所以长度也为 5,答案选择 C。31.有以下程序 #include stdio.h void fun1(char *P) char *q; q=p; while(*q!=“/0“) (*q)+; q+; main() char a=“Program“,*p; p= fun1(p); printf(“%s/n“,a); 程序执行后的输出结果是_。(分数:1.00)A.Prohsbn B.PrphsbnC.ProgsbnD.Program解析:解析 函数 fun1 功能是将字符串中元素加 1,main 函数将数组第 4 个元素的指针
43、传进 fun1 函数中,所以答案选择 A。32.有以下函数 int aaa(char *s) char *t=s; while(*t+); t-; return(t-s); 以下关于 aaa 函数功能叙述正确的是_。(分数:1.00)A.求字符串 s 的长度 B.比较两个串的大小C.将串 s 复制到串 tD.求字符串 s 所占字节数解析:解析 本题考查的知识点是:while 循环的简单应用。aaa()函数中,首先定义了一个字符指针 t指向形参 s,然后通过一个 while 循环让指针 t 不断递增,直到 t 指向字符串结束标志处。当 t 指向结束标志处时,由于后缀+运算符的原因,它还会被再递增
44、 1,所以接下来的 t-语句让它回到结束标志处。最后返回 t-s,因为 s 还是指向字符串第 1 个字符处,而 t 指向了字符串结尾,故返回值为字符串的长度值。33.有以下程序 #include stdio.h int fun(int a,int b) if(b=0) return a; else return(fun(-a,-b); main() printf(“%d/n“,fun(4,2); 程序的运行结果是_。(分数:1.00)A.1 B.2C.3D.4解析:解析 递归调用到 b=0 时,执行 return a,此时 a 为 2,所以选择 A。34.以下选项中叙述错误的是_。(分数:1.
45、00)A.C 程序函数中定义的赋有初值的静态变量,每调用一次函数赋一次初值B.在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内 C.C 程序函数中定义的自动变量,系统不自动赋确定的初值D.C 程序函数的形参不可以说明为 static 型变量解析:解析 静态变量只赋值一次,下一次调用,还是使用上次遗留的值。答案选择 B。35.有以下程序段 struct st int x; int *y; *pt; int a=1,2,b=3,4; struct st c2=10,a,20,b; pt=c; 以下选项中表达式的值为 11 的是_。(分数:1.00)A.+pt-x B.pt-xC.*pt-yD.(pt+)-x解析:解析 pt-x 值为 10,-优先级高于+,前置+表达式的值为加 1 之后的值,所以选择 A。36.有以下程序 #include stdio.h struct S int n;int a20; void f(int *a,int n) int i; for(i=0;in-1;i+) ai+=i; main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(s.a,s.n); for(i=0;is.n;i+) printf(“%d,“,s.ai)