2006年4月全国计算机等级考试二级C语言笔试试题及解析

更新时间:2024-05-07 06:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2006年4月全国计算机等级考试二级C语言笔试试卷

一、选择题( (1)-(10)每题2分,(11)-(50)每题1分,共60分)

下列各题四个选项中,只有一个选项是正确的,请选出正确答案 (1) 下列选项中不属于结构化程序设计方法的是0001 A)自顶向下 B)逐步求精 C)模块化 D)可复用

(2) 两个或两个以上模块之间关联的紧密程度称为1000 A)耦合度 B)内聚度 C)复杂度 D)数据传输特性 (3) 下列叙述中正确的是0001

A)软件测试应该由程序开发者来完成 B)程序经调试后一般不需要再测试 C)软件维护只包括对程序代码的维护 D)以上三种说法都不对

(4) 按照“后进先出”的原则组织数据的数据结构是0100 A)队列 B)栈 C)双向链表 D)二叉树 (5) 下列叙述中正确的是1000

A)线性链表是线性表的链式存储结构 B)栈与队列是非线性结构 C)双向链表是非线性结构

D)只有根结点的二叉树是线性结构 (6)对如下二叉树0001

1

进行后序遍历的结果为

A)ABCDEF B)DBEAFC C)ABDECF D)DEBFCA

(7)在深度为7的满二叉树中,叶子结点的个数为0010 A)32 B)31 C)64 D)63 (8)“商品”与“顾客”两个实体集之间的联系一般是0001 A)一对一 B)一对多 C)多对一 D)多对多 (9)在E-R图中,用来表示实体的图形是0100 A)矩形 B)椭圆形 C)菱形 D)三角形

(10)数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是0010 A)DB包含DBS和DBMS B)DBMS包含DB和DBS C)DBS包含DB和DBMS D)没有任何关系 (11)以下不合法的用户标识符是0100

A)j2_Key B)Double C)4d D)_8_ (12) 以下不合法的数值常量是0010

A)011 B)1e1 C)8.0E0.5 D)0xabcd (13) 以下不合法的字符常量是1000

A)'\\018' B)'\\\ C)'\\\\' D)'\\xcc' (14)表达式3.6-5/2+1.2+5%2的值是0001

A)4.3 B)4.8 C)3.3 D)3.8 (15)以下能正确定义字符串的语句是0001

A)char str[]={'\\064'}; B) char str=\ C) char str=\ D) char str[]=\(16) 以下数组定义中错误的是0100

A)int x[][3]={0}; B) int x[2][3]={{1,2},{3,4},{5,6}}; C) int x[][3]= {1,2,3},{4,5,6}; D) int x[2][3]={1,2,3,4,5,6}; (17) 若要求从键盘读入含有空格字符的字符串,应使用函数0100

2

A)getc() B)gets() C)getchar() D)scanf() (18)以下四个程序中,完全正确的是0100

A)#include〈stdio.h〉 B)#include〈stdio.h〉 main(); main()

{/*programming*/ {/*/programming/*/ printf(\ printf(\ C) #include〈stdio.h〉

D) include〈stdio.h〉

main()

main()

{/*/*programming*/*/ {/*programming*/ printf(\

printf(\

(19) 若有定义: flot x=1.5; int a=1,b=3,c=2; 则正确的switch语句是0010 A) switch(x) B) switch((int)x); {case 1.0: printf(\ {case 1: printf(\case 2.0: printf(\

case 2: printf(\

C) switch(a+b) D) switch(a+b) {case 1: printf(\

{case 1: printf(\

case 2+1: printf(\

case c: printf(\

(20) 值,以下选项中错误的程序是若各选项中所用变量已正确定义1000 ,函数fun中通过return语句返回一个函数A) main() B) float fun(int a,int b){??} {??x=fun(2,10); ??}

main()

float fun(int a,int b){ ??} {??x=fun(I,j); ??}

C) float fun(int, int); D) main()

main()

float fun(int i,int j);

{??x=fun(2,10); ??} ??x=fun(i,j); ??} float fun(int a,int b){ ??} float fun(int a,int b){ ??} (21) 在以下给出的表达式中,与while(E)不等价的表达式是0010 A)(!E==0) B)(E>0‖E<0) C)(E==0) D)(E!=0)

3

(22)要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义以下正确的程序段是:1000

A)while((ch=getchar())!='N')printf(\%c\,ch); B)while(ch=getchar()!=\C)while(ch=getchar()=='N')printf(\ D)while((ch=getchar())=='N')printf(\

(23)已定义以下函数0100 int fun(int *p) { return *p; } fun 函数返回值是

A)不确定的值 B)一个整数 C)形参p中存放的值 D)形参p的地址值

