Linux标准IOday1

news2025/1/8 13:29:07

1:思维导图


2:将 student.c这个练习题,改成链表后实现

头文件link.h

#ifndef __STRUCT_H__
#define __STRUCT_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct Student{
    char name[20];
    double math;
    double chinese;
    double english;
    double physical;
    double chemical;
    double biological;
}student;
typedef struct node
{
	union
	{
		student data;
		int len;
	};
	struct node *next;
}link,*linkptr;
//创建链表
linkptr create_link();
//创建节点
linkptr create_node(student arr[],linkptr H);
//插入
void insert(student arr[],int n,linkptr H);
//将链表的信息保存到文件中
void save(linkptr H,const char *filename);
//读取文件,写入数组
void load(linkptr H,const char *filename,student brr[]);
//展示信息
void show(linkptr H);
//修改数学成绩
void setMath(linkptr H,const char *filename);
//释放链表
void myfree(linkptr H);



#endif

源文件link.c

#include "link.h"
//创建链表
linkptr create_link()
{
	linkptr H=(linkptr)malloc(sizeof(link));
	if(NULL==H)
	{
		printf("申请头结点失败!\n");
		return NULL;
	}
	H->len=0;
	H->next=NULL;
	return H;
}
//创建节点
linkptr create_node(student arr[],linkptr H)
{
	linkptr p=(linkptr)malloc(sizeof(link));
	if(NULL==p)
	{
		printf("创建节点失败!\n");
		return NULL;
	}
	p->data=arr[H->len];
	p->next=NULL;
	return p;
}
//插入
void insert(student arr[],int n,linkptr H)
{
	if(NULL==H)
	{
		printf("插入失败!\n");
		return;
	}
	linkptr q=H;
	for(int i=0;i<n;i++)
	{
		while(q->next)
		{
			q=q->next;
		}
		linkptr p=create_node(arr,H);
		p->next=q->next;
		q->next=p;
		H->len++;
	}
}
//将链表的信息保存到文件中
void save(linkptr H,const char *filename)
{
	FILE* fp=fopen(filename,"w");
	linkptr q=H;
	while(q->next)
	{
		q=q->next;
		fprintf(fp,"%s %lf %lf %lf %lf %lf %lf\n",q->data.name,q->data.math,q->data.chinese,q->data.english,q->data.physical,q->data.chemical,q->data.biological);
	}
	fclose(fp);
}
//读取文件,写入数组
void load(linkptr H,const char *filename,student brr[])
{
	int i=0;
	FILE* fp=fopen(filename,"r");
	linkptr q=H;
	while(q->next)
	{
		q=q->next;
		fscanf(fp,"%s %lf %lf %lf %lf %lf %lf\n",brr[i].name,&brr[i].math,&brr[i].chinese,&brr[i].english,&brr[i].physical,&brr[i].chemical,&brr[i].biological);
		i++;
	}
	fclose(fp);
}
//展示信息
void show(linkptr H)
{
	linkptr q=H;
	while(q->next)
	{
		q=q->next;
		printf("姓名=%s\n",q->data.name);
		printf("数学=%lf\n",q->data.math);
		printf("语文=%lf\n",q->data.chinese);
		printf("英语=%lf\n",q->data.english);
		printf("物理=%lf\n",q->data.physical);
		printf("化学=%lf\n",q->data.chemical);
		printf("生物=%lf\n",q->data.biological);
		printf("-------------------\n");
	}
}
//修改数学成绩
void setMath(linkptr H,const char *filename)
{
	int i=1;
	linkptr q=H;
	while(q->next)
	{
		double num=0;
		q=q->next;
		printf("请输入第%d个同学的数学成绩\n",i);
		scanf("%lf",&num);
		q->data.math=num;
		i++;
	}
	save(H,filename);
}
//释放链表
void myfree(linkptr H)
{
	linkptr q=H;
	while(q->next)
	{
		while(q->next)
		{
			q=q->next;
		}
		free(q);
		q=NULL;
	}
	free(H);
	H=NULL;
}

测试文件main.c

#include "link.h"
int main(int argc, const char *argv[])
{
	student arr[3]={{"lisi",99,77,55,78,67,66},
					{"wangwu",90,67,78,45,23,99},
					{"xiaol",67,45,99,78,56,90}};
	student brr[3]={0};
	linkptr H=create_link();
	insert(arr,3,H);
	save(H,"1.txt");
	load(H,"1.txt",brr);
	show(H);
	setMath(H,"filename");
	show(H);
	return 0;
}

代码截屏

测试结果

姓名=lisi
数学=99.000000
语文=77.000000
英语=55.000000
物理=78.000000
化学=67.000000
生物=66.000000
-------------------
姓名=wangwu
数学=90.000000
语文=67.000000
英语=78.000000
物理=45.000000
化学=23.000000
生物=99.000000
-------------------
姓名=xiaol
数学=67.000000
语文=45.000000
英语=99.000000
物理=78.000000
化学=56.000000
生物=90.000000
-------------------
请输入第1个同学的数学成绩
12
请输入第2个同学的数学成绩
23
请输入第3个同学的数学成绩
34
姓名=lisi
数学=12.000000
语文=77.000000
英语=55.000000
物理=78.000000
化学=67.000000
生物=66.000000
-------------------
姓名=wangwu
数学=23.000000
语文=67.000000
英语=78.000000
物理=45.000000
化学=23.000000
生物=99.000000
-------------------
姓名=xiaol
数学=34.000000
语文=45.000000
英语=99.000000
物理=78.000000
化学=56.000000
生物=90.000000
-------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全局变量(PHP)(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…

gateway的路径匹配介绍

gateway是一个单独服务。通过网关端口和predicates进行匹配服务 1先看配置。看我注解你就明白了。其实就是/order/**配置机制直接匹配到orderservice服务。 2我试着请求一个路径&#xff0c;请求成功。下面第三步是请求的接口。 3接口。

RabbitMQ-基本使用

RabbitMQ: One broker to queue them all | RabbitMQ 官方 安装到Docker中 docker run \-e RABBITMQ_DEFAULT_USERrabbit \-e RABBITMQ_DEFAULT_PASSrabbit \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network mynet\-d \rabbitmq:3…

模式识别-Ch2-分类错误率

分类错误率 最小错误率贝叶斯决策 样本 x x x的错误率&#xff1a; 任一决策都可能会有错误。 P ( error ∣ x ) { P ( w 2 ∣ x ) , if we decide x as w 1 P ( w 1 ∣ x ) , if we decide x as w 2 P(\text{error}|\mathbf{x})\begin{cases} P(w_2|\mathbf{x}), &…

CAD批量打印可检索的PDF文件

本文虽介绍CAD使用方法&#xff0c;但还是劝告大家尽早放弃使用CAD软件。。。。太TM难用了 当你打开CAD时发现如下一堆图纸&#xff0c;但是不想一个一个打印时。你可以按照下面操作实现自动识别图框实现批量打印。 1.安装批量打印插件 2.安装后打开CAD&#xff0c;输入命令Bp…

BERT:深度双向Transformer的预训练用于语言理解

摘要 我们介绍了一种新的语言表示模型&#xff0c;名为BERT&#xff0c;全称为来自Transformer的双向编码器表示。与最近的语言表示模型&#xff08;Peters等&#xff0c;2018a&#xff1b;Radford等&#xff0c;2018&#xff09;不同&#xff0c;BERT旨在通过在所有层中联合调…

搭建企业AI助理的创新应用与案例分析

在大健康零售行业&#xff0c;企业面临着日益增长的市场需求和复杂的供应链管理挑战。AI助理的应用不仅能够提升客户服务效率&#xff0c;还能优化供应链管理&#xff0c;降低运营成本。 一、AI助理在大健康零售行业的创新应用 个性化健康咨询 AI助理可以通过分析客户的健康…

apex安装

安装过程复杂曲折&#xff0c;网上说的很多办法&#xff0c;貌似成功了&#xff0c;实际还是没起作用。 先说成功过程&#xff0c;执行下面命令&#xff0c;安装成功&#xff08;当然&#xff0c;前提是你要先配置好编译环境&#xff09;&#xff1a; &#xff08;我的环境&a…

select下拉框,首次进入页面没有显示value的情况

bug场景&#xff1a; 类似这种bug情况排查如下&#xff1a; 首先 理解含义 options就是存放键值对的&#xff0c;id就是key&#xff0c;对上了它就自动把label显示 而且如果你用来当作key和label的字段&#xff0c;与后端返回的不一致&#xff0c;还可以进行更改 其次 排查接…

krpano 实现文字热点中的三角形和竖杆

krpano 实现文字热点中的三角形和竖杆 实现文字热点中的三角形和竖杆 一个后端写前端真的是脑阔疼 一个后端写前端真的是脑阔疼 一个后端写前端真的是脑阔疼 实现文字热点中的三角形和竖杆 上图看效果 v&#xff1a;2549789059

playwright 录制

一、新建项目TestProject3 二、准备swagger 三、开始录制 打开PowerShell 7 (x64) cd D:\xxx\xxx\VS2022Projects\TestProject3\TestProject3\bin\Debug\net8.0 pwsh playwright.ps1 codegen --targetcsharp -b chromium localhost:5252/swagger/index.html #支持的语言 java…

uni-app 资源引用(绝对路径和相对路径)方法汇总

文章目录 一、前言&#x1f343;二、绝对路径和相对路径2.1 绝对路径2.2 相对路径 三、引用组件四、引用js4.1 js 文件引入4.2 NPM支持 五、引用css六、引用json6.1 json文件引入 七、引用静态资源7.1 模板内引入静态资源7.2 css 引入静态资源7.3 js/uts 引入静态资源7.4 静态资…

go如何从入门进阶到高级

针对Go语言的学习&#xff0c;不同阶段应采取不同的学习方式&#xff0c;以达到最佳效果.本文将Go的学习分为入门、实战、进阶三个阶段&#xff0c;下面分别详细介绍 一、社区 Go语言中文网 作为专注于Go语言学习与推广的平台&#xff0c;Go语言中文网为开发者提供了丰富的中…

现代密码学期末重点(备考ing)

现代密码学期末重点&#xff0c;个人备考笔记哦 密码学概念四种密码学攻击方法什么是公钥密码&#xff1f;什么是对称密码&#xff1f;什么是无条件密码&#xff1f; 中国剩余定理&#xff08;必考&#xff09;什么是原根什么是阶 经典密码学密码体制什么是列置换&#xff1f; …

基于SMT32U575RIT单片机-中断练习

任务 查看手册对所有的拓展板上和相对应的底板的引脚对应的端口找到以下结论 通过STM32MX软件对各个引脚进行相应的配置 1.第一种切换模式电脑发送 #include "main.h" #include "icache.h" #include "usart.h" #include "gpio.h"/*…

KCP解读:拥塞控制

本文是系列文章中的一篇&#xff0c;内容由浅到深进行剖析&#xff0c;为了方便理解建议按顺序一一阅读。 KCP技术原理 KCP解读&#xff1a;基础消息收发 KCP解读&#xff1a;重传机制 KCP解读&#xff1a;滑动窗口 KCP解读&#xff1a;拥塞控制 本文摘取https://xiaolincodin…

HCIA-Access V2.5_8_2_EPON基本架构和关键参数

EPON数据利用方式 EPON和GPON同样只有一根光纤&#xff0c;所以为了避免双向发送数据出现冲突&#xff0c;我们同样采用WDM技术&#xff0c;那么主要利用两个波长&#xff0c;一个是1490纳米的波长&#xff0c;一个是1310纳米的波长&#xff0c;下行OLT给ONU发送数据的时候&…

如何快速上手一个鸿蒙工程

作为一名鸿蒙程序猿&#xff0c;当你换了一家公司&#xff0c;或者被交接了一个已有的业务。前辈在找你之前十分钟写了一个他都看不懂的交接文档&#xff0c;然后把一个鸿蒙工程交接给你了&#xff0c;说以后就是你负责了。之后几天你的状态大概就是下边这样的&#xff0c;一堆…

FPGA实现UART对应的电路和单片机内部配合寄存器实现的电路到底有何区别?

一、UART相关介绍 UART是我们常用的全双工异步串行总线&#xff0c;常用TTL电平标准&#xff0c;由TXD和RXD两根收发数据线组成。 那么&#xff0c;利用硬件描述语言实现UART对应的电路和51单片机内部配合寄存器实现的电路到底有何区别呢&#xff1f;接下来我们对照看一下。 …

patchwork++地面分割学习笔记

参考资料&#xff1a;古月居 - ROS机器人知识分享社区 https://zhuanlan.zhihu.com/p/644297447 patchwork算法一共包含四部分内容&#xff1a;提出了以下四个部分&#xff1a;RNR、RVPF、A-GLE 和 TGR。 1&#xff09;基于 3D LiDAR 反射模型的反射噪声消除 (RNR)&#xff…