第四十三课 从文本文件中读入数据 【项目1-4】

2023-10-18 02:20

本文主要是介绍第四十三课 从文本文件中读入数据 【项目1-4】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第四十三课  从文本文件中读入数据



项目一【由键盘到文件】

(1)从键盘输入一个文件名,以及一个以#结束的字符序列,将输入的字符保存到文件中去。

[cpp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #include "stdio.h"  
  2. #include "stdlib.h"  
  3. int main()  
  4. {  
  5.     FILE *fp ;  
  6.     char ch,fname[10];  
  7.     printf("文件名:");  
  8.     gets(fname);  
  9.     if ((fp=____(1)____)==NULL)  
  10.     {  
  11.         printf("connot open\n");  
  12.         exit(0);  
  13.     }  
  14.     while ((ch=getchar())!='#')  
  15.         fputc(____(2)____);  
  16.     ____(3)____;  
  17.     return 0;  
  18. }  

(2)设上题建立了名为f1.dat的文件,请将这个文件拷贝到一个名为f2.dat的文件中。
[cpp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #include "stdio.h"  
  2. #include "stdlib.h"  
  3. int main()  
  4. {  
  5.     FILE *fp1,*fp2 ;  
  6.     char c;  
  7.     if ((fp1=fopen("f1.dat", ___(1)___))==NULL)  
  8.     {  
  9.         printf("connot open\n");  
  10.         exit(0);  
  11.     }  
  12.     if ((fp2=fopen("f2.dat", ___(2)___))==NULL)  
  13.     {  
  14.         printf("connot open\n");  
  15.         exit(0);  
  16.     }  
  17.     c=fgetc(fp1);  
  18.     while (___(3)___)  
  19.     {  
  20.         fputc(c,fp2);  
  21.         c=fgetc(fp1);  
  22.     }  
  23.     ___(4)___        
  24.     return 0;  
  25. }  

(3)以下程序的功能是将文件file1.dat的内容输出到屏幕上并复制到文件file2.dat中。
[cpp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #include "stdio.h"  
  2. #include "stdlib.h"  
  3. int main()  
  4. {  
  5.     FILE ___(1)___;  
  6.     char ch;  
  7.     fp1=fopen("file1.dat","r");  
  8.     fp2=fopen("file2.dat","w");  
  9.     while (!feof(fp1))  
  10.     {  
  11.         ch=___(2)___;  
  12.         putchar(ch);  
  13.         fputc(___(3)___);  
  14.     }  
  15.     fclose(fp1);  
  16.     fclose(fp2) ;  
  17.     return 0;  
  18. }  
(1)代码:
#include "stdio.h"
#include "stdlib.h"
int main()
{FILE *fp ;char ch,fname[10];printf("文件名:");gets(fname);if ((fp=fopen(fname,"w"))==NULL){printf("connot open\n");exit(0);}while ((ch=getchar())!='#')fputc(ch,fp);fclose(fp);return 0;
}

(2)代码:
#include<stdlib.h>
#include<stdio.h>
int main()
{FILE *fp1,*fp2;char c;if((fp1=fopen("f1.dat","r"))==NULL){printf("connot open\n");exit(0);}if((fp2=fopen("f2.dat","w"))==NULL){printf("connot open\n");exit(0);}c=fgetc(fp1);while(c!=EOF){fputc(c,fp2);c=fgetc(fp1);}fclose(fp1);fclose(fp2);return 0;
}

运行结果:


(3)代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{FILE *fp1,*fp2;char ch;fp1=fopen("file1.dat","r");fp2=fopen("file2.dat","w");while(!feof(fp1)){ch=fgetc(fp1);putchar(ch);fputc(ch,fp2);}fclose(fp1);fclose(fp2);printf("\n");return 0;
}
运行结果:



项目二【文件中的符号个数】
统计一个文本文件中数字、空格、字母出现的次数,以及文件的字节数,并将结果输出,文本文件名在程序中输入(请自建文本文件完成测试)。

代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{FILE *fp;char ch;int num=0,sp=0,wor=0,n=0;fp=fopen("test.txt","r");if(fp==NULL){printf("connot open\n");exit(0);}while((ch=fgetc(fp))!=EOF){n++;if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))wor++;else if(ch>='0'&&ch<='9')num++;else if(ch==' ')sp++;}printf("字母%d,数字%d,空格%d,字节%d\n",wor,num,sp,n);fclose(fp);return 0;
}
运行结果:





项目三【成绩统计】
文件 english.dat (这个文件中的数据量,超出了你之前所有的体验)中已经有了学生的英语考试成绩数据。
(1)请编程从english.dat中读取数据,求出这次考试的平均成绩,并统计输出优秀人数和不及格人数。请在下面程序基础上填空完成:
[cpp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. int main()  
  4. {  
  5.     int score; //读入的成绩  
  6.     int excelent=0, fail=0,count=0;//分别代表优秀、不及格人数、总人数  
  7.     double sum=0,ave; //sum: 成绩和,ave: 平均分  
  8.     //以输入的方式(ios::in)打开文件  
  9.     FILE ____(1)____;  
  10.     fp=fopen(____(2)____);  
  11.     if(fp==NULL)  
  12.     {  
  13.         printf("open error!\n");  
  14.         exit(1);  
  15.     }  
  16.     while(fscanf(____(3)____)!=EOF)   //当读取成功……  
  17.     {  
  18.         count++;  
  19.         sum+=score;  
  20.         if(____(4)____)  
  21.             excelent++;  
  22.         else if(score<60)  
  23.             ____(5)____;  
  24.     }  
  25.     ____(6)____;    
  26.     //下面输出结果  
  27.     ave=sum/count;  
  28.     printf("总人数为:%d\n", count);  
  29.     printf("平均成绩为:%.2f\n", ave);  
  30.     printf("优秀人数:%d\n", excelent);  
  31.     printf("不及格人数:%d\n", fail);  
  32.     return 0;  
  33. }  

(2)扩充上面的程序,要求将统计结果保存到数据文件statictic.dat中(提示:要用fprintf写入文件了)
(3)(用柱状图输出)编程序,求出这次考试的平均成绩,并统计各分数段的人数(优秀:≥90,良好:≥80,中等:≥70,及格:≥60,不及格:<60)。运行结果如图所示。试着将输出界面改变成成下面的样子(仅变输出方式)



(1)代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{int score;int excelent=0,fail=0,count=0;double sum=0,ave;FILE *fp;fp=fopen("english.dat","r");if(fp==NULL){printf("open error!\n");exit(1);}while(fscanf(fp,"%d",&score)!=EOF){count++;sum+=score;if(score>=90)excelent++;else if(score<60)fail++;}fclose(fp);ave=sum/count;printf("总人数为:%d\n",count);printf("平均成绩为:%.2f\n",ave);printf("优秀人数:%d\n",excelent);printf("不及格人数:%d\n",fail);return 0;
}
运行结果:

(2)代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{int score; //读入的成绩int excelent=0, fail=0,count=0;//分别代表优秀、不及格人数、总人数double sum=0,ave; //sum: 成绩和,ave: 平均分//以输入的方式(ios::in)打开文件FILE *fp,*sp;fp=fopen("english.dat","r");if(fp==NULL){printf("open error!\n");exit(1);}sp=fopen("statictic.dat","w");if(sp==NULL){printf("error\n");exit(1);}while(fscanf(fp,"%d",&score)!=EOF)   //当读取成功……{count++;sum+=score;if(score>=90)excelent++;else if(score<60)fail++;}ave=sum/count;fprintf(sp,"总人数为:%d\n", count);fprintf(sp,"平均成绩为:%.2f\n", ave);fprintf(sp,"优秀人数:%d\n", excelent);fprintf(sp,"不及格人数:%d\n", fail);fclose(fp);fclose(sp);return 0;
}
运行结果:



(3)代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{int score,r;int best=0,good=0,mid=0,passing=0,fail=0,count=0;double sum=0,ave;FILE *fp;fp=fopen("english.dat","r");if(fp==NULL){printf("error");exit(1);}while(fscanf(fp,"%d",&score)!=EOF){count++;sum=sum+score;r=score/10;switch(r){case 10:case 9:best++;break;case 8:good++;break;case 7:mid++;break;case 6:passing++;break;default:fail++;break;}}fclose(fp);ave=sum/count;printf("平均成绩 %.4f\n",ave);int l,i;printf("优秀 ");l=best/100;for(i=0;i<=l;i++)printf("X");printf(" %d",best);printf("\n良好 ");l=good/100;for(i=0;i<=l;i++)printf("X");printf(" %d",good);printf("\n中等 ");l=mid/100;for(i=0;i<=l;i++)printf("X");printf(" %d",mid);printf("\n及格 ");l=passing/100;for(i=0;i<=l;i++)printf("X");printf(" %d",passing);printf("\n挂科 ");l=fail/100;for(i=0;i<=l;i++)printf("X");printf(" %d",fail);printf("\n");return 0;
}
运行结果:




项目四【算工资】
从文件 salary.txt 中读入工人的工号、基本工资、奖金,将奖金全部增加20%(好事)后,将工号、基本工资、奖金和应发工资(前项目之和)保存到文件salarylist.txt中。
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{int num;double salary,award,sum;FILE *fp1,*fp2;fp1=fopen("salarylist.txt","r");if(fp1==NULL){printf("error");exit(1);}fp2=fopen("salary.txt","w");if(fp2==NULL){printf("error2");exit(1);}while(fscanf(fp1,"%d %lf %lf %lf",&num,&salary,&award,&sum)!=EOF){award*=1.2;fprintf(fp2,"%d %.2lf %.2lf\n",num,salary,award+salary);}fclose(fp1);fclose(fp2);printf("over!");return 0;
}
运行结果:






总结:

  文件读写的语句和以前的输入输出不一样,要写对格式
  读入文件的时候要记得判断指针函数的值,如果是NULL要提示打开失败
  程序结束前要关闭文件




















260

这篇关于第四十三课 从文本文件中读入数据 【项目1-4】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/229557

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装