(24)若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序是:0001

A)*p=&a; scanf(\ B)*p=&a; scanf(\C)p=&a; scanf(\ D)p=&a; scanf(\

(25)现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中继续的三个结点。0001 struct node {char data;

struct node *next; }*p,*q,*r,

data next data next A data next data next B data next data next C p q r 交换前后位置,同时要保持链表的连续以下不能完成此操作的语句是: A)q->next=r->next;p->next=r,r->next=q;

将和所结要qr指点

4

B)p->next=r;q->next=r->next;r->next=q; C)q->next=r->next;r->next=q;p->next=r; D)r->next=q;p->next=r;q->next=r->next; (26)有以下程序段0010 struct st

{int x; int *y;}*pt; int a[]={1,2},b[]={3,4]; struct st c[2]={10,a,20,b}; pt=c;

以下选项中表达式的值为11的是:

A)*pt->y B)pt->x C)++pt->x D)(pt++)->x

(27)设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为:0100

A)EOF B)非0值 C)0 D)NULL (28)设有以下语句0001 int a=1,b=2,c; c=a^(b<<2); 执行后,c的值为

A)6 B)7 C)8 D)9

(29)有以下程序0001 #include main()

{char c1,c2,c3,c4,c5,c6; scanf(\ c5=getchar(); c6=getchar(); putchar(c1); putchar(c2);

5

printf(\}

程序运行后,若从键盘输入(从第1列开始) 123<回车> 45678<回车> 则输出结果是

A)1267 B)1256 C)1278 D)1245

(30)有以下程序0100 main() {int y=10;

while(y--); printf(\}

程序执行后的输出结果是

A)y=0 B)y=-1 C)y=1 D)while构成无限循环

(31)有以下程序0001 main()

{int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3;

printf(\} 程序输出

A)0,1,2,0 B)0,0,0,3 C)1,1,2,0 D)编译有错

6

(32)有以下程序0100 main() {int i,j,x=0; for(i=0;i<2;i++) { x++;

for(j=0;j<=3;j++) { if(j%2) conture; x++; } x++; }

printf(\}

程序执行后的输出结果是

A)x=4 B)x=8 C)x=6 D)x=12

(33)有以下程序0100

int fun1(double a){retrun a*=a;} int fun2(double x,double y) {double a=0,b=0;

a=fun1(x); b=fun1(y); return(int)(a+b); } main()

{double w; w=fun2(1.1,2.0);??} 程序执行后变量w中的值是:

A)5.21 B)5 C)5.0 D)0.0

7

(34)有以下程序0100 main()

{int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf(\}

程序执行后的输出结果是:

A)7 5 3 B)3 5 7 C)3 6 9 D)7 5 1

(35)有以下程序0100 fun(char p[][10]) {int n=0,i; for(i=0;i<7;i++) if(p[i][0]=='T')n++; return n; } main()

{char str[][10]={\ printf(\}

程序执行后的输结果是:

A)1 B)2 C)3 D)0

8

(36)有以下程序0010 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(\}

程序执行后的输出结果是:

A)45 B)20 C)25 D)36

(37)有以下程序1000 void fun1(char *p) {char *q; q=p;

while(*q!='\\0') { (*q)++; q++; } } main()

{char a[]={\

p=&a[3]; fun1(p); printf(\}

程序执行后的输出结果是:

A)Prohsbn B)Prphsbn C)Progsbn (38)有以下程序0010 void swap(char *x,char *y) {char t;

t=*x; *x=*y; *y=t; } main()

D)Program 9

