1、国家二级(C 语言)机试模拟试卷 124及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列数据结构中,能用二分法进行查找的是( )。(分数:2.00)A.无序线性表B.线性链表C.二叉链表D.顺序存储的有序表2.下列叙述中,不属于设计准则的是( )。(分数:2.00)A.提高模块独立性B.使模块的作用域在该模块的控制域中C.设计成多入口、多出口模块D.设计功能可预测的模块3.下列队列的描述中,正确的是( )。(分数:2.00)A.队列属于非线性表B.队列在队尾删除数据C.队列按“先进后出”进行数据操作D.队列按“先进先出”进行数据操作4.对
2、下列二叉树进行前序遍历的结果为( )。 (分数:2.00)A.ABCDEFGHB.ABDGEHCFC.GDBEHACFD.GDHEBFCA5.对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是( )。(分数:2.00)A.冒泡排序为 n(n一 1)2B.简单插入排序为 nC.希尔排序为 nD.快速排序为 n26.为了使模块尽可能独立,要求( )。(分数:2.00)A.内聚程度要尽量高,耦合程度要尽量强B.内聚程度要尽量高,耦合程度要尽量弱C.内聚程度要尽量低,耦合程度要尽量弱D.内聚程度要尽量低,耦合程度要尽量强7.下列选项中不属于软件生命周期开发阶段任务的是( )。
3、(分数:2.00)A.软件测试B.概要设计C.软件维护D.详细设计8.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指( )。(分数:2.00)A.数据与程序独立存放B.不同的数据被存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对9.在学校中,“班级”与“学生”两个实体集之间的联系属于( )关系。(分数:2.00)A.一对一B.一对多C.多对一D.多对多10.软件调试的目的是( )。(分数:2.00)A.发现错误B.改善软件的性能C.改正错误D.验证软件的正确性11.C语言源程序名的后缀是( )。(分数:2.00)A.exeB.CC.objD.cp12.
4、若函数中有定义语句:int a;,则( )。(分数:2.00)A.系统将自动给 a赋初值 0B.这时 a中的值是和随机数C.系统将自动给 a赋初值1D.这 a中无任何值13.以下选项中,合法的一组 C语言数值常量是( )。(分数:2.00)A.028 5e3 0xfB.12 OXa23 45e0C.177 4c15 OabcD.0x8A 10,000 3e514.下列语句组中,不正确的是( )。(分数:2.00)A.char*s;s=“Olympic“;B.char s=“Olympic“;C.char*s;s=“Olympic“;D.char s=“Olympic“;15.若在定义语句:in
5、t a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )。(分数:2.00)A.scanf(“d“,a,b,c);B.scanf(“ddd“,a,b,c);C.scanf(“d“,p);D.scanf(“d“,p);16.有以下程序,其中u 表示按无符号整数输出( )。 main() unsigned int x=0xFFFF;*x 的初值为十六进制数* printf(“un“,x); 程序运行后的输出结果是( )。(分数:2.00)A.1B.65535C.32767D.0xFFFF17.设变量 x和 y均已正确定义并赋值,以下 if语句中,在编译时将产生错误信息
6、的是( )。(分数:2.00)A.if(x+);B.if(xy&y!=0);C.if(xy)x-else y+;D.if(y0);else x+;18.以下选项中,当 x为大于 1的奇数时,值为 0的表达式为( )。(分数:2.00)A.x2=1B.x2C.x2!=0D.x2=019.若 x,i,j 和 k都是 int型变量,则计算表达式 x=(i=4,j=16,k=32)后,x 的值为( )。(分数:2.00)A.4B.16C.32D.5220.在下列选项中,没有构成死循环的是( )。(分数:2.00)A.int i=100; while(1) i=i0+1; if(i100)break;
7、B.for(;);C.int k=10000; dok+;while(k10000);D.int s=36; while(s)-s;21.在 printf的格式字符中,e 格式字符的作用是( )。(分数:2.00)A.以十六进制无符号形式输出整数B.以带符号的十进制形式输出整数C.以指数形式输出实数D.以字符形式输出,凡只输出一个字符22.以下选项中正确的语句组是( )。(分数:2.00)A.char s;s=“HELLO!“;B.char*s;s=“HELLO!“;C.char s10;s=“HELLO!“;D.char *s;s=“HELLO!“;23.字符串“ABCDEFV“的长度是(
8、)。(分数:2.00)A.11B.10C.5D.324.下列说法正确的是( )。(分数:2.00)A.int(*def)10;-def 指向一个指针,该指针指向 10个整型变量构成的数组B.int*(*gh10);-gh 指向一个指针,该指针指向 10个整型变量构成的数组C.int*(*gh10);-gh 是一个指针,指向由 10个指向整型变量的指针构成的数组D.A,C 均正确25.若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是( )。(分数:2.00)A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D
9、.函数的形参和实参分别占用不同的存储单元26.设有如下定义: struct sk int m; float x: data,*q;若要使 q指向 data中的 m域,正确的赋值语句是( )。(分数:2.00)A.q=&datam;B.*q=datam;C.q=(struct sk*)&datam;D.q=(struct sk*)datam;27.有以下程序: int f1(double a) main() return a*a; double w; int f2(int x,int y) w=f2 (21,40); double a,b; : a=f1(x); b=f1(y); return
10、a+b: 程序执行后,变量w的值是( )。(分数:2.00)A.2021B.20C.200D.0028.若语句“t=fun(fun(x,y,a),(a+b,a+c),x+y+z);”对 fun函数的调用正确,则 fun函数的形参个数为( )。(分数:2.00)A.3B.4C.5D.629.设 x为整型变量,n=14,n 的地址为 4000;m=6,m 的地址为 2000;执行语句 x=&n后的结果为( )。(分数:2.00)A.14B.6C.2000D.400030.若有说明“int m34=3,9,7,85,(*q)4;”和赋值语句“q=m;”,则对数组元素“mij(其中 0=i3,0=i4
11、)”值的正确引用为( )。(分数:2.00)A.(q+i)jB.*qijC.*(*qi+j)D.*(*(q+i)+j)31.有以下程序: void ss(char*s,char t) while(*s) if(*s=t)*s=ta+A; s+; main() char str1100=“abcddfefdbd“,c=d; ss(str1,c);printf(“sn“,str1); 程序运行后的输出结果是( )。(分数:2.00)A.ABCDDEFEDBDB.abcDDfefDbDC.abCAAfefAbAD.Abcddfefdbd32.下述语句中,在字符串 s1和 s2相等时显示”they a
12、re Equal”的是( )。(分数:2.00)A.if(*s1=*s2) puts(“they are Equal“);B.if(!strcmp(s1,s2) puts(“they are Equal“);C.if(s1=s2) puts(“they are Equal“);D.if(strcmp(s1,s2) puts(“they are Equal“);33.设有说明 int(*ptr)M;其中的标识符 ptr是( )。(分数:2.00)A.M个指向整型变量的指针B.指向 M个整型变量的函数指针C.一个指向具有 M个整型元素的一维数组的指针D.具有 M个指针元素的一维指针数组,每个元素都
13、只能指向整型变量34.在 C语言中,变量的隐含存储类别是( )。(分数:2.00)A.autoB.staticC.externD.无存储类别35.有以下程序: #lncludestdioh struct tt int x;struct tt*y;*p; struct tt a4=20,a+1,15,a+2,30,a+3,17,a; main() int i; p=a; for(i=1;i=2;i+)printf(“d,“,px);p=Py;) 程序的运行结果是( )。(分数:2.00)A.20,30,B.30,17C.15,30,D.20,15,36.有以下程序: #includestdioh
14、 main() FILE*fp;int a10=1,2,3,0,0),i; fp=fopen(“d2dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2dat“,“rb“); fread(a,sizeof(int),10,fp); fclose(fp); for(i=0;i10;i+)printf(“d,“,ai); 程序的运行结果是( )。(分数:2.00)A.1,2,3,0,0,0,0,0,0,0,B.1,2,3,1,2,3,0,0,0,0,C.123,0,0
15、,0,0,123,0,0,0,0,D.1,2,3,0,0,1,2,3,0,0,37.定义结构体数组 struct stu int num; char name20; x5=1,“ZHAO“,2,“QIAN“,3,“SUN“,4,“LEE“,5,“ZHOU“); for(i=1;i5;i+) printf(“dc“,xinum,xiname2); 程序执行后的输出结果是( )。(分数:2.00)A.2A3N4E50B.1H213U4EC.1A2N3E40D.1A2N3E4038.union dt int a;char b;double c; data;以下叙述中错误的是(分数:2.00)A.da
16、ta的每个成员起始地址都相同B.变量 data所占内存字节数与成员 C所占字节数相等C.程序段:dataa=5;printf(“fn“,dataC);输出结果为 5000000D.data可以作为函数的实参39.设 x=021,y=012,则 z=xy 的值是( )。(分数:2.00)A.1B.0C.00011011D.1100001040.fgets(str,n,fp)函数从文件中读入一个字符串,以下错误的叙述是( )。(分数:2.00)A.字符串读入后会自动加入0B.fp是指向该文件的文件型指针C.fgets函数将从文件中最多读入 n个字符D.fgets函数将从文件中最多读入 n一 1个字
17、符二、程序填空题(总题数:1,分数:2.00)41.给定程序的功能是:从键盘输入若干行文本(每行不超过 80个字符),写到文件 myfile4txt 中,用1 作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和 WriteText实现。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的 BLANK1C 中。不得增行或删行,也不得更改程序的结构! #includestdioh #includestringh #includestdlibh void WriteText(FILE*); vo
18、id ReadText(FILE*); main() FILE*fp; if(fp=fopen(“myfile4txt“,“w“)=NULL) printf(“open fail!n“);exit(0); WriteText(fp); fclose(fp); if(fp=fopen(“myfile4txt“,“r“)=NULL) printf(“open fail!n“);exit(0); ReadText(fp):fclose(fp); *found* void WriteText(FILE_(1) char str81; printf(“nEnter string with-1 to en
19、d:n“); gets(str); while(strcmp(str,“1“)!=0) *found* fputs(_(2),fw);fputs(“n“,fw); gets(str); void ReadText(FILE*fr) char str81; printf(“nRead file and output to screen:n”); fgets(str,81,fr); while(!feof(fr) *found* pfintf(“s“_(3); fgets(str,81,fr); (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.给定程序 MODI1C 中函数
20、fun的功能是:判断一个整数是否是素数,若是返回 1,否则返回 0。 在main()函数中,若 fun返回 1输出 YES,若 fun返回 0输出 NO!。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数。不得增行或删行,也不得更改程序的结构! #includestdioh int fun(int m) int k=2; while(k=m&(mk) *found* k+ *found* if(m=k)return 1; else return 0; main() int n; printf(“nPlease enter n:“);scanf(“d“,&n); if(fu
21、n(n)printf(“YESn“); else printf(“NO!n“);(分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:料料 A*BC*DEF*G。在编写函数时,不得使用 C语言提供的字符串函数。 注意:部分源程序在文件 PROG1C 文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #includestdi
22、oh void fun(char*a) main() char s81;void NONO();printf(“Enter a string:n“);gets(s); fun(s); printf(“The string after deleted:n“);puts(s); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*in,*out; int i;char s81; in=fopen(“indat“,“r“); out=fopen(“outdat“,“w“); for(i=0;i10;i+) fscanf(in,“s“,
23、s); fun(s); fprintf(out,“sn“,s); fclose(in); fclose(out); (分数:2.00)_国家二级(C 语言)机试模拟试卷 124答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列数据结构中,能用二分法进行查找的是( )。(分数:2.00)A.无序线性表B.线性链表C.二叉链表D.顺序存储的有序表 解析:解析:二分法查找只适用于顺序存储的有序表,表中的元素按值从小到大排列。2.下列叙述中,不属于设计准则的是( )。(分数:2.00)A.提高模块独立性B.使模块的作用域在该模块的控制域中C.设计成多
24、入口、多出口模块 D.设计功能可预测的模块解析:解析:大量软件设计表明,以下的设计准则是可以借鉴为设计的指导和对软件结构图进行优化,这些准则是:提高模块独立性;模块规模适中:深度、宽度、扇出和扇入适当;使模块的作用域在该模块的控制域中;应减少模块的接口和界面的复杂性;设计成单入口、单出口的模块;设计功能可预测的馍块。3.下列队列的描述中,正确的是( )。(分数:2.00)A.队列属于非线性表B.队列在队尾删除数据C.队列按“先进后出”进行数据操作D.队列按“先进先出”进行数据操作 解析:解析:队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。队列的操
25、作数是依据先进先出的原则进行的。因此队列亦称作先进先出的线性表,或后进后出的线性表。4.对下列二叉树进行前序遍历的结果为( )。 (分数:2.00)A.ABCDEFGHB.ABDGEHCF C.GDBEHACFD.GDHEBFCA解析:解析:遍历就是不重复地访问二叉树的所有结点。二叉树遍历的方法有 3种:前序遍历、中序遍历和后序遍历。记住 3种遍历的顺序:前序,访问根按前序遍历左子树按前序遍历右子树;中序,按中序遍历左子树访问根按中序遍历右子树;后序,按后序遍历左子树按后序遍历右子树访问根。所以对该二叉树的中序遍历结果为 ABDGEHCF。5.对于长度为 n的线性表,在最坏情况下,下列各排序法
26、所对应的比较次数中正确的是( )。(分数:2.00)A.冒泡排序为 n(n一 1)2 B.简单插入排序为 nC.希尔排序为 nD.快速排序为 n2解析:解析:在最坏情况下,冒泡排序所需要的比较次数为 n(n1)2;简单插入排序所需要的比较次数为 n(n1)2;希尔排序所需要的比较次数为 O(n 15 );堆排序所需要的比较次数为 O(nlog 2 n)。6.为了使模块尽可能独立,要求( )。(分数:2.00)A.内聚程度要尽量高,耦合程度要尽量强B.内聚程度要尽量高,耦合程度要尽量弱 C.内聚程度要尽量低,耦合程度要尽量弱D.内聚程度要尽量低,耦合程度要尽量强解析:解析:模块独立性是指每个模块
27、只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。7.下列选项中不属于软件生命周期开发阶段任务的是( )。(分数:2.00)A.软件测试B.概要设计C.软件维护 D.详细设计解析:解析:软件生命周期分为软件定义、软件开发及软件运行维护三个阶段,其中开发阶段包括概要设计、详细设计、实现和测试。8.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指(
28、 )。(分数:2.00)A.数据与程序独立存放B.不同的数据被存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对 解析:解析:数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。所以选项 A),选项 B)和选项 C)都不正确。9.在学校中,“班级”与“学生”两个实体集之间的联系属于( )关系。(分数:2.00)A.一对一B.一对多 C.多对一D.多对多解析:解析:一个班可以有多名学生,而一名学生只能属于一个班级,所以“班级”与“学生”两个实体集之间的联系属于一对多关系。10.软件调试的目的是( )。(分数:2.00)A.发现错误B
29、.改善软件的性能C.改正错误 D.验证软件的正确性解析:解析:在对程序进行了成功的测试之后将进入程序调试,程序调试的任务是诊断和改正程序中的错误。11.C语言源程序名的后缀是( )。(分数:2.00)A.exeB.C C.objD.cp解析:解析:由 C语言构成的指令序列称为 C源程序,源程序文件的后缀为“c”。源程序经过 C编译程序编译生成后缀为“obj”的二进制文件(称为目标文件),然后由称为“连接程序”(Link)的软件把目标文件与 C语言提供的各种库函数连接起求,生成后缀为“exe”的可执行文件。12.若函数中有定义语句:int a;,则( )。(分数:2.00)A.系统将自动给 a赋
30、初值 0B.这时 a中的值是和随机数 C.系统将自动给 a赋初值1D.这 a中无任何值解析:解析:本题考查变量赋值基本概念。在声明一个变量后,如果未显式的埘其进行赋值,则它的值是一个随机值。13.以下选项中,合法的一组 C语言数值常量是( )。(分数:2.00)A.028 5e3 0xfB.12 OXa23 45e0 C.177 4c15 OabcD.0x8A 10,000 3e5解析:解析:八进制数开头必须是数字“0”,其数字包括 07,而在选项 A)中,028 是错误的。浮点数据的指数形式表示常量中,C 语言规定字母 e或 E之前必颈要有数字,且 e或 E之后的指数必颈为整数,而选项 C)
31、中 4e15 是错误的。在选项 D)中,整型数据 10,000 的表示形式是错误的。所以今题的答案为选项 B)。14.下列语句组中,不正确的是( )。(分数:2.00)A.char*s;s=“Olympic“;B.char s=“Olympic“;C.char*s;s=“Olympic“; D.char s=“Olympic“;解析:解析:S 是一个字符指针变量,s 代表其地址,C 将字符串赋给地址,因此选项 C)错误。15.若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )。(分数:2.00)A.scanf(“d“,a,b,c);B.sc
32、anf(“ddd“,a,b,c);C.scanf(“d“,p); D.scanf(“d“,p);解析:解析:程序语句“int a,b,c,*p=&c;”定义了 3个整型变量 a,b,c 和一个整型指针变量 p,并且把变量 c的地址赋给 p。scanf 函数的一般形式为“scanf(“格式控制字符串“,地址列表)”,其中的地址列表应当是存放输入数据变量的地址。16.有以下程序,其中u 表示按无符号整数输出( )。 main() unsigned int x=0xFFFF;*x 的初值为十六进制数* printf(“un“,x); 程序运行后的输出结果是( )。(分数:2.00)A.1B.6553
33、5 C.32767D.0xFFFF解析:解析:因为u 表示按无符号整数输出,而 x用十六进制表示为 0xFFFF,所以输出无符号整数的最大值 65535。17.设变量 x和 y均已正确定义并赋值,以下 if语句中,在编译时将产生错误信息的是( )。(分数:2.00)A.if(x+);B.if(xy&y!=0);C.if(xy)x-else y+; D.if(y0);else x+;解析:解析:选项 C)中,if(xy)后而的“x-”是一个表达式而不是一个语句,所以在编译时会产生错误信息。18.以下选项中,当 x为大于 1的奇数时,值为 0的表达式为( )。(分数:2.00)A.x2=1B.x2
34、C.x2!=0D.x2=0 解析:解析:当 x为大于 1的奇数时,x 对 2求余的结果为 1,不为 0,所以选项 D)中表达式的值为 0。19.若 x,i,j 和 k都是 int型变量,则计算表达式 x=(i=4,j=16,k=32)后,x 的值为( )。(分数:2.00)A.4B.16C.32 D.52解析:解析:本题考查逗号表达式的运用。x=(i=4,i=16,k=32)中的 i=4,j=16,k=32 构成一个逗号表达式,整个表达式的值取最后一项的值,即 32,所以 x的值为 32。20.在下列选项中,没有构成死循环的是( )。(分数:2.00)A.int i=100; while(1)
35、 i=i0+1; if(i100)break; B.for(;);C.int k=10000; dok+;while(k10000);D.int s=36; while(s)-s; 解析:解析:选项 D)中,首先定义的变量 s的值为 36,因为语句-s;所以当 s=0时循环会结束;选项 A)由于 while(1)永远成立,循环构成死循环;选项 B)中 for循环没有使循环结束的限定条件,也构成死循环;选项 C)中由于 k永远大于 10000,所以循环无法停止。21.在 printf的格式字符中,e 格式字符的作用是( )。(分数:2.00)A.以十六进制无符号形式输出整数B.以带符号的十进制形
36、式输出整数C.以指数形式输出实数 D.以字符形式输出,凡只输出一个字符解析:解析:本题考查 printf函数的格式。格式字符“c”或者“E”都表示以指数形式输出单精度或双精度数。22.以下选项中正确的语句组是( )。(分数:2.00)A.char s;s=“HELLO!“;B.char*s;s=“HELLO!“;C.char s10;s=“HELLO!“;D.char *s;s=“HELLO!“; 解析:解析:本题考查数组和字符串的赋值。选项 A)中数组 s没有明确其大小就赋值是错误的。选项 B)中不能有大括号,选项 C)中的写法应该为HELLO“!。23.字符串“ABCDEFV“的长度是(
37、)。(分数:2.00)A.11B.10 C.5D.3解析:解析:木题涉及字符串最基本的 2个慨念:字符串的长度是指字符串中字符的个数,但不包括字符串结束符;以反斜杆开头的特殊字符序列,意思是把反斜杆后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,连同后面的字符为一个长度;而也是如此。24.下列说法正确的是( )。(分数:2.00)A.int(*def)10;-def 指向一个指针,该指针指向 10个整型变量构成的数组B.int*(*gh10);-gh 指向一个指针,该指针指向 10个整型变量构成的数组C.int*(*gh10);-gh 是一个指针,指向由 10个指向整
38、型变量的指针构成的数组D.A,C 均正确 解析:解析:int*(*gh10);-gh 是一个指针,指向由 10个指向整型变量的指针构成的数组,int(*def)10;-def 指向一个指针,该指针指向 10个整型变量构成的数组。25.若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是( )。(分数:2.00)A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元 解析:解析:在 C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用函数时,给形参分配临时存储
39、单元,并将实参对应的值传递给形参,在被调用函数中对形参存储单元中的值进行运算,最后通过 return语句把函数值返回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。26.设有如下定义: struct sk int m; float x: data,*q;若要使 q指向 data中的 m域,正确的赋值语句是( )。(分数:2.00)A.q=&datam;B.*q=datam;C.q=(struct sk*)&datam; D.q=(struct sk*)datam;解析:解析:利用强制类型转换(struct sk*)把整数型地址&datam 转换成结构体变量指针赋给结构体指针变
40、量 q。27.有以下程序: int f1(double a) main() return a*a; double w; int f2(int x,int y) w=f2 (21,40); double a,b; : a=f1(x); b=f1(y); return a+b: 程序执行后,变量w的值是( )。(分数:2.00)A.2021B.20C.200 D.00解析:解析:本题考查函数调用的使用。计算 w的时候,先调用 f2函数,f2 函数的公式是“a+b”,计算 a和 b的时候又调用到 f1函数,f1 的函数是“a*a”,因此,w 的计算公式为: w=(double)(int)(21*21
41、)+(int)(40*40)=200。28.若语句“t=fun(fun(x,y,a),(a+b,a+c),x+y+z);”对 fun函数的调用正确,则 fun函数的形参个数为( )。(分数:2.00)A.3 B.4C.5D.6解析:解析:本题考查函数调用时的参数个数。在函数调用时,实参必须和形参的个数、类型一一对应。但函数的计算结果只有一个值,因而 fun函数的参数个数为 3。29.设 x为整型变量,n=14,n 的地址为 4000;m=6,m 的地址为 2000;执行语句 x=&n后的结果为( )。(分数:2.00)A.14B.6C.2000D.4000 解析:解析:&是取地址运算符,表达式
42、 x=&a是表示将 a的地址赋给变量 x。30.若有说明“int m34=3,9,7,85,(*q)4;”和赋值语句“q=m;”,则对数组元素“mij(其中 0=i3,0=i4)”值的正确引用为( )。(分数:2.00)A.(q+i)jB.*qijC.*(*qi+j)D.*(*(q+i)+j) 解析:解析:*(q+i)指向第 i行首地址,*(*(q+i)+j)代表第 i行第 j个元素。31.有以下程序: void ss(char*s,char t) while(*s) if(*s=t)*s=ta+A; s+; main() char str1100=“abcddfefdbd“,c=d; ss(
43、str1,c);printf(“sn“,str1); 程序运行后的输出结果是( )。(分数:2.00)A.ABCDDEFEDBDB.abcDDfefDbD C.abCAAfefAbAD.Abcddfefdbd解析:解析:函数 ss(char*s,chart)的功能是将指针 s所指向的字符串中存在的字符“t”均改写成大写字母:所以 main函数中引用函数 ss后使得数组 str中的小写字母“d”均变成了大写字母“D”,然后输出数组 str1,结果为:abcDDfefDbD。32.下述语句中,在字符串 s1和 s2相等时显示”they are Equal”的是( )。(分数:2.00)A.if(*
44、s1=*s2) puts(“they are Equal“);B.if(!strcmp(s1,s2) puts(“they are Equal“); C.if(s1=s2) puts(“they are Equal“);D.if(strcmp(s1,s2) puts(“they are Equal“);解析:解析:字符串比较不能用“=”,要用 strcmp(s1,s2)函数,字符串 s1和 s2相等时返回值为0,故!strcmp(s1,s2)=1,条件成立执型后面的语句,输出 they are Equal。33.设有说明 int(*ptr)M;其中的标识符 ptr是( )。(分数:2.00)A
45、.M个指向整型变量的指针B.指向 M个整型变量的函数指针C.一个指向具有 M个整型元素的一维数组的指针 D.具有 M个指针元素的一维指针数组,每个元素都只能指向整型变量解析:解析:恨据 C语言的语法规则可知,int(*ptr)M中的标识符 ptr是一个指向具有 M个整形元素的一维数组指针。34.在 C语言中,变量的隐含存储类别是( )。(分数:2.00)A.auto B.staticC.externD.无存储类别解析:解析:C 语言中,变量的隐含存储类型为 auto。35.有以下程序: #lncludestdioh struct tt int x;struct tt*y;*p; struct
46、tt a4=20,a+1,15,a+2,30,a+3,17,a; main() int i; p=a; for(i=1;i=2;i+)printf(“d,“,px);p=Py;) 程序的运行结果是( )。(分数:2.00)A.20,30,B.30,17C.15,30,D.20,15, 解析:解析:本题考查的是指针和结构的应用。首先定义的数组 tt中有两个成员,一个整型变量,一个绐构指针。当 i=1时,p 指针指向结构数组的第一个元素,并输出此元素的第一个成员 x,即 20;当 i=2时,p 指针指相结构数组的第二个元素的第一个成员,所以输出 15。36.有以下程序: #includestdioh main() FILE*fp;int a10=1,2,3,0,0),i; fp=fopen(“d2dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2dat“,“