C语言实验10_文件

实验10(01)文件的建立和基本读写操作

编写一个程序,要求如下:
(1)从键盘上输入 20 个字符。
(2)将这 20 个字符存储到文件 file1.txt 中。
(3)将文件 file1.txt 中最后 10 个字符读取出来,并显示在屏幕上。
输入描述
输入 20 个字符
输出描述
将文件中的后 10 个字符输出
输入样例
abcdefghjijk123456zy
输出样例
jk123456zy
#include <iostream>
#include <queue>
using namespace std;
queue<int> bq;
int vis[1000];
int grc[1000][1000];
int v, e, v1, e1;
int main(int argc, char *argv[])
{
    memset(grc, -1, sizeof(grc));
    memset(vis, 0, sizeof(vis));
    scanf("%d%d", &v, &e);
    for (int i = 0; i < e; i++)
    {
        scanf("%d%d", &v1, &e1);
        scanf("%d", &grc[v1][e1]);
    }
    bq.push(1);
    while (!bq.empty())
    {
        int f = bq.front();
        vis[f] = 1;
        for (int i = 1; i <= v; i++)
        {
            if (grc[f][i] != -1 && !vis[i])
                bq.push(i);
        }
        printf("%c", f + 64);
        bq.pop();
    }
    return 0;
}

实验10(02)文件的读写操作

编写一个程序,要求如下:
(1)在 ASCII 码 65~122 的范围中,随机产生 50 个字符(通过调用函数 rand()产生随机数,
比如产生 0~99 的随机数可以使用 rand()%100)。
(2)将这 50 个字符存储到文件 file2.txt 中,并关闭文件。
(3)读取文件 file2.txt 中的所有 50 个字符,将这 50 个字符中的英文字母大小写形式互换,
即如果字符是小写英文字母,那么就变成大写;如果字符是大写英文字母,那么就变成小写;
其他字符不变。将这变换后的 50 个字符追加到 file2.txt 中。
输入描述
无
输出描述
无
#include <stdio.h>
#include <stdlib.h>
#define N 50
void change(char *str, int LEN);
int main()
{
    int i;
    FILE *fp;
    char str[N];
    for (i = 0; i < N; i++)
    {
        str[i] = 65 + rand() % (122 - 65); //rand()%100;
    }
    fp = fopen("file2.txt", "w+");
    if (fp)
    {
        for (i = 0; i < N; i++)
        {
            fputc(str[i], fp);
        }
        fclose(fp);
    }
    fp = fopen("file2.txt", "r");
    if (fp)
    {
        for (i = 0; i < N; i++)
        {
            str[i] = fgetc(fp);
        }
        fclose(fp);
    }
    change(str, sizeof(str));
    fp = fopen("file2.txt", "a");
    if (fp)
    {
        for (i = 0; i < N; i++)
        {
            fputc(str[i], fp);
        }
        fclose(fp);
    }
    for (i = 0; i < N; i++)
    {
        printf("%c", str[i]);
    }
    printf("\n");
    return 0;
}
void change(char *str, int LEN)
{
    int i;
    for (i = 0; i < LEN; i++)
    {
        if (str[i] >= 'A' && str[i] <= 'Z')
        {
            str[i] += 32;
        }
        else if (str[i] >= 'a' && str[i] <= 'z')
        {
            str[i] -= 32;
        }
    }
}

实验10(03)文件的综合操作

编写一个程序,要求如下:
(1)可以获取任意类型的文件的大小。
(2)将该文件分成大小相等的 2 个文件,分别为 data1 和 data2。
#include <stdio.h>
#include <stdlib.h>
int trans(FILE *fp, FILE *fpnew, int LEN);
int main()
{
    int i, LEN;
    FILE *fp, *fp1, *fp2;
    fp = fopen("file2.txt", "rb");
    if (fp)
    {
        i = 0;
        while (!feof(fp)) //当没有到文件尾就循环,否则退出。
        {
            fgetc(fp);
            i++;
        }
        LEN = i - 1;
        rewind(fp); //将文件指针重新指向一个流的开头
        fp1 = fopen("data1.txt", "wb+");
        if (fp1)
        {
            trans(fp, fp1, LEN / 2);
            fclose(fp1);
        }
        fseek(fp, LEN / 2, SEEK_END);
        fp2 = fopen("data2.txt", "wb+");
        if (fp2)
        {
            trans(fp, fp2, LEN - LEN / 2);
            fclose(fp2);
        }
        fclose(fp);
    }
    return 0;
}
int trans(FILE *fp, FILE *fpnew, int LEN)
{
    int i;
    if (fp == NULL)
    {
        return 0;
    }
    if (fpnew == NULL)
    {
        return 0;
    }
    for (i = 0; i < LEN; i++)
    {
        fputc(fgetc(fp), fpnew);
    }
    return 1;
}

实验10(04)文件的综合操作2

编写一个程序,要求如下:
(1)读取实验 3(文件的综合操作Ⅰ)中分割的 2 个文件 data1 和 data2
(2)将文件 data1 和 data2 合并为一个文件 data。
输入描述
无
输出描述
无
#include <stdio.h>
#include <stdlib.h>
int trans(FILE *fp, FILE *fpnew, int LEN);
int main()
{
    int i;
    int LEN1, LEN2;
    FILE *fp, *fp1, *fp2;
    fp1 = fopen("data1.txt", "rb");
    fp2 = fopen("data2.txt", "rb");
    if (fp1 && fp2)
    {
        i = 0;
        while (!feof(fp1))
        {
            fgetc(fp1);
            i++;
        }
        LEN1 = i - 1;
        i = 0;
        while (!feof(fp2))
        {
            fgetc(fp2);
            i++;
        }
        LEN2 = i - 1;
        rewind(fp1);
        rewind(fp2);
        fp = fopen("file2.txt", "wb+");
        if (fp)
        {
            trans(fp1, fp, LEN1);
            fseek(fp, LEN1, SEEK_END);
            trans(fp2, fp, LEN2);
            fclose(fp);
        }
        fclose(fp1);
        fclose(fp2);
    }
    return 0;
}
int trans(FILE *fp, FILE *fpnew, int LEN)
{
    int i;
    if (fp == NULL)
    {
        return 0;
    }
    if (fpnew == NULL)
    {
        return 0;
    }
    for (i = 0; i < LEN; i++)
    {
        fputc(fgetc(fp), fpnew);
    }
    return 1;
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