0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言_文件操作相关练习题

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-08-14 09:55 次阅读

当前文章列出了4个文件编程相关的练习题。文件拷贝实现、 文件加密、学生管理系统链表模板(未添加文件操作)、学生管理系统模板(通过文件系统保存信息)、等4个例子。

1.1 文件拷贝实现

#include 
#include 
#include 
int main()
{
	/*1. 打开源文件*/
	FILE *file_src;
	FILE *file_new;
	unsigned char buff[1024];
	unsigned int cnt;

	file_src=fopen("D:/123.pdf","rb");
	if(file_src==NULL)
	{
		printf("源文件打开失败!\n");
		return -1;
	}
	/*2. 创建新文件*/
	file_new=fopen("D:/456.pdf","wb");
	if(file_new==NULL)
	{
		printf("新文件创建失败!\n");
		return -1;
	}
	/*3. 拷贝文件*/
	while(!feof(file_src))
	{
		cnt=fread(buff,1,1024,file_src);
		fwrite(buff,1,cnt,file_new);
	}
	/*4. 关闭文件*/
	fclose(file_new);
	fclose(file_src);
	printf("文件拷贝成功!\n");
	return 0;
}

1.2 文件加密

使用: 异或 ^
密码类型: (1) 整型密码 (2) 字符串密码
比如: 银行提款机的密码、QQ密码
加密代码:

#include 
#include 
#include 
int main()
{
	/*1. 打开源文件*/
	FILE *file_src;
	FILE *file_new;
	unsigned char buff[1024];
	unsigned int cnt;
	unsigned int password=123456; //密码数据
	unsigned int data;  //存放读取的数据

	file_src=fopen("D:/123.pdf","rb");
	if(file_src==NULL)
	{
		printf("源文件打开失败!\n");
		return -1;
	}
	/*2. 创建新文件*/
	file_new=fopen("D:/456.pdf","wb");
	if(file_new==NULL)
	{
		printf("新文件创建失败!\n");
		return -1;
	}
	/*3. 文件加密*/
	while(!feof(file_src))
	{
		cnt=fread(&data,1,4,file_src);
		data=data^password;//文件数据加密
		fwrite(&data,1,cnt,file_new);
	}
	/*4. 关闭文件*/
	fclose(file_new);
	fclose(file_src);
	printf("文件加密成功!\n");
	return 0;
}

解密代码:


#include 
#include 
#include 
int main()
{
	/*1. 打开源文件*/
	FILE *file_src;
	FILE *file_new;
	unsigned char buff[1024];
	unsigned int cnt;
	unsigned int password=123456; //密码数据
	unsigned int data;  //存放读取的数据

	file_src=fopen("D:/456.pdf","rb");
	if(file_src==NULL)
	{
		printf("源文件打开失败!\n");
		return -1;
	}
	/*2. 创建新文件*/
	file_new=fopen("D:/789.pdf","wb");
	if(file_new==NULL)
	{
		printf("新文件创建失败!\n");
		return -1;
	}
	/*3. 文件加密*/
	while(!feof(file_src))
	{
		cnt=fread(&data,1,4,file_src);
		data=data^password;//文件数据加密
		fwrite(&data,1,cnt,file_new);
	}
	/*4. 关闭文件*/
	fclose(file_new);
	fclose(file_src);
	printf("文件解密成功!\n");
	return 0;
}

1.3 学生管理系统链表模板(未添加文件操作)

#include 
#include 
#include 

//存放信息的结构体
struct MyStruct
{
	char Name[50]; //存放姓名
	int Number;    //存放编号
	struct MyStruct *next; //存放下一个节点的地址
};

//链表相关的函数接口
struct MyStruct *ListHead=NULL; //链表头
struct MyStruct *CreateListHead(struct MyStruct *head);
void AddrListInfo(struct MyStruct *head,struct MyStruct data);
void DeleteListInfo(struct MyStruct *head,int number);
void PrintListAllInfo(struct MyStruct *head);
int main()
{
	struct MyStruct data1={"张三",123};
	struct MyStruct data2={"李四",456};
	struct MyStruct data3={"小王",789};
	ListHead=CreateListHead(ListHead);
	
	//添加信息
	AddrListInfo(ListHead,data1);
	AddrListInfo(ListHead,data2);
	AddrListInfo(ListHead,data3);

	//删除节点
	DeleteListInfo(ListHead,123);
	DeleteListInfo(ListHead,789);

	//打印
	PrintListAllInfo(ListHead);
	return 0;
}
/*
函数功能: 创建链表头
*/
struct MyStruct *CreateListHead(struct MyStruct *head)
{
	if(head==NULL)
	{
		head=malloc(sizeof(struct MyStruct));
		head->next=NULL;
	}
	return head;
}

