微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法读取 4 个不同的数组以在 C

如何解决有没有办法读取 4 个不同的数组以在 C

我一直在开发 C 型血压跟踪器/计算器应用程序,但在生成输入血压值的最小值和最大值时遇到了问题。
该程序的预期输出是返回并显示平均收缩压和舒张压、最小收缩压和舒张压、最大收缩压和舒张压以及标准差收缩压和舒张压值。

此程序的最后更新

你好,你可能想知道这个程序解决了吗?最简洁的答案是不。但很长的答案是我必须从头开始,因为我的讲师告诉我,我正在制作的程序不符合给我的任务的要求。所以 4 天前是我不得不再次从零开始的时候,我很惊讶我花了 4 天的时间来解决具有正确要求的程序,尽管程序代码结构本身看起来很糟糕。总之,原来的程序已被废弃并重组为一个功能齐全的血压跟踪器应用程序。 结束

程序的预期功能

程序应该工作的方式是它从 4 个数组中获取用户输入,然后使用标准血压公式(通常从第二天开始)计算早上和下午的输入以生成输出在通过 if 和 else if 语句确定输出值是否与标准血压类别图表匹配之前,输出将被分为早上和下午读数,这就是 calAvg 函数的工作原理.

对于 calMin 和 calMax 函数,它也通过从 4 个数组获取输入来工作,但它不使用血压类别图表或血压公式来生成输出,但它基本上读取 4 个数组,找到每个数组中的最小值或最大值,然后将 4 个数组生成输出放入 2 个独立的数组,称为 minSYS、minDYS(calMin 函数)、maxSYS 和 maxDYS(calMax 函数)。

将它们放入 2 个单独的数组后,开始读取 2 个数组的过程,以找到 Systolic 和 Diastolic 中的最小值和最大值。

实际输出

但程序显示的实际输出是这样的:(当输入150 Systolic & 50 Diastolic)

收缩压平均值:150 毫米汞柱
收缩压最小值:0 mmHG
收缩压最大值:12584792 mmHG
舒张压平均值:50 毫米汞柱
最低舒张压:0 mmHG
舒张压最大值:268501009 mmHG

更新:

进行更多实验后,输出没有显示我预期的内容,而是显示了这一点。我已经更改了最小和最大数组的 SIZE,因为这样做没有意义。
输入 Systolic 150 & Diastolic 50 时的当前实际输出
收缩压平均值:150 毫米汞柱
收缩压最小值:0 mmHG
最大收缩压:8140608 mmHG
舒张压平均值:50 毫米汞柱
最低舒张压:0 mmHG
舒张压最大值:6421796 毫米汞柱

这是我用来生成输出代码

int calMin(int readMornSYS[SIZE],int readAfterSYS[SIZE],int readMornDYS[SIZE],int readAfterDYS[SIZE],int minSYS[SIZE],int minDYS[SIZE]) //wip
{
    int index,smallest1,smallest2,smallest3,smallest4;
    int smallestSYSTotal = 0,smallestDYSTotal = 0;
    //INITIALIZING smallest variables
    smallest1 = readMornSYS[0];
    smallest2 = readAfterSYS[0];
    smallest3 = readMornDYS[0];
    smallest4 = readAfterDYS[0];

     for(index=0; index < SIZE; index++)
    {
        minSYS[0] = smallest1;
        minSYS[1] = smallest2;
        minDYS[0] = smallest3;
        minDYS[1] = smallest4;
        if(smallestSYSTotal > minSYS[index])
        {
            smallestSYSTotal = minSYS[index];
        }
        if(smallestDYSTotal > minDYS[index])
        {
            smallestDYSTotal = minDYS[index];
        }

    }
    printf("Systolic Minimum : %d mmHG\n",smallestSYSTotal);

    return smallestDYSTotal;

}

我尝试将数组链接一个变量中,然后尝试执行查找和输出数组的最小值和最大值的标准方法,但到目前为止这些方法都没有奏效。我也尝试过更改索引值,但这样做后,整个程序崩溃了。

这是程序的完整代码

  #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SIZE 7


int calSTDDEV(int readMornSYS[SIZE],int readAfterDYS[SIZE]);
int calMax(int readMornSYS[SIZE],int maxSYS[4],int maxDYS[4]);
int calMin(int readMornSYS[SIZE],int minSYS[4],int minDYS[4]);
int calAvg(int readMornSYS[SIZE],int readAfterDYS[SIZE]);
void displayHBPT(int avgHBP,int minHBP,int maxHBP,int stddevHBP);
void inputRead(int readMornSYS[SIZE],int readAfterDYS[SIZE]);
int main()
{
    int readMornSYS[SIZE],readMornDYS[SIZE];
    int readAfterSYS[SIZE],readAfterDYS[SIZE];
    int minSYS[4],minDYS[4];
    int maxSYS[4],maxDYS[4];
    int minHBP,avgHBP,maxHBP,stddevHBP;
    char userInput;

    //Title of the program
    printf("HBPTracker Application\n");
    printf("==================================\n");
    //disclaimer of the program
    printf("disCLaimER: The HBPTracker Application is only capable of recording data for a week.\n");

    do
    {
        //This is the main menu of the program where you can decide to Start or Quit the program
        printf("==================================\n");
        printf("Do you wish to start<S> or quit<Q>: ");
        scanf(" %c",&userInput);
        //If the input is Start the input function will prompt out
        if(userInput != 'Q')
        {
            //The input function reads all of the 4 arrays
            inputRead(readMornSYS,readAfterSYS,readMornDYS,readAfterDYS);
            //The average function calculates the 4 arrays and then returns 2 values
            avgHBP = calAvg(readMornSYS,readAfterDYS);
            //The minimum function scans for the smallest value in each of the 4 arrays
            //and then the output of the 4 arrays are put into two separate arrays to return two minimum values
            minHBP = calMin(readMornSYS,readAfterDYS,minSYS,minDYS);
            //The maximum function scans for the biggest value in each of the 4 arrays
            //and then the output of the 4 arrays are put into two separate arrays to return two maximum values
            maxHBP = calMax(readMornSYS,maxSYS,maxDYS);
            //The display function mainly displays the second return value of each of the other functions
            displayHBPT(avgHBP,minHBP,stddevHBP);
        }



    }while(userInput != 'Q');
    {
        printf("==================================\n");
        printf("You have exited the program.\n");
        printf("==================================\n");
    }

    return 0;
}

void displayHBPT(int avgHBP,int stddevHBP)
{
    printf("Diastolic Average : %d mmHG\n",avgHBP);
    printf("Diastolic Minimum : %d mmHG\n",minHBP);
    printf("Diastolic Maximum : %d mmHG\n",maxHBP);
    //printf("This is where Standard Deviation would be %d\n",stddevHBP);

}

void inputRead(int readMornSYS[SIZE],int readAfterDYS[SIZE])
{
  int index,day = 1;
  char userInput;

    for(index=0; index < SIZE; index++)
    {
        printf("==================================\n");
        printf("Day : %d\n",day);
        printf("Enter Morning Blood Systolic[Upper] : ");
        scanf("%d",&readMornSYS[index]);
        printf("Enter Morning Blood Diastolic[Lower] : ");
        scanf("%d",&readMornDYS[index]);
        printf("Enter Afternoon Blood Systolic[Upper] : ");
        scanf("%d",&readAfterSYS[index]);
        printf("Enter Afternoon Blood Diastolic[Lower] : ");
        scanf("%d",&readAfterDYS[index]);
        printf("==================================\n");
        printf("Do you wish to proceed to the next day?[Y/N] : ");
        scanf(" %c",&userInput);
        if(userInput == 'Y' && userInput != 'N')
        {
            day++;
        }
        else if(userInput == 'N')
        {
            break;
        }

    }

}

int calAvg(int readMornSYS[SIZE],int readAfterDYS[SIZE])
{
    int index;
    int calBPSYS1=0,calBPSYS2=0,avgBPSYS1=0,avgBPSYS2=0,totalSYS=0;
    int calBPDYS1=0,calBPDYS2=0,avgBPDYS1=0,avgBPDYS2=0,totalDYS=0;
   for(index = 1; index < SIZE; index++)
   {
    //Average Blood Pressure Formula 7 Days: Start(Day 2)
    //STEP 1 sum the values in each array
    calBPSYS1 += readMornSYS[index];
    calBPSYS2 += readAfterSYS[index];
    calBPDYS1 += readMornDYS[index];
    calBPDYS2 += readAfterDYS[index];
    //STEP 2 divide the total of Systolic and Diastolic arrays by the index of readings
    avgBPSYS1 = (avgBPSYS1+calBPSYS1)/index;
    avgBPSYS2 = (avgBPSYS2+calBPSYS2)/index;
    avgBPDYS1 = (avgBPDYS1+calBPDYS1)/index;
    avgBPDYS2 = (avgBPDYS2+calBPDYS2)/index;
    //STEP 3 add the average total of each array into their respective reading groups
    //and then divide by the number of systolic arrays(2) and diastolic arrays(2)
    totalSYS = (totalSYS + avgBPSYS1 + avgBPSYS2)/2;
    totalDYS = (totalDYS + avgBPDYS1 + avgBPDYS2)/2;
    if(totalSYS < 120 && totalDYS < 80)
    {
        printf("==================================\n");
        printf("Your Blood Pressure is norMAL\n");
        printf("==================================\n");
        printf("Systolic Average : %d mmHG\n",totalSYS);
        return totalDYS;
    }
    else if(totalSYS >= 120 && totalSYS <= 129 && totalDYS < 80)
    {
        printf("==================================\n");
        printf("Your Blood Pressure is ELEVATED\n");
        printf("==================================\n");
        printf("Systolic Average : %d mmHG\n",totalSYS);
        return totalDYS;
    }
    else if(totalSYS >= 130 || totalSYS <= 139 || totalDYS >= 80 || totalDYS <= 89)
    {
        printf("==================================\n");
        printf("You have HIGH BLOOD PRESSURE\n");
        printf("\tHYPERTENSION STAGE 1\n");
        printf("==================================\n");
        printf("Systolic Average : %d mmHG\n",totalSYS);
        return totalDYS;
    }
    else if(totalSYS >= 140 || totalDYS >= 90)
    {
        printf("==================================\n");
        printf("You have HIGH BLOOD PRESSURE\n");
        printf("\tHYPERTENSION STAGE 2\n");
        printf("==================================\n");
        printf("Systolic Average : %d mmHG\n",totalSYS);
        return totalDYS;
    }
    else if(totalSYS > 180 || totalDYS > 100)
    {
        printf("==================================\n");
        printf("Your Blood Pressure is TOO HIGH\n");
        printf("Please consult a doctor immediately.\n");
        printf("==================================\n");
        printf("Systolic Average : %d mmHG\n",totalSYS);
        return totalDYS;
    }


   }

}



int calMin(int readMornSYS[SIZE],int minDYS[4]) //wip
{
    int index,smallestDYSTotal = 0;
    //INITIALIZING smallest variables
    smallest1 = readMornSYS[0];
    smallest2 = readMornDYS[0];
    smallest3 = readMornDYS[0];
    smallest4 = readAfterDYS[0];

    for(index=1; index < SIZE; index++)
    {
        if(readMornSYS[index]<smallest1) //checking for smallest value in readMornSYS array
        {
            smallest1 = readMornSYS[index];
            minSYS[index] = smallest1;
        }
        if(readAfterSYS[index]<smallest2) //checking for smallest value in readAfterSYS array
        {
            smallest2 = readAfterSYS[index];
            minSYS[index] = smallest2;
        }
        if(readMornDYS[index]<smallest3) //checking for smallest value in readMornDYS array
        {
            smallest3 = readMornDYS[index];
            minDYS[index] = smallest3;
        }
        if(readAfterDYS[index]<smallest4) //checking for smallest value in readAfterDYS array
        {
            smallest4 = readAfterDYS[index];
            minDYS[index] = smallest4;
        }
    }
    for(index=1; index < 4; index++)
    {
        if(minSYS[index]<smallestSYSTotal)
        {
            smallestSYSTotal = minSYS[index];
        }
    }
    printf("Systolic Minimum : %d mmHG\n",smallestSYSTotal);

    for(index=0; index < 4; index++)
    {
         if(minDYS[index]<smallestDYSTotal)
        {
            smallestDYSTotal = minDYS[index];
        }
    }
    return smallestDYSTotal;

}

int calMax(int readMornSYS[SIZE],int maxDYS[4]) //wip
{
     int index,biggest1,biggest2,biggest3,biggest4;
     int biggestSYSTotal = 0,biggestDYSTotal = 0;
     //INITIALIZING biggest variables
     biggest1 = readMornSYS[0];
     biggest2 = readAfterSYS[0];
     biggest3 = readMornDYS[0];
     biggest4 = readAfterDYS[0];

    for(index=0; index < SIZE; index++)
    {
        if(readMornSYS[index]>biggest1) //checking for biggest value in readMornSYS array
        {
            biggest1 = readMornSYS[index];
            maxSYS[index] = biggest1;
        }
        if(readAfterSYS[index]>biggest2) //checking for biggest value in readAfterSYS array
        {
            biggest2 = readAfterSYS[index];
            maxSYS[index] = biggest2;
        }
        if(readMornDYS[index]>biggest3) //checking for biggest value in readMornDYS array
        {
            biggest3 = readMornDYS[index];
            maxDYS[index] = biggest3;
        }
        if(readAfterDYS[index]>biggest4) //checking for biggest value in readAfterDYS array
        {
            biggest4 = readAfterDYS[index];
            maxDYS[index] = biggest4;
        }
    }
    for(index=0; index < 4; index++)
    {
        if(maxSYS[index]>biggestSYSTotal)
        {
            biggestSYSTotal = maxSYS[index];

        }

    }
    printf("Systolic Maximum : %d mmHG\n",biggestSYSTotal);

    for(index=0; index < 4; index++)
    {
        if(maxDYS[index]>biggestDYSTotal)
        {
            biggestDYSTotal = maxDYS[index];
        }
    }
    return biggestDYSTotal;

}

解决方法

您打破了传递给函数的数组长度 [4] 的边界,在循环中对它们进行索引,该循环指向 < SIZE,即 7

我建议你将一些语句移出循环,然后像这样:

minSYS[0] = smallest1;
minSYS[1] = smallest2;
minSYS[2] = smallest3;
minSYS[3] = smallest4;

等...和其他功能类似

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。