C语言程序设计第五版谭浩强课后答案
最下方有所有答案的总目录
1.什么是文件型指针?通过文件指针访问文件有什么好处?
-
答:缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名为FILE。
-
通过文件指针访问文件的好处是:可以随机访问文件,有效表示数据结构,动态分配内存,方便使用字符串,有效使用数组。
2.对文件的打开与关闭的含义是什么?为什么要打开和关闭文件?
-
答:”打开“是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来暂时存放输人输出的数据)。
-
”关闭“是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件,显然就无法进行对文件的读写了。
3.从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输入的字符串以“!”结束。
#include <stdio.h>
#include <stdlib.h>
int main( void ) {
FILE *fp = NULL;
char c;
int i;
if ( (fp=fopen("test", "w")) == NULL ) {
printf("open file test error!\n");
exit(EXIT_FAILURE);
}
while ( (c=getchar()) != EOF && c != '!' ) {
if ( c>='a' && c<='z' )
c = c-'a' + 'A';
fputc(c, fp);
}
fclose(fp);
}
结果:
输入 : 123我的AbcABC!
test文件的内容 : 123我的ABCABC
4.有两个磁盘文件A和B,各存放一行字母,今要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中去。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char *s, int i, int j) {
char t = s[i];
s[i] = s[j];
s[j] = t;
}
void select_sort(char *str) {
int i, j;
int len = strlen(str);
for (i=0; i<len; i++) {
int min = i;
for (j=i+1; j<len; j++) {
if ( str[j] < str[min] )
min = j;
}
swap(str, min, i);
}
}
int main( void ) {
FILE *fa, *fb, *fc;
char buf[1024] = {
0};
fa = fopen("A", "r");
fb = fopen("B", "r");
fc = fopen("C", "w");
fgets(buf, 1024, fa);
int len = strlen(buf);
fgets(buf+len, 1024-len, fb);
select_sort(buf);
fputs(buf, fc);
fclose(fa);
fclose(fb);
fclose(fc);
}
5.有5个学生,每个学生有3门课程的成绩,从键盘输人学生数据(包括学号,姓名,3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[32];
int score[3];
float avg;