练习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(&current);        /* 分解时间*/

    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;

}
12-28 07:10