/*
函数功能: 在链表结尾添加节点
*/
void AddrListInfo(struct MyStruct *head,struct MyStruct data)
{
	struct MyStruct *p=head;
	struct MyStruct *tmp=NULL;

	while(p->next!=NULL)
	{
		p=p->next;
	}
	tmp=malloc(sizeof(struct MyStruct));
	memcpy(tmp,&data,sizeof(struct MyStruct));
	p->next=tmp;
	tmp->next=NULL;
}

/*
函数功能: 根据结构体里特有的成员区分进行删除链表节点信息
函数参数: int numbe  编号
*/
void DeleteListInfo(struct MyStruct *head,int number)
{
	struct MyStruct *p=head;
	struct MyStruct *tmp=NULL;

	while(p->next!=NULL)
	{
		tmp=p; //保存上一个节点的信息
		p=p->next;
		if(p->Number==number)
		{
			tmp->next=tmp->next->next;
			free(p);
			p=head; //链表头归位
		}
	}
}

/*
函数功能: 打印所有节点信息
函数参数: int numbe  编号
*/
void PrintListAllInfo(struct MyStruct *head)
{
	struct MyStruct *p=head;
	int cnt=0;
	printf("\n链表全部信息如下:\n");
	while(p->next!=NULL)
	{
		p=p->next;
		cnt++;
		printf("第%d个节点信息: %s,%d\n",cnt,p->Name,p->Number);
	}
}

1.4 学生管理系统模板(通过文件系统保存信息)

#include 
#include 
#include 

//存放信息的结构体
struct MyStruct
{
	char Name[50]; //存放姓名
	int Number;    //存放编号
	struct MyStruct *next; //存放下一个节点的地址
};

//链表相关的函数接口
struct MyStruct *ListHead=NULL; //链表头
struct MyStruct *CreateListHead(struct MyStruct *head);
void AddrListInfo(struct MyStruct *head,struct MyStruct data);
void DeleteListInfo(struct MyStruct *head,int number);
void PrintListAllInfo(struct MyStruct *head);

//文件操作相关函数
void SaveListAllInfo(struct MyStruct *head,char *path);
void GetListAllInfo(struct MyStruct *head,char *path);

#if 0
int main()
{
	struct MyStruct data1={"张三",123};
	struct MyStruct data2={"李四",456};
	struct MyStruct data3={"小王",789};
	ListHead=CreateListHead(ListHead);
	
	AddrListInfo(ListHead,data1);
	AddrListInfo(ListHead,data2);
	AddrListInfo(ListHead,data3);

	//保存节点信息
	SaveListAllInfo(ListHead,"D:/list.ini");

	//打印
	PrintListAllInfo(ListHead);
	return 0;
}
#endif

#if 1
int main()
{
	ListHead=CreateListHead(ListHead);

	//获取节点信息
	GetListAllInfo(ListHead,"D:/list.ini");

	//打印
	PrintListAllInfo(ListHead);
	return 0;
}
#endif

/*
函数功能: 创建链表头
*/
struct MyStruct *CreateListHead(struct MyStruct *head)
{
	if(head==NULL)
	{
		head=malloc(sizeof(struct MyStruct));
		head->next=NULL;
	}
	return head;
}

/*
函数功能: 在链表结尾添加节点
*/
void AddrListInfo(struct MyStruct *head,struct MyStruct data)
{
	struct MyStruct *p=head;
	struct MyStruct *tmp=NULL;

	while(p->next!=NULL)
	{
		p=p->next;
	}
	tmp=malloc(sizeof(struct MyStruct));
	memcpy(tmp,&data,sizeof(struct MyStruct));
	p->next=tmp;
	tmp->next=NULL;
}

