1、二级 C语言笔试-252 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.设有以下语句: charx=3,y=6,z; z=xy2; 则 z的二进制值是( )。(分数:2.00)A.00010100B.00011011C.00011100D.000110002.以下有关宏的描述不正确的是( )。(分数:2.00)A.宏定义不做语法检查B.双引号中出现的宏名不进行替换C.宏名无类型D.宏名必须用大写字母表示3.程序设计的任务包括( )。(分数:2.00)A.编写程序代码并上机调试B.确定所用数据结构C.确定所用算法D.以上选项均正确4.有以下
2、程序 #includestdio.h main() int k=5,n=0; while(k0) switch(k) defhult:break; case 1:n+=k: case 2: case 3:n+=k; k-; printf(“%d/n“,n); 程序运行后的输出结果是(分数:2.00)A.0B.4C.6D.75.以下程序的运行结果是( )。 #includestdio.h main() int a=3,b=4,c=8,d=4,m=1,n=3; printf(“%d/n“,(m=ab)&(n=cd); (分数:2.00)A.0B.1C.2D.36.下列选项中,不属于数据模型所描述的
3、内容的是( )。(分数:2.00)A.数据类型B.数据操作C.数据结构D.数据约束7.下列说法正确的是( )。(分数:2.00)A.auto和 register将声明的对象说明为自动存储类对象,这些对象可用在函数中或函数外B.将变量其定义为 static类型,则其初值默认为随机值C.typedef说明符并不会为对象预留存留空间D.如果一个对象被声明为 register,则埘它应用一元运算符&,意征取得其存储的地址8.若已包括头文件stdio.h和string.h,运行下面程序的输出结果是( )。 chars110=“12345“,s210=“089“,s3=“67“; strcat(strcp
4、y(s1,s2),s3); puts(s1);(分数:2.00)A.08967B.0894567C.089567D.0895679.设 y为整型变量,a=6,a 的地址为 E2000,b=14,b 的地址为 E2001;执行语句 b=&a;y=&a;后 Y的值为( )。(分数:2.00)A.E2000B.E2001C.6D.1410.设有条件表达式:(EXP)?i+;j-,则以下表达式中(EXP)完全等价的是( )。(分数:2.00)A.(EXP=0)B.(EXP!=0)C.(EXP=1)D.(EXP!=1)11.有下列程序: main() int m,n,p; scanf(“m=%dn=%d
5、p=%d“,&m,&n,&p); printf(“%d%d%d/n“,m,n,p); 若想从键盘上输入数据,使变量 m中的值为 123,n 中的值为 456,P 中的值为 789, 则正确的输入是( )。(分数:1.00)A.m=123n=456p=789B.m=123 n=456 p=789C.m=123,n=456,p=789D.123 456 78912.以下程序段的输出结果为( )。 static char a=“programme“; char*p; p=a; for(p=a;pa+8;p+=2) putchar(*p);(分数:1.00)A.programmeB.pormC.有语法
6、错误D.prog13.以下函数 findmin拟实现存数组中查找最小值作为函数值返回,但程序中有错导致不能实现预定功能。#define MAX 2147483647 int findmin(int x,int n) int i,min; min=MAX; for(i=0;in;i+) if(minxi)min=xi; 造成错误的原因是( )。(分数:1.00)A.定义语句 int i,min;中 min未赋初值B.赋值语句 min=MAN;中,不应给 min赋 MAX值C.语句 if(minXi)min=Xi;中判断条件设置错误D.赋值语句 min=MAX;放错了位置14.有以下程序 #inc
7、ludestdio.h main() int y=9; for(;y0;y-) if(y%3=0)printf(“%d“,-y); 程序的运行结粜是( )。(分数:1.00)A.741B.963C.852D.87542115.下列关于 C语言数据文件的叙述中正确的是( )。(分数:1.00)A.文件由 ASCII码字符序列组成,C 语言只能读写文本文件B.文件由二进制数据序列组成,C 语言只能读写二进制文件C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件16.若要求从键盘读入含有窄格字符的字符串,应使用函数(
8、 )。(分数:1.00)A.getc()B.gets()C.getchar()D.scanf()17.若有以下程序段: struct st int n; int*m: ; int a=2,b=3,c=5; struct st s3=(101,&a,102,&c,103,&b); main() struct st*p; p=s; 则以下表达式中值为 5的是( )。(分数:1.00)A.(*p).mB.*(p+1)-mC.*(p+)-nD.(p+)(*m)18.线性表常采用的两种存储结构是( )。(分数:1.00)A.散列方法和索引方式B.链表存储结构和数组C.顺序存储结构和链式存储结构D.线性存
9、储结构和非线性存储结构19.在软件生产过程中,需求信息的来源是( )。(分数:1.00)A.程序员B.项目经理C.设计人员D.软件用户20.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是( )。(分数:1.00)A.需求分析B.详细设计C.软件设计D.概要设计21.对关系 S和 R进行集合运算,结果中既包含 S中的所有元组也包含 R中的所有元组,这样的集合运算称为( )。(分数:2.00)A.并运算B.交运算C.差运算D.积运算22.以下程序的输出结果是( )。 int x;int*y;*p; int dt4=1,2,3,4; struct st aa4=2,&dt
10、0,3,&dt0,4,&dt0,5,&dt0,; p=aa; pfintf(“%d/n“,+(p-x); (分数:2.00)A.1B.2C.3D.423.以下关于 long、int 和 short类型数据占用内存大小的叙述中正确的是( )。(分数:2.00)A.均占 4个字节B.根据数据的大小来决定所占内存的字节数C.由用户自己定义D.由 C语言编译系统决定24.有以下程序: #includestdio.h main() FILE *pf; char*s1=“China“,*s2=“Beijing“: pf=fopen(“abc.dat“,“wb+“); fwrite(s2,7,1,pf);
11、rewind(pf); /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); 以上程序执行后 abc.dat文件的内容是( )。(分数:2.00)A.ChinaB.ChinangC.ChinaBeijingD.BeijingChina25.有以下定义和语句: struct students int num;char name20;char c; struct int grade1;int grade2;s; ; struct students w,*pw; *pw=w; 下列赋值语句不正确的是( )。(分数:2.00)A.num=1002;B.grad
12、e1=85;C.pw-num=1002;D.s.grade2=85;26.有以下程序段 int j;float y; char name50; scanf(“%2d%f%s“,&j,&y,name); 当执行上述程序段,从键盘上输入 55566 7777abc后,y 的值为( )。(分数:2.00)A.55566.0B.566.0C.7777.0D.566777.027.当 a=4,b=5,c=7,d=6 时,执行下面一段程序: if(ab) if(cd)x=1; else if(ac) if(bc)x=2: else x=3; else x=4; else x=5; 程序执行后,x 的值为(
13、 )。(分数:2.00)A.1B.2C.3D.428.下列工具中,不属于结构化分析的常用工具的是( )。(分数:2.00)A.数据流图B.数据字典C.判定树D.S图29.以下选项中,能用作数据常量的是( )。(分数:2.00)A.018B.011C.0.8e2.5D.25L30.在下列叙述中,错误的是( )。(分数:2.00)A.C语言中,二维数组或多维数组是按行存放的B.赋值表达式 b12=a23是正确的C.char a1;a0=A与 int a1;a0=A等价D.数组名后的方括号内可以为常量表达式,也可以为变量31.下列合法的标识符是( )。(分数:2.00)A.123B.#256C.55
14、D.abhj1_2_332.下列程序的运行结果是( )。 void fun(int*s,int*p) static int t=3; void main() int a=2,3,4,5,k,x; printf(“%d,“,x): (分数:2.00)A.5,4,3,2,B.2,3,4,5,C.2,2,2,2,D.5,5,5,5,33.在 C语言程序中,以下说法正确的是( )。(分数:2.00)A.函数的定义和函数的调用均不可以嵌套B.函数的定义不可嵌套,但函数的调用可以嵌套C.函数的定义可以嵌套,但函数的调用不可以嵌套D.函数的定义和函数的调用均可以嵌套34.对建立良好的程序设计风格,下面描述正
15、确的是( )。(分数:2.00)A.程序应简单、清晰、可读性好B.符号名的命名只要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无35.数据库的故障恢复一般是由( )来执行恢复。(分数:2.00)A.电脑用户B.数据库恢复机制C.数据库管理员D.系统普通用户36.已知 char*S,下面正确的语句是( )。(分数:2.00)A.s=“ABCDEF“;B.*s= “ABCDEF“;C.*s=“ABCDEF“;D.*s=A;37.以下程序运行后的输出结果是( )。 #includestdio.h void reverse(int a,int n) int i,t; for(i=0;in/2
16、;i+) t=ai;ai=an-1-i;an-1-i=t; main() int b10=10,9,8,7,6,5,4,3,2,1;int i,s=0; reverse(b,10); for(i=0;i3;i+)s+=bi; printf(“%d/n“,s); (分数:2.00)A.27B.6C.25D.3038.软件需求分析阶段的工作,可以分为四个方面:需求获取、编写需求规格说明书、需求评审和( )。(分数:2.00)A.阶段性报告B.需求分析C.需求总结D.都不正确39.设有关键码序列(Q,G,M,Z,A,N,B,P,X,H,Y,S,T,L,K,E),采用堆排序法进行排序,经过初始建堆后关
17、键码值 B在序列中的序号是( )。(分数:2.00)A.1B.3C.7D.940.若变量已正确定义,有以下程序段: i=0; do printf(“%d,“,i);while(i+); printf(“%d/h“,i); 其输出结果是( )。(分数:2.00)A.0,0B.0,1C.1,1D.程序进入无限循环二、填空题(总题数:15,分数:30.00)41.在面向对象方法中, 1 描述的是具有相似属性与操作的一组对象。(分数:2.00)填空项 1:_42.在最坏情况下,堆排序需要比较的次数为 1。(分数:2.00)填空项 1:_43.数据库系统的三级模式分别为 1 模式、内模式与外模式。(分数
18、:2.00)填空项 1:_44.软件开发环境是全面支持软件开发全过程的 1 集合。(分数:2.00)填空项 1:_45.关系代数是关系操作语言的一种传统表示方式,它以集合代数为基础,它的运算对象和运算结果均为 1。(分数:2.00)填空项 1:_46.已知 a=1,b=2,则表达式(a&b)&b|b 的结果为 1。(分数:2.00)填空项 1:_47.若 int x=1,y=2;则计算表达式 y+=y-=x*=y后的 y值是 1。(分数:2.00)填空项 1:_48.以下程序段的运行结果是_。 #includestdio.h main() int x=2,y=1: switch(x) case
19、 1: switch(y) case 0:printf(“x=2,y=1/n“);break; case 1:printf(“y=1/n“);break; case 2:printf(“x=2/n“); (分数:2.00)_49.以下程序统计从终端输入的字符中大写字母的个数。用#号作为输入结束标志,请填空。 #includestdio.h #includectype.h main() int num26,i;char c; for(i=0;i26;i+) numi=0; _; while(c!=# if(isupper(c) numc-65+=1; for(i=0;i26;i+) if(num
20、i) printf(“%c,%d/n“,i+65,numi); (分数:2.00)填空项 1:_50.以下程序运行后的输出结果是_。 struct NODE int k; struct NODE*link; ; main() struct NODEm5,*p=m,*q=m+4; int i=0: while(p!=q) p-k=+i;p+;q-k=1+;q-; q-k=i: for(i=0;i5;i+)printf(“%d“,mi.k); printf(“/n“); (分数:2.00)填空项 1:_51.下面程序将二维数组 a的行和列元素互换后存放到另一个二维数组 b中,请填空。 main()
21、 int a23=1,2,3,4,5,b32,i,j; for(i=0;i2;i+) for(j=0;j3;j+) _; (分数:2.00)填空项 1:_52.下面程序的输出结果是_。 #includestdio.h main() static char a=“china“; char*ptr=a; while(*ptr) printf(“%c“,*ptr-32); ptr+; (分数:2.00)填空项 1:_53.下面程序中的数组 a包括 10个整数元素,从 a中第二个元素起,分别将后项减前项之差存入数组 b,并按每行 4个元素输出数组 b,请填空。 main() int a10,b10,i
22、; for(i=0;i10;i+) scanf(“%d“,&ai); for(i=1;i10;i+) _; for(i=0;i9;i+) printf(“%d“,bi); if(i%4=0)printf(“/n“); (分数:2.00)填空项 1:_54.下面程序的运行结果是_。 #define POW(r)r*r main() int x=2,y=3,t; t=POW(x+y); printf(“%d/n“,t); (分数:2.00)填空项 1:_55.写出下列程序的执行结果。 swap(p1,p2) int*p1,*p2; int p; p=*p1;*p1=*p2;*p2=p; main(
23、) int a,b,*p1,*p2; scanf(“%d%d“,&a,&b); p1=&a;p2=&b; if(ab)swap(p1,p2); printf(“/na=%d,b=%d/n“,a,b); 若 a=7,b=8,则程序的运行结果为_。(分数:2.00)填空项 1:_二级 C语言笔试-252 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.设有以下语句: charx=3,y=6,z; z=xy2; 则 z的二进制值是( )。(分数:2.00)A.00010100B.00011011 C.00011100D.00011000解析:解析本
24、题考查的是位运算符的应用。x 和 y写成二进制表示分别为 x=00000011,y=00000110,由于左移位运算符“”的优先级高于按位异或运算符“”,左移两位后 y2=4)0011000,此结果和x按位异或后 xy2=00011011。2.以下有关宏的描述不正确的是( )。(分数:2.00)A.宏定义不做语法检查B.双引号中出现的宏名不进行替换C.宏名无类型D.宏名必须用大写字母表示 解析:解析本题考查宏的使用规则:字符替换格式:#define 标识符字符串标识符称为宏名,无类型;双引号中出现的宏名不替换;宏名的定义通常用大写字母,但不是必须用大写;宏定义不是赋值语句,不做语法检查。3.程
25、序设计的任务包括( )。(分数:2.00)A.编写程序代码并上机调试B.确定所用数据结构C.确定所用算法D.以上选项均正确 解析:解析程序设计是一门技术,需要相应的理论、技术、方法和工具来支持。程序设计的任务包括选项 A)、B)、C)等方面。4.有以下程序 #includestdio.h main() int k=5,n=0; while(k0) switch(k) defhult:break; case 1:n+=k: case 2: case 3:n+=k; k-; printf(“%d/n“,n); 程序运行后的输出结果是(分数:2.00)A.0B.4C.6D.7 解析:解析因为没有 b
26、reak语句,当 k=2的时候,会顺序执行两条语句,k=1 的时候,会顺序执行 3条语句。5.以下程序的运行结果是( )。 #includestdio.h main() int a=3,b=4,c=8,d=4,m=1,n=3; printf(“%d/n“,(m=ab)&(n=cd); (分数:2.00)A.0 B.1C.2D.3解析:解析 逻辑与(&)运算符的功能是:当“&”运算符两边的运算对象均为 1时,整个表达式的值为 1,否则为 0。因为 a=3b=4,即 m=0,所以整个表达式的值为 0。6.下列选项中,不属于数据模型所描述的内容的是( )。(分数:2.00)A.数据类型 B.数据操作
27、C.数据结构D.数据约束解析:解析数据模型描述的内容包含数据结构、数据操作和数据约束。7.下列说法正确的是( )。(分数:2.00)A.auto和 register将声明的对象说明为自动存储类对象,这些对象可用在函数中或函数外B.将变量其定义为 static类型,则其初值默认为随机值C.typedef说明符并不会为对象预留存留空间 D.如果一个对象被声明为 register,则埘它应用一元运算符&,意征取得其存储的地址解析:解析这种声明也具有定义的作用,并将预留存储空间。register 说明的声明等价于 auto说明的声明,所不同的是,register 暗示了声明的对象将被频繁地访问,将尽可
28、能存储在寄存器中。如果一个对象被声明为 register,则将不能对它应用一元运算符&,声明为 register但实际按照 auto类型处理的对象的地址进行计算是非法的。 static 将声明的对象说明为静态存储类。这种对象可以用在函数内部或者函数外部。在函数内部,该说明符将引起存储空间的分配,具有定义的作用。在函数外部,该说明符将引起声明对象为具有内部链接。另外,若将其定义为 static类型,则其初值默认为 0。 函数内部的 extern声明表明,被声明的对象的存储空间定义在其他地方。在函数外部,说明声明的对象具有外部链接。 typedef 说明符并不会为对象预留存留空间。8.若已包括头文
29、件stdio.h和string.h,运行下面程序的输出结果是( )。 chars110=“12345“,s210=“089“,s3=“67“; strcat(strcpy(s1,s2),s3); puts(s1);(分数:2.00)A.08967 B.0894567C.089567D.089567解析:解析本题考查字符串复制函数和字符串连接函数:字符串复制函数 strcpy(s1,s2)是把 s2的字符串复制给 s1,执行后 s1=089;字符串连接函数 streat(s1,s2),功能是把 s2字符串连接到 s1字符串的末尾,执行后 s1=08967。9.设 y为整型变量,a=6,a 的地址
30、为 E2000,b=14,b 的地址为 E2001;执行语句 b=&a;y=&a;后 Y的值为( )。(分数:2.00)A.E2000B.E2001C.6D.14 解析:解析&是取地址运算符,y=&a 是将 a的地址赋给 y,而 a的地址没有发生变化,因此 y的值为E2000。10.设有条件表达式:(EXP)?i+;j-,则以下表达式中(EXP)完全等价的是( )。(分数:2.00)A.(EXP=0)B.(EXP!=0) C.(EXP=1)D.(EXP!=1)解析:解析条件表达式的形式为:“表达式 1?表达式 2:表达式 3”。其含义为:当“表达式 1”的值为非零时,求出“表达式 2”的值,此
31、时“表达式 2”的值就是整个条件表达式的值;当“表达式 1”的值为零时,求出“表达式 3”的值,此时“表达式 3”的值就是整个条件表达式的值。对于本题来说,当表达式 EXP为非 0值时条件成立,即执行语句 i+;当 EXP等于 0时,执行语句 j-;这等同于条件表达式“(EXP!=0)?i+:i+;”。11.有下列程序: 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, 则正确的输入是( )。(分数
32、:1.00)A.m=123n=456p=789 B.m=123 n=456 p=789C.m=123,n=456,p=789D.123 456 789解析:解析scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,在输入数据时,按照一一对应的位置原样输入这些字符。12.以下程序段的输出结果为( )。 static char a=“programme“; char*p; p=a; for(p=a;pa+8;p+=2) putchar(*p);(分数:1.00)A.programmeB.porm C.有语法错误D.prog解析:解析本程序首先定义了静态字符数组 a,然后将指针
33、p指向数组 a的首地址,第一次 for循环,p=a,p 指向数组的第一个元素,*p 是取指针 p所指地址的内容,输出 p;第二次 for循环,p=p+2,则 p指向数组的第三个元素,*p 是取指针 p所指地址的内容,输出 o;第三次 for循环,p=p+2,则 p指向数组的第 5个元素,*p 是取指针 p所指地址的内容,输出 r;第四次 for循环,p=p+2,则 p指向数组的第7个元素,*p 是取指针 p所指地址的内容,输出 m;结束循环。13.以下函数 findmin拟实现存数组中查找最小值作为函数值返回,但程序中有错导致不能实现预定功能。#define MAX 2147483647 in
34、t findmin(int x,int n) int i,min; min=MAX; for(i=0;in;i+) if(minxi)min=xi; 造成错误的原因是( )。(分数:1.00)A.定义语句 int i,min;中 min未赋初值B.赋值语句 min=MAN;中,不应给 min赋 MAX值C.语句 if(minXi)min=Xi;中判断条件设置错误D.赋值语句 min=MAX;放错了位置 解析:解析在 C语言中,一个整型变量占用 4个字节的内存单元,并按整型数的存储方式存放数据,允许存放的数值范围是:-21474836482147483647。所以在这个题目中定义的宏变量 MAX
35、的值就是整数范围内最大的数值,因而对于任意一个整数来说,其值都比 MAX小,而判断最小值,是当找到的数比 min小时,才交换。14.有以下程序 #includestdio.h main() int y=9; for(;y0;y-) if(y%3=0)printf(“%d“,-y); 程序的运行结粜是( )。(分数:1.00)A.741B.963C.852 D.875421解析:解析y 的初值为 9,所以在 for循环中,当 y的值为 9、6 或 3时,if 语句的条件成立,执行输出语句,输出表达式-y 的值。因为自减符号在 y的前面,所以首先 y自减 1,然后再输出 y的值,故输出结果为 8
36、5 2。15.下列关于 C语言数据文件的叙述中正确的是( )。(分数:1.00)A.文件由 ASCII码字符序列组成,C 语言只能读写文本文件B.文件由二进制数据序列组成,C 语言只能读写二进制文件C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 解析:解析本题考查数据文件的基本概念。文件由数据流形式组成,可以按数据的存放形式分为二进制文件和文本文件;C 语言既能读写文本文件,又可以读写二进制文件。16.若要求从键盘读入含有窄格字符的字符串,应使用函数( )。(分数:1.00)A.getc()B.gets()
37、 C.getchar()D.scanf()解析:解析scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格;getchar()函数用于输入字符,其调用形式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量 ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入 Enter键时,读入才开始执行。gets()函数的调用形式为:gets(str_adr),其中 str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets 函数用来从终端键盘读入字
38、符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pf)其中 pf是文件指针。函数的功能是从 pf指定的文件中读入一个字符,并把它作为函数值返回。17.若有以下程序段: struct st int n; int*m: ; int a=2,b=3,c=5; struct st s3=(101,&a,102,&c,103,&b); main() struct st*p; p=s; 则以下表达式中值为 5的是( )。(分数:1.00)A.(*p).mB.*(p+1)-m C.*(p+)-nD.(p+)(*m)解析:解析本题考查如何通过指针引用数组元素。首先定义
39、了一个结构体,然后定义了一个结构体变量s3,并赋了初值。在主程序中,定义了一个指向结构体变量 s的指针 p,要使表达式的值为 5,就应该引用 s1.m的值,使指针 p指向 s1,+p 可以实现将 p指针加 1,指向 s1。18.线性表常采用的两种存储结构是( )。(分数:1.00)A.散列方法和索引方式B.链表存储结构和数组C.顺序存储结构和链式存储结构 D.线性存储结构和非线性存储结构解析:解析线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。19.在软件生产过程中,需求信息的来源是( )。(分数:1.00)A.程序员B.项目经理C.设计人员D.软件用户 解析:解析软件需求是指用
40、户对目标软件系统在功能、性能、设计约束等方面的要求,是由用户提出的。20.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是( )。(分数:1.00)A.需求分析 B.详细设计C.软件设计D.概要设计解析:解析软件生命周期的主要活动阶段为:可行性研究和计划制定、需求分析、软件设计、软件实现、软件测试、运行和维护。其中需求分析是对开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能,编写软件规格说明书及初步的用户手册,提交评审。21.对关系 S和 R进行集合运算,结果中既包含 S中的所有元组也包含 R中的所有元组,这样的集合运算称为( )。(分数:2.00
41、)A.并运算 B.交运算C.差运算D.积运算解析:解析关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,新关系中包含两个关系中的所有元组。22.以下程序的输出结果是( )。 int x;int*y;*p; int dt4=1,2,3,4; struct st aa4=2,&dt0,3,&dt0,4,&dt0,5,&dt0,; p=aa; pfintf(“%d/n“,+(p-x); (分数:2.00)A.1B.2C.3 D.4解析:解析程序首先将指针 p指向结构体数组 aa的首地址,通过 p-x 引用了结构体数组 aa0的第一个成员 2;+(p-x)是将 p-x 的值加 1,所以输出结
42、果为 3。23.以下关于 long、int 和 short类型数据占用内存大小的叙述中正确的是( )。(分数:2.00)A.均占 4个字节B.根据数据的大小来决定所占内存的字节数C.由用户自己定义D.由 C语言编译系统决定 解析:解析不同的编译系统或计算机系统对几类整型数所占用的字节数有不同的规定。long、int 和short类型数据占用内存大小是由选择何种 C编译系统决定的。24.有以下程序: #includestdio.h main() FILE *pf; char*s1=“China“,*s2=“Beijing“: pf=fopen(“abc.dat“,“wb+“); fwrite(s
43、2,7,1,pf); rewind(pf); /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); 以上程序执行后 abc.dat文件的内容是( )。(分数:2.00)A.ChinaB.Chinang C.ChinaBeijingD.BeijingChina解析:解析本题考查函数 fwrite的使用。函数 fwrite的调用形式为:int fwrita(char*pt,unsigned n,FILE*fp);其功能是把 pt所指向的 n*size个字节输出到 fp所指文件中,第二次调用该函数时,从文件的第一个位置开始写入,之前已有的会被覆盖掉,如果第二
44、次写入的长度没有第一次的长,则后面短出的部分保留原样。25.有以下定义和语句: struct students int num;char name20;char c; struct int grade1;int grade2;s; ; struct students w,*pw; *pw=w; 下列赋值语句不正确的是( )。(分数:2.00)A.num=1002;B.grade1=85; C.pw-num=1002;D.s.grade2=85;解析:解析本题主要考查的是结构体变量的嵌套定义,也就是说一个结构体变量也可以是一个结构体。在本题中 student这个结构体中包含了结构体 s。所以对结
45、构体变量 w中 grade1成员的引用是w.s.grade1或 w-s-grade1。26.有以下程序段 int j;float y; char name50; scanf(“%2d%f%s“,&j,&y,name); 当执行上述程序段,从键盘上输入 55566 7777abc后,y 的值为( )。(分数:2.00)A.55566.0B.566.0 C.7777.0D.566777.0解析:解析因为在输入格式控制符中指定变量 i的输入格式控制符为“%2d”,即变量 j所占的宽度为2,所以变量 j只接收输入数据的前两位,从第 3位开始直到空格之间的输入整数都会被保存到变量 y中,因为 y为浮点型
46、数据,所以输出结果为选项 B)。27.当 a=4,b=5,c=7,d=6 时,执行下面一段程序: if(ab) if(cd)x=1; else if(ac) if(bc)x=2: else x=3; else x=4; else x=5; 程序执行后,x 的值为( )。(分数:2.00)A.1B.2 C.3D.4解析:解析本题考查 if else语句。第一个 if语句,先判断条件,ab 成立,则执行下面的语句;第二个 if语句,先判断条件,cd 不成立,则执行其对应的 else语句;第三个 if语句,先判断条件,ac 成立,执行其后语句;第四个 if语句,先判断条件,bc 成立,执行语句 x=
47、2。28.下列工具中,不属于结构化分析的常用工具的是( )。(分数:2.00)A.数据流图B.数据字典C.判定树D.S图 解析:解析结构化分析的常用工具有数据流图、数据字典、判定树和判定表。29.以下选项中,能用作数据常量的是( )。(分数:2.00)A.018B.011C.0.8e2.5D.25L 解析:解析本题考查常量定义。数据常量可有 10进制、8 进制、16 进制、指数法等,8 进制数字为 0-7,第一个字符为 0,而不是 o,因此选项 A)和 B)错误。为指数法时,指数部分须为整形,因此选项 C)错误,选项 D)中数字后加入 L是说明此变量为长整型。30.在下列叙述中,错误的是( )。(分数:2.00)A.C语言中,二维数组或多维数组是按行存放的B.赋值表达式 b12=a23是正确的C.char a1;a0=A与 int a1;a0=A等价D.数组名后的方括号内可以为常