贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述C语言_文件操作相关练习题相关的知识,希望能为你提供帮助。
当前文章列出了4个文件编程相关的练习题。文件拷贝实现、 文件加密、学生管理系统链表模板(未添加文件操作)、学生管理系统模板(通过文件系统保存信息)、等4个例子。
1.1 文件拷贝实现
#include <
stdio.h>
#include <
stdlib.h>
#include <
string.h>
int main()/*1. 打开源文件*/
FILE *file_src;
FILE *file_new;
unsigned char buff[1024];
unsigned int cnt;
file_src=https://www.songbingjia.com/android/fopen("D:/123.pdf","rb");
if(file_src=https://www.songbingjia.com/android/=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 <
stdio.h>
#include <
stdlib.h>
#include <
string.h>
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=https://www.songbingjia.com/android/fopen("D:/123.pdf","rb");
if(file_src=https://www.songbingjia.com/android/=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=https://www.songbingjia.com/android/data^password;
//文件数据加密
fwrite(&
data,1,cnt,file_new);
/*4. 关闭文件*/
fclose(file_new);
fclose(file_src);
printf("文件加密成功!\\n");
return 0;
解密代码:
?
#include <
stdio.h>
#include <
stdlib.h>
#include <
string.h>
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=https://www.songbingjia.com/android/fopen("D:/456.pdf","rb");
if(file_src=https://www.songbingjia.com/android/=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=https://www.songbingjia.com/android/data^password;
//文件数据加密
fwrite(&
data,1,cnt,file_new);
/*4. 关闭文件*/
fclose(file_new);
fclose(file_src);
printf("文件解密成功!\\n");
return 0;
【C语言_文件操作相关练习题】1.3 学生管理系统链表模板(未添加文件操作)
#include <
stdio.h>
#include <
stdlib.h>
#include <
string.h>
//存放信息的结构体
struct MyStructchar 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 <
stdio.h>
#include <
stdlib.h>
#include <
string.h>
//存放信息的结构体
struct MyStructchar 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);
推荐阅读
- 人工智能计算机视觉之OpenCV学习详解一
- 架构师03-业务路由与监控统计的设计
- 数据治理(数据仓库数据质量管理)
- NSSA汇总路由重分发
- 如何查找Linux系统中密码为空的所有用户
- 开源数据库MySQL数据库定义语言DDL
- 自动化运维工具AnsiblePlaybook
- 拯救 openLDAP 的上古管理界面,我写了一个现代化的 ldap 管理后台 go-ldap-admin
- Android中的Firebase数据描述排序