C语言程序设计第五版谭浩强课后答案 第十章习题答案

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;
  • 32
    点赞
  • 208
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值