NEFU大一下锐格实验文件题(一)

本文档展示了C语言实现的多个文件操作示例,包括读取、写入、转换和排序。实验涉及将字符串转换为小写、多组数据输入输出、结构体数据的文件存储和读取,以及链表排序后写入文件。每个实验都提供了详细的代码实现,并建议将文件放在工程文件夹下以方便管理。
摘要由CSDN通过智能技术生成


前言

以下代码全为个人见解,仅供参考
如果代码有误或者优化建议,直接相应博客下方评论
代码面向新手,看起来觉得低级的不要喷我QWQ


提示:以下是本篇文章正文内容,下面案例可供参考

实验11:文件一

由于文件题锐格无法提交检测,写实验报告时建议使用编译器运行结果和文件内结果的截图作为实验结果

5864

提前在工程文件夹下建立一个TXT文档命名为data.in
在文件中输入串含有大小写字母的字符串并保存
ps:注意调整打开文件时文件的位置

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;//定义文件变量
    char ch;
    //打开文件
    fp = fopen("D:\\C L project\\file_1\\5864\\data.in.txt","r+");
    if(fp == NULL)
    {
        printf("error!\n");
        exit(0);
    }
    //获取文件中的所有字符
    while((ch = getc(fp)) != EOF)
    {
        //检索文件中的大写字母
        if(ch >= 'A' && ch <= 'Z')
        {
            //大写字母转化为小写字母
            ch += 32;
        }
        //输出文件中的字符
        putchar(ch);

    }
    //释放文件
    fclose(fp);
    return 0;
}

5865

提前在工程文件夹下建立一个TXT文档命名为test01
文件运行结束后打开该文件进行检查

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fp;//定义文件变量
    //打开文件
    fp = fopen("D:\\C L project\\file_1\\5865\\test01.txt","r+");
    if(fp == NULL)
    {
        printf("errer!");
    }

    int n;
    char ch[300];
    //多组数输入,n表示输入句子的行数
    while(scanf("%d",&n) != EOF)
    {
        getchar();//消除n与后面输入的句子间的回车
        //如果没有,最后的结果可能会出现一个空行
        //*********************
        //输入0时停止输入
        if(n == 0)
        {
            fclose(fp);
            exit(0);
        }

        int i;//循环器
        for(i = 0; i < n; i++)//循环输入n句句子并保存在文件中
        {
            gets(ch);
            fputs(ch,fp);
            fputc('\n',fp);//由于fputs不能接收\n,所以这里要加上
        }
    }
    //释放文件
    fclose(fp);
    exit(0);
}

5866

提前在工程文件夹下建立一个TXT文档命名为student
文件运行结束后打开该文件进行检查

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
{
    char num[8];
    char name[20];
    char sex;
    double score[3];
} stu;

int main()
{
    FILE *fp;
    fp = fopen("D:\\C L project\\file_1\\5866\\student.txt","r+");
    if(fp == NULL)
    {
        printf("error!\n");
        exit(0);
    }
    int n;
    while(~scanf("%d",&n))
    {
        if(n == 0)
        {
            exit(0);
        }
        getchar();
        int i;
        for(i = 0; i < n; i++)
        {
            printf("请输入学生学号:\n");
            //输入学号
            gets(stu.num);
            //将学号录入文件
            fputs(stu.num,fp);
            fputc(' ',fp);
            printf("请输入学生姓名:\n");
            //输入姓名,计算长度
            gets(stu.name);
            int len = strlen(stu.name);
            //将姓名长度和姓名录入文件
            fprintf(fp,"%d ",len);
            fputs(stu.name,fp);
            fputc(' ',fp);
            //输入性别
            printf("输入学生性别:\n");
            scanf("%c",&stu.sex);
            getchar();
            //录入性别
            fprintf(fp,"%c ",stu.sex);
            //输入三科成绩
            printf("输入三科成绩:\n");
            scanf("%lf %lf %lf",&stu.score[0],&stu.score[1],&stu.score[2]);
            getchar();
            //计算三科平均分和总分
            double ave,sum = 0;
            int j;
            for(j = 0; j < 3; j++)
            {
                sum = sum + stu.score[j];
            }
            ave = sum/3.0;
            //录入成绩
            fprintf(fp,"%.2lf %.2lf %.2lf %.2lf %.2lf",stu.score[0],stu.score[1],stu.score[2],ave,sum);
            fputc('\n',fp);
        }
    }
    fclose(fp);
    return 0;
}

5867

本题的文件地址为上一题(5866)的文件地址

#include <stdio.h>
#include <stdlib.h>

struct student
{
    int num;
    char name[20];
    char sex;
    double score[3];
    double ave,sum;
} stu;