{char *s1=\

swap(s1,s2); printf(\}

程序执行后的输出结果是:

A)123,abc B)abc,123 C)1bc,a23 D)321,cba (39)有以下程序1000 int fun(int n) {if(n==1)return 1; else

return(n+fun(n-1)); } main() {int x;

scanf(\}

执行程序时,给变量x输入10,程序的输出结果是: A)55 B)54 C)65 D)45

(40)有以下程序0010 int fun(int x[],int n) {static int sun=0,i;

for(i=0;i

10

main()

{int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0; s=fun(a,5)+fun(b,4); printf(\}

程序执行后的输出结果是:

A)45 B)50 C)60 D)55

41)有以下程序 1000 main() { union { char ch[2]; int d; }s; s.d=0x4321;

printf(“%x,%x\\n”,s.ch[0],s.ch[1]); }

在16位编译系统上,程序执行后的输出结果是 A)21,43 B)43,21 C)43,00 D)21,00 (42)有以下程序0010 main()

{char *p[]={\ int i,j; long num=0; for(i=0;i<2;i++) {j=0;

11

while(p[i][j]!='\\0')

{ if((p[i][j]-'0'(%2)num=10*num+p[i][j]-'0'; j+=2; } }

printf(\}

程序执行后的输出结果是:

A)35 B)37 C)39 D)3975

(43)执行以下程序后,test.txt文件的内容是(若文件能政党打开)1000 include main() {FILE *fp;

char *s1=\ if((fp=fopen(\

{printf(\

fwrite(s1,7,1,fp); /*把从地址s1开始的7个字符写到fp所指文件中*/

fseek(fP,OL,SEEK_SET);/*文件位置指针移到文件开头*/ rwrite(s2,5,1,fp); fclose(fp); }

A)Basican B)BasicFortran C)Basic D)FortranBasic (44)以下叙述中错误的是:0001

A)C语言源程序经编译后生成后缀为.obj的目标程序

B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中 D)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指

12

(45)以下叙述中错误的是:0100 A)算法正确的程序最终一定会结束 B)算法正确的程序可以有零个输出 C)算法正确的程序可以有零个输入

D)算法正确的程序对于相同的输入一定有相同的结果 (46)以下叙述中错误的是:0001 A)C程序必须由一个或一个以上的函数组成 B)函数调用可以作为一个独立的语句存在 C)若函数有返回值,必须通过return语句返回 D)函数形参的值也可以传回给对应的实参 (47)设有以下定义和语句:1000 char str[20]=\ p=str;

则以下叙述中正确的是: A)*p与str[0]中的值相等 B)str与p的类型完全相同

C)str数组长度和p所指向的字符串长度相等

D)数组str中存放的内容和指针变量p中存放的内容相同 (48)以下叙述中错误的是:0001

A)C程序中的#include和#define行均不是C语句 B)除逗号运算符外,赋值运算符的优先级最低 C)C程序中,j++;是赋值语句

D)C程序中,+、-、*、/、%是算术运算符,可用于整形和实型数的运算(49)以下叙述中正确的是:0100

A)预处理命令行必须位于C源程序的起始位置 B)在C语言中,预处理命令行都以“#”开头

C)每个C程序必须在开头包含预处理命令行:# include

13

D)C语言的预处理不能实现宏定义和条件编译的功能 (50)以下叙述中错误的是:1000 A)可以通过typedef增加新的类型

B)可以用typedef将已存在的类型用一个新的名字来代表 C)用typedef定义新的类型名后,原有类型名仍有效 D)用typedef可以为各种类型起别名,钽不能为变量起别名 二、填空题(每空2分,共40分)

(1)对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为 【1】 。

(2)在面向对象方法中 【2】 描述的是具有相似属必与操作的一组对象。 (3)在关系模型中,把数据看成是二维表,每一个二维表称为一个 【3】 。 (4)程序测试分为静态分析和动态测试。其中 【4】 是指不执行程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。 (5)数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为 【5】 。 (6)若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的输出语句 【6】; 。

