1、二级 C语言笔试-470 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.下列描述中,不是线性表顺序存储结构特征的是( )。A) 不便于插入和删除 B) 需要连续的存储空间C) 可随机访问 D) 需另外开辟空间来保存元素之间的关系(分数:2.00)A.B.C.D.2.下列排序方法中,最坏情况下比较次数最少的是( )。A冒泡排序 B简单选择排序C直接插入排序 D堆排序(分数:1.00)A.B.C.D.3.两个或两个以上模块之间联系的紧密程度称为( )。A) 耦合性 B) 内聚性C) 复杂性 D) 数据传输特性(分数:2.00)A.B.C.D.
2、4.下列选项中不符合良好程序设计风格的是_。(A) 源程序要文档化(B) 数据说明的次序要规范化(C) 避免滥用 go to语句(D) 模块设计要保证高耦合,高内聚(分数:2.00)A.B.C.D.5.下列数据结构中,能用二分法进行查找的是( )。A) 顺序存储的有序线性表 B) 结性链表C) 二叉链表 D) 有序线性链表(分数:2.00)A.B.C.D.6.将 E-R图转换到关系模式时,实体与联系都可以表示成A) 属性 B) 关系 C) 键 D) 域(分数:2.00)A.B.C.D.7.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和_。A) 编码设计 B) 测试阶段 C) 运行阶段
3、D) 物理设计(分数:2.00)A.B.C.D.8.以下叙述中错误的是_。A) C语言源程序经编译后生成后缀为.obj 的目标程序B) C程序经过编译、连接步骤后才能形成一个真正可执行的二进制机器指令文件C) 用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本文件中D) C语青中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令(分数:1.00)A.B.C.D.9.有以下定义语句:double a,b; int w; long c;若各变量已正确赋值,则下列选项中正确的表达式是 _。A) a=a+b=b+ B) w%(int)a+b)C) (c+w)%(int)a
4、 D) w=a=b;(分数:1.00)A.B.C.D.10.下列说法不正确的是( )。A) C语言程序是以函数为基本单位的,整个程序由函数组成B) C语言程序的一条语句可以写在不同的行上C) C语言程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写D) C语言程序的每个语句都以分号结束(分数:1.00)A.B.C.D.11.下列标识符不是关键字的是( )。A) break B) char C) Switch D) return(分数:2.00)A.B.C.D.12.表达式 3.6-5/2+1.2+5%2的值是_。(A) 4.3(B) 4.8(C) 3.3(D) 3.8(分数:1.
5、00)A.B.C.D.13.下列程序输出的结果是( )。main()int a;a=-4+4*5-6;printf(“%d“,a);a=4+4%5-6;printf(“%d“,a);a=-3+4%6/5;printf(“%d“,a);a=(7+6)%5/2;printf(“%d“,a);A) 102-3 1 B) 10-22 1 C) 11-22 1 D) 1022 1(分数:2.00)A.B.C.D.14.若有说明:int *p,m=5,n;,以下正确的程序段是A) p=scanf(“%d“, B) p=scanf(“%d“,*p)C) scanf(“%d:,*p=n; D) p=*p=m;
6、(分数:1.00)A.B.C.D.15.若有“double a;”,则正确的输入语句是( )。A) scanf(“%1f“,A) ; B) scanf(“%f“,C) scanf(“%1f“, D) scanf(“%1e“,(分数:2.00)A.B.C.D.16.若有下列定义(设 int类型变量占 2个字节):int i=8,j=9;则下列语句:printf(“i=%d,j=%d/n“,i,j);输出的结果是( )。A) i=8,j=9 B) i=%d,j=%dC) i=%8,j=%9 D) 8,9(分数:2.00)A.B.C.D.17.下列程序的输出结果是( )。main()int p8=1
7、1,12,13,14,15,16,17,18,i=0,j=0;while(i+ +7)if(pi%2)j+ =pi;printf(“%d/n“,j);A) 42 B) 45 C) 56 D) 60(分数:1.00)A.B.C.D.18.若变量已正确定义,在 if(W)printf(“%d/n“,k);中,以下不可替代 W的是( )。 A) ab+c B) ch=getchat() C) a=b+c D) a+(分数:1.00)A.B.C.D.19.有以下程序:main()int a=1,b;for(b=1:b=10;b+)if(a=8)break;if(a%2=1)a+=5;continue;
8、a-=3:printf(“%d/n“,b);程序运行后的输出结果是_。A) 3 B) 4 C) 5 D) 6(分数:2.00)A.B.C.D.20.以下程序: #includestdio.h main() char str10; scanf(“%s“,while(k+ printf(“%d %d/n“, k, n);A) 0 2 B) 1 3 C) 5 7 D) 1 2(分数:2.00)A.B.C.D.22.下面程序的运行结果是( )。#includestdiohmain()int y=10;doy-;while(-y);printf(“%d/n“,y-);A) -1 B) 1 C) 8 D)
9、 0(分数:1.00)A.B.C.D.23.有以下程序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);whUe(k0 i=nl;j=n2;while(ij)t=si;si=sj;sj=t;i+;j-;main()int a10=1,2,3,4,5,6,7,8,9,0,k;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(k=0;k10;k+)printf(“%d“,ak);printf(
10、“/n“);程序运行的结果是_。A) 0987654321 B) 4321098765 C) 5678901234 D) 0987651234(分数:2.00)A.B.C.D.25.设变量 x和 y均已正确定义并赋值。下列 if语句中,在编译时将产生错误信息的是( )。A) if(x+); B) if(xyC) if(x0)x-elsey+;D) if(y0);else x+;(分数:2.00)A.B.C.D.26.关于字符常量,以下叙述正确的是( )。 A) 空格不是一个字符常量 B) 字符常量能包含大于一个的字符 C) 单引号中的大写字母和小写字母代表的是相同的字符常量 D) 所有的字符常
11、量都可以作为整型量来处理(分数:2.00)A.B.C.D.27.若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是( )。A)实参与其对应的形参共占存储单元B)只有当实参与其对应的形参同名时才共占存储单元C)实参与其对应的形参分别占用不同的存储单元D)实参将数据传递给形参后,立即释放原先占用的存储单元(分数:2.00)A.B.C.D.28.下列叙述中,错误的是( )。A) 在同一 C程序文件中,不同函数中可以使用名字相同的变量B) 在 main()函数体内定义的变量是全局变量C) 形参是局部变量,函数调用完成即失去意义D) 若同一文件中全局和局部变量同名,则全局变量在局部变量作用范围内
12、不起作用(分数:1.00)A.B.C.D.29.有定义语句:char s10;,若要从终端给 s输入 5个字符,错误的输入语句是A) gets( B) k=fun(10,12.5);C) fun(x,n); D) void fun(n,x);(分数:1.00)A.B.C.D.31.表达式 0x130x17的值是A) 0x04 B) 0x13 C) 0xE8 D) 0x17(分数:2.00)A.B.C.D.32.下列合法的字符型常量是( ),A) /x13 B) /081 C) 65 D) “/n/(分数:2.00)A.B.C.D.33.以下程序的输出结果是#include int a33=1,
13、2,3,4,5,6,7,8,9,*p;main( )p=(int *)malloc(sized(int);f(p,a) ;printf(“%d/n“,*p);free(p);f(int *s,int p 3)*s=p11;A)1 B)4 C)7 D)5(分数:2.00)A.B.C.D.34.下述程序向文件输出的结果是 _。#includestdio.hvoid main()FILE*fp=fopen(“TEST“,“wb“);fprintf(fp,“%5.0f%c%d“,58,76273.0-,2278);fclose(fp);A) 58 76273-2278 B) 5876273.00000
14、0-2278C) 5876273-2278 D) 因文件为二进制文件而不可读(分数:2.00)A.B.C.D.35.有以下程序:#include stdio.hmain( )char P = a,b,c ,q: “abc“;printf( “% d % d / n“, sizeof(p), sizeof(q) );程序运行后的输出结果是( )。A) 44 B) 33 C) 34 D) 43(分数:1.00)A.B.C.D.36.下列语句段中,正确的是( )。A) structint x;float y;int a2;unsigned b3;char name10;B) struct stuun
15、signed a3;unsigned b4;x;int*p=float data=y.x;D) struct ndint a,b;unsigned c2=5;(分数:2.00)A.B.C.D.37.下列程序的输出结果是( )。#include stdio.hmain()struct stint y,x,z;unionlong i;int j;char k;un;printf(“%d,%d/n“,sizeof(struct st),sizeof(un);A) 6, 2 B) 6, 4 C) 8, 4 D) 8, 6(分数:2.00)A.B.C.D.38.有以下程序#include main( )
16、FILE *fp;int i=20,j=30,k,n;fp=fopen(“d1.dat“,“w“);fprintf(fp,“%d/n“,i);fprintf(fp,“%d/n“,j);fclose(fp);fp=fopen(“d1.dat“,“r“);fscanf(fp,“%d%d“,k,n);printf(“%d%d/n“,k,n);fclose(fp);程序运行后的输出结果是A)20 30 B)20 50 C)30 50 D)30 20(分数:2.00)A.B.C.D.39.设有定义语句 int (*f)(int);,则以下叙述正确的是A) f是基类型为 int的指针变量B) f是指向函数
17、的指针变量,该函数具有一个 int类型的形参C) f是指向 int类型一维数组的指针变量D) f是函数名,该函数的返回值是基类型为 int类型的地址(分数:2.00)A.B.C.D.40.在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用”(双撇号)括起时,寻找被包含文件的方式是( )。A直接按系统设定的标准方式搜索目录B先在源程序所在的目录搜索,如没找到,再按系统没定的标准方式搜索C仅仅搜索源程序所在目录D仅仅搜索当前目录(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:34.00)41.在关系模型中,二维表的行称为 1。(分数:2.00)填空项 1:_
18、42.类是一个支持集成的抽象数据类型,而对象是类的U /U。(分数:2.00)填空项 1:_43.在一个容量为 32的循环队列中,若头指针 front=3,尾指针 rear=2,则该循环队列中共有个元素。(分数:2.00)填空项 1:_44.一棵二叉树第 6层(根结点为第一层)的结点最多为_个。(分数:2.00)填空项 1:_45.在二维表中,元组的 1 不能再分成更小的数据项。(分数:4.00)填空项 1:_46.与二维表中的“行”的概念最接近的概念是 1。(分数:2.00)填空项 1:_47.以下程序运行后的输出结果是_。 main() int a,b,c; a=10;b=20;c=(a/
19、b1)x=(aB)?A:B;NBSP;X=(AC)?X:C;NBSP;X=(Dx)?x:d;printf(“%d/n“,x);(分数:2.00)填空项 1:_49.若 int x=1,y=2;则计算表达式 y+=y-=x*=y后的 y值是 1。(分数:2.00)填空项 1:_50.以下程序运行后的输出结果是U /U。#include stdio, hmain( )int a=3,b=4,c=5,t=99;if(ba a=c;c=t;if(ae b=a;a=t;printf( “%d %d %d /n“ ,a,b,e);(分数:2.00)填空项 1:_51.以下程序运行后的输出结果是_。main
20、()int x,a=1,b=2,c=3,d=4;x=(ab)? a:b;x=(xc)? x:c;x=(dx)? x:d;pfintf(“%d/n“,x);(分数:2.00)填空项 1:_52.以下程序的输出结果是_。 #includestdio.h fun() static int a=0; a+=3;printf(“%d“,a); main() int cc; for(cc=1;cc5;cc+)fun(); printf(“/n“); (分数:2.00)填空项 1:_53.设有定义:struct personint ID; char name12; P;请将 scanf(“%d“, _);语
21、句补充完整,使其能够为结构体变量 P的成员 ID正确读入数据。(分数:2.00)填空项 1:_54.下列程序用来判断指定文件是否能正常打开,请填空。#includestdio.hmain()FILE*fp;if(fp=fopen(“test.txt“,“r“)=_)prinff(“文件打开成功!/n“);elseprintf(“未能打开文件!/n“);(分数:4.00)填空项 1:_55.下面程序运行后的输出结果是_。#includestdio.hmain()int a=1,2,3,4,5,6,*k3,i=1;while(i4)ki-1=printf(“%d“,*ki-1);i+;(分数:2.
22、00)填空项 1:_二级 C语言笔试-470 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.下列描述中,不是线性表顺序存储结构特征的是( )。A) 不便于插入和删除 B) 需要连续的存储空间C) 可随机访问 D) 需另外开辟空间来保存元素之间的关系(分数:2.00)A.B.C.D. 解析:解析 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此,不需要另外开辟空间来保存元素之间的关系。2.下列排序方法中,最坏情况下比较次数最少的是(
23、 )。A冒泡排序 B简单选择排序C直接插入排序 D堆排序(分数:1.00)A.B.C.D. 解析:解析 本题考查排序的比较次数,冒泡排序、简单选择排序和直接插入排序在最坏的情况下比较次数为 n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为 nlog2n。3.两个或两个以上模块之间联系的紧密程度称为( )。A) 耦合性 B) 内聚性C) 复杂性 D) 数据传输特性(分数:2.00)A. B.C.D.解析:解析 耦合性是模块间互相连接的紧密程皮的度量,取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。4.下列选项中不符合良好程序设计风格的是_。(A) 源程序要文档化(B) 数
24、据说明的次序要规范化(C) 避免滥用 go to语句(D) 模块设计要保证高耦合,高内聚(分数:2.00)A.B.C.D. 解析:5.下列数据结构中,能用二分法进行查找的是( )。A) 顺序存储的有序线性表 B) 结性链表C) 二叉链表 D) 有序线性链表(分数:2.00)A. B.C.D.解析:解析 二分法查找只适用于顺序存储的有序线性表,对于顺序存储的非有序线性表和线性链表,都只能采用顺序查找。6.将 E-R图转换到关系模式时,实体与联系都可以表示成A) 属性 B) 关系 C) 键 D) 域(分数:2.00)A.B. C.D.解析:解析 关系数据库逻辑设计的主要工作是将 E-R图转换成指定
25、 RDBMS中的关系模式。首先,从 E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R 图中属性也可以转换成关系的属性,实体集也可以转换成关系。7.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和_。A) 编码设计 B) 测试阶段 C) 运行阶段 D) 物理设计(分数:2.00)A.B.C.D. 解析:解析 数据库设计阶段包括:需求分析、概念分析、逻辑设计、物理设计。8.以下叙述中错误的是_。A) C语言源程序经编译后生成后缀为.obj 的目标程序B) C程序经过编译、连接步骤后才能形成一个真正可执行的二进制机器指令文件C) 用 C语言编写的程序称为源程序,它以 A
26、SCII代码形式存放在一个文本文件中D) C语青中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令(分数:1.00)A.B.C.D. 解析:解析 C 语言程序编译时,每条可执行语句将转换为二进制的机器指令非执行语句如注释语句等不被编译。9.有以下定义语句:double a,b; int w; long c;若各变量已正确赋值,则下列选项中正确的表达式是 _。A) a=a+b=b+ B) w%(int)a+b)C) (c+w)%(int)a D) w=a=b;(分数:1.00)A.B.C. D.解析:解析 取模运算的操作数必须是整型或长整数类型,因此 C正确。10.下列说法不正确的是
27、( )。A) C语言程序是以函数为基本单位的,整个程序由函数组成B) C语言程序的一条语句可以写在不同的行上C) C语言程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写D) C语言程序的每个语句都以分号结束(分数:1.00)A.B.C. D.解析:解析 本题涉及 C语言的 3个基本知识点:C 语言的源程序是由函数构成的,函数是其基本单位,每一个函数完成相对独立的功能,其中只能包括一个主函数;C 语言规定每个语句以分号结束,其书写格式是自由的,一条语句可以写在不同的行上,或者一行也可以写多条语句;注释行虽然对程序的运行不起作用,但是它可以方便程序员阅读,提高程序的可读性和可移植性
28、,所以书写注释行还是很有必要的。11.下列标识符不是关键字的是( )。A) break B) char C) Switch D) return(分数:2.00)A.B.C. D.解析:解析 break、char、return、switch 都是 C语言中的关键字,switch 不是。因为 C语言区分字母的大小写。12.表达式 3.6-5/2+1.2+5%2的值是_。(A) 4.3(B) 4.8(C) 3.3(D) 3.8(分数:1.00)A.B.C.D. 解析:13.下列程序输出的结果是( )。main()int a;a=-4+4*5-6;printf(“%d“,a);a=4+4%5-6;pr
29、intf(“%d“,a);a=-3+4%6/5;printf(“%d“,a);a=(7+6)%5/2;printf(“%d“,a);A) 102-3 1 B) 10-22 1 C) 11-22 1 D) 1022 1(分数:2.00)A. B.C.D.解析:解析 本题考查%和/算符的使用。如果两个数不能整除,只取结果的整数部分,小数部分全部舍去。运算符“%”要求两个运算对象都为整型,其结果是整数除法的余数。表达式:a=-4+4*5-6=-4+20-6=10;表达式:a=4+4%5-6=4+4-6=2;表达式:a=-3+4%6/5=-3+0=-3;表达式:a=(7+6)%5/2=13%5/2=1
30、。14.若有说明:int *p,m=5,n;,以下正确的程序段是A) p=scanf(“%d“, B) p=scanf(“%d“,*p)C) scanf(“%d:,*p=n; D) p=*p=m;(分数:1.00)A.B.C.D. 解析:解析 “”是求址运算符,“*”是指变量说明符。选项 A)、B)应改为 scanf(“%d“,p);选项 C)中指针变量 p 未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。15.若有“double a;”,则正确的输入语句是( )。A) scanf(“%1f“,A) ; B) scanf(“%f“,C) scanf(“%1f“, D) sc
31、anf(“%1e“,(分数:2.00)A.B.C.D. 解析:解析 scanf 函数的调用形式是:scanf(格式字符串,输入项地址表)其中,“格式字符串”是要输入的变量的格式符:“输入项地址表”是要输入的变量的地址。题中定义变量 a为双精度型变量,双精度变量的格式符为“le”;变量的地址用取地址符“while(i+ +7)if(pi%2)j+ =pi;printf(“%d/n“,j);A) 42 B) 45 C) 56 D) 60(分数:1.00)A.B. C.D.解析:解析 在 C语言中,数组的下标默认为 0,因此数组 p的下标范围为:07。程序循环过程为:第 1次循环 i=0,执行循环,
32、并且 i自加,得 i=1,因此 pi为 p1=12,12%2=0,不执行后面的语句;接着进行第 2次循环,此时 i=1,小于 7执行循环,并且 i自加,得 i=2,因此 pi为 p2=13,13%2=1,执行后面的语句;这样一直到退出循环。最后 j的值为 j=13+15+17=45。18.若变量已正确定义,在 if(W)printf(“%d/n“,k);中,以下不可替代 W的是( )。 A) ab+c B) ch=getchat() C) a=b+c D) a+(分数:1.00)A. B.C.D.解析:解析 在 if()语句的括号是一个合法的 C语言表达式即可,如果表达式的值为 0,则不执行
33、if语句,否则执行 if语句,而在选项 A中,符号不是 C语言的合法运算符,如果要表达 a大于或小于b+c可用 a!=b+c或(ab+c)|(ab+c)来表达,而不能使用 ab+c。所以它不是一个合法的 C语言表达式。19.有以下程序:main()int a=1,b;for(b=1:b=10;b+)if(a=8)break;if(a%2=1)a+=5;continue;a-=3:printf(“%d/n“,b);程序运行后的输出结果是_。A) 3 B) 4 C) 5 D) 6(分数:2.00)A.B. C.D.解析:解析 本题是考查手工模拟执行程序的能力。a 初值是 1,循环开始时 b值为 1
34、,由于 a=8 为假,不执行 break,但 a%2=1为真,执行 a+=5,a 值变为 6,再执行 continue跳过不执行 a-=3语句,而立即开始下一次循环。这时 b值为 2,由于 a值为 6,a=8 仍为假,不执行 break,但 a%2=1为假,不执行复合语句“a+=5;continue;”而执行 a-=3,a值变为 3。再开始下一次循环,这时 b值为 3。由于 a值为3,a=8 仍为假,不执行 break,但 a%2=1为真,执行 a+=5,a 值变为 8,再执行 continue跳过不执行a-=3语句,而立即开始下一次循环。这时 b值为 4。由于 a值为 8,a=8 为真,执行
35、 break,停止 for循环。此时输出的 b值应为 4。20.以下程序: #includestdio.h main() char str10; scanf(“%s“,while(k+ printf(“%d %d/n“, k, n);A) 0 2 B) 1 3 C) 5 7 D) 1 2(分数:2.00)A.B.C.D. 解析:解析 while 循环条件是 k+ i=nl;j=n2;while(ij)t=si;si=sj;sj=t;i+;j-;main()int a10=1,2,3,4,5,6,7,8,9,0,k;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(k=0
36、;k10;k+)printf(“%d“,ak);printf(“/n“);程序运行的结果是_。A) 0987654321 B) 4321098765 C) 5678901234 D) 0987651234(分数:2.00)A.B.C. D.解析:解析 函数 fun的功能是:将数组 s中从 n1至 n2的元素首尾互换,然后将第 2个和倒数第 2个元素互换,依次类推,其实也就是将原来的元素倒置。执行 fun(a,0,3);将数组 a中的第 03 个元素互换,结果为 4 32 1;执行 fun(a,4,9);将数组 a中的第 49 个元素互换,结果为 0 9 8 7 65。此时 a中的元素依次为 4
37、 3 2 1 0 9 8 7 6 5,执行 fun(a,0,9);再次将这 10个元素倒置,结果为 5 6 7 8 9 0 1 2 3 4。25.设变量 x和 y均已正确定义并赋值。下列 if语句中,在编译时将产生错误信息的是( )。A) if(x+); B) if(xyC) if(x0)x-elsey+;D) if(y0);else x+;(分数:2.00)A.B.C. D.解析:解析 选项 A)和选项 B)在条件判断语句的后面是空语句,什么都不做;在选项 D)if后面是一个复合空语句;而在选项 C)中,在 X-后面少了一个分号,所以程序段在编译时,会出现语法错误。26.关于字符常量,以下叙
38、述正确的是( )。 A) 空格不是一个字符常量 B) 字符常量能包含大于一个的字符 C) 单引号中的大写字母和小写字母代表的是相同的字符常量 D) 所有的字符常量都可以作为整型量来处理(分数:2.00)A.B.C.D. 解析:解析 本题考查字符常量的 4个知识点:空格是一个字符常量,而且单引号中的空格不可以省略:字符常量只能包含一个字符:单引号中的大写字母和小写字母代表的是不相同的字符常量:所有的字符常量部作为整型量来处理,在计算机内部,其对应的整数值就是 ASCII码值。27.若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是( )。A)实参与其对应的形参共占存储单元B)只有当实参与
39、其对应的形参同名时才共占存储单元C)实参与其对应的形参分别占用不同的存储单元D)实参将数据传递给形参后,立即释放原先占用的存储单元(分数:2.00)A.B.C. D.解析:解析 本题考查函数调用时的参数传递。函数的形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在函数调用时,实参和其所对应的形参分别占用不同的存储单元,彼此之间不影响。28.下列叙述中,错误的是( )。A) 在同一 C程序文件中,不同函数中可以使用名字相同的变量B) 在 main()函数体内定义的变量是全局变量C) 形参是局部变量,函数调用完成即失去意义D) 若同一文件中全局和局部变
40、量同名,则全局变量在局部变量作用范围内不起作用(分数:1.00)A.B. C.D.解析:解析本题考查函数调用时变量的作用域。形参是局部变量,函数调用完就失去意义了,所以在同一个 C程序文件中,不同的函数体中可以使用名字相同的局部变量。知识拓展在函数之外定义的变量称为外部变量,外部变量是全周变量。全局变量可以为本文件中其他函数所共用。它的有效范围为:从定义变量的位置开始到本源文件结束。29.有定义语句:char s10;,若要从终端给 s输入 5个字符,错误的输入语句是A) gets( B) k=fun(10,12.5);C) fun(x,n); D) void fun(n,x);(分数:1.0
41、0)A.B.C. D.解析:解析 本题考查函数调用。函数调用时,实参前不需加类型说明,选项 A)错误;题目中的函数没有返回值,所以选项 B)错误;函数调用前不需要加类型说明,选项 D)错误。31.表达式 0x130x17的值是A) 0x04 B) 0x13 C) 0xE8 D) 0x17(分数:2.00)A. B.C.D.解析:解析 按位异或运算符“”,其运算规则是比较参与运算的两个二进制数,若相对应二进制位上的数相同,则该位的结果为 0,否则该位的结果为 1。0x130x17=1001110111=0x04。32.下列合法的字符型常量是( ),A) /x13 B) /081 C) 65 D)
42、 “/n/(分数:2.00)A. B.C.D.解析:解析 C 语言的字符常量是用单引号()括起来的一个字符,也可以用以一个“/”开头的字符序列来表示字符常量。其中形式/ddd 表示 1到 3位 8进制数所代表的字符;形式/xhh 表示 1到 2位 16进制数所代表的字符。在本题中,/x13表示回车符,是一个字符常量:而/081用 8进制数所代表的字符形式不正确,因为 8进制数所表示的字符中不会出现数字“8“,65单引号(即撇号)括起来的不是一个字符,而是一个十进制数字:“/n“是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。33.以下程序的输出结果是#include int a33
43、=1,2,3,4,5,6,7,8,9,*p;main( )p=(int *)malloc(sized(int);f(p,a) ;printf(“%d/n“,*p);free(p);f(int *s,int p 3)*s=p11;A)1 B)4 C)7 D)5(分数:2.00)A.B.C.D. 解析:解析 本题考查了二维数组元素引用的方法。题中用动态存储分配函数 malloc分配了一个 int型数据长度大小的内存,然后指针 p指向了这段内存,函数 f( )中对 p所指向的数据进行了赋值,p11为二维数组第二行第二列的元素,对应于实参 a的元素 5,所以输出结果为 5。34.下述程序向文件输出的结
44、果是 _。#includestdio.hvoid main()FILE*fp=fopen(“TEST“,“wb“);fprintf(fp,“%5.0f%c%d“,58,76273.0-,2278);fclose(fp);A) 58 76273-2278 B) 5876273.000000-2278C) 5876273-2278 D) 因文件为二进制文件而不可读(分数:2.00)A.B.C. D.解析:评析 fprintf 函数工作时,多个数据间不会自动加分隔符,选项 A错误;浮点数的输出格式是“%5.0f”表明其小数部分输出 0位,即没有输出,所以选项 B也是错误的。35.有以下程序:#inc
45、lude stdio.hmain( )char P = a,b,c ,q: “abc“;printf( “% d % d / n“, sizeof(p), sizeof(q) );程序运行后的输出结果是( )。A) 44 B) 33 C) 34 D) 43(分数:1.00)A.B.C. D.解析:解析 sizeof 运算符是计算变量或数组所分配到的内存空间的大小,p=a,b, c使数组的长度等于字符的个数 3;q=“abc“使数组的长度等于字符个数加上 1个串结束符,/0,共 4个字符,其中,/0,占用一个存储空间。故本题的输出结果是 3 4。36.下列语句段中,正确的是( )。A) stru
46、ctint x;float y;int a2;unsigned b3;char name10;B) struct stuunsigned a3;unsigned b4;x;int*p=float data=y.x;D) struct ndint a,b;unsigned c2=5;(分数:2.00)A. B.C.D.解析:解析 本题主要考查的知识点是结构类型的概念和定义,结构定义的一般形式:struct结构类型名称 数据类型 成员名 1;数据类型 成员名 2;数据类型 成员名 n;struct为关键字,是结构的标识符;中包围的是组成该结构的成员项;每个成员的数据类型既可以是简单的数据类型,也可
47、以是复杂的数据类型。整个定义作为一个完整的语句,用分号结束。结构类型名称是可以省略的,此时定义的结构称为无名结构。37.下列程序的输出结果是( )。#include stdio.hmain()struct stint y,x,z;unionlong i;int j;char k;un;printf(“%d,%d/n“,sizeof(struct st),sizeof(un);A) 6, 2 B) 6, 4 C) 8, 4 D) 8, 6(分数:2.00)A.B. C.D.解析:解析 本题主要考查结构体和联合内存使用的区别:结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立;联合所占用的内存空间为最长的成员所占用的空间。38.有以下程序#include main( )FILE *fp;int