int main()
{
    FILE *fp;
    int len;
    char ch[20];
    fp = fopen("D:\\C L project\\file_1\\5866\\student.txt","r+");
    if(fp == NULL)
    {
        printf("error!\n");
        exit(0);
    }
    while((fscanf(fp,"%d %d",&stu.num,&len)) != EOF)
    {
        printf("%d",stu.num);
        //printf("%d",ftell(fp));
        fgets(ch,len+1+1,fp);//两个+1分别是抵消数据间的空格和必须加的不然读取的字符会少一个
        printf("%s",ch);
        //printf("%d**",ftell(fp));
        fseek(fp,1,1);//将文件中的光标指针向后移动一位
        fscanf(fp,"%c",&stu.sex);
        printf(" %c",stu.sex);
        fscanf(fp,"%lf %lf %lf %lf %lf",&stu.score[0],&stu.score[1],&stu.score[2],&stu.ave,&stu.sum);
        printf(" %.2lf %.2lf %.2lf %.2lf %.2lf\n",stu.score[0],stu.score[1],stu.score[2],stu.ave,stu.sum);
    }
    fclose(fp);
    return 0;
}


5868

提前在工程文件夹下建立一个TXT文档命名为student
文件运行结束后打开该文件进行检查

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node
{
    int num;
    char name[20];
    char sex;
    double score[3];
    double ave,sum;
    struct node* next;
} Lnode;

void creatvist(Lnode *H,int n)
{
    Lnode *p, *r;
    int num;
    char sex;
    r = H;
    int i,j;//循环器
    for(i = 0; i < n; i++)
    {
        p = (Lnode*)malloc(sizeof(Lnode));//分配动态空间
        printf("请输入学生学号:\n");
        scanf("%d",&num);//储存在链表结点中的数据
        getchar();
        printf("请输入学生姓名:\n");
        gets(p->name);
        printf("输入学生性别:\n");
        //getchar();
        scanf("%c",&sex);
        printf("输入三科成绩:\n");
        for(j = 0; j < 3; j++)
        {
            scanf("%lf",&p->score[j]);
        }
        p->num = num;//存放数据
        p->sex = sex;
        p->sum = 0;
        int j;
        for(j = 0; j < 3; j++)
        {
            p->sum = p->sum + p->score[j];
        }
        p->ave = p->sum/3.0;
        r->next = p;//指向下一个结点的地址
        r = p;//循环
    }
    r->next = NULL;//尾部指向空

}

void printList(Lnode * H)
{
    Lnode * p;
    p = H->next;
    while(p != NULL)
    {
        printf("%d  ",p->num);
        printf("%s  ",p->name);
        printf("%c  ",p->sex);
        printf("%lf %lf %lf\n",p->score[0],p->score[1],p->score[2]);
        p = p->next;
    }
    printf("\n");
}

void sortvist(Lnode *H)
{
    double t;
    char a[20];
    Lnode *p,*pre;
    pre = H->next;
    int i;
    char ch;
    while(pre != NULL)
    {
        p = pre->next;
        while(p != NULL)
        {
            if(pre->sum < p->sum)
            {
                t = pre->num;
                pre->num = p->num;
                p->num = t;//学号互换
                strcpy(a,pre->name);
                strcpy(pre->name,p->name);
                strcpy(p->name,a);//姓名
                ch = pre->sex;
                pre->sex = p->sex;
                p->sex = ch;//性别
                for(i = 0; i < 3; i++)
                {
                    t = pre->score[i];
                    pre->score[i] = p->score[i];
                    p->score[i] = t;//成绩
                }
                t = pre->ave;
                pre->ave = p->ave;
                p->ave = t;//平均成绩
                t = pre->sum;
                pre->sum = p->sum;
                p->sum = t;//总成绩
            }
            p = p->next;
        }
        pre = pre->next;
    }
}

int main()
{
    int n;
    int i,j;
    scanf("%d",&n);
    Lnode *H;
    H = (Lnode*)malloc(sizeof(Lnode));
    H->next = NULL;
    creatvist(H,n);
    //printList(H);
    sortvist(H);
    //创建文件变量
    FILE *fp;
    fp = fopen("D:\\C L project\\file_1\\5868\\student.txt","wb");
    if(fp == NULL)
    {
        printf("error!\n");
        exit(0);
    }
    //建立一个新结点进行文件写入
    Lnode *p;
    p = H->next;
    char en = '\n';
    while(p)
    {
        fwrite(p,sizeof(Lnode),1,fp);
        p = p->next;
    }
    fclose(fp);
    //进行文件读取
    fp = fopen("D:\\C L project\\file_1\\5868\\student.txt","rb+");
    if(fp == NULL)
    {
        printf("error!\n");
        exit(0);
    }
    p = (Lnode*)malloc(sizeof(Lnode));
    while(fread(p,sizeof(Lnode),1,fp)==1)
    {
        printf("%d ",p->num);
        printf("%s ",p->name);
        printf("%c ",p->sex);
        printf("%.2lf %.2lf %.2lf",p->score[0],p->score[1],p->score[2]);
        printf("%.2lf %.2lf\n",p->ave,p->sum);
    }
    fclose(fp);
    return 0;
}

建议

为了方便文件的查看和文件变量的定义建议把文件建立在工程文件下

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你遥似星空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值