(7)以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。当a、b、c输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,b+c>a。请填空。 main() {float a,b,c;

scanf(\

if( 【7】 )printf(\、b、c能构成三角形*/ else printf(\、b、c不能构成三角形*/ }

(8)以下程序的输出结果是 【8】 。 main()

{ int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},is,s=0; for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];

14

printf(\}

(9)当运行以下程序时,输入abcd,程序的输出结果是: 【9】 。 insert(char str[]) {int i;

i=strlen(str); while(i>0)

{str[2*i]=str[i]; str[2*i-1]='*'; i-- } printf(\} main()

{char str[40];

scanf(\}

(10)下面程序的运行结果 是: 【10】 fun(int t[],int n) {int I,m;

if(n==1) return t[0]; else

if(n>=2) {m=fun(t,n-1); return m; }

} main()

{int a[]={11,4,6,3,8,2,3,5,9,2}; printf(“%d\\n”,fun(a,10)); }

T18.c(11) 文件如下:现有两个C 程序文件T18.c和myfun.c同在TC系统目录(文件夹)下,其中#include #include “myfun.c”

15

main()

{ fun(); printf(“\\n”);} myfun.c文件如下: void fun()

{char s[80],c; int n=0;

while((c=getchar())!=’\\n’) s[n++]=c; n--;

while(n>=0) printf(“%c”,s[n-1]); }

当编译连接通过后,运行程序T18时,输入Thank!则输出结果是:【11】 。 (12) 以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址,例如:str所指字符串为:Hello!,c中的字符为e,则函数返回字符串:ello! 的首地址。若str所指字符串为空串或不包含c中的字符,则函数返回NULL。请填空。

char *fun(char *str,char c) { int n=0; char *p=str; inf(p!=NULL)

while(p[n]!=c&&p[n]!=’\\0’)n++; if(p[n]==’\\0’) retrun NULL; retrun(【12】 ); }

(13) 以下程序的功能是:输出100以内(不含100)能被3整除且个位数为6的所有整数,请填空。 main() {int i,j;

for(i=0; (【13】 );i++) { j=i*10+6;

if((【14】 )continue; printf(“%d”,j); }

16

}

(14) 以下isprime函数的功能是判断形形参a是否为素数,是素数,函数返回1,否则返回0。请填空。 Int isprime(int a) {int i;

for(i=2;i<=a/2;i++)

if(a%i= = 0)(【15】 ); (【16】 ); }

(15) 以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。例如,输入整数5时(注意:n不得大于10),程序运行结果如下: ABCDE FGHI JKL MN O

请填空完成该程序。 main()

{int i,j,n; char ch='A'; scanf(\ if(n<11)

{for(i=1;i<=n;i++) {for(j=1;j<=n-i+1;j++) { printf(\ (【17】 ); }

(【18】 ); }

17

}

else printf(\ printf(\}

(16) 以下程序中函数fun的功能是:构成一个如图所示的带头结点的单向链表,在结点数据域中放入了具有两个字符的字符串。函数据disp的功能 是显示输出该单链表中所有结点中的字符串。请填空完成函数disp。

head ab cd ef \\0 #include

typedef struct node /*链表结点结构 */ {char sub[3]; struct node *next; }Node;

Node fun(char s) /* 建立链表 */ { ┅┅ } void disp(Node *h) { Node *p; p=h->next; while((【19】 )

{ printf(\【20】 ); } } main() {Node *hd;

hd=fun(); dispIhd); printf(\}

18

参考答案

选择

1-5 DADBA 6-10 DCDBC 11-15 BCADD 16-20 BBBCA 21-25 CABDD 26-30 CBDDB 31-35 DBBBB 36-40 CACAC 41-45 ACADB 46-50 DADBA 填空

1.45 2.类 3.关系 4.表态分析 5.物理独立性 6.printf(\7.a+b>c&&a+c>b&&b+c>a&& 8.30 9.a*b*c*d* 10.11 11.!knahT 12.p+n 13.i<10 14.j%3!=0 15.return 0 16.return 1 17.ch=ch+1 18.printf(\

2006年4月笔试试卷 一、选择题

(1)D)解析:结构化程序设计方法的主要原则是:自顶向下,逐步求精,模块化,限制使用goto语句。可复用性是指软件元素不加修改和稍加修改可在不同的软件开发过程中重复使用的性质。软件可复用性是软件工程追求的目标之一,是提高软件生产效率的最主要方法。面向对象的程序设计具有可复用性的优点。

(2)A)解析:模块的独立程度可以由两个定性标准度量:内聚性和耦合性。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。一般来说,要求模块之间的耦合尽可能地弱,而要求模块的内聚程度尽可能的高。 (3)D)解析:因为测试的目的在于发现错误,从心理学角度讲,由程序的编写者自己进行测试是不合适的,为了达到最好的测试效果,应该由独立的第三方进行测试工作,所以选项A)错误;程序调试,修改一个错误的同时可能引入了新的错误,解决的办法是在修改了错误之后,必须进行回归测试,所以选项B)错误;所谓软件维护,就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程,可见选项C)也是错误的。

(4)B)解析:栈的特点是栈顶元素总是最后被插入的元素,也是最早被删除的元素;栈底元素总是最早被插入的元素,也是最晚才能被删除的元素。即栈的修改原则是“后进先出”(Last In First Out,简称LIFO) 或“先进后出”(First In Last Out,简称FILO),因此,栈也称为“后进先出”表或“先进后出”表。

(5)A)解析:所谓线性链表,就是指线性表的链式存储结构,简称链表。线性表链式存储结构的基本单位称为存储结点,每个存储结点包括数据域和指针域两个组成部分。栈、队列和双向链表是线性结构,二叉树是非线性结构。线性结构和非线性结构是从数据的逻辑结构角度来讲的,与该数据结构中有多少个元素没有关系,即使是空的二叉树也是非线性结构。 (6)D)解析:后序遍历可以描述为:若二叉树为空,则空操作;否则: ①后序遍历左子树; ②后序遍历右子树; ③访问根结点。

对于后序遍历,第一个访问的结点一定是最左下的结点,最后一个访问的结点一定是根结点,如果知道这个小技巧,可以迅速确定本题的答案为选项D)。

(7)C)解析:满二叉树是指除最后一层外,每一层上的所有结点都有两个子结点的二叉树。满二叉树在其第i层上有2i-1个结点,即每一层上的结点数都是最大结点数。对于深度为7的满二叉树,叶子结点所在的是第7层,一共有27-1=64个叶子结点。

(8)D)解析:两个实体集之间的联系实际上是实体集间的函数关系,主要有3种:一对一的联系,一对多的联系,多对多的联系。“商品”与“顾客”两个实体集之间的联系一般是

