码迷,mamicode.com
首页 > 编程语言 > 详细

【C语言】多温度传感器大数据的分析与处理实验报告

时间:2015-06-30 10:56:14      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:


实验目的:


一、从实验仪器测量数据并且记录在文本文档中

二、读取记录表的数据。

三、检查记录表中的温度是否符合标准。


实验步骤:


一、从实验仪器测量数据并且记录在文本文档中

根据实验仪器上的电路连接图连接相关路线读取相关数据,并且记录在文件中。

二、读取记录表的数据

在当前工程目录底下创建一个文本文档,将所测的数据(时间、温度、湿度)记录在文本文档中,如:


(一)记录表

技术分享

通过程序运行将此文件的有限数据读出并显示在终端(运行在屏幕上),同时求温度的最大值与平均值。


三、检查记录表中的温度是否符合标准


另给一个标准表,即再创建一个文本文档,另给一组数据(时间、温度、湿度),同样也需要去读取标准表的数据,通过记录表与标准表在相等时间内的温度比较,检查记录表中的温度是否符合标准,若不合格,则输出记录表中不合格的温度以及对应时间。标准表如下:

(二)标准表

技术分享


通过眼睛去比较记录表与标准表,如果规定在相等时间时两表中的温度差超过了2就不合格,那么我们一眼就知道记录表中最后两个数据不合格,那么就要把两个时间和温度对应输出到终端。结合二、三步骤的源代码,此源代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

#define MAX 100
#define TIME_LEN 10
#define temperature_LEN 5
#define humidity_LEN 5

#define CHECK_STAND 2.0
double check_failtem[30];
char check_failtime[20][20];
struct TXT
{
    char time[TIME_LEN];
    char temperature[temperature_LEN];
    char humidity[humidity_LEN];
}txt[30],check[30];
void print()
{
    printf("++++++++++++++++++++++\n");
    printf("1->读取记录表的数据\n");
    printf("2->读取标准表的数据\n");
    printf("3->求记录表温度的最大值\n");
    printf("4->求记录表温度的平均值\n");
    printf("5->检查某个时间下温度是否合格\n");
    printf("++++++++++++++++++++++\n");
    printf("\n请输入序号:");
}

void FileRead_Write()//读取记录表的数据
{
    FILE *pfread = fopen("C:/Users/SAMSUNG/Documents/Visual Studio 2013/Projects/txtchuanganqi2015_6_24/Debug/sulijuan.txt", "rb+");
    if (pfread == NULL)
    {
        perror("error");
        exit(EXIT_FAILURE);
    }
    printf("时间 温度 湿度\n");
    for (int i = 0; i < 5; i++)
    {
        fgets(txt[i].time, 5, pfread);
        fseek (pfread, 1, SEEK_CUR);
        fgets(txt[i].temperature, 5, pfread);
        fseek(pfread, 1, SEEK_CUR);
        fgets(txt[i].humidity, 6, pfread);
        fseek(pfread, 1, SEEK_CUR);
        printf("%s %s %s\n", txt[i].time, txt[i].temperature, txt[i].humidity);
    }
    printf("\n");
    fclose(pfread);
}
void FileRead_Stadard()//读取标准表的数据
{
    FILE *fcheck = fopen("C:/Users/SAMSUNG/Documents/Visual Studio 2013/Projects/txtchuanganqi2015_6_24/Debug/standardtemperature.txt", "rb+");
    printf("时间 温度 湿度\n");
    for (int i = 0; i < 5; i++)
    {
        fgets(check[i].time, 5, fcheck);
        fseek(fcheck, 1, SEEK_CUR);
        fgets(check[i].temperature, 5, fcheck);
        fseek(fcheck, 1, SEEK_CUR);
        fgets(check[i].humidity, 6, fcheck);
        fseek(fcheck, 1, SEEK_CUR);
        printf("%s %s %s\n", check[i].time, check[i].temperature, check[i].humidity);
    }
    printf("\n");
    fclose(fcheck);
}
void temperature_max(struct TXT txt[])//求记录表温度的最大值
{
    int i = 0;
    double n,max = 0.0;
    max = atof(txt[0].temperature);
    for (i = 1; i < 5; i++)
    {
         n = atof(txt[i].temperature);
         if (n>max)
         {
             max = n;
         }
    }
    printf("temperature_max = %f\n",max);
    printf("\n");
}
void temperature_avg(struct TXT txt[])//求记录表温度的平均值
{
    double m,sum = 0.0;
    int i;
    sum = atof(txt[0].temperature);
    for (i = 1; i <5; i++)
    {
        m = atof(txt[i].temperature);
        sum += m;
    }
    printf("temperature_avg = %f\n",sum/5);
    printf("%f", fabs(atof(check[3].temperature) - atof(txt[3].temperature)));
    printf("\n");
}
void Check_temperature(struct TXT txt[], struct TXT check[])//检查温度是否合格
{
    int i = 0,j = 0;
    for (i = 0; i<5;i++)
    {
        if (strcmp(txt[i].time, check[i].time) == 0)
        {
            if ((fabs(atof(check[i].temperature) - atof(txt[i].temperature))) > CHECK_STAND)
            {
                strcpy(check_failtime[i],txt[i].time);
                check_failtem[i] = atof(txt[i].temperature);
                printf("%s ", check_failtime[i]);
                printf("%f\n", check_failtem[i]);
                //fwrite(&(txt[i].temperature), sizeof(TXT), 1, pf);
            }
        }
    }
}
int main()
{
    int input;
    while (1)
    {
        print();
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            FileRead_Write();
            break;
        case 2:
            FileRead_Stadard();
            break;
        case 3:
            temperature_max(txt);
            break;
        case 4:
            temperature_avg(txt);
            break;
        case 5:
            Check_temperature(txt, check);
            break;
        default:
            printf("序号无效\n");
            break;
        }
    }
    return 0;
}

解析一:用fopen打开创建的记录表,通过fgets操作文件指针一行一行地去读取时间、温度、湿度,并且放在一个数组里面,方便查找来进行运算。


解析二:将两个表里的数据都读出来放在两个不同的数组里面,通过操作数组对两个表的温度进行比较,当时间相同时才会进行温度的比较。


运行结果:

(一)从文件中读取记录表的数据

技术分享

(二)在读取出的数据中求温度的最大值和平均值

技术分享


(三)从文件中读取标准表的数据

技术分享

(四)比较记录表和标准表,检查记录表中某个时间下的温度是否合格

技术分享


实验总结:

(1)、电路必须连接正确,记录有限的相关数据。

(2)、在编写程序实现文件读取数据时,文件若创建在当前目录底下,则读取时可用相对路径打开文件,否则用绝对路径打开文件。


实验心得:

通过这次实验,我懂得了数据应该按照什么样的顺序去记录,才能从文件中正确地读取出来;以及对用程序去操作文件更了解了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【C语言】多温度传感器大数据的分析与处理实验报告

标签:

原文地址:http://blog.csdn.net/sulijuan66/article/details/46685547

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!