第56套:
给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
 注意:源程序存放在考生文件夹下的BLANK1.C中。
 不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
void WriteText(FILE *); 
void ReadText(FILE *); 
main() 
{ FILE *fp; 
if((fp=fopen("myfile4.txt","w"))==NULL) 
{ printf(" open fail!!\n"); exit(0); } 
WriteText(fp); 
fclose(fp); 
if((fp=fopen("myfile4.txt","r"))==NULL) 
{ printf(" open fail!!\n"); exit(0); } 
ReadText(fp); 
fclose(fp); 
} 
void WriteText(FILE ___1___) 
{ char str[81]; 
printf("\nEnter string with -1 to end :\n"); 
gets(str); 
while(strcmp(str,"-1")!=0) { 
fputs(___2___,fw); fputs("\n",fw); 
gets(str); 
} 
} 
void ReadText(FILE *fr) 
{ char str[81]; 
printf("\nRead file and output to screen :\n"); 
fgets(str,81,fr); 
while( !feof(fr) ) { 
printf("%s",___3___); 
fgets(str,81,fr); 
} 
} 
解题思路:
 本题要求是把键盘上输入的内容写到指定的文件中。程序中共有三处要填上适当的内容, 使程序能运行出正确的结果。
 第一处:要求填写文件流的自变量名,在这个函数中,已有的语句fputs("\n",fw);分析可知:由于文件流变量fw在函数体没有定义过,所以本处应填*fw或fw[]。
 第二处:通过while循环语句,把键盘上输入的内容,要写入到指定的文件中,键盘上输入的内容已存入字符串str变量中,因此,本处应填写str。
 第三处:要把已存入文件中的内容,再从文件中读出且已存入字符串变量str中,最后在屏幕显示出来,因此,此处应填写str。
给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
 例如,当s中的数为:7654321时,t中的数为:7531。
 请改正程序中的错误,使它能得出正确的结果。
 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
void fun (long s, long t) 
{ long sl=10; 
*t = s % 10; 
while ( s > 0) 
{ s = s/100; 
*t = s%10 * sl + *t; sl = sl*100; 
} 
} 
main() 
{ long s, t; 
printf("\nPlease enter s:"); scanf("%ld", &s); 
fun(s, &t); 
printf("The result is: %ld\n", t); 
} 
解题思路:
 第一处:在函数fun中使用了t,但在函数定义时没有使用t,所以应改为:void fun(long s,long t)。
 第二处:每循环一次,sl的值就乘以10,所以应改为:sl=sl10;。 *************************************************** 函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上, b数的十位和个位数依次放在c数的千位和十位上。
 例如,当a=45,b=12时,调用该函数后,c=1524。
 注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
 给定源程序:
#include <stdio.h> 
void fun(int a, int b, long *c) 
{ 
} 
main() 
{ int a,b; long c; 
printf("Input a, b:"); 
scanf("%d,%d", &a, &b); 
fun(a, b, &c); 
printf("The result is: %ld\n", c); 
NONO(); 
} 
解题思路:
 本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
 取a十位数字的方法:a/10
 取a个位数字的方法:a%10
 参考答案:
void fun(int a, int b, long *c) 
{ 
*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10); 
}