19

多对多,因为,一种 “商品”可以被多个“顾客”购买,而一个“顾客”也可以购买多个“商品”。

(9)A)解析:在ER图中,用矩形表示实体集,用椭圆形表示属性,用菱形(内部写上联系名)表示联系。

(10)C)解析:DB即数据库(Database),是统一管理的相关数据的集合;DBMS即数据库管理系统(Database Management System),是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法;DBS即数据库系统(Database System)由如下5部分组成,数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。

(11)C)解析:C语言规定,标志符由字母、数字或下划线组成,它的第一个字符必须是字母或下划线。

(12)C)解析:数值常量包括整型常量和字符常量。在用字母e(或E)表示指数形式的实型常量时,字母e(或E)之前必须有数字且字母e(或E)后面的指数必须为整数。

(13)A)解析:字符常量是括在一对单引号内的字符。选项A)‘\018’是八进制字符串格式,所以里面的数不能大于8。选项B)、C)、D)都是转义字符。

(14)D)解析:这道题要注意2/5的结果是2,因为运算符两边的数值类型均为整型,故运算结果的数值类型也被认定为整型。

(15)D)解析:字符串常量是用一对双引号括起来的字符序列,用字符数组来存放,不用大括号。

(16)B)解析:二维数组的初始化有以下几种形式:①分行进行初始化。②不分行的初始化。③部分数组元素初始化。④省略第一维的定义,不省略第二维的定义。选项B)等号右边分了3行,大于等号左边数组的行数2。

(17)B)解析:canf()语句用“空格”区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。

(18)B)解析:选项A)main();的分号是错误的,不能有分号;选项C)的注释语句多了两个*号;选项D)include前面没有#。

