精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    7599

    瀏覽量

    136218
  • 編程
    +關注

    關注

    88

    文章

    3595

    瀏覽量

    93601
  • 文件操作
    +關注

    關注

    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次下載