1、国家二级(C 语言)机试模拟试卷 118 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是( )。(分数:2.00)A.逻辑设计B.需求分析C.详细设计D.物理设计2.对序线性表(23,29,34,55,60,70,78)用二分法查找值为 60 的元素时,需要比较次数为( )。(分数:2.00)A.1B.2C.3D.43.下列描述中,正确的是( )。(分数:2.00)A.线性链表是线性表的链式存储结构B.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结
2、构4.开发大型软件时,产生困难的根本原因是( )。(分数:2.00)A.大型系统的复杂性B.人员知识不足C.客观世界千变万化D.时间紧、任务重5.两个或两个以上的模块之间关联的紧密程度称为( )。(分数:2.00)A.耦合度B.内聚度C.复杂度D.连接度6.下列关于线性表的叙述中,不正确的是( )。(分数:2.00)A.线性表可以是空表B.线性表是一种线性结构C.线性表的所有结点有且仅有一个前件和后件D.线性表是由 n 个元素组成的一个有限序列7.设有如下关系表: (分数:2.00)A.T=R/SB.T=RSC.T=RSD.T=RUS8.以下描述中,不是线性表顺序存储结构特征的是( )。(分数
3、: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.在 C 程序中,整数和实数都能被准确无误地表示出来B.在 C 程序中,任何一个变量名都代表存储器中的一个位置C.静态
4、变量的生存期与整个程序的运行期相同D.C 语言中,任何变量都必须先声明才能进行引用12.以下关于 C 语言数据类型的叙述中正确的是( )。(分数:2.00)A.C 基本数据类型包括:分为整型、实型、浮点型、字符型四种B.实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式C.若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D.若只处理“真”和“假”两种逻辑值,应使用逻辑类型13.以下标识符不是关键字的是( )。(分数:2.00)A.breakB.charC.SwitchD.return14.下列选项中,不能作为合法常量的是( )。(分数:2.00)
5、A.12340B.1234e04C.12340D.1.23415.有以下程序: #inc1ude main() | while(getchar()!=n); | 以下叙述中正确的是( )。(分数:2.00)A.此 while 语句将无限循环B.getchar()不可以出现在 while 语句的条件表达式中C.当执行此 while 语句时,只有按回车键程序才能继续执行D.当执行此 while 语句时,按任意键程序就能继续执行16.下列叙述中正确的是( )。(分数:2.00)A.调用 printf()函数时,必须要有输出项B.使用 putchar()函数时,必须在之前包含头文件 stdiohC.在
6、 C 语言中,整数可以以二进制、八进制或十六进制的形式输出D.调节 getchar()函数读入字符时,可以从键盘上输入字符所对应的 ASCII 码17.执行以下程序段后,w 的值为( )。 int w=A,x=14,y=15; w=(x | y)&(w0)B.(xy0|n+); printf(“d d/n“,k,n); 程序运行后的输出结果是( )。(分数:2.00)A.0 2B.1 3C.5 7D.1 229.以下不正确的定义语句是( )。(分数:2.00)A.double x5=10,20,30,40,50);B.int y5l=0,1,2,3,4,5;C.char c1=1,2,3,4,
7、5;D.char c2=a,b,c;30.若有以下定义,则对数组元素的正确引用是( )。int a5,*p=a;(分数:2.00)A.*a5B.(*a)+2C.*p+4D.*(a+2)31.下列字符数组初始化语句中,不正确的是( )。(分数:2.00)A.char c=goodmorning;B.char c20= “goodmorning“;C.char c=a,b,c,d;D.charc=“goodmorning“;32.下列程序的运行结果为( )。 #inc1ude void abc(char*str) int a,b,i,j; for(i=j=0;stri!=0;i+) if(stri
8、!=a) strj+=stri; strj=0; void main() char str=“abcdef“; abc(str); printf(“str=s“,str); (分数:2.00)A.str=bcdefB.str=abcdefC.str=aD.str=ab33.阅读下面程序,程序执行后的结果为( )。 #inc1ude “stdioh“ main() char *str=“abcdefghijklmnopq“; while(*str+! =e); printf(“c/n“,*str); (分数:2.00)A.fB.aC.eD.q34.设有如下的程序段: char str=“Hell
9、oWorld“; char*ptr; ptr=str; 执行上面的程序段后,“*(ptr+10)”的值为( )。(分数:2.00)A.0B.0C.不确定的值D.0的地址35.下述语句中,在字符串 s1 和 s2 相等时显示“they areEqua1”的是( )。(分数:2.00)A.if(*s1=*s2)puts(“they are Equa1“);B.if(!strcmp(s1,s2)puts(“they are Equa1“);C.if(s1=s2)Puts(“they are Equa1“);D.if(strcmp(s1,s2)puts(“they are Equa1“);36.设有定
10、义: struct complex int rea1,unrea1, data1= 1,8,data2; 则以下赋值语句中错误的是( )。(分数:2.00)A.data2= data1 rea1, data1 unrea1;B.data2=(2,6);C.data2rea1=data1rea1;D.data2rea1=data1unrea1;37.以下程序的输出结果是( )。 #inc1ude void prt (int*x,int *y,int *z) printf(“d,d,dn“,+x,+*y,*(z+); main() int a=10,b=40,c=20; prt (&a,&b,&c
11、); prt (&a,&b,&c);)(分数:2.00)A.11,42,31B.11,41,2012,22,41 12,42,20C.11,21,40D.11,41,2111,21,21 12,42,2238.设有以下说明,则不正确的叙述是( )。 union un int a; charb: float c: arr;(分数:2.00)A.arr 所占的内存长度等于成员 c 的长度B.arr 的地址和它的各成员的地址都是同一地址C.arr 可以作为函数参数D.不能在定义 arr 时对它初始化39.若 x=4,y=5,则 x&y 的结果是( )。(分数:2.00)A.0B.4C.3D.540.
12、下列关于 C 语言数据文件的叙述中正确的是( )。(分数:2.00)A.文件由 ASCII 码字符序列组成,C 语言只能读写文本文件B.文件由二进制数据序列组成,C 语言只能读写二进制文件C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件二、程序填空题(总题数:1,分数:2.00)41.给定程序中,函数 fun 的作用是:不断从终端读入整数,由变量 a 统计大于 0 的个数,用变量 c 来统计小于 0 的个数,当输入 0 时结束输入,并通过形参 pa 和 pb 把统计的数据传回主函数进行输出。 请在程序的下划线
13、处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include void fun(int *px,int *py) int (1) ; scanf ( “d“,&k) ; while _(2)_ main () int x,y; printf ( “x=d y=d/n“,x,y) ; (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.给定程序 MODI1C 中函数 fun 的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。 例如,若字符串为 abcd,则应输
14、出:dcba。 请改正程序中的错误,使它能计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! #include /*found*/ fun (char a) if (*a) fun (a+1); /*found*/ printf( “c“ *a); main() char s10 =“abcd“; printf(“处理前字符串=s/n 处理后字符串=“,s); fun (s); printf(“/n“); (分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:除了字符串前
15、导的*号之外,将串中其它 “*”号全部删除。在编写函数时,不得使用 C 语言提供的字符串函数。函数 fun 中给出的语句仅供参考。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后字符串中的内容应当是:*ABCDEFG。 注意:部分源程序在文件 PROG1C 文件中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #include voici fun( char *a ) /*以下代码仅供参考*/ int i=0,k; while(ai=*) i+; k=i; while(ai!=/0)/*以下程序段实现 非*字符前移*/ ak=
16、/0; 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;i_国家二级(C 语言)机试模拟试卷
17、 118 答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是( )。(分数:2.00)A.逻辑设计B.需求分析 C.详细设计D.物理设计解析:解析:软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用的工具是数据流图和数据字典。2.对序线性表(23,29,34,55,60,70,78)用二分法查找值为 60 的元素时,需要比较次数为( )。(分数:2.00)A.1B.2C.3 D.4解析:解析:根据二分法查找法需要两次: 首先将 60 与表中间的元
18、素 55 进行比较,由于 60 大于55,所以在线性表的后半部分查找。 第二次比较的元素是后半部分的中间元素,将 60 与表中间的元素70 进行比较,由于 60 小于 70,所以在线性表的前半部分查找。 第三次比较的元素是前半部分的中间元素,即 60,这时两者相等,即查找成功。3.下列描述中,正确的是( )。(分数:2.00)A.线性链表是线性表的链式存储结构 B.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结构解析:解析:根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件:有且只
19、有一个根结点;每个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。4.开发大型软件时,产生困难的根本原因是( )。(分数:2.00)A.大型系统的复杂性 B.人员知识不足C.客观世界千变万化D.时间紧、任务重解析:解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的“软件危机”。5.两个或两个以上的模块之间关联的紧密程度称为( )。(分数:2.00)A.耦合度 B.内聚度C.复杂度
20、D.连接度解析:解析:耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部各个元素间彼此结合的紧密程度的度量。6.下列关于线性表的叙述中,不正确的是( )。(分数:2.00)A.线性表可以是空表B.线性表是一种线性结构C.线性表的所有结点有且仅有一个前件和后件 D.线性表是由 n 个元素组成的一个有限序列解析:解析:线性表是一种线性结构,由 n (n0)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件,所以选项 C)是错误的。7.设有如下关系表: (分数:2.00)A.T=R/SB.T=RSC.T=RS D.T=
21、RUS解析:解析:T 就是关系 R 中有的,同时 S 中也有的有序组(4、5、6),即交运算(n)。8.以下描述中,不是线性表顺序存储结构特征的是( )。(分数:2.00)A.可随机访问B.需要连续的存储空间C.不便于插入和删除D.逻辑相邻的数据物理位置上不相邻 解析:解析:线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。9.在三级模式之间引入两层映像,其主要功能之一是( )。(分数:2.00)A.使数据与程序具有较高的独立性 B.使系统具有较
22、高的通道能力C.保持数据与程序的一致性D.提高存储空间的利用率解析:解析:数据库管理系统在数据库的三级模式之间提供了两层映像,保证了数据库中数据的较高的逻辑独立性和物理独立性。10.下列方法中,属于白盒法设计测试用例的方法的是( )。(分数:2.00)A.错误推测B.因果图C.基本路径测试 D.边界值分析解析:解析:白盒测试方法也称为结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。11.在 C 语言中,以下说法不正确的是( )。(分数:2.00)A.在 C 程序中,整数和实数都能被准确无误地表示出来 B.在 C 程序中,任何一个变量名都代表存储器中的一个位置C.静态变量的生存期与整
23、个程序的运行期相同D.C 语言中,任何变量都必须先声明才能进行引用解析:解析:此题考查 C 语言的基本概念。变量的实质就是在内存中占据一定的存储单元,存储单元里存放的是该变量的值,变量的值可以根据需要进行修改:整数在允许的范围内可以准确的表示出来,但不可能表示无限度的实数。12.以下关于 C 语言数据类型的叙述中正确的是( )。(分数:2.00)A.C 基本数据类型包括:分为整型、实型、浮点型、字符型四种B.实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式C.若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型 D.若只处理“真”和“假”两种逻辑值
24、,应使用逻辑类型解析:解析:C 基本数据类型包括:分为整型、实型、枚举型、字符型四种,实型就是浮点型,实型数据只有十进制,没有 2、8、16 进制表达,在 C 语言中没有定义逻辑类型,而是一般用 0 代表假,用非零代表真。13.以下标识符不是关键字的是( )。(分数:2.00)A.breakB.charC.Switch D.return解析:解析:此题考查标识符和关键字的概念。需要注意的是 C 语言是区分大小写的,“switch”是关键字,但“Switch”不是关键字。14.下列选项中,不能作为合法常量的是( )。(分数:2.00)A.12340B.1234e04 C.12340D.1.234
25、解析:解析:用指数形式表示的实型常量需注意两点:e 或 E 后面的指数必须是整数;指数必须是不超过数据表示范围的正负整数,并且在 e 或 E 前必须有数字。15.有以下程序: #inc1ude main() | while(getchar()!=n); | 以下叙述中正确的是( )。(分数:2.00)A.此 while 语句将无限循环B.getchar()不可以出现在 while 语句的条件表达式中C.当执行此 while 语句时,只有按回车键程序才能继续执行 D.当执行此 while 语句时,按任意键程序就能继续执行解析:解析:根据程序顺序执行的次序,当程序执行到 while 这条语句,根据
26、 while 语句中的结束循环的条件是“输入回车键时,结束循环”,所以当按回车键后,程序才执行 while 语句的下一条语句。16.下列叙述中正确的是( )。(分数:2.00)A.调用 printf()函数时,必须要有输出项B.使用 putchar()函数时,必须在之前包含头文件 stdioh C.在 C 语言中,整数可以以二进制、八进制或十六进制的形式输出D.调节 getchar()函数读入字符时,可以从键盘上输入字符所对应的 ASCII 码解析:解析:选项 A),若 printf 函数没有输出项,且格式字符串中不含格式信息,则输出的是格式字符串本身,若格式字符串含有格式信息,运行时则出现错
27、误提示;选项 C),在 C 语言中,整数可以十进制、八进制或十六进制的形式输出;选项 D),getchar 函数是从标准输入设备读取一个字符。17.执行以下程序段后,w 的值为( )。 int w=A,x=14,y=15; w=(x | y)&(w0)B.(xyfun(3,1)fun(2,0)”,其返回值为 2。所以正确答案为选项 B)。26.关于字符常量,以下叙述正确的是( )。(分数:2.00)A.空格不是一个字符常量B.字符常量能包含大于一个的字符C.单引号中的大写字母和小写字母代表的是相同的字符常量D.所有的字符常量都可以作为整型量来处理 解析:解析:本题考查字符常量的 4 个知识点:
28、空格是一个字符常量,而且单引号中的空格不可以省略;字符常量只能包含一个字符;单引号中的大写字母和小写字母代表的是不相同的字符常量;所有的字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是 ASCII 码值。27.下面函数调用语句含有实参的个数为( )。func(exp1,exp2),(exp3,exp4,exp5);(分数:2.00)A.1B.2 C.3D.5解析:解析:本题考查函数调用时的实参形式。这里有一个逗号运算的考查,(a,b)的运算结果为 b,因而只有一个值,结合 func 的调用形式,可以知道实参的个数只有 2 个。28.有以下程序 #inc1ude void main(
29、) int n=2,k=1; while(!(k0|n+); printf(“d d/n“,k,n); 程序运行后的输出结果是( )。(分数:2.00)A.0 2B.1 3C.5 7D.1 2 解析:解析:在程序中整型变量 n 的初始值等于 2,整型变量 k 的初始值等于 1,在执行 while 语句时,由于表达式 k 的值大于 0 为真,所以不再需要判断“n+”是否为真,“(k0|n+)”表达式的值为真。“!(k0|n+)”表达式的值为假,所以 while 语句中的条件不满足,循环语句不会执行,变量 n 的值也不会加 1,所在输出变量 k 和 n 的值是 1 和 2。29.以下不正确的定义语
30、句是( )。(分数:2.00)A.double x5=10,20,30,40,50);B.int y5l=0,1,2,3,4,5; C.char c1=1,2,3,4,5;D.char c2=a,b,c;解析:解析:本题考查对一维数组的赋值。选项 B)中,y5说明数组中有 5 个元素,但却给它赋了 6 个值,数组溢出所以是错误的。30.若有以下定义,则对数组元素的正确引用是( )。int a5,*p=a;(分数:2.00)A.*a5B.(*a)+2C.*p+4D.*(a+2) 解析:解析:本题考查通过指针引用数组元素。选项 A)、C)没有这种引用形式:选项 B),(*a)+2与*a+2 相同,
31、表示第一个元素的值加 2;选项 D),*(a+2)引用数组的第 3 个元素。31.下列字符数组初始化语句中,不正确的是( )。(分数:2.00)A.char c=goodmorning; B.char c20= “goodmorning“;C.char c=a,b,c,d;D.charc=“goodmorning“;解析:解析:本题考查两个概念。 用单引号括起来的一个字符常量只能存放一个字符; C 语言中没有字符串变量,只能用字符数组来存储字符串。选项 A)中一个单引号内存放了若干个字符,是错误的;选项 B)和选项 D)中将一个字符串赋值给一个字符数组是允许的。32.下列程序的运行结果为( )
32、。 #inc1ude void abc(char*str) int a,b,i,j; for(i=j=0;stri!=0;i+) if(stri!=a) strj+=stri; strj=0; void main() char str=“abcdef“; abc(str); printf(“str=s“,str); (分数:2.00)A.str=bcdef B.str=abcdefC.str=aD.str=ab解析:解析:本题考查函数调用的参数传递。通过函数 abc 的执行,将字符串中的字母 a 去掉,保留剩下的,由于是通过指针调用,所以改变字符串的结果。33.阅读下面程序,程序执行后的结果为
33、( )。 #inc1ude “stdioh“ main() char *str=“abcdefghijklmnopq“; while(*str+! =e); printf(“c/n“,*str); (分数:2.00)A.f B.aC.eD.q解析:解析:本题考查的是取内容运算符“*”和自加运算符“+”的优先级问题。由于“+”的优先级高于“*”,所以题干中“*str+!=e”,即“*(str+)!=e”,当 str 指向字符“e“时,while循环的条件不成立,但“str”已经进行了自加指向了字符“f”,所以“*str”输出字符“f”。34.设有如下的程序段: char str=“HelloWo
34、rld“; char*ptr; ptr=str; 执行上面的程序段后,“*(ptr+10)”的值为( )。(分数:2.00)A.0 B.0C.不确定的值D.0的地址解析:解析:本题涉及字符数组和指针两个知识点:在 C 语言中,字符数组在存放字符串时会自动在末尾加上“/0”,所以题中数组 str 有 11 个元素;ptr 指向数组 str 的首地址,“ptr+10”是指向“str10”,“*(ptr+10)”是引用 str10的值(即结束符“/0”)。35.下述语句中,在字符串 s1 和 s2 相等时显示“they areEqua1”的是( )。(分数:2.00)A.if(*s1=*s2)put
35、s(“they are Equa1“);B.if(!strcmp(s1,s2)puts(“they are Equa1“); C.if(s1=s2)Puts(“they are Equa1“);D.if(strcmp(s1,s2)puts(“they are Equa1“);解析:解析:字符串比较不能用两个等号(=)来进行比较,应使用“strcmp(s1,s2)”函数来比较。“strcmp(s1,s2)”函数的功能是:当字符串 s1 和 s2 相等时,返回值为 0,因此,当表达式“!strcmp(s1,s2)=1”时,条件成立,执行后面的语句,输出“they are Equa1”。36.设有定
36、义: struct complex int rea1,unrea1, data1= 1,8,data2; 则以下赋值语句中错误的是( )。(分数:2.00)A.data2= data1 rea1, data1 unrea1;B.data2=(2,6);C.data2rea1=data1rea1; D.data2rea1=data1unrea1;解析:解析:本题主要考查结构体变量的定义与初始化。题目中定义了 complex 类型的结构体变量 data1和 data2,并对 data1 进行了初始化。可以用一个结构体变量的成员对另一个结构体变量的成员赋值。37.以下程序的输出结果是( )。 #in
37、c1ude void prt (int*x,int *y,int *z) printf(“d,d,dn“,+x,+*y,*(z+); main() int a=10,b=40,c=20; prt (&a,&b,&c); prt (&a,&b,&c);)(分数:2.00)A.11,42,31B.11,41,2012,22,41 12,42,20 C.11,21,40D.11,41,2111,21,21 12,42,22解析:解析:本题考查的是函数参数的传递及自加运算符。主函数中第一次调用函数“pr (&a,&b,&c);”,此函数申的输出语句“printf(“d,d,d/n“,+*x,+*y,*
38、(z+));”使得 a 和 b 的值均加 1,而“*(z+)”由于先执行“z+”所以 c 的值不变;第二次调用函数“prt (&a,&b,&c); ”使得a 和 b 在上一次的基础上再各自加 1(因为形参和实参进行的是地址传递),而 c 的值仍不变。38.设有以下说明,则不正确的叙述是( )。 union un int a; charb: float c: arr;(分数:2.00)A.arr 所占的内存长度等于成员 c 的长度B.arr 的地址和它的各成员的地址都是同一地址C.arr 可以作为函数参数 D.不能在定义 arr 时对它初始化解析:解析:本题主要考查联合体的内存使用:联合体所占用
39、的内存空间为最长的成员所占用的空间,int 占 2 个字节,char 占 1 个字节,float 占 4 个字节,所以 arr 所占的内存长度等于成员 c 的长度;arr 的地址和它的各成员的地址都是同一地址;不能直接对 arr 赋值,即不能在定义 arr 时对它初始化;arr 也不可以作为函数参数。39.若 x=4,y=5,则 x&y 的结果是( )。(分数:2.00)A.0B.4 C.3D.5解析:解析:本题主要考查按位与运算的知识点。按位与是对两个运算量相应的位进行逻辑与,“”的规则和逻辑与“”相同。x=4 的二进制为 00000100,y=5 的二进制为 00000101,x&y =0
40、0000100,转化为十进制即为 4。40.下列关于 C 语言数据文件的叙述中正确的是( )。(分数:2.00)A.文件由 ASCII 码字符序列组成,C 语言只能读写文本文件B.文件由二进制数据序列组成,C 语言只能读写二进制文件C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 解析:解析:本题考查的是数据文件的有关概念。文件由数据流的形式组成,可以按数据存放的形式分为二进制文件和文本文件,C 语言既能读写文本文件,又能读写二进制文件。二、程序填空题(总题数:1,分数:2.00)41.给定程序中,函数 fu
41、n 的作用是:不断从终端读入整数,由变量 a 统计大于 0 的个数,用变量 c 来统计小于 0 的个数,当输入 0 时结束输入,并通过形参 pa 和 pb 把统计的数据传回主函数进行输出。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include void fun(int *px,int *py) int (1) ; scanf ( “d“,&k) ; while _(2)_ main () int x,y; printf ( “x=d y=d/n“,x,y) ; (
42、分数:2.00)_正确答案:(正确答案:(1)a=0,c=0,k (2) (k!=0) (3) scanf(“d“,&k);)解析:解析:本题中函数 fun 的功能是不断从终端读入整数,由变量 a 统计大于 0 的个数,用变量 c 来统计小于 0 的个数,当输入 0 时结束输入,然后通过形参 pa 和 pb 把统计的数据传回主函数进行输出。因为此函数对于数字的大小有不同的处理方式,所以根据题意首先要区别大于 0、小于 0 和等于 0 的数字,然后进行统计和程序的进行。然后我们就能想到要使用条件语句来进行,while 或者 if 都可,再利用自增运算符既可以统计,得到结果。 第一空:“int_(
43、1)_;”这一空出现在 fun 函数最开始的定义阶段,我们可以看到这里定义的是 int 整型数据,而在这下面的一步为“scanf(“d“,&k);”即让我们输入 k 的数据,再根据题意,就可以知道这里的 k 是我们不断输入的整数,而整个程序也仅仅需要这一个数据的输入,所以这一空定义的就是我们需要输入的数据 k,同时下面出现在 a,c 也都没有定义,所以这一空应该填“a=0,c=0,k”。 第二空:“while_(2)_; ”这一空出现在 fun 函数中的 while 循环中,是要给出 while 循环的条件语句。根据题意我们就可以知道,这里循环是只要数字不 O 就一直进行,而 while 循环
44、内部也能看到 k0 和 k三、程序修改题(总题数:1,分数:2.00)42.给定程序 MODI1C 中函数 fun 的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。 例如,若字符串为 abcd,则应输出:dcba。 请改正程序中的错误,使它能计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! #include /*found*/ fun (char a) if (*a) fun (a+1); /*found*/ printf( “c“ *a); main() char s10 =“abcd“; printf(“处理前字符串=s/n 处理后字
45、符串=“,s); fun (s); printf(“/n“); (分数:2.00)_正确答案:(正确答案:(1) void fun(char *a) (2) printf(“c“,*a);)解析:解析:本题中函数的功能是将字符串中的内容逆序。题干中给出的 fun 函数通过递归调用自身,实现字符串的逆序。 (1)主函数中“fun(s),”语句中的 s 是数组名,所以在 fun 函数中参数的定义应该是指针型,“fun(chara)”改为“void fun(char *a)”。 (2) printf 函数的调用形式是:printf(格式字符串,输出项表),在格式字符串和输出项表之间有“,”,因此第二
46、个标识处应该是“printf(“c“,*a),”。 函数的定义以及调用、顺序程序设计。四、程序设计题(总题数:1,分数:2.00)43.假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:除了字符串前导的*号之外,将串中其它 “*”号全部删除。在编写函数时,不得使用 C 语言提供的字符串函数。函数 fun 中给出的语句仅供参考。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后字符串中的内容应当是:*ABCDEFG。 注意:部分源程序在文件 PROG1C 文件中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #include voici fun( char *a ) /*以下代码仅供参考*/ int i=0,k; while(ai=*) i+; k=i; while(ai!=