1、二级 C语言笔试-97 及答案解析(总分:108.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.有以下程序:struct sint x,y;) data2=10,100,20,200;main()struct s *p=data;printf(%d/n“,+p-x);程序运行后的输出结果是()。(分数:2.00)A.10B.11C.20D.212.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( )。(分数:2.00)A.c1c2B.c1c2C.c2D.c1|c23.有以下程序:fun(int x,int y)(return (x+y)
2、;)main()int a=1,b=2,c=3,sum;sum=fun(a+,b+,a+b),c+);printf(“%d/n“,sum);执行后的输出结果是()。(分数:2.00)A.6B.7C.8D.94.以下程序的输出结果是( )。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);(分数:2.00)A.1B.2C.3D.45.设有定义:int a; float b;,执行 scanf(“%2d%f“,a,b);语句时,若从键盘输入 876 543.0回
3、车,a 和 b的值分别是( )。(分数:2.00)A.876和 543.000000B.87和 6.000000C.87和 543.000000D.76和 543.0000006.以下程序的输出结果是( )。main()int a=666,b=888;prinf(%d/n“,(a,b);(分数:2.00)A.错误信息B.666C.888D.666, 8887.以下选项中,能定义 s为合法的结构体变量的是( )。(分数:2.00)A.typedef struct abcdouble a;char b10;s;B.structdouble a;char b10;s;C.struct ABCdoub
4、le a;char b10;ABC s;D.typedef ABCdouble a;char b10;ABC s;8.以下选项中,值为 1的表达式是( )。(分数:2.00)A.1-0B.1-/0C.1-0D./0-09.以下程序的输出结果是( )。int f()static int i=0;int s=1;S+=i;i+:return s;main()int i,a=0;for(i=0;15;i+)a+=f();printf(“%d/n“,(分数:2.00)A.;A) 20B) 24C) 25D)10.有以下程序:void sum(int a1)a0=a-1+a1;)main()int a1
5、0=(1,2,3,4,5,6,7,8,9,10;suma2);printf(“%d/n“,a2):程序运行后的输出结果是()。(分数:2.00)A.6B.7C.5D.811.下列叙述中正确的是( )。(分数:1.00)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率12.下面能正确进行字符串赋值操作的是( )。(分数:1.00)A.char s5=“ABCDE“;B.char s5=A,b,C,D,E;C.
6、char *s;s=“ABCDE“;D.char *s;scanf(“%s“,s);13.下面概念中,不属于面向对象方法的是( )。(分数:1.00)A.对象B.继承C.类D.过程调用14.有以下结构体说明和变量定义,如下图所示,指针 p、 q、r 分别指向一个链表中的三个连续结点。struct nodeint data;struct node *next;)*p,*q,*r; data next data next data next(分数:1.00)A.rnext=q;qnext=rnext;p next;r;B.qnext=rnext;pnext=r;rnext=q;C.pnext=r;
7、qnext=rnext;rnext=q;D.qnext=rnext;rnext=q;pnext=r;15.有以下程序:#includestdio.hmain()char c1,c2,c3,c4,c5,c6;scanf(“%c%c%c%c“,c1,c2,c3,c4);c5=getchar();c6=getchar();putchar(c1); putchar(c2);printf(“%c%c/n“,c5,c6);程序运行后,若从键盘输入(从第 1列开始)123回车45678回车则输出结果是()。(分数:1.00)A.1267B.1256C.1278D.124516.有以下程序:main()int
8、 k=5;while(-k)printf(“%d“,k-=3);printf(“/n“):执行后的输出结果是()。(分数:1.00)A.1B.2C.4D.死循环17.在设计程序时,应采纳的原则之一是( )。(分数:1.00)A.不限制 goto语句的使用B.减少或取消注解行C.程序越短越好D.程序结构应有助于读者理解18.以下叙述中正确的是( )。(分数:1.00)A.C程序中的注释只能出现在程序的开始位置和语句的后面B.C程序书写格式严格,要求一行内只能写一个语句C.C程序书写格式自由,一个语句可以写在多行上D.用 C语言编写的程序只能放在一个程序文件中19.下列关于队列的叙述中正确的是(
9、)。(分数:1.00)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表20.在结构化方法中,软件功能分解属于下列软件开发中的( )阶段。(分数:1.00)A.详细设计B.需求分析C.总体设计D.编程调试21.有定义语句:char s10;,若要从终端给 s输入 5个字符,错误的输入语句是( )。(分数:2.00)A.gets(s0);B.scanf(“%s“,s+1);C.gets(s);D.scanf(“%s“,s1);22.有以下程序:# include string.hmain()char p20=(a,b,c,d),q=“abc“,r
10、=“abcde“:strcat(p,r);strcpy(p+strlen(q),q);printf(“%d/n“,strlentp);程序运行后的输出结果是()。(分数:2.00)A.9B.6C.11D.723.若变量均已正确定义并赋值,以下合法的 C语言赋值语句是( )。(分数:2.00)A.x=y;B.x=n%52.5;C.x+n=i;D.x=5=4+1;24.单个用户使用的数据视图的描述称为( )。(分数:2.00)A.外模式B.概念模式C.内模式D.存储模式25.对关系 S和关系 R进行集合运算,结果中既包含 S中元组也包含 R中元组,这种集合运算称为( )。(分数:2.00)A.并运
11、算B.交运算C.差运算D.积运算26.有以下程序:main()int k=5, n=0;doswitch(k)case 1:case 3:n+:1;k-;break;default:n:0;k-;case 2:case 4:n+=2;k-;break;printf(“%d“,n):while(k0 n5);程序运行后的输出结果是()。(分数:2.00)A.235B.0235C.02356D.235627.若有说明语句:double*p, a;则能通过 scanf语句正确给输入项读入数据的程序段是( )(分数:2.00)A.*p=a;scanf(“%“,p);B.*p=a;scanf(“%f“,
12、p);C.p=a;scanf(“%lf“,*p);D.p=a;scanf(“%lf“,p);28.C源程序中不能表示的数制是( )。(分数:2.00)A.二进制B.八进制C.十进制D.十六进制29.以下关于逻辑运算符两侧运算对象的叙述中正确的是( )。(分数:2.00)A.只能是整数 0或 1B.只能是整数 0或非 0整数C.可以是结构体类型的数据D.可以是任意合法的表达式30.以下程序运行后,输出结果是( )。#define PT 5.5#define S(x)PT*x*x#includestdio.hmain()int a=1,b=2;prinf(“%4.1f/n“,S(a+b);(分数:
13、2.00)A.49.5B.9.5C.22D.45.031.若程序中定义了以下函数:double myadd(double a,double b)return (a+b);并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是()。(分数:2.00)A.double myadd(double a,b);B.double myadd(double,double);C.double myadd(double b,doublea);D.double myadd(double x,double y);32.下列条件语句中,功能与其他语句不同的是( )。(分数:2.00)A.if
14、(a)printf(“%d/n“,x);else printf(“%d/n“,y);B.if(a=0)printf(“%d/n“,y);else printf(“%d/n“,x);C.if(a!=0)printf(“%d/n“,x);else printf(“%d/n“,y);D.if(a=0)printf(“%d/n“,x);else printf(“%d/n“,y);33.有以下函数:int aaa(char *s)char *t=s:while(*t+):t-;return(t-s);以下关于 aaa函数的功能的叙述正确的是()。(分数:2.00)A.求字符串 s的长度B.比较两个串的大
15、小C.将串 s复制到串 tD.求字符串 s所占字节数34.在 C语言中,变量的隐含存储类别是( )。(分数:2.00)A.autoB.staticC.externD.无存储类别35.以下程序的输出结果是( )。main()int a,i;a=0;for(i=1; i5:i+)switch(i)case 0:case 3:a+=2;case 1:case 2:a+=3;default:a+=5;prinf(“%d/n“,a;(分数:2.00)A.31B.13C.10D.2036.设有定义:int a,+pa=a;,以下 scanf语句中能正确为变量 a读入数据的是( )。(分数:2.00)A.s
16、canf(“%d“,pa);B.scanf(“%d“,a);C.scanf(%d“,pa);D.scanf(“%d“,*pa);37.为了提高流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为( )。(分数:2.00)A.PAD图B.N-S图C.结构图D.数据流图38.数据流图用于抽象描述一个软件的逻辑模型,由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是( )。(分数:2.00)A.控制流B.加工C.数据存储D.源和潭39.具有 3个结点的二叉树有( )。(分数:2.00)A.2种形态B.4种形态C.7种形态D.5种形态40.算法中,
17、对需要执行的每一步操作,必须给出清楚、严格的规定,这属于算法的( )。(分数:2.00)A.正当性B.可行性C.确定性D.有穷性二、填空题(总题数:13,分数:38.00)41.希尔排序法属于 1 排序法。(分数:2.00)填空项 1:_42.在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、 1 遍历和后序遍历。(分数:2.00)填空项 1:_43.为了便于对照检查,测试用例应由输入数据和预期的 1 两部分组成。(分数:2.00)填空项 1:_44.在数据库设计的 4个阶段中,每个阶段都有自己的设计内容。“为哪些表、在哪些字段上、建立什么样的索引”,这些设计内容应
18、该属于 1 设计阶段。(分数:2.00)填空项 1:_45.用 1 结构表示实体及实体之间联系的数据模型称为关系模型。(分数:2.00)填空项 1:_46.执行以下程序后的输出结果是_。main()int a=10;a-(3*5,a+4);printf(“a=%d/n“,a);(分数:2.00)填空项 1:_47.有以下程序:main()int m,n,p:scanf(“m=%dn=%dp=%d“,m,n,p);printf(“%d%d%d/n“,m,n,p);若想从键盘上输入数据,使变量 m中的值为 123,n 中的值为 456,p 中的值为 789,则正确的输入是_。(分数:2.00)填空
19、项 1:_48.有以下程序:#include stdio.hmain()char a30b30;scanf(“%s“,a);gets(b);printf(“%s/n%s/n“,a,b);程序运行时若输入:how are you?I am fine回车则输出结果是_。(分数:2.00)填空项 1:_49.有以下程序段:int k=0,a=1,b=2,c=3;k=ab? b:a;k=kc? c:k:执行该程序段后,k 的值是_。(分数:2.00)填空项 1:_50.有以下程序:main()int a=0,b=0,c=0,d=0;if(a=1)b=1;c=2;else d=3;printf(“%d,
20、%d,%d,%d/n“,ab,c,d);程序输出_。(分数:2.00)填空项 1:_以下程序的功能是:输出 100以内(不含 100)能被 3整除且个位数为 6的所有整数,请填空。main()int i,j:for(i=0; (11) ;i+)j=i*10+6;if (12) lconfinue;prinf(“%d“,j);(分数:8.00)填空项 1:_填空项 1:_51.有以下程序:main()int a10=1,2,3,4,5,6,7,8,9,10,*p=a3,*q=p+2;prinf(“%d/n“,*p+*q);程序运行后的输出结果是_。(分数:2.00)填空项 1:_以下程序的功能是
21、:求出数组 x中各相邻两个元素的和依次存放到 a数组中,然后输出。请填空。main()int x10,a9,i;for (i=0;i10;i+)scanf(“%d“,xi);for (14) 10;i+)ai-1=xi+ (15) :for (i=0;19;i+)printf(“%d“,ai);printf(“/n“);(分数:8.00)填空项 1:_填空项 1:_二级 C语言笔试-97 答案解析(总分:108.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.有以下程序:struct sint x,y;) data2=10,100,20,200;main()stru
22、ct s *p=data;printf(%d/n“,+p-x);程序运行后的输出结果是()。(分数:2.00)A.10B.11 C.20D.21解析:解析 本题的考查点是结构体变量的初始化。该题是一个对外部存储类型的结构体变量进行的初始化。初始化后,x 的值为 10,y 的值为 100。+(px)中首先 px 是把 p指向结构体变量 s中的 x成员,此+(px)就相当于+x,这时 x先自增,再使用,所以此时 x的值为 11。故本题答案为 B) 。2.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( )。(分数:2.00)A.c1c2 B.c1c2C.c2D.c1|c
23、2解析:解析 本题考的是位运算。“是按位异或运算,当对应位上的二进制数值相同时,异或的结果为 0,对应位上的二进制数值不同时,异或的结果为 1,因为 c1、c2 的值相同,所以异或的结果为 0,所以 A)为正确答案。3.有以下程序:fun(int x,int y)(return (x+y);)main()int a=1,b=2,c=3,sum;sum=fun(a+,b+,a+b),c+);printf(“%d/n“,sum);执行后的输出结果是()。(分数:2.00)A.6B.7C.8 D.9解析:解析 本题考查的知识点是逗号表达式。因为整个逗号表达式的值为其最右边一个子表达式的值,所以程序中
24、传递给 fun()函数的第 1个实参(a+,b+,a+b)的值为 a+b的值。但是,在计算 a+b之前,已经先让 a和 b各自增 1了,所以第 1个实参值为(1+1)+(2+1)=5。第 2个实参 c+的值为变量 c自增之前的值 3。所以,函数返回的值为 5+3=8。故应该选择 C) 。4.以下程序的输出结果是( )。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);(分数:2.00)A.1 B.2C.3D.4解析:解析 该题考查的是递归函数的调用,题中 f
25、un函数进行了递归调用,第 1次调用时:fun(3)n=3 s=3-fun(2);第 2次调用时:fun(2)n=2 s=2,返回第一次调用后,s=3-2=1。5.设有定义:int a; float b;,执行 scanf(“%2d%f“,a,b);语句时,若从键盘输入 876 543.0回车,a 和 b的值分别是( )。(分数:2.00)A.876和 543.000000B.87和 6.000000 C.87和 543.000000D.76和 543.000000解析:解析 本题考查了格式输入函数 scanf()的运用。scanf()函数的一般形式为:scanf(格式控制,地址表列)。其中,
26、“格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息:格式说明,由“%”和格式字符组成;普通字符,即需要原样输入的字符。“地址表列”是需要接收输入数据的一系列变量的地址。本题中的“格式控制”是“%2d%f”,其中%2d的意思是要输入一个整数,但该整数最宽只占 2个字符,而%f 是要输入一个浮点数。而题目要求输入的是 876 543.0,所以 scanf()函数将 87赋给 a,6 赋给 b。6.以下程序的输出结果是( )。main()int a=666,b=888;prinf(%d/n“,(a,b);(分数:2.00)A.错误信息B.666C.888 D.666, 88
27、8解析:解析 本题考查的知识点是:格式化输出的应用。printf函数的调用形式:printf(格式控制,输出项 l,输出项 2,),该题的输出项为一个逗号表达式,该表达式的值为 b的值,因此输出结果为 888,故本题选 C) 。7.以下选项中,能定义 s为合法的结构体变量的是( )。(分数:2.00)A.typedef struct abcdouble a;char b10;s;B.structdouble a;char b10;s; C.struct ABCdouble a;char b10;ABC s;D.typedef ABCdouble a;char b10;ABC s;解析:解析 本
28、题的考查点是结构体变量的定义。定义一个结构体类型的变量,可采用三种方法:(1)先定义结构体类型再定义变量名;(2)在定义类型的同时定义变量;(3)直接定义结构类型变量,即不出现结构体名;选项 B)符合第三种定义方法。故本题答案为 B)。8.以下选项中,值为 1的表达式是( )。(分数:2.00)A.1-0B.1-/0 C.1-0D./0-0解析:解析 本题考查的是字符常量的概念。在 C语言中,一个字符常量常常被当作一个整型常量来参与运算,它所代表的值为该字符的 ASCII码值。在 ASC码中,字符串结束符/0的 ASC码为 0,字符0的 ASC码的值为 48,字符1的 ASC码的值为 49。由
29、此可见,选项 A)的值为-47;选项 B)的值为1;选项 C)的值为 49;选项 D)的值为-48。故应该选择 B)。9.以下程序的输出结果是( )。int f()static int i=0;int s=1;S+=i;i+:return s;main()int i,a=0;for(i=0;15;i+)a+=f();printf(“%d/n“,(分数:2.00)A.;A) 20B) 24C) 25D)解析:解析 函数的静态局部变量在编译时就赋初值,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数肘不再重新赋值,而只是保留上次函数调用结束时的值。10.有以下程序:void sum(int
30、 a1)a0=a-1+a1;)main()int a10=(1,2,3,4,5,6,7,8,9,10;suma2);printf(“%d/n“,a2):程序运行后的输出结果是()。(分数:2.00)A.6 B.7C.5D.8解析:解析 本题考查的是数组和函数。sum()函数接收一个 int型数组作参数,也可以把它看作是一个int型指针,语句 a0=a-1+a1;的意思就是将参数指针指向内容的前一个元素和后一个元素的值相加放到指针所指的位置。因此,主函数中调用 sum(a2);的意思就是让 a2=a1+a3;,所以最后输出的结果是 6。应该选择 A) 。11.下列叙述中正确的是( )。(分数:1
31、.00)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 解析:解析 一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。故本题答案为 D) 。12.下面能正确进行字符串赋值操作的是( )。(分数:1.00)A.char s5=“ABCDE“;B.char s5=A,b,C,D,E;C.char *s;s=“
32、ABCDE“; D.char *s;scanf(“%s“,s);解析:解析 选项 A)和 B)定义的数组空间太小,至少应该为 6个字符的长度才可以。选项 D)中的指针s未赋初值,所以指向一个不确定的地址,因而不能用 scanf输入数据到这一指针所指向的地址中。13.下面概念中,不属于面向对象方法的是( )。(分数:1.00)A.对象B.继承C.类D.过程调用 解析:解析 面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。面向对象方法从对象出发,发展出对象、类、消息、继承等概念。14.有以下结构体说明和变量定义,如下图所示,指针 p、 q、r 分别指向一个
33、链表中的三个连续结点。struct nodeint data;struct node *next;)*p,*q,*r; data next data next data next(分数:1.00)A.rnext=q;qnext=rnext;p next;r; B.qnext=rnext;pnext=r;rnext=q;C.pnext=r;qnext=rnext;rnext=q;D.qnext=rnext;rnext=q;pnext=r;解析:解析 本题的考查点是指向结构体变量的指针以及用指针处理链表。一个结构体变量的指针就是该变量所占据的内存字段的起始地址。可以设一个指针变量,用来指向一个结构
34、体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组的元素。在 C语言中,qnext 相当于(*q)next。即 q所指向的是结构体变量中的 next成员。链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它根据需要开辟内存单元。链表中的备元素在内存中可以不是连续存放的。所以必须利用指针变量才能实现。即一个结点中应包括一个指针变量,用它存放下一结点的地址。rnext=q 表示让 q指向新开辟的结点,r 指向链表中最后一个结点,把 r所指的结点连接在 q所指的结点后面。同样,pnext=r 表示让 r指向新开辟的结点,p 指向链表中最后一个结点,把
35、p所指的结点连接在 r所指的结点后面。那么在 A中,执行 rnext=q 后,rnext 指向了 q。此时第 2句相当于qnext=q;,所以 q的下一个结点指向了自己,而不是指向原来 r的下一个结点。故本题答案为 A) 。15.有以下程序:#includestdio.hmain()char c1,c2,c3,c4,c5,c6;scanf(“%c%c%c%c“,c1,c2,c3,c4);c5=getchar();c6=getchar();putchar(c1); putchar(c2);printf(“%c%c/n“,c5,c6);程序运行后,若从键盘输入(从第 1列开始)123回车45678
36、回车则输出结果是()。(分数:1.00)A.1267B.1256C.1278D.1245 解析:解析 本题考查的是输入输出函数。scanf()是格式化输入函数;getchar()函数从键盘缓冲区读入下一个字符;putchar(J 输出一个字符;printf()函数是格式化输出函数。在题目中,程序执行到scanf()函数时,会暂停等待用户输入 4个字符,按题意输入 123回车后,字符 13 被分别输入到c1-c3中,而 c4会得到一个换行符/n。然后执行第 1个 getchar()函数,由于前面的 scanf()函数读完了缓冲区中的所有字符,所以此时程序会又暂停等待用户输入,按题意输入 4567
37、8回车后,缓冲区第一个字符 4输入到 C5,第二个字符 5输入到 C6,所以本题应该选择 D) 。16.有以下程序:main()int k=5;while(-k)printf(“%d“,k-=3);printf(“/n“):执行后的输出结果是()。(分数:1.00)A.1 B.2C.4D.死循环解析:解析 本题考查的是 while循环和一运算符。因为在 while循环的循环条件中,一运算符是前缀形式,所以表达式-k 的值是 k自减之后的值。程序开始时,将 k的值初始化为 5,然后进入 while循环,因为-k 的值为 4(非零),所以执行循环体输出 k-=3的值 1,此时 k的值也变为 1。第
38、 2次执行循环条件,-k的值为 0,所以循环结束。因此最后输出的结果是 1,故应该选择 A) 。17.在设计程序时,应采纳的原则之一是( )。(分数:1.00)A.不限制 goto语句的使用B.减少或取消注解行C.程序越短越好D.程序结构应有助于读者理解 解析:解析 滥用 goto语句将使程序流程无规律,可读性差,因此 A)不选;注解行有利于对程序的理解,不应减少或取消,B)也不选;程序的长短要依照实际情况而论,而不是越短越好,C)也不选。18.以下叙述中正确的是( )。(分数:1.00)A.C程序中的注释只能出现在程序的开始位置和语句的后面B.C程序书写格式严格,要求一行内只能写一个语句C.
39、C程序书写格式自由,一个语句可以写在多行上 D.用 C语言编写的程序只能放在一个程序文件中解析:解析 考查 C语言的几个基本概念。选项 A)中,C 语言的注释可以出现在程序的任何位置;C 语言的语法限制不严格,可以多条语句放在同一行上,也可以将一条语句写在多行,故选项 B)错误,选项 C)正确;选项 D)是错误的,因为用 C语言编写的程序可以放在不同的文件中,文件之间使用预处理命令进行调用。19.下列关于队列的叙述中正确的是( )。(分数:1.00)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表 D.队列是先进后出的线性表解析:解析 队列是一种操作受限的线性表。它只
40、允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队列具有先进先出的特点,它是按“先进先出”的原则组织数据的。20.在结构化方法中,软件功能分解属于下列软件开发中的( )阶段。(分数:1.00)A.详细设计B.需求分析C.总体设计 D.编程调试解析:解析 总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比
41、较简单的功能。21.有定义语句:char s10;,若要从终端给 s输入 5个字符,错误的输入语句是( )。(分数:2.00)A.gets(s0);B.scanf(“%s“,s+1);C.gets(s);D.scanf(“%s“,s1); 解析:解析 本题主要考查的是输入函数 scanf和 gets。gets()函数的原型是 char*gets(char+s);。功能是通过键盘读入一个字符串,并放到指针参数 s所指的内存地址中。选项 A) 给 gets传入的实参是s0,也就是数组 s的第 1个元素的地址,这是合法的。选项 C) 传入的是数组名 s,它出现在表达式中表示的是数组的首地址,所以也是
42、合法的。scanf(函数要求输入的参数均为地址形式。选项 B) 中表达式 s+1,表示的是数组首地址往后移动一位的地址,所以是合法的。选项 D) 直接引用数组中下标为 1的元素,这是不合法的。22.有以下程序:# include string.hmain()char p20=(a,b,c,d),q=“abc“,r=“abcde“:strcat(p,r);strcpy(p+strlen(q),q);printf(“%d/n“,strlentp);程序运行后的输出结果是()。(分数:2.00)A.9B.6 C.11D.7解析:解析 strcpy()函数的功能是将字符串 q复制到从 p3位置开始的存
43、储单元,同时复制字符串结束标志/0到 p6中。函数 strlen()返回的是字符串中不包括/0在内的实际长度,故本题答案为 B) 。23.若变量均已正确定义并赋值,以下合法的 C语言赋值语句是( )。(分数:2.00)A.x=y; B.x=n%52.5;C.x+n=i;D.x=5=4+1;解析:解析 本题考查赋值运算符及赋值表达式。赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项 C)和 D)错误。“%“运算符两侧都应当是整型数据,选项 B)错误。24.单个用户使用的数据视图的描述称为( )。(分数:2.00)A.外模式 B.概念模式C.内模式D.存储模式解析:解析 选项 A
44、)正确,外模式是用户的数据视图,也就是用户所见到的数据模式;选项 B)不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项 C)不正确,物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;选项 D)不正确,存储模式即为内模式。25.对关系 S和关系 R进行集合运算,结果中既包含 S中元组也包含 R中元组,这种集合运算称为( )。(分数:2.00)A.并运算 B.交运算C.差运算D.积运算解析:解析 本题考查集合运算。在关系数据库理论中,两个关系的并是由属于这两个关系的元组组成的集合,故选项 A)正确。两个关系的交是由既属于一个关系又属于另一个关系的元
45、素组成的集合,两个集合的差运算是由从一个集合中去掉另一个集合中有的元素组成。两个集合的交运算是由既属于前一个集合又属于后一个集合的元素组成。26.有以下程序:main()int k=5, n=0;doswitch(k)case 1:case 3:n+:1;k-;break;default:n:0;k-;case 2:case 4:n+=2;k-;break;printf(“%d“,n):while(k0 n5);程序运行后的输出结果是()。(分数:2.00)A.235 B.0235C.02356D.2356解析:解析 因为变量的初始值分别为“k=5,n=0”,所以程序第一次进入循环时,执行 d
46、efault语句,这时 k=4,执行“case 4”这个分支,结果是“n=2,k=3”,打印出 2;程序然后进行第二次循环,这时“n=2,k=3”,执行“case 3:”这个分支,结果是“n=3,k=2”,打印出 3;程序进行第三次循环,这时“n=3,k=2”,执行“case 2:case 4:”这两个分支,结果是“n=5,k=1”,打印出 5,这时因为n=5不满足 n5 的循环条件,因此退出循环,程序运行结束,故输出结果为 235。27.若有说明语句:double*p, a;则能通过 scanf语句正确给输入项读入数据的程序段是( )(分数:2.00)A.*p=a;scanf(“%“,p);
47、B.*p=a;scanf(“%f“,p);C.p=a;scanf(“%lf“,*p);D.p=a;scanf(“%lf“,p); 解析:解析 本题考查的是指针的运算和 scanf()函数。由于a 表示变量 a的地址值,所以应该直接赋给指针变量 p而不是它所指向的内容,故选项 A) 和 B) 可以排除。而 scanf()函数除了第 1个参数为输入项列表外,其余参数要求为对应变量的地址值,从前一条语句可以看出,指针 D中存放的为变量 a的地址值,所以直接传给 scanf()函数指针变量 D就可以了。故应该选择 D) 。28.C源程序中不能表示的数制是( )。(分数:2.00)A.二进制 B.八进制C.十进制D.十六进制解析:解析 本题考查的是整型常量。在 C语言程序中,整型常量可以用十进制、八进制和十六进制等形式表示。但不包括二进制,故本题应该选择 A) 。29.以下关于逻辑运算符两侧运算对象的叙述中正确的是( )。(分数:2.00)A.只能是整数 0或 1B.只能是整数 0或非