1、二级 C 语言笔试 66 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:60.00)1.有以下程序: #include stdio.h main() printf(“%d/n“,NULL)“ 程序运行后的输出结果是( )。(分数:1.00)A.0B.1C.-1D.NULL 没定义,出错2.数据处理的最小单位是( )。(分数:1.00)A.数据B.数据元素C.数据项D.数据结构3.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:1.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出
2、现在表达式中D.函数调用可以作为一个函数的形参4.在一棵二叉树上第 5 层的结点数最多是( )。(分数:1.00)A.8B.16C.32D.155.下面选项中不属于面向对象程序设计特征的是( )。(分数:1.00)A.继承性B.多态性C.类比性D.封装性6.以下程序中函数 scmp 的功能是返回形参指针 s1 和 s2 所指字符串中较小字符串的首地址。 #include stdio.h #include string.h char *scmp(char*s1,char*s2) if(strcmp(s1,s2)0) return(s1); else return(s2); main() int
3、i; char string20,str320; for(i=0;i3;i+) gets(stri); strcpy(string,scmp(str0,str1); /*库函数 strcpy 对字符串进行复制*/ strcpy(string,scmp(string,str2); printf(“%s/n“,string); 若运行时依次输入:abcd、abba 和abc 三个字符串,则输出结果为( )。(分数:1.00)A.abcdB.abbaC.abcD.baca7.设变量 x 为 float 型且已赋值,则以下语句中能将 x 中的数值保留到小数点后两位,并将第三位四舍五入的是( )。(分数
4、:1.00)A.x=x*100+0.5/100.0;B.x=(x*100+0.5)/100.0C.x=(in(x*100+0.5)/100.0;D.x=(x/100+0.5)/100.0;8.以下选项小可作为 C 语言合法整数的是( )。(分数:1.00)A.10110BB.0386C.0XffaD.x2a29.有以下程序: #include stdio.h main() int a33,*p,i; p= for(i=0;i9;i+) pi=i+1; printf(“%d/n“,a12); 程序运行后的输出结果是( )。(分数:1.00)A.3B.6C.9D.210.下列选项中正确的语句组是(
5、 )。(分数:1.00)A.char s8; s=“Beijing“;B.char *s; s=“Beijing“;C.char s8; s=“Beijing“;D.char *s; s=“Beijing“;11.设有如下程序段: int x=2002,y=2003; printf(“%d/n“,(x,y);则以下叙述中正确的是( )。(分数:1.00)A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出B.运行时产生出错信息C.输出值为 2002D.输出值为 200312.下列叙述中正确的是( )。(分数:1.00)A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构
6、D.二叉树是线性结构13.在 E-R 图中,用来表示实体之间联系的图形是( )。(分数:1.00)A.矩形B.椭圆形C.菱形D.平行四边形14.若有定义:int *p3;则以下叙述中正确的是( )。(分数:1.00)A.定义了一个基类型为 int 的指针变量 p,该变量具有三个指针B.定义了一个指针数组 p,该数组含有三个元素,每个元素都是基类型为 int 的指针C.定义了一个名为*p 的整型数组,该数组含有三个 int 类型元素D.定义了一个可指向一维数组的指针变量 p,所指一维数组应具有三个 int 类型元素15.在下列选项中,不是一个算法一般应该具有的基本特征的是( )。(分数:1.00
7、)A.确定性B.可行性C.无穷性D.拥有足够的情报16.以下选项中不能正确把 cl 定义成结构体变量的是( )。(分数:1.00)A.typedef struct int red; int green; int blue; COLOR; COLOR cl;B.struct color cl int red; int green; int blue; C.struct color int red; int green; int blue; cl;D.struct int red; int green; int blue; cl;17.有定义:int x,y;若要通过 scanf(“%d,%d“,
8、 B.int max(int x, int z; z=xy?x:y; return z; C.max(int x,int int z; z=xy? x:y; return(; D.int max(int x,int return(xy? x:; 19.有以下程序: #include stdio.h main() int a=1,b=2,m=0,n=0,k; k=(n=ba)|(m=ab); printf(“%d,%d/n“,k,m); 程序运行后的输出结果是( )。(分数:1.00)A.0,0B.0,1C.1,0D.1,120.有以下程序: #include stdio.h void fun(
9、char *a, char *b) a=b; (*a)+; main() char c1=A,c2=a,*p1,*p2; p1= P2= fun(p1,p2); printf(“%c%c/n“,c1,c2); 程序运行后的输出结果是( )。(分数:1.00)A.AbB.aaC.AaD.Bb21.有以下程序: #include stdio.h main() int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5); printf(“%d%d%3.1f%3.1f/n“,a,c,f,x); 程序运行后的输出结果是( )。(分数:1.00)A
10、.1 65 1 6.5B.1 65 1.5 6.5C.1 65 1.0 6.5D.2 65 1.5 6.522.在关系数据库中,用来表示实体之间联系的是( )。(分数:1.00)A.树结构B.网结构C.线性表D.二维表23.若有如下程序段,其中 s,a,b,c 均已定义为整型变量,且 a,c 均已赋值(c 大于 0): s=a; for(b=1;b=c;b+) s=s+1;则与上述程序段功能等价的赋值语句是( )。(分数:1.00)A.s=a+b;B.s=a+c;C.s=s+c;D.s=b+c;24.在结构化方法中,软件功能分解属于软件开发中的( )阶段。(分数:1.00)A.详细设计B.需求
11、分析C.总体设计D.编程调试25.程序流程图(PFD)中的箭头代表的是( )。(分数:1.00)A.数据流B.控制流C.调用关系D.组成关系26.有以下程序: #include stdio.h main() int k=4,n=0; for( ;nk;) n+; if(n%3! =0) continue; k-; printf(“%d,%d/n“,k,n); 程序运行后的输出结果是( )。(分数:1.00)A.1,1B.2,2C.3,3D.4,427.以下选项中非法的表达式是( )。(分数:1.00)A.0=x100B.i=j= =0C.(cha(65+3)D.x+1=x+128.有以下程序:
12、 #include stdio.h main() int x=3,y=2,z=1; printf(“%d/n“,x/y 程序运行后的输出结果是( )。(分数:1.00)A.3B.2C.1D.029.下列关于 C 语言数据文件的叙述中正确的是( )。(分数:1.00)A.文件由 ASCII 码字符序列组成,C 语言只能读写文本文件B.文件由二进制数据序列组成,C 语言只能读写二进制文件C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件30.已定义以下函数: fun(char *p2, char *p1) whil
13、e(*p2=*p1)! =/0)p1+;p2+; 此函数的功能是( )。(分数:1.00)A.将 p1 所指字符串复制到 p2 所指内存空间B.将 p1 所指字符串的地址赋给指针 p2C.对 p1 和 p2 两个指针所指字符串进行比较D.检查 p1 和 p2 两个指针所指字符串中是否有/031.有以下程序: #include stdio.h #include string.h main() char str20=“Hello“,“Beijing“,*P=str0; printf(“%d/n“,strlen(p+20); 程序运行后的输出结果是( )。(分数:1.00)A.0B.5C.7D.20
14、32.软件调试的日的是( )。(分数:1.00)A.发现错误B.改正错误C.改善软件的性能D.挖掘软件的潜能33.有以下程序: #include stdio.h fun(int a, int b) if(ab) return(a); else return(b); main() int x=3,y=8,z=6,r; r=fun(fun(x,y),2*z); printf(“%d/n“,r); 程序运行后的输出结果是( )。(分数:1.00)A.3B.6C.8D.1234.有以下函数定义: void fun(int n, double x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun
15、 的正确调用语句是( )。(分数:1.00)A.fun(int y,double ;B.k=fun(10,12.5);C.fun(x,;D.void fun(n,;35.以下叙述中正确的是( )。(分数:1.00)A.C 程序中注释部分可以出现在程序中任意合适的地方B.花括号“”和“”只能作为函数体的定界符C.构成 C 程序的基本单位是函数,所有函数名都可以由用户命名D.分号是 C 语句之间的分隔符,不是语句的一部分36.以下不能定义为用户标识符的是( )。(分数:1.00)A.scanfB.VoidC._3com_D.int37.以下程序的功能是计算: (分数:1.00)A.s=1.0;B.
16、for(n=10;n1;n-)C.s=s+1/n;D.printf(“%6.4f/n“,;38.已定义以下函数: fun(int *p) return *p; 该函数的返回值是( )。(分数:1.00)A.不确定的值B.形参 p 中存放的值C.形参 p 所指存储单元中的值D.形参 p 的地址值39.若程序中已包含头文件 stdio.h,以下选项能正确运用指针变量的程序段是( )。(分数:1.00)A.int *i=NULL; scanf(“%d“,;B.float *f=NULL; *f=10.5;C.char t=m,*c; *c=D.long *L; L=/0;40.以下能正确定义一维数组
17、的选项是( )。(分数:1.00)A.int num;B.#define N 100 int num;C.int num0100;D.int N=100; int num;41.有以下程序: #include stdio.h main() int s=0,a=1,n; scanf(“%d“, do s+=1;a=a-2; while(a!=n); printf(“%d/n“,s); 若要使程序的输出值为 2,则应该从键盘给 n 输入的值是( )。(分数:2.00)A.-1B.-3C.-5D.042.有以下程序: #include stdio.h struct s int x,y; data2=
18、10,100,20,200; main() struct s *p=data; printf(“%d/n“,+(p-x); 程序运行后的输出结果是( )。(分数:2.00)A.10B.11C.20D.2143.有以下程序: #include stdio.h #define F(x,y) (x)*(y) main() int a=3,b=4; printf(“%d/n“,F(a+,b+); 程序运行后的输出结果是( )。(分数:2.00)A.12B.15C.16D.2044.有定义:int a=1,b=2,c=3,x;则以下选项中各程序段执行后,x 的值不为 3 的是 ( )。(分数:2.00)
19、A.if(c x=1; else if(b x=2; else x=3;B.if(a3) x=3; else if(a2) x=2; else x=1;C.if(a3) x=3; if (a2) x=2; if (a1) x=1;D.if (a x=b; if (b x=c; if (c x=a;45.有以下结构体说明和变量定义,如下图所示,指针 p、q、r 分别指向一个链表中的三个连续结点。 (分数:2.00)A.r-next=q;q-next=r-next;p-next=r;B.q-next=r-next;p-next=r;r-next=q;C.p-next=r;q-next=r-next
20、;r-next=p;D.q-next=r-next;r-next=q;p-next=r;46.若 fp 已正确定义并指向某个文件,当未遇到该文件结束标志时函数 feof(fp)的值为 ( )。(分数:2.00)A.0B.1C.-1D.一个非 0 值47.若已定义 c 为字符型变量,则下列语句中正确的是( )。(分数:2.00)A.c=97B.c=“97“;C.c=97;D.c=“a“;48.有以下程序段: main() int a=5,*b,*c; c=b= 程序在执行了 c=b=语句后,表达式*c 的值是( )。(分数:2.00)A.变量 a 的地址B.变量 b 中的值C.变量 a 中的值D
21、.变量 b 的地址49.以下不能正确定义二维数组的选项是( )。(分数:2.00)A.int a22=1,2;B.int a2=1,2,3,4;C.int a22=1,2,3;D.int a2=1,2,3,4;50.已定义 ch 为字符型变量,以下赋值语句中错误的是( )。(分数:2.00)A.ch=/;B.ch=62+3;C.ch=NULL;D.ch=/xaa;二、B填空题/B(总题数:19,分数:40.00)51.若按功能划分,软件测试的方法通常分为白盒测试方法和U 【1】 /U测试方法。(分数:2.00)填空项 1:_52.关系模型的数据操作即是建立在关系上的数据操作,一般有U 【2】
22、/U、增加、删除和修改四种操作。(分数:2.00)填空项 1:_53.在最坏情况下,冒泡排序的时间复杂度为U 【3】 /U。(分数:2.00)填空项 1:_54.在面向对象方法中,信息隐蔽是通过对象的U 【4】 /U性来实现的。(分数:2.00)填空项 1:_55.数据库系统的三级模式分别为U 【5】 /U模式、内部级模式与外部级模式。(分数:2.00)填空项 1:_56.以下程序运行后的输出结果是U 【6】 /U。 #include stdio.h int a=5; fun (int b) static int a=10; a+ =b+; printf(“%d“,a); main() int
23、 c=20; fun(c); a+ =c+; printf(“%d/n“,a); (分数:2.00)填空项 1:_57.以下程序运行后的输出结果是U 【7】 /U。 #include stdio.h main() char m; m=B+32; printf(“%c/n“,m); (分数:2.00)填空项 1:_58.以下程序运行后的输出结果是U 【8】 /U。 #include stdio.h main() int a=1,b=3,c=5; if (c=a+b) printf(“yes/n“); else printf(“no/n“); (分数:2.00)填空项 1:_59.以下程序的功能是
24、将字符串 s 中的数字字符放入 d 数组中,最后输出 d 中的字符串。 例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。 #include stdio.h #include ctype.h main() char s80,d80; int i,j; gets(s); for(i=j=0;si! =/0;i+) if(U 【9】 /U) dj=si; j+; dj=/0; puts(d); (分数:2.00)填空项 1:_60.已有定义如下: struct node int data; struct node *next; *p; 以下语句调用 malloc
25、 函数,使指针 p 指向一个具有 struct node 类型的动态存储空间。请填空。 p=(struct node *)malloc(U 【10】 /U);(分数:2.00)填空项 1:_61.以下程序运行后,若输入:3,abcde 回车,则输出结果是U 【11】 /U。 #include stdio.h #include string.h move(char *str,int n) char temp; int i; temp=strn-1; for(i=n-1;i0;i-) stri=stri-1; str0=temp; main() char s50; int n,i,z; scanf
26、(“%d,%s“, z=strlen(s); for(i=1;i=n;i+) move(s,z); printf(“%s/n“,s); (分数:2.00)填空项 1:_62.以下程序运行后的输出结果是U 【12】 /U。 #include stdio.h msin() int i,n=0,0,0,0,0; for(i=1;i=4;i+) ni=ni-1*2+1; printf(“%d“,ni); (分数:2.00)填空项 1:_63.执行以下程序后,输出“#”的个数是U 【13】 /U。 #include stdio.h main() int i,j; for(i=1;i5;i+) for(j
27、=2;j=i;j+) putchar(#); (分数:2.00)填空项 1:_64.以下程序的功能是调用函数 fun 计算:m=1-2+3-4+9-10,并输出结果。请填空。 #include stdio.h int fun ( int n) int m=0,f=1,i; for(i=1;i=n;i+) m+=i*f; f=U 【14】 /U; return m; main() printf(“m=%d/n“, U【15】 /U);(分数:4.00)填空项 1:_65.请在以下程序第一行的下划线处填写适当内容,使程序能正常运行。 #include stdio.h U 【16】 /U (doub
28、le,double); main() double x,y; scanf(“%If%If“, printf(“%If/n“,max(x,y); double max(double a,double b) return(ab ? a:b);(分数:2.00)填空项 1:_66.以下程序运行后的输出结果是U 【17】 /U。 #include stdio.h main() int p=30; printf(“%d/n“,(p/30 ? p/10:p%3); (分数:2.00)填空项 1:_67.以下程序运行后的输出结果是U 【18】 /U。 #include stdio.h main() int
29、i,m=0,n=0,k=0; for(i=9;i=11;i+) switch(i/10) case 0: m+;n+;break; case 10: n+;break; default: k+;n+; printf(“%d%d%d/n“,m,n,k); (分数:2.00)填空项 1:_68.以下程序运行后的输出结果是U 【19】 /U。(注:如果结果中含有回车,可加一空格写在一行,例如: 1 1 1 1 1 1 1 1 1 可以写成:1 1 1 1 1 1 1 1 1。 #include stdio.h mala() int i,j,a3=1,2,3,4,5,6,7,8,9; for(i=0;
30、i3;i+) for(j=i+1;j3;j+) aji=0; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%d“,aij); printf(“/n“); (分数:2.00)填空项 1:_69.以下程序运行后的输出结果是U 【20】 /U。 #include stdio.h fun(int x) if(x/20) fun(x/2); printf(“%d“,x); main() fun(6); (分数:2.00)填空项 1:_二级 C 语言笔试 66 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:60.00)1.有以下程
31、序: #include stdio.h main() printf(“%d/n“,NULL)“ 程序运行后的输出结果是( )。(分数:1.00)A.0 B.1C.-1D.NULL 没定义,出错解析:解析 本题按“%d”格式输出,相当于输出控制字符 NULL 的 ASCII 码值,即为 0。2.数据处理的最小单位是( )。(分数:1.00)A.数据B.数据元素C.数据项 D.数据结构解析:解析 数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。故正确答案为选项 C)。3.若已定义的函数有返回值,则
32、以下关于该函数调用的叙述中错误的是( )。(分数:1.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参 解析:解析 本题考查函数的调用。在有参函数调用中,是将主调函数的实参值传给被调函数的形参。按函数在程序中出现的位置来分,有以下三种函数调用形式: 函数调用作为一条语句。例如:fun();这时不要求函数带回值,只要求函数完成一定的操作。故选项 A)正确。 函数出现在表达式中,这种表达式称为函数表达式。这时要求函数带回一个确定的值以参加表达式的运算。例如:c=5*max(a,b);函数max 是表达式的一部
33、分,将其值乘以 5 后赋给 c。故选项 C)正确。 函数调用作为一个函数的实参,例如:m=max(a,max(b,c);其中 max(b,c)是一次函数调用,它的值作为 max 另一次调用的实参。故选项 B)正确。 函数调用不可作为一个函数的形参,因为函数调用参数的数据传递是单向传递,即实参传给形参,不能由形参传给实参。故选项 D)错误。4.在一棵二叉树上第 5 层的结点数最多是( )。(分数:1.00)A.8B.16 C.32D.15解析:解析 根据二叉树的性质:二叉树第 i(i1)层上至多有 2i-1个结点。第 5 层的结点数最多是 25-1=16。5.下面选项中不属于面向对象程序设计特征
34、的是( )。(分数:1.00)A.继承性B.多态性C.类比性 D.封装性解析:解析 对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。面向对象技术的三个重要特性是封装性、继承性和多态性。6.以下程序中函数 scmp 的功能是返回形参指针 s1 和 s2 所指字符串中较小字符串的首地址。 #include stdio.h #include string.h char *scmp(char*s1,char*s2) if(strcmp(s1,s2)0) return(s1); else return(s2); ma
35、in() int i; char string20,str320; for(i=0;i3;i+) gets(stri); strcpy(string,scmp(str0,str1); /*库函数 strcpy 对字符串进行复制*/ strcpy(string,scmp(string,str2); printf(“%s/n“,string); 若运行时依次输入:abcd、abba 和abc 三个字符串,则输出结果为( )。(分数:1.00)A.abcdB.abba C.abcD.baca解析:解析 本题考查返回指针值的函数。一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即
36、地址。函数 strcmp(字符串 1,字符串 2)的作用是比较字符串 1 和字符中 2。如果字符串 1=字符串 2,函数值为 0;如果字符串 1,字符串 2,函数值为一正整数;如果字符串 1字符串2,函数值为一负整数。 本题程序中 scmp 函数的作用是比较 s1 和 s2 的大小,对 strcmp 函数的返回值进行判断,如果字符串 1字符串 2,则返回字符串 1 的值,反之返回字符串 2 的值。所以 main 函数中 scmp(str0,str1)的返回值是 abba,通过 strcpy 函数把返回值 abba 复制到 string 中。当执行 scmp(string,str2)时,scra
37、p 函数的返回值为 abba,再次复制到 string 中,最后 string 的值为abba。7.设变量 x 为 float 型且已赋值,则以下语句中能将 x 中的数值保留到小数点后两位,并将第三位四舍五入的是( )。(分数:1.00)A.x=x*100+0.5/100.0;B.x=(x*100+0.5)/100.0C.x=(in(x*100+0.5)/100.0; D.x=(x/100+0.5)/100.0;解析:解析 本题考查实型数据。题目要求保留到小数点后两位,选项 A)、B)、D)都不合要求。在选项C)中,x*100+0.5 的作用是将第三位四舍五入,取整后再除以 100.0,即可得
38、符合要求的数据。8.以下选项小可作为 C 语言合法整数的是( )。(分数:1.00)A.10110BB.0386C.0Xffa D.x2a2解析:解析 整数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整型数,由此可知选项 A)错;选项 B),用 0386 表示八进制错误,因为八进制数字为 07 八个数字,含有 8 是不对的;数字前加“0x”表示十六进制数,所以 D)不对。9.有以下程序: #include stdio.h main() int a33,*p,i; p= for(i=0;i9;i+) pi=i+1; printf(“%d/n“,a12); 程序运行后的输出结果
39、是( )。(分数:1.00)A.3B.6 C.9D.2解析:解析 本题考查指向数组元素的指针变量。p= s=“Beijing“;B.char *s; s=“Beijing“;C.char s8; s=“Beijing“;D.char *s; s=“Beijing“; 解析:解析 本题考查字符串的定义和赋初值。选项 A)、C)错误,字符数组的赋值可以逐个字符赋给数组中各元素,也可以定义字符数组时整个字符串赋初值。选项 B)、D)是给字符指针赋值,正确的格式是char *s;s=“Beijing“;选项 B)不对。11.设有如下程序段: int x=2002,y=2003; printf(“%d/
40、n“,(x,y);则以下叙述中正确的是( )。(分数:1.00)A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出B.运行时产生出错信息C.输出值为 2002D.输出值为 2003 解析:解析 本题考查逗号表达式。逗号表达式的形式为:表达式 1,表达式 2,其求解过程为:先求解表达式 1,再求解表达式 2。整个逗号表达式的值是表达式 2 的值。12.下列叙述中正确的是( )。(分数:1.00)A.线性表是线性结构 B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构解析:解析 根据数据结构中各数据元素之间关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构
41、。线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。13.在 E-R 图中,用来表示实体之间联系的图形是( )。(分数:1.00)A.矩形B.椭圆形C.菱形 D.平行四边形解析:解析 在 E-R 图中,矩形表示实体集,椭圆形表示属性,菱形表示实体之间的联系。14.若有定义:int *p3;则以下叙述中正确的是( )。(分数:1.00)A.定义了一个基类型为 int 的指针变量 p,该变量具有三个指针B.定义了一个指针数组 p,该数组含有三个元素,每个元素都是基类型为 int 的指针 C.定义了一个名为*p 的整型数组,该数组含有三个 int 类型元素D.定义了一个可指向一维数组的指
42、针变量 p,所指一维数组应具有三个 int 类型元素解析:解析 当一个数组中的元素均为指针类型数据时,该数组就称为指针数组。int *p3表示此数组是指针类型的,每个数组元素(指针变量)都是指向一个整型的指针变量。15.在下列选项中,不是一个算法一般应该具有的基本特征的是( )。(分数:1.00)A.确定性B.可行性C.无穷性 D.拥有足够的情报解析:解析 作为一个算法,一般应具有的基本特征有:可行性、确定性、有穷性、拥有足够的情报。16.以下选项中不能正确把 cl 定义成结构体变量的是( )。(分数:1.00)A.typedef struct int red; int green; int
43、blue; COLOR; COLOR cl;B.struct color cl int red; int green; int blue; C.struct color int red; int green; int blue; cl;D.struct int red; int green; int blue; cl;解析:解析 本题选项 A)、C)、D)是定义结构体及其变量的三种正确的形式,能正确将 c1 定义为结构体变量。选项 B)错误。17.有定义:int x,y;若要通过 scanf(“%d,%d“, B.int max(int x, int z; z=xy?x:y; return z
44、; C.max(int x,int int z; z=xy? x:y; return(; D.int max(int x,int return(xy? x:; 解析:解析 在选项 B)中,定义 max 函数时,形参只定义了 x 的数据类型,而未定义 y 的数据类型,所以会出现编译错误。19.有以下程序: #include stdio.h main() int a=1,b=2,m=0,n=0,k; k=(n=ba)|(m=ab); printf(“%d,%d/n“,k,m); 程序运行后的输出结果是( )。(分数:1.00)A.0,0B.0,1C.1,0 D.1,1解析:解析 本题考查逻辑或运算
45、。因为 ba 为真,即 n=1,则 m 不需再计算,保持原值,因此 k 值为1,m 值仍为 0。20.有以下程序: #include stdio.h void fun(char *a, char *b) a=b; (*a)+; main() char c1=A,c2=a,*p1,*p2; p1= P2= fun(p1,p2); printf(“%c%c/n“,c1,c2); 程序运行后的输出结果是( )。(分数:1.00)A.Ab B.aaC.AaD.Bb解析:解析 本题中 fun 函数的形参是两个指向字符型数据的指针,其功能是把 b 赋给 a,然后将 a 所指存储单元里的变量值加 1。在 main 函数中,p1 里存放的是 c1 的地址,p2 里存放的是 c2 的地址,经函数调用 fun(p1,P2)后,p2 的值赋给了 p1,使 p1 和 p2 都指向了 c2,而(*a)+又使a的值加 1 变成了b,所以此时 c2 的值为b,而 c1 的值没变,仍为A。程序改变的是 p1 的地址和 c2 的值。21.有以下程序: #include stdio.h main() int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5); printf(“%d%d%3.1f%3.1f/n“,a,c,f,