(19)C)解析:C语言中,switch语句专用于实现多分支结构程序,其特点是各分支清晰而直观。switch后面括号中可以是任何表达式,取其整数部分与各常量表达式进行比较。常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量表达式各不相同。 (20)A)解析:在调用子函数时,应对其进行说明。选项A)中,调用时,没有对子函数进行说明。选项B)、C)中被调用函数在主调函数之前定义,不用说明;选项D)中在主调函数中对被调用函数的返回值类型进行了说明。

(21)C)解析:E代表不是0的整数。在选项A)、B)、D)中的switch后面的表达式都是E不等于0为真。

(22)A)解析:while语句的功能是:计算表达式的值,如为真,则执行循环体语句,执行完毕后,再计算表达式的值,若仍为真,则重复执行循环体语句。直到表达式的值为假时,结束循环。ch=getchar()应加一个括号,表示输入字符的函数。

(23)B)解析:返回值为指针变量指向的数据,该数据已被定义为整型。

(24)D)解析:p=&a表示将变量a的地址送给指针p; scanf(“%lf”,p)表示用键盘输入的数给变量p地址中。

(25)D)解析:r->next=q,这时r指向的节点为q; p->next=r, 这时p指向的节点为r; q->next=r->next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以不对。 (26)C)解析:->的运算优先级比++高,此时,pt->=10,执行自加运算后为11。

(27)B)解析:函数feof的功能是:测试fp所指的文件的位置是否已达到文件尾,如果达到文件尾,则函数返回非0值,否则返回0,表示文件尚未结束。

20

(28)D)解析:^为按位异或运算符;<<为左移运算符。b<<2二进制左移两位,后得8,与a进行或运算后,得9。

(29)D)解析:putchar(c1)输出1,putchar(c2)输出2,printf(“%c%c\n”,c5,c6)输出45。

(30)B)解析:while(y--)执行后,y若大于1,则循环,等y=0时,循环结束,并执行自减运算,得-1。

(31)D)解析:else子句不能作为语句单独使用,在题中if 与else 语句被 “c=2;”语句分隔开了。

(32)B)解析:此程序考察了for循环和x++。对于大循环,有两个x++,其中循环3次,对于小循环,循环三次,但是运行了两次x++,所以最后结果是6+2=8。

(33)C)解析:题中变量w的定义为double型,函数fun2()的定义为int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。

(34)B)解析:本题考查多维数组的初始化。使用一个大括号初始化多维数组时,初始化原则为先列后行,即初始化完第一行的所有列后再初始化下一行的元素。程序输出t[2][0]、t[1][1]、t[0][2],它们的值分别为3、5、7。

(35)B)解析:此程序是统计一周七天中英文名称首字母为“T”的个数。P[i][0]是字符串的首字符,一共有两个“T”,所以n=2。

(36)C)解析:统计1~9九个数中的奇数和,此题考察指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第i+1个元素。程序运行的结果是1+2+3+4+5+6+7+8+9=25。

(37)A)解析:(*q)++是q所指的字符加1,q++就是指针移到下一个字符。

(38)C)解析:这是一个转换程序:低字节相互转换,高字节不变。“abc”的ab和“123”的12相互转化。

(39)A)解析:本程序考察的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+7+8+9+10=55。 (40)C)解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。Fun(a,5)的值是15,再次调用后sum=15,所以Fun(b,4)=45,s=45+15=60。

(41)A)解析:因为联合的两个变量共用一段内存,ch[0]占用低字节,ch[1]占用高字节,所以在读它们的时候还是原来的数据,没发生改变。

(42)C)解析:while(p[i][j]!=′\0′)表示p[i][j]不等于′\0′时,继续执行while中的语句。if语句表示(p[i][j]-′\0′)除2的余数不为0时,执行后面的语句。最后执行的结果是39。

(43)A)解析:第一次fwrite操作把Fortran写到文件fp中,第二次操作,把Basic写入文件fp中,此时把Fortr字符覆盖了,所以最后输出的是Basican。

(44)D)解析:并不是源程序中的所有行都参加编译。在条件编译形式下,相关内容只在满足一定条件时才进行编译。选项D)中的非执行语句不在其范围内。 (45)B)解析:算法应该具有下列五个特性: ①有穷性:一个算法必须在执行有穷步之后结束。

②确定性:算法中的每一步,必须有确切的含义,在他人理解时不会产生二义性。 ③动态性:算法中描述的每一步操作都可以通过已有的基本操作执行有限次实现。 ④输入:一个算法应该有零个或多个输入。

⑤输出:一个算法应该有一个或多个输出。这里所说的输出是指与输入有某种特定关系的量。 (46)D)解析:形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在C语言中,实参向形参传送数据的方式是“值传递”。

21

(47)A)解析:str[0]、*p都指向字符串的首地址。选项B)不能说str和p完全相同,p是指针,而str是数组。选项C)中str数组的长度是20,而p的长度是字符串的长度。选项D)中,str中存放的内容是字符串,而p存放的内容是地址。

(48)D)解析:模运算“%”也称为求余运算,运算符要求两个运算对象都为整型,其结果是整数除法的余数。

(49)B)解析:预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。只是其中的一个文件,并不说每次预处理命令都用此文件。

(50)A)解析:关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型。 二、填空题 (1)【1】45

解析:对长度n为10的线性表进行冒泡排序,最坏情况下需要比较的次数为n(n-1)/2=5×9=45。

(2)【2】类

解析:在面向对象方法中, 类(class)描述的是具有相似属性与操作的一组对象,而一个具体对象则是其对应类的一个实例(Instance)。 (3)【3】关系

解析:在关系模型中,把数据看成是二维表,每一个二维表称为一个关系 。 (4)【4】静态分析(静态测试)

解析:原则上讲,可以将软件测试方法分为两大类,即静态测试和动态测试。静态测试无须执行被测代码,而是借助专用的软件测试工具评审软件文档或程序,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率。动态测试,是使被测代码在相对真实环境下运行,从多角度观察程序运行时能体现的功能、逻辑、行为、结构等的行为,以发现其中的错误现象。程序测试分为静态测试和动态测试。静态测试一般是指人工评审软件文档或程序,借以发现其中的错误。由于被评审的文档或程序不必运行,所以称为静态测试。 (5)【5】物理独立性 解析:当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为物理独立性。当数据库总体逻辑结构改变,不需要修改应用程序,这是数据的逻辑独立性。

(6)【6】printf(“a=%d,b=%d”,a,b); 解析:printf是格式化输出函数。

(7)【7】(a+b>c)&&(a+c>b)&&(b+c>a)

解析:三角形的条件是两边之和大于第三边。要用“&&”指令连接三个条件,表示三个条件都要满足。 (8)【8】30

解析:程序运行后的结果是a[0][0]+a[0][2]+a[1][1]+a[1][1]+a[2][2]+a[2][0]=1+9+4+4+7+5=30 (9)【9】a*b*c*d*

解析:在子程序中,如果条件成立,则执行下面的语句,如果不成立,跳过。最后的输出结果是a*b*c*d*。 (10)【10】11

解析:此题涉及函数的调用和if语句。程序先执行第二个if语句,然后在执行第一个if语句,最后用return返回数值。 (11)【11】!knahT

22

解析:此程序是一道次序颠倒题,即输入“Thank!”,则输出“!knahT”。 (12)【12】p+n

解析:n++到一定数值,就找到所指的字符,返回c的地址。 (13)【13】i<10 【14】j%3!=0

解析:(j=i*10+6)<100,所以i 的范围是0-9之间。j=i*10+6满足了个位数为6的要求,因此这个条件应该满足能被3整除这个要求。 (14)【15】return 0 【16】return 1

解析:如果a能被i整除,则a是素数,返回值为0。如果a不能被i整除,则a不是素数,返回值为1。

(15)【17】ch++

【18】printf(“\n”);

解析:ch自身加1,指向下一个字母(以ASCII的顺序)。此程序语句的作用是换行。 (16)【19】p!=NULL 【20】p->next

解析:NULL的ASCII码的值和‘\0’的ASCII码的值相等,条件到NULL停止循环。把下一个节点的地址赋给p,这样循环,节点可以依次向后取值。

23

本文来源:https://www.bwwdw.com/article/rw5g.html

Top