当前位置: 首页 > news >正文

1.07 标准IO

1.思维导图

2.先编写以下结构体

struct Student
{
      char name[20];
      double math;
      double chinese;
      double english;
      double physical;
      double chemical;
      double biological; };
第一步:创建一个 struct Student 类型的链表L,初始化该链表中3个学生的属性
第二步:编写一个叫做save的函数,功能为 将链表L中的3个学生的所有信息,保存到文件中去,使用fprintf实现
第三步:编写一个叫做load的函数,功能为 将文件中保存的3个学生信息,读取后,写入到另一个链表L1中去
第四步:编写一个叫做 show的函数,功能为 遍历输出 L或者 L1链表中的所有学生的信息
第五步:编写一个叫做 setMath 的函数,功能为 修改 文件中 所有学生的数学成绩
1>程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>//定义一个学生成绩的结构体类型
typedef struct Student
{char name[20];double math;double chinese;double english;double physical;double chemical;double biological;struct Student *next;
} Stu, *StuPtr;//创建链表
StuPtr create()
{StuPtr L = NULL;return L;
}//添加数据
StuPtr add(StuPtr L)
{StuPtr s = (StuPtr)malloc(sizeof(Stu));if (s == NULL){printf("内存分配失败!\n");return L;}if (L == NULL){L = s;s->next = NULL;}else{StuPtr p = L;while (p->next!= NULL){p = p->next;}p->next = s;}s->next = NULL;printf("姓名:");scanf("%s", s->name);printf("数学:");scanf("%lf", &s->math);printf("语文:");scanf("%lf", &s->chinese);printf("英语:");scanf("%lf", &s->english);printf("物理:");scanf("%lf", &s->physical);printf("化学:");scanf("%lf", &s->chemical);printf("生物:");scanf("%lf", &s->biological);printf("\n");return L;
}//将数组链表L中学生信息保存到文件中
void save(StuPtr L, const char *filename)
{if (L == NULL){printf("保存失败!\n");return;}FILE *fp = fopen(filename, "w");if (fp == NULL){printf("无法打开文件!\n");return;}StuPtr p = L;while (p!= NULL){fprintf(fp, "%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n", p->name, p->math, p->chinese, p->english, p->physical, p->chemical, p->biological);p = p->next;}fclose(fp);
}//将文件中保存的学生信息,写入到另一个链表L1中
void load(StuPtr *L1, const char *filename)
{FILE *fp = fopen(filename, "r");if (fp == NULL){printf("无法打开文件!\n");return;}*L1 = NULL;while (1){StuPtr s = (StuPtr)malloc(sizeof(Stu));if (s == NULL){printf("内存分配失败!\n");break;}int res = fscanf(fp, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n", s->name, &s->math, &s->chinese, &s->english, &s->physical, &s->chemical, &s->biological);if (res == EOF){free(s);break;}s->next = *L1;*L1 = s;}fclose(fp);
}//展示链表内容
void show(StuPtr L)
{StuPtr p = L;if (p == NULL){printf("展示失败!\n");return;}printf("姓名\t数学\t语文\t英语\t物理\t化学\t生物\n");while (p!= NULL){printf("%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n", p->name, p->math, p->chinese, p->english, p->physical, p->chemical, p->biological);p = p->next;}printf("------------------------------------------------------\n");
}//修改文件中所有学生的数学成绩
void setMath(const char *filename, double math)
{StuPtr L = create();load(&L, filename); // 修正这里,传递指针的指针StuPtr p = L;while (p!= NULL){p->math = math;p = p->next;}save(L, filename);// 释放内存while (L!= NULL){StuPtr temp = L;L = L->next;free(temp);}
}int main(int argc, const char *argv[])
{StuPtr L = create();L = add(L);L = add(L);L = add(L);save(L, "student.txt");StuPtr L1 = create();load(&L1, "student.txt"); // 修正这里,传递指针的指针show(L);show(L1);setMath("student.txt", 100);// 释放内存while (L!= NULL){StuPtr temp = L;L = L->next;free(temp);}while (L1!= NULL){StuPtr temp = L1;L1 = L1->next;free(temp);}return 0;
}
2>运行结果显示:
http://www.lryc.cn/news/517090.html

相关文章:

  • 恒压恒流原边反馈控制芯片 CRE6289F
  • Java中线程中断的几种方式,你了解吗?
  • Tesseract5.4.0自定义LSTM训练
  • centOS7
  • HTML5 弹跳动画(Bounce Animation)详解
  • 4.1.3 串
  • 国产编辑器EverEdit - 两种删除空白行的方法
  • 1月7日星期二今日早报简报微语报早读
  • 随机置矩阵列为0[矩阵乘法pytorch版]
  • C# 中mysql数据库,已经在原有数据库升级数据库脚本,去管理可以一次,和多次执行的,nuget包
  • PCL 分段线性函数
  • 王静波页岩气:工厂蜕变的创业传奇
  • php反序列化 ctf例题演示 框架安全(TP,Yii,Laravel) phpggc生成框架利用pop
  • Koi技术教程-Tauri基础教程-第二节 Tauri的核心概念上
  • 入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
  • vulnhub靶场【DC系列】之5
  • 前端面试题合集
  • 基于RK3568/RK3588大车360度环视影像主动安全行车辅助系统解决方案,支持ADAS/DMS
  • 基于 GEE Sentinel-1 数据集提取水体
  • Python判断、循环练习
  • 【简博士统计学习方法】第1章:4. 模型的评估与选择
  • 解密Navicat密码(Java)
  • 某聘__zp_stoken__参数逆向还原
  • 【数据可视化-11】全国大学数据可视化分析
  • 声音是如何产生的
  • 梯度下降方法
  • web3与AI结合-Sahara AI 项目介绍
  • Nginx——反向代理(三/五)
  • 环动科技平均售价波动下滑:大客户依赖明显,应收账款周转率骤降
  • 源网荷储:构建智慧能源生态的关键方案设计