练习13-1
/* 打开与关闭文件 */ #include <stdio.h> int main(void) { char s[128]; FILE* fp; printf("请输入你要打开的文件"); scanf("%s", s); fp = fopen("*s", "r"); /* 打开文件 */ if (fp == NULL) printf("该文件不存在\n"); else { printf("该文件存在\n"); fclose(fp); /* 关闭文件 */ } return 0; }
练习13-2
/* 打开文件。 */ #include <stdio.h> int main(void) { char s[128]; FILE* fp; printf("请输入你要打开的文件:"); scanf("%s", s); fp = fopen("*s", "w"); /* 打开文件 */ return 0; }
练习13-3
/* 读入身高和体重,计算并显示它们的平均值 */ #include <stdio.h> typedef struct { char name[100]; /* 姓名 */ double height; /* 身高 */ double weight; /* 体重 */ } Student; void swap_Student(Student* x, Student* y) { Student temp = *x; *x = *y; *y = temp; } void sort_by_height(Student a[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) if (a[j - 1].height > a[j].height) swap_Student(&a[j - 1], &a[j]); } } int main(void) { FILE* fp; int ninzu = 0; /* 人数 */ char name[100]; /* 姓名 */ double height, weight; /* 身高,体重 */ double hsum = 0; /* 身高合计 */ double wsum = 0; /* 体重合计 */ int i = 0; Student stu[] = { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } }; if ((fp = fopen("hw.dat", "r")) == NULL) /* 打开文件 */ printf("\a文件打开失败。\n"); else { while (fscanf(fp, "%s%lf%lf", stu[i].name, &stu[i].height, &stu[i].weight) == 3) { hsum +=stu[ninzu].height; wsum +=stu[ninzu].weight; i++; ninzu++; }; sort_by_height(stu, i); for (i = 0; i < ninzu; i++) { printf("%-10s %5.1f %5.1f\n",stu[i].name,stu[i].height, stu[i].weight); } printf("----------------------\n"); printf("平均 %5.1f %5.1f\n", hsum / ninzu, wsum / ninzu); fclose(fp); /* 关闭文件 */ } return 0; }
练习13-4
/* 读入身高和体重,计算并显示它们的平均值 */ #include <stdio.h> #define ninzu 4 typedef struct { char name[100]; /* 姓名 */ int height; /* 身高 */ int weight; /* 体重 */ } Student; int main(void) { FILE* fp; if ((fp = fopen("gaoji", "w")) == NULL) /* 打开文件 */ printf("\a文件打开失败。\n"); else { int i; Student stu[] = { { 0 }, { 0 }, { 0 }, { 0 }, { 0 } }; puts("输入姓名,身高,体重"); for (i = 0; i < ninzu; i++) { scanf("%s%d%d", stu[i].name, &stu[i].height, &stu[i].weight); fprintf(fp, "%s %d %d\n", stu[i].name, stu[i].height, stu[i].weight); } fclose(fp); } return 0; }
练习13-5
/* 显示程序上一次运行时的日期和时间 */ #include <time.h> #include <stdio.h> char data_file[] = "datetime.dat"; /* 文件名 */ /*--- 取得并显示上一次运行时的日期和时间 ---*/ void get_data(void) { FILE* fp; if ((fp = fopen(data_file, "r")) == NULL) /* 打开文件 */ {printf("本程序第一次运行。\n"); } else { int year, month, day, h, m, s; char mood[120]; fscanf(fp, "%d%d%d%d%d%d%s", &year, &month, &day, &h, &m, &s,mood); printf("上一次运行是在%d年%d月%d日%d时%d分%d秒,心情%s\n", year, month, day, h, m, s,mood); fclose(fp); /* 关闭文件 */ } } /*--- 写入本次运行时的日期和时间 ---*/ void put_data(void) { FILE* fp; char mood[120]; time_t current = time(NULL); /* 当前日历时间 */ struct tm* timer = localtime(¤t); /* 分解时间*/ if ((fp = fopen(data_file, "w")) == NULL) /* 打开文件 */ printf("\a文件打开失败。\n"); else { printf("当前的心情是:"); scanf("%s", mood); fprintf(fp, "%d %d %d %d %d %d %s\n", timer->tm_year + 1900, timer->tm_mon + 1, timer->tm_mday, timer->tm_hour, timer->tm_min, timer->tm_sec,mood); fclose(fp); /* 关闭文件 */ } } int main(void) { get_data(); /* 取得并显示上一次运行时的日期和时间 */ put_data(); /* 写入本次运行时的日期和时间 */ return 0; }
练习13-6
/* 显示文件内容 */ #include <stdio.h> int main(void) { int ch; int cnt = 0; FILE* fp; char fname[FILENAME_MAX]; /* 文件名 */ printf("文件名:"); scanf("%s", fname); if ((fp = fopen(fname, "r")) == NULL) /* 打开文件 */ printf("\a文件打开失败。\n"); else { while ((ch = fgetc(fp)) != EOF) { if (ch=='\n') {cnt++;} putchar(ch); } printf("%d", cnt); fclose(fp); /* 关闭文件 */ } return 0; }
练习13-7
/* 显示文件内容 */ #include <stdio.h> int main(void) { int ch; int cnt = 0; FILE* fp; char fname[FILENAME_MAX]; /* 文件名 */ printf("文件名:"); scanf("%s", fname); if ((fp = fopen(fname, "r")) == NULL) /* 打开文件 */ printf("\a文件打开失败。\n"); else { while ((ch = fgetc(fp)) != EOF) { putchar(ch); if (ch >' ') { cnt++; } } printf("字符数:%d", cnt); fclose(fp); /* 关闭文件 */ } return 0; }
练习13-8
/* 复制文件 */ #include <stdio.h> int main(void) { int ch; FILE* sfp; /* 原文件 */ FILE* dfp; /* 目标文件 */ char sname[FILENAME_MAX]; /* 原文件名 */ char dname[FILENAME_MAX]; /* 目标文件名 */ printf("打开原文件:"); scanf("%s", sname); printf("打开目标文件:"); scanf("%s", dname); if ((sfp = fopen(sname, "r")) == NULL) /* 打开原文件 */ printf("\a原文件打开失败。\n"); else { if ((dfp = fopen(dname, "w")) == NULL) /* 打开目标文件 */ printf("\a目标文件打开失败。\n"); else { while ((ch = fgetc(sfp)) != EOF) { fputc(ch, dfp); putchar(ch); } fclose(dfp); /* 关闭目标文件 */ } fclose(sfp); /* 关闭原文件 */ } return 0; }
练习13-9
/* 复制文件 */ #include <stdio.h> int main(void) { int ch; FILE* sfp; /* 原文件 */ FILE* dfp; /* 目标文件 */ char sname[FILENAME_MAX]; /* 原文件名 */ char dname[FILENAME_MAX]; /* 目标文件名 */ printf("打开原文件:"); scanf("%s", sname); printf("打开目标文件:"); scanf("%s", dname); if ((sfp = fopen(sname, "r")) == NULL) /* 打开原文件 */ printf("\a原文件打开失败。\n"); else { if ((dfp = fopen(dname, "w")) == NULL) /* 打开目标文件 */ printf("\a目标文件打开失败。\n"); else { while ((ch = fgetc(sfp)) != EOF) { ch=toupper(ch); fputc(ch, dfp); putchar(ch); } fclose(dfp); /* 关闭目标文件 */ } fclose(sfp); /* 关闭原文件 */ } return 0; }
练习13-10
/* 复制文件 */ #include <stdio.h> int main(void) { int ch; FILE* sfp; /* 原文件 */ FILE* dfp; /* 目标文件 */ char sname[FILENAME_MAX]; /* 原文件名 */ char dname[FILENAME_MAX]; /* 目标文件名 */ printf("打开原文件:"); scanf("%s", sname); printf("打开目标文件:"); scanf("%s", dname); if ((sfp = fopen(sname, "r")) == NULL) /* 打开原文件 */ printf("\a原文件打开失败。\n"); else { if ((dfp = fopen(dname, "w")) == NULL) /* 打开目标文件 */ printf("\a目标文件打开失败。\n"); else { while ((ch = fgetc(sfp)) != EOF) { ch=tolower(ch); fputc(ch, dfp); putchar(ch); } fclose(dfp); /* 关闭目标文件 */ } fclose(sfp); /* 关闭原文件 */ } return 0; }
练习13-11
#include <stdio.h> int main(void) { FILE* fp; double v[10]; int i; for (i = 0; i < 10; i++) { printf("v[%d]=", i); scanf("%lf", &v[i]); } /* 写入操作 */ if ((fp = fopen("PI.bin", "wb")) == NULL) /* 打开文件 */ printf("\a文件打开失败。\n"); else { fwrite(&v, sizeof(double), 10, fp); fclose(fp); } /* 关闭文件 */ /* 读取操作 */ if ((fp = fopen("PI.bin", "rb")) == NULL) /* 打开文件 */ printf("\a文件打开失败。\n"); else { fread(&v, sizeof(double), 10, fp); for (i = 0; i < 10; i++) { printf("v[%d]=%.2f\n", i,v[i]); } fclose(fp); /* 关闭文件 */ } return 0; }
练习13-12
暂时不会
练习13-13
#include <stdio.h> int main(void) { int n; int ch; FILE* sfp; /* 原文件 */ FILE* dfp; /* 目标文件 */ char sname[FILENAME_MAX]; /* 原文件名 */ char dname[FILENAME_MAX]; /* 目标文件名 */ printf("打开原文件:"); scanf("%s", sname); printf("打开目标文件:"); scanf("%s", dname); if ((sfp = fopen(sname, "rb")) == NULL) printf("\a原文件打开失败。\n"); else { if ((dfp = fopen(dname, "wb")) == NULL) printf("\a目标文件打开失败。\n"); else { while (n = fread(&ch, sizeof(int), 1, sfp) > 0) { fwrite(&ch, sizeof(int), 1, dfp); } fclose(dfp); } fclose(sfp); printf("done!\n"); } return 0; }