/*
函数功能: 根据结构体里特有的成员区分进行删除链表节点信息
函数参数: int numbe  编号
*/
void DeleteListInfo(struct MyStruct *head,int number)
{
	struct MyStruct *p=head;
	struct MyStruct *tmp=NULL;

	while(p->next!=NULL)
	{
		tmp=p; //保存上一个节点的信息
		p=p->next;
		if(p->Number==number)
		{
			tmp->next=tmp->next->next;
			free(p);
			p=head; //链表头归位
		}
	}
}

/*
函数功能: 打印所有节点信息
函数参数: int numbe  编号
*/
void PrintListAllInfo(struct MyStruct *head)
{
	struct MyStruct *p=head;
	int cnt=0;
	printf("\n链表全部信息如下:\n");
	while(p->next!=NULL)
	{
		p=p->next;
		cnt++;
		printf("第%d个节点信息: %s,%d\n",cnt,p->Name,p->Number);
	}
}
/*
函数功能: 保存链表节点信息
*/
void SaveListAllInfo(struct MyStruct *head,char *path)
{
	struct MyStruct *p=head;
	FILE *file;
	file=fopen(path,"a+b");
	if(file==NULL)
	{
		printf("保存信息的文件打开失败!\n");
		return ;
	}
	while(p->next!=NULL)
	{
		p=p->next;
		fwrite(p,1,sizeof(struct MyStruct),file);
	}
	fclose(file);
}

/*
函数功能: 从文件里获取链表节点信息
*/
void GetListAllInfo(struct MyStruct *head,char *path)
{
	struct MyStruct *p=head;
	FILE *file;
	struct MyStruct data;

	file=fopen(path,"rb");
	if(file==NULL)
	{
		printf("保存信息的文件打开失败!\n");
		return;
	}
	//循环读取文件里的数据
	while(!feof(file))
	{
		fread(&data,1,sizeof(struct MyStruct),file); //读取链表节点数据
		AddrListInfo(head,data); //添加链表节点
	}
	fclose(file);
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136130
  • 编程
    +关注

    关注

    88

    文章

    3587

    浏览量

    93585
  • 文件操作
    +关注

    关注

    0

    文章

    7

    浏览量

    5339
收藏 人收藏

    评论

    相关推荐

    UG练习题

    UG练习题,学校老师给的还不错
    发表于 07-18 21:10

    C语言典型练习题及答案

    C语言典型练习题及答案 c语言初学者必备
    发表于 08-10 12:34

    multisim练习题

    大家有没有multisim的练习题目和教程啊?想学这方面的知识,还望各位大神帮帮忙!小弟实在感激不尽!有的话麻烦发到我的邮箱1400769604@qq.com谢谢了。
    发表于 10-13 00:51

    电容器练习题

    电容器练习题
    发表于 11-16 11:36 50次下载

    Verilog HDL练习题

    Verilog HDL练习题
    发表于 11-03 16:47 193次下载

    labview论坛-labview经典基础练习题+解答

    labview论坛-labview经典基础练习题+解答
    发表于 09-12 10:31 648次下载

    C语言基础习题

    c语言练习题。。。。。。。。。。。。。。。。。。。。。
    发表于 11-12 15:02 0次下载

    高频谐振练习题

    高频谐振练习题,有需要的可以下载看看,学习一下!
    发表于 12-18 11:06 1次下载

    子网划分练习题

    子网划分练习题,老师自己出的题。
    发表于 06-17 17:40 0次下载

    C语言编程的经典练习题资料免费下载

    本文档的主要内容详细介绍的是C语言编程的经典练习题资料免费下载。
    发表于 06-04 08:00 16次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>编程的经典<b class='flag-5'>练习题</b>资料免费下载

    C语言程序设计上机考试练习题和答案免费下载

    本文档的主要内容详细介绍的是C语言程序设计上机考试练习题和答案免费下载
    发表于 10-28 08:00 15次下载

    Python的练习题实例免费下载

    本文档的主要内容详细介绍的是Python的练习题实例免费下载。
    发表于 01-15 08:58 17次下载

    复变函数与积分变换练习题及解答

    复变函数与积分变换练习题及解答
    发表于 06-27 09:19 5次下载

    Java编程思想练习题源码

    Java编程思想练习题源码,配合《Java编程思想》进行学习。
    发表于 09-26 14:24 0次下载

    Thinking In Java练习题源码

    Thinking In Java 练习题源码文件分享
    发表于 09-26 14:23 0次下载