我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言如何读取文件求某一列的平均值

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言如何读取文件求某一列的平均值

本篇内容主要讲解“C语言如何读取文件求某一列的平均值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何读取文件求某一列的平均值”吧!

第一部分:比较读取文件的效率

首先随机生成一个文件,1000万行,4列(该文件下面还会用到)。我们看一下上述函数读取文件的效率:

C语言如何读取文件求某一列的平均值

从上图中可以看出,fread 的效率最高,fgetc 的效率最低。当然这种比较很粗浅,但是能大概看出趋势。

各个函数读取文件的代码如下:其中 main 函数是一样的,只是 readFile 函数的实现不同。

    #include <stdio.h>    #include <stdlib.h>    #include <time.h>    #define BUFSIZE 4096        void readFile(FILE* fp);        int main(int argc, char* argv[]) {      FILE *fp;      time_t start, end;      start = time(NULL);      if (argc < 2) {        printf("Usage: %s <filename>\n", argv[0]);        return 1;      }      if ((fp = fopen(argv[1], "r")) == NULL) {        printf("Error: cannot open file\n");        return 1;      }      readFile(fp);      fclose(fp);      end = time(NULL);      printf("time spent: %d seconds\n", end - start);      return 0;    }    // readFile_fgetc:    void readFile(FILE* fp) {      char c;      while ((c = fgetc(fp)) != EOF)        ;    }    // readFile_fgets:    void readFile(FILE* fp) {      char buf[BUFSIZE];      while (fgets(buf, MAXLINE, fp) != NULL)        ;    }    // readFile_fread:    void readFile(FILE* fp) {      char buf[BUFSIZE];      while (fread(buf, 1, BUFSIZE, fp) > 0)        ;    }    // readFile_fscanf:    void readFile(FILE* fp) {      char buf[BUFSIZE];      while (fscanf(fp, " %[^\n]s", buf) == 1)        ;    }

第二部分:比较求取列平均值的效率

那么各个函数计算列平均值的效率如何呢?我们依然使用上面那1000万行的文件,用上述各个函数实现计算第2列平均数的功能,它们的效率如下:

C语言如何读取文件求某一列的平均值


代码如下:main 函数大体上是一样的,只是 colAver 函数的实现不一样。
(这些代码完善地处理了EOF,无论文件最后是否有空白行都可以正确运行。但是仍然有前提,就是文件中每一行的分隔符(列数)是一样的,否则代码可能会出错。)
这些代码中,fscanf 的最简短,该函数可以大大提高格式化读取数据的编程效率。

#include <stdio.h>#include <stdlib.h>#include <time.h>#define BUFSIZE 4096void getColAver(FILE* fp, const int k); int main(int argc, char* argv[]) {   FILE *fp;   time_t start, end;   start = time(NULL);   if (argc < 2) {     printf("Usage: %s <filename>\n", argv[0]);     return 1;   }   if ((fp = fopen(argv[1], "r")) == NULL) {     printf("Error: cannot open file\n");     return 1;   }   getColAver(fp, 2);   fclose(fp);   end = time(NULL);   printf("time spent: %d seconds\n", end - start);   return 0; } // colAver_fgetc: void getColAver(FILE* fp, const int k) {   int i = 0;  // num of '\t'   int j = 0;  // num of chars   int c;  // char   char col[50];   float sum = 0;   int n = 0;  // num of lines.   int inCol = 0;   while ((c = fgetc(fp)) != EOF) {     if (i == k - 1) {       inCol = 1;       if (c == '\t') i++;       else if (c == '\n') i = 0;       else col[j++] = c;     } else {       if (c == '\t') i++;       else if (c == '\n') i = 0;       if (inCol) {         col[j] = '\0';         sum += atof(col);         n++;       }       j = 0;       inCol = 0;     }   }   if (inCol) {     col[j] = '\0';     sum += atof(col);     n++;   }   if (n == 0) printf("Error: no line!\n");   else printf("The average of col %d is %f\n", k, sum / n); } // colAver_fgets: void getColAver(FILE* fp, const int k) {   int i = 0;  // num of '\t'   int j = 0;  // num of chars   char col[50];   char buf[BUFSIZE];   float sum = 0;   int n = 0;  // num of lines.   int inCol = 0;   char* p;   while (fgets(buf, BUFSIZE, fp) != NULL) {     for (p = buf; *p != '\0'; p++) {       if (i == k - 1) {         inCol = 1;         if (*p == '\t') i++;         else if (*p == '\n') i = 0;         else col[j++] = *p;       } else {         if (*p == '\t') i++;         else if (*p == '\n') i = 0;         if (inCol) {           col[j] = '\0';           sum += atof(col);           n++;         }         j = 0;         inCol = 0;       }     }   }   if (inCol) {     col[j] = '\0';     sum += atof(col);     n++;   }   if (n == 0) printf("Error: no line!\n");   else printf("The average of col %d is %f\n", k, sum / n); } // colAver_fread: void getColAver(FILE* fp, const int k) {   int i = 0;  // num of '\t'   int j = 0;  // num of chars   char col[50];   char buf[BUFSIZE];   float sum = 0;   int n = 0;  // num of lines.   int m, l;   int sizeChr = sizeof(char);   int inCol = 0;   while ((l = fread(buf, sizeChr, BUFSIZE, fp)) > 0) {     for (m = 0; m < l; m++) {       if (i == k - 1) {         inCol = 1;         if (buf[m] == '\t') i++;         else if (buf[m] == '\n') i = 0;         else col[j++] = buf[m];       } else {         if (buf[m] == '\t') i++;         else if (buf[m] == '\n') i = 0;         if (inCol) {           col[j] = '\0';           sum += atof(col);           n++;         }         j = 0;         inCol = 0;       }     }   }   if (inCol) {     col[j] = '\0';     sum += atof(col);     n++;   }   if (n == 0) printf("Error: no line!\n");   else printf("The average of col %d is %f\n", k, sum / n); } // colAver_fscanf: void getColAver(FILE* fp) {   float f;   float sum = 0;   int n = 0;  // num of lines.   while (fscanf(fp, "%*s%f%*[^\n]s", &f) == 1) {     sum += f;     n++;   }   if (n == 0) printf("Error: no line!\n");   else printf("The average of col 2 is %f\n", sum / n); }

到此,相信大家对“C语言如何读取文件求某一列的平均值”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言如何读取文件求某一列的平均值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言如何读取文件求某一列的平均值

本篇内容主要讲解“C语言如何读取文件求某一列的平均值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何读取文件求某一列的平均值”吧!第一部分:比较读取文件的效率首先随机生成一个文件,100
2023-06-29

c语言如何求三个数的平均值

要求三个数的平均值,首先需要将这三个数相加,然后再除以3。以下是用C语言编写的示例代码:```c#include int main() {int num1, num2, num3;float average;printf("请输入三个数:\
2023-08-14

如何利用Python读取CSV文件并计算某一列的均值和方差

今天就跟大家聊聊有关如何利用Python读取CSV文件并计算某一列的均值和方差,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。近日需要对excel的csv文件进行处理,求取某银行历年股
2023-06-22

c语言如何读取文件里的东西

在C语言中,可以使用`fopen()`函数打开文件,然后使用`fscanf()`或`fgets()`函数读取文件中的内容。下面是一个示例代码,展示了如何读取文件中的内容:```c#include int main() {FILE *file
2023-08-26

c语言如何删除文件中的某一行

在C语言中,要删除文件中的某一行,可以实现以下步骤:1. 打开待操作的文件,使用`fopen()`函数打开文件,指定打开方式为读写模式("r+")。2. 创建一个临时文件,使用`fopen()`函数创建一个新的临时文件,并指定打开方式为写模
2023-08-08

c语言如何读取文件中的字符串

在C语言中,可以使用标准库函数`fscanf`或`fgets`来读取文件中的字符串。1. 使用`fscanf`函数:```c#include int main() {FILE *file = fopen("example.txt", "r"
2023-08-24

C语言如何读取打开的 zip 档案中的下一个文件

本文介绍了C语言中zip_open函数的使用,该函数用于打开ZIP归档中的下一个文件。函数原型和参数含义如下:zip_open(archive,name,flags)archive:ZIP归档句柄name:要打开的文件名称flags:指定打开文件时使用的标志常见的标志包括ZIP_FL_UNCHANGED和ZIP_FL_COMPRESSED。函数成功后返回一个指向zip_file结构的指针,否则返回NULL并提供错误代码。用法示例演示了如何遍历ZIP归档中的文件并打印其名称。
C语言如何读取打开的 zip 档案中的下一个文件
2024-04-02

Go语言如何读取打开的 zip 档案中的下一个文件

本教程详细介绍了如何使用Go语言读取打开的Zip档案中的下一个文件。通过引入必要的库,您可以创建一个Zip档案读取器,并循环遍历档案中的文件。每个文件可以使用File.Open()函数打开,并通过Reader接口读取内容。本教程还提供了示例代码,展示了如何打开Zip档案并读取其文件。
Go语言如何读取打开的 zip 档案中的下一个文件
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录