1、国家二级(C 语言)机试模拟试卷 149及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.在关系代数运算中,有 5种基本运算,它们是( )。(分数:2.00)A.并()、差(-)、交()、除()和笛卡儿积()B.并()、差(-)、交()、投影()和选择()C.并()、交()、投影()、选择()和笛卡儿积()D.并()、差(-)、投影()、选择()和笛卡儿积()2.在数据库系统的组织结构中,下列( )映射把用户数据库与概念数据库联系了起来。(分数:2.00)A.外模式模式B.内模式外模式C.模式内模式D.内模式模式3.下列关于线性链表的描述中,正
2、确的是( )。 、只含有一个指针域来存放下一个元素地址 、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件) 、结点由两部分组成:数据域和指针域。(分数:2.00)A.仅、B.仅、C.仅、D.全部4.下面关于数据库三级模式结构的叙述中,正确的是( )。(分数:2.00)A.内模式可以有多个,外模式和模式只有一个B.外模式可以有多个,内模式和模式只有一个C.内模式只有一个,模式和外模式可以有多个D.模式只有一个,外模式和内模式可以有多个5.设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准
3、,那么第一趟划分后的结果为( )。(分数:2.00)A.23,13,51,57,66,26,81,69,76B.13,23,26,51,57,66,81,76,69C.23,13,51,57,26,66,81,69,76D.23,13,51,57,81,26,66,69,766.下列哪一条不属于数据库设计的任务?( )(分数:2.00)A.设计数据库应用结构B.设计数据库概论结构C.设计数据库逻辑结构D.设计数据库物理结构7.数据库技术的根本目标是( )。(分数:2.00)A.数据存储B.数据共享C.数据查询D.数据管理8.需求分析阶段的任务是( )。(分数:2.00)A.软件开发方法B.软件
4、开发工具C.软件开发费用D.软件系统功能9.关系数据库管理系统能实现的专门关系运算包括( )。(分数:2.00)A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、制表10.数据管理技术发展的三个阶段中,( )没有专门的软件对数据进行管理。 人工管理阶段 文件系统阶段 数据库阶段(分数:2.00)A.仅B.仅C.和D.和11.下面说法正确的是( )。(分数:2.00)A.一个 C程序可以有多个主函数B.一个 C语言的函数中只允许有一对花括号C.C程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内D.在对 C程序进行编译时,可以发现注释行中的拼写错误12.下
5、列不合法的用户标识符是( )。(分数:2.00)A.j2_KEYB.DoubleC.4dD._8_13.以下 4个选项,不能看作一条语句的是( )。(分数:2.00)A.;B.int x=0,y=1,z=0;C.if(!a);D.if(b=0)m=1;n=2;14.设 a和 b均为 int型变量,且 a=6、b=11、c=3,则能使值为 3的表达式是( )。(分数:2.00)A.b(c4)B.b(c-a5)C.ba-a5D.(ba)-(a4)15.以下程序的输出结果是( )。 main() int a=4,b=3,c=2,d=1; printf(“d“,ab?a:dc?d:b);(分数:2.0
6、0)A.1B.3C.2D.416.阅读以下程序 #include main() Int Case;float printF; printf(“请输入 2个数:“); scanf(“df“,&Case,&printF); printf(“dfn“,Case,printF); 以下说法正确的是( )。(分数:2.00)A.定义语句出错,Case 是关键字,不能用作用户自定义标识符,printF 不能用作用户自定义标识符B.定义语句出错,Int 无法被识别C.定义语句无错,scanf 不能作为输入函数使用D.定义语句无错,printf 不能输出 Case的值17.若有定义:float x=15;in
7、t a=1,b=3,c=2;则正确的 switch语句是( )。(分数:2.00)A.switch,(x) case 10:printf(“*n“); case 20:printf(“*n“);B.switch(int)x); case 1:printf(“*n“); case2:printf(“*n“);C.switch(a+b) case 1:printf(“*n“); case 2+1:printf(“*n“);D.switch(a+b) case 1:printf(“*n“); case c:printf(“*n“);18.有以下程序: main() int k=33; printf(
8、“d,0,x“,k,k,k); 执行后的输出结果是( )。(分数:2.00)A.33,033,0x21B.33,033,21C.33,041,021D.33,41,2119.当输入为“Fool?Swalow”时,下面程序的执行结果是( )。 #include main() char c; while(c!=?) c=getchar(); putchar(c);(分数:2.00)A.SwalowB.FoolC.Fool?D.?Swalow20.下面程序段的输出结果是( )。 #includestdioh main() float x=1236547; printf(“fn“,(int)(x*10
9、00+05)(float,)1000);(分数:2.00)A.1237000B.输出格式说明与输出项不匹,输出无定值C.1236000D.12421.若变量都已正确说明,则以下程序段( )。 #inchlde main() int a=8; intb=6; printf(ab?“&a=d“:“!b=d“,a,b);(分数:2.00)A.输出为:&a=8B.输出为:!Ib=8C.输出为:&a=8!b=6D.全部错误22.语句“printf(“abhowareyboun“);“的输出结果是( )。(分数:2.00)A.abhowareybouB.abhowareybouC.howareyouD.a
10、howareybou23.下面程序的运行结果是( )。 #include main() int i; for(i=1;i=0&ais2)C.if(strcmp(s2,s1)0)strcpy(string,str2); printf(“s“,string);(分数:2.00)A.bcdefghB.mC.abcdefgD.bcdefgh或 abcdefg35.请阅读以下程序: #include #include void fun(int b) main() static int i=0; int k,a5:1,3,5,4,9; Do bi+bi+1; fun(a); while(+iA.13579
11、B.48579C.48549D.4899936.在下述程序中,判断 ii共执行的次数是( )。 main() int i=0,j=10,k=2,s=0; for(;) i+=k; if(ij)printf(“d“,s);break; s+=i;(分数:2.00)A.4B.7C.5D.637.下列程序的输出结果是( )。 #include main() struct st int y,x,z; union long i;intj; chark;un; printf(“d,dn“,sizeof(struct st),sizeof(un);(分数:2.00)A.6,2B.12,4C.8,4D.8,6
12、38.以下对联合类型叙述正确的是( )。(分数:2.00)A.可以对联合变量名直接赋值B.使用联合变量的目的是为了节省内存C.任何一个联合变量可以同时引用联合中的不同成员D.联合类型定义中不能同时出现结构类型的成员39.以下程序中 C的二进制值是( )。 char a=2,b=4,c; c=ab2(分数:2.00)A.00000011B.00010100C.00011100D.0001100040.有以下程序 #include main() FILE*fp;int i=20,j=30,k,n; fp=fopen(“dldat“,“w“); fprintf(fp,“dn“,i);fprintf(
13、fp,“dn“,j); fclose(fp); fp=fopen(“dldat“,“r“); fscanf(fp,“dd“,&k,&n);printf(“ddn“,k,n); fclose(fp); 程序运行后的输出结果是( )。 (分数:2.00)A.20 30B.20 50C.30 50D.30 20二、程序填空题(总题数:1,分数:2.00)41.给定程序的功能是:从键盘输入若干行文本(每行不超过 80个字符),写到文件 myfile4txt 中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和 WriteText实现。 请在
14、程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的 BLANKlC 中。不得增行或删行,也不得更改程序的结构! #includestdioh #includestringh #includestdlibh void WriteText(FILE*); void ReadText(FILE*); main() FILE*fp; if(fp=fopen(“myfile4txt“,“w“)=NULL) printf(“open fail!n“);exit(0); WriteText(fp); fclose(fp); if(fp=fopen(“myfil
15、e4txt“,“r“)=NULL) printff“open fail!n“);exit(0); ReadText(fp);fclose(fp); *found* void WriteText(FILE_1_) char str81; printf(“nEnter string with -1 to end: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
16、and outpm to screen:n“); fgets(str,81,fr); while(!feof(fr) *found* printf(“s“,_3_); fgets(str,81,fr); (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.给定程序 MODIlC 中函数 fun的功能是:从整数 1到 55之间,选出能被 3整除、且有一位上的数是5的那些数,并把这些数放在 b所指的数组中,这些数的个数作为函数值返回。规定,函数中 a1放个位数,a2 放十位数。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序
17、的结构。 #includestdioh int fun(int *b) int k,a1,a2,i=0; for(k=10;k=55;k+) *found* a2=k10; a1=k-a2*10; if(k3=0&a2=5)(k3=0&a1=5) bi=k;i+; *found* return k: main() int a100,k,m; m=fun(a); printf(“The result is:n“); for(k=0;km;k+)printf(“4d“,ak);printf(“n“); (分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.请编写一个函数 fun,它
18、的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。 主函数中 X是数组名,n 是 x中的数据个数,max 存放最大值,index 存放最大值所在元素的下标。注意:部分源程序存在文件 PROGlC 文件中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #includestdlibh #includestdioh void fun(int a,int n,int*max,int*d) main() int i,x20,max,index,n=10;void NONO ();
19、 for(i=0;in;i+)x 刚=rand()50;printf(“4d“,xi); printf(“n“); fun(x,n,&max,&index); printf(“Max=5d,Index=4dn“,max,index); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。* FILE*fp,*wf; int i,x20,max,index,n=10,j; fp=fopen(“indat“,“r“); wf=fopen(“outdat“,“w“); for(i=0;i10;i+) for(j=0;jn;j+)fscanf(fp,“
20、d,“,&xj); fun(x,n,&max,&index);fprmtf(wf,“Max=d,Index=dn”,max,index); fclose(fp); fclose(wf);(分数:2.00)_国家二级(C 语言)机试模拟试卷 149答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.在关系代数运算中,有 5种基本运算,它们是( )。(分数:2.00)A.并()、差(-)、交()、除()和笛卡儿积()B.并()、差(-)、交()、投影()和选择()C.并()、交()、投影()、选择()和笛卡儿积()D.并()、差(-)、投影()、选择(
21、)和笛卡儿积() 解析:解析:并、差、笛卡儿积、投影和选择是 5种基本的运算,其他运算即交、连接和除,均可以通过5种基本的运算来表达。2.在数据库系统的组织结构中,下列( )映射把用户数据库与概念数据库联系了起来。(分数:2.00)A.外模式模式 B.内模式外模式C.模式内模式D.内模式模式解析:解析:数据库有两层映像,即外模式模式和模式内模式映像。模式内模式映像定义数据库全局逻辑结构与存储结构之间的对应关系。3.下列关于线性链表的描述中,正确的是( )。 、只含有一个指针域来存放下一个元素地址 、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件) 、结点由两部分组成:数据域和指
22、针域。(分数:2.00)A.仅、B.仅、C.仅、D.全部 解析:解析:在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。4.下面关于数据库三级模式结构的叙述中,正确的是( )。(分数:2.00)A.内模式可以有多个,外模式和模式只有一个B.外模式可以有多个,内模式和模式只有一个 C.内模式只有一个,模式和外模式可以有多个D.模式只有一个,外模式和内模式可以有多个解析:解析:数据库的三
23、级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。5.设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为( )。(分数:2.00)A.23,13,51,57,66,26,81,69,76 B.13,23,26,51,57,66,81,76,69C.23,13,51,57,26,66,81,69,76D.23,13,51,57,81,26,66,69,76解析:解析:快速排序是起泡排序的改进。在快速排序中,任取一个记录,以它
24、为基准用交换的方法将所有的记录分成两部分,关键码值比它小的在一部分,关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。6.下列哪一条不属于数据库设计的任务?( )(分数:2.00)A.设计数据库应用结构 B.设计数据库概论结构C.设计数据库逻辑结构D.设计数据库物理结构解析:解析:数据库设计工作量大而且过程复杂,既是一项数据库工程也是一项庞大的软件工程。考虑数据库及其应用系统开发全过程,将数据库设计分为以下 6个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库的运行和维护。7.数据库技术的根本目标是( )。(分数:2.00)A.数据存储B
25、.数据共享 C.数据查询D.数据管理解析:解析:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技术的根本目标是解决数据共享问题。8.需求分析阶段的任务是( )。(分数:2.00)A.软件开发方法B.软件开发工具C.软件开发费用D.软件系统功能 解析:解析:需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调企现实世界要处理的对象,充分了篇原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。9.关系数据库管理系统能实现的专门关系运算包括( )。(分数
26、:2.00)A.排序、索引、统计B.选择、投影、连接 C.关联、更新、排序D.显示、打印、制表解析:解析:关系数据库管珲系统的专门关系运算包括选择运算,投影运算和连接运算。10.数据管理技术发展的三个阶段中,( )没有专门的软件对数据进行管理。 人工管理阶段 文件系统阶段 数据库阶段(分数:2.00)A.仅 B.仅C.和D.和解析:解析:数据管理技术发展的二个阶段中,只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统,即数据库管理系统。11.下面说法正
27、确的是( )。(分数:2.00)A.一个 C程序可以有多个主函数B.一个 C语言的函数中只允许有一对花括号C.C程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内 D.在对 C程序进行编译时,可以发现注释行中的拼写错误解析:解析:本题涉及 C语言基本的 3个知识点:C 语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号;C 程序的注释部分仅仅是方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释中的错误。12.下列不合法的用户标识符是( )。(分数:2.00)A.j2_KEYB.DoubleC.4d D._8_解析:解析:在
28、 C语言程序中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。13.以下 4个选项,不能看作一条语句的是( )。(分数:2.00)A.;B.int x=0,y=1,z=0;C.if(!a);D.if(b=0)m=1;n=2; 解析:解析:if 语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。 在 if和 else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。选项 D中没有将两个操作语句括起来,不能看作一条语句。14.设 a和 b均为 int型变量,且
29、a=6、b=11、c=3,则能使值为 3的表达式是( )。(分数:2.00)A.b(c4)B.b(c-a5)C.ba-a5D.(ba)-(a4) 解析:解析:选项 D括号内的运算分别是 ba=116=5 和 ac=64=2,最后得到 5-2=3。15.以下程序的输出结果是( )。 main() int a=4,b=3,c=2,d=1; printf(“d“,ab?a:dc?d:b);(分数:2.00)A.1B.3C.2D.4 解析:解析:本题首先判断 ab,当 ab时结果等于 a,否则等于“dc?d:b”,因为 ab,所以直接输出 a的值,注:这里“a:dc?d:b”是用来干扰考生的。16.阅
30、读以下程序 #include main() Int Case;float printF; printf(“请输入 2个数:“); scanf(“df“,&Case,&printF); printf(“dfn“,Case,printF); 以下说法正确的是( )。(分数:2.00)A.定义语句出错,Case 是关键字,不能用作用户自定义标识符,printF 不能用作用户自定义标识符B.定义语句出错,Int 无法被识别 C.定义语句无错,scanf 不能作为输入函数使用D.定义语句无错,printf 不能输出 Case的值解析:解析:C 语言是一种大小写敏感的语言,因此 Int应为 int,而 C
31、ase printF则可以使用。17.若有定义:float x=15;int a=1,b=3,c=2;则正确的 switch语句是( )。(分数:2.00)A.switch,(x) case 10:printf(“*n“); case 20:printf(“*n“);B.switch(int)x); case 1:printf(“*n“); case2:printf(“*n“);C.switch(a+b) case 1:printf(“*n“); case 2+1:printf(“*n“); D.switch(a+b) case 1:printf(“*n“); case c:printf(“*
32、n“);解析:解析:在 C语言中,switch()后的一对圆括号中可以是整型表达式或字符表达式。case 语句后面的常量表达式的类型必须与 switch后圆括号中的表达式类型相同,各 case语句标号的值应该互不相同。选项 A中 case后面的常量表达式为实型,所以不正确;选项 D中 case后面出现了变量表达式,所以选项D错误。18.有以下程序: main() int k=33; printf(“d,0,x“,k,k,k); 执行后的输出结果是( )。(分数:2.00)A.33,033,0x21B.33,033,21C.33,041,021D.33,41,21 解析:解析:本题考查不同进制间
33、的转换。printf 输出函数中输出变量的格式,由输出格式符决定。题中“o”格式符表示以八进制的形式输出;“x”格式符表示以十六进制的形式输出。“33”的八进制和十六进制分别是 41和 21。19.当输入为“Fool?Swalow”时,下面程序的执行结果是( )。 #include main() char c; while(c!=?) c=getchar(); putchar(c);(分数:2.00)A.SwalowB.FoolC.Fool? D.?Swalow解析:解析:本程序是通过 getchar()函数读入字符,并通过 pmchar()数将字符逐个输出,当用户输入“?”时停止输出。20.
34、下面程序段的输出结果是( )。 #includestdioh main() float x=1236547; printf(“fn“,(int)(x*1000+05)(float,)1000);(分数:2.00)A.1237000 B.输出格式说明与输出项不匹,输出无定值C.1236000D.124解析:解析:本题中,(int)(x*1000+05)的结果为 1237,(float)1000 是将 1000强制转换成 float类型:整个表达式(int)(x*1000+05)(float)1000 的结果为 1237000,再以实数(6 位小数)形式输出。21.若变量都已正确说明,则以下程序段
35、( )。 #inchlde main() int a=8; intb=6; printf(ab?“&a=d“:“!b=d“,a,b);(分数:2.00)A.输出为:&a=8 B.输出为:!Ib=8C.输出为:&a=8!b=6D.全部错误解析:解析:本题考杳 printf的输出格式和条件表达式“?:”的使用。printf 函数输出时,“&dn”和“!dn”中的“&”和“!”都是直接输出。条件表达式的基本格式为:a?b:c。其运算规则为:当 a为非 0时,整个表达式的值取 b的值,当 a为 0时,整个表达式取 c的值。pnntf函数中如果在格式说明符方前插入任何字符都将原样输出。本题中 ab为真,
36、所以返回“&a=d”。22.语句“printf(“abhowareyboun“);“的输出结果是( )。(分数:2.00)A.abhowareybouB.abhowareybouC.howareyou D.ahowareybou解析:解析:“b”格式符表示退格,功能是将它后面的字母把它前面的字母覆盖,导致“b”格式符前面的字母不能输出;“”格式符表示输出单引号字符;“”格式符表示输出反斜线字符。23.下面程序的运行结果是( )。 #include main() int i; for(i=1;i=0&ais2)C.if(strcmp(s2,s1)0)strcpy(string,str2); pr
37、intf(“s“,string);(分数:2.00)A.bcdefghB.m C.abcdefgD.bcdefgh或 abcdefg解析:解析:本题考查字符比较函数和字符复制函数:strcmp(s1,s2);函数功能:比较字符串 str1和str2比较的是字符的 ASCII码的值,当 str1str2,返回值为正数。35.请阅读以下程序: #include #include void fun(int b) main() static int i=0; int k,a5:1,3,5,4,9; Do bi+bi+1; fun(a); while(+iA.13579B.48579C.48549 D.
38、48999解析:解析:本题考查的是 for循环以及 while循环。fun 函数中定义了静态变量 i=0,fun(a)使得 a0=a0+a1=4,a1=a1+a2=8,此时 i的值变为 1,+ii共执行的次数是( )。 main() int i=0,j=10,k=2,s=0; for(;) i+=k; if(ij)printf(“d“,s);break; s+=i;(分数:2.00)A.4B.7C.5D.6 解析:解析:分析程序,i+=k;使得 i的值每次增加 2然后再和 j进行了比较看 ij是否成立,i 的变化过程为:i=2,i=4,i=6。i=8,i=10,i=12此时 ij成立,所以判断
39、 ij共执行的次数为 6次。37.下列程序的输出结果是( )。 #include main() struct st int y,x,z; union long i;intj; chark;un; printf(“d,dn“,sizeof(struct st),sizeof(un);(分数:2.00)A.6,2B.12,4 C.8,4D.8,6解析:解析:本题考查的是结构和数组元素所占的字节数。题目中定义的结构 st因为包含 x、y、z 这 3个元素,所以 size(struct)=4+4+4=12;而联合体所占的字节数,由于最后存入的元素会把前面存入的元素覆盖掉,所以联合体所占的字节数就是占据
40、最多存储单元的元素所占的字节数,sizeof(un)=sizeof(long)=4。38.以下对联合类型叙述正确的是( )。(分数:2.00)A.可以对联合变量名直接赋值B.使用联合变量的目的是为了节省内存 C.任何一个联合变量可以同时引用联合中的不同成员D.联合类型定义中不能同时出现结构类型的成员解析:解析:由于联合体是同一存储区域由不同类型的变量共享,所以不可以直接对联合体变量名进行赋值,且联合体中的空间在某一时刻只能保持某一成员的数据;另外合体中可以出现结构类型的成员。39.以下程序中 C的二进制值是( )。 char a=2,b=4,c; c=ab2(分数:2.00)A.0000001
41、1 B.00010100C.00011100D.00011000解析:解析:本题主要考查按位异或和右移运算。b=4 的二进制为 00000100,b2 后为 00000001,a=2的二进制为 00000010,两者异或为 00000011。40.有以下程序 #include main() FILE*fp;int i=20,j=30,k,n; fp=fopen(“dldat“,“w“); fprintf(fp,“dn“,i);fprintf(fp,“dn“,j); fclose(fp); fp=fopen(“dldat“,“r“); fscanf(fp,“dd“,&k,&n);printf(“
42、ddn“,k,n); fclose(fp); 程序运行后的输出结果是( )。 (分数:2.00)A.20 30 B.20 50C.30 50D.30 20解析:解析:分析程序段,百先以只写万式打开文件,利用 fprintf函数将 i和 j的值写入到文件d1dat 中,然后关闭文件;再以只读方式打开文件,利用格式化输入函数 fscanf将文件中的数据赋值给 k和 n,最后输出 k和 n的值,分别是 20和 30。二、程序填空题(总题数:1,分数:2.00)41.给定程序的功能是:从键盘输入若干行文本(每行不超过 80个字符),写到文件 myfile4txt 中,用-1作为字符串输入结束的标志。然
43、后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和 WriteText实现。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的 BLANKlC 中。不得增行或删行,也不得更改程序的结构! #includestdioh #includestringh #includestdlibh void WriteText(FILE*); void ReadText(FILE*); main() FILE*fp; if(fp=fopen(“myfile4txt“,“w“)=NULL) printf(“open fail!n“);
44、exit(0); WriteText(fp); fclose(fp); if(fp=fopen(“myfile4txt“,“r“)=NULL) printff“open fail!n“);exit(0); ReadText(fp);fclose(fp); *found* void WriteText(FILE_1_) char str81; printf(“nEnter string with -1 to end:n“); gets(str); while(strcmp(str,“-1“)!=0) *found* fputs(_2_,fw);fputs(“n“,fw); gets(str);
45、void ReadText(FILE*fr) char str81; printf(“nRead file and outpm to screen:n“); fgets(str,81,fr); while(!feof(fr) *found* printf(“s“,_3_); fgets(str,81,fr); (分数:2.00)_正确答案:(正确答案:(1)*fw (2)str (3)str)解析:解析:第一空:此处是补充函数参数名,参数类型已知是 FILE文件指针,fputs(“n“,fw)是将字符“n”写入文件,可知 fw是文件指针名,因此第一空处应该是 void Write Text(FILE *fw)。第二空:while(strcmp(str,“-1“)!=0)循环的结束标志是 str字符串等于“-1”时循环退出,如果 str不等于“-1”,执行循环体内容:用 fputs函数将 str字符串写入文件。fputs;函数的调用形式是:fputs(s,fp),其中 s是指向字符串的指针或字符串数组名,fp 是指向将要被写入的文件的文件指针,因此第二处应该是 fputs(str,fw)。第三空:while(!feof(fr)循环的作用是不断读取文件直到到达文件尾,每次最多读 81个,将读到