【问题标题】:display highest/lowest and the avg of inputed marks - C programming显示最高/最低和估算标记的平均值 - C 编程
【发布时间】:2016-10-09 13:45:31
【问题描述】:

我正在为我的介绍课编写一个 c 程序,但我被 if/else 语句卡住了。我们必须输出输入的最高、最低等级以及这些等级的平均值。输入的分数必须在 0-100 之间。到目前为止,这是我的代码,我似乎无法弄清楚,感谢您的建议! :

#include <stdio.h>

int main (void)
{

  int numberofMarks;
  int i;
  int x;
  int y;

  int numofPasses=1;
  int numofFails=1;
  float sumpassedMarks =0;
  float sumfailedMarks=0;
  float markEntered=0;
  float highestMark=0;
  float lowestMark=0;
  float totalMark=0;
  float avgofMarks=0;
  float avgpassedMarks=0;
  float avgfailedMarks=0;



        printf ("       ---=== IPC mark Analyser ===---\n");
        printf ("Please enter the number of marks(between 3 and 40): ");
         scanf ("%d", &numberofMarks);


//asks user for number of marks, only takes 3-40, otherwise outputs error msg
        for (i=1 ; (numberofMarks < 3)||(numberofMarks > 40) ; i++) {
          printf ("Invalid number, enter a number between 3 and 40 inclusive: ");
          scanf ("%d", &numberofMarks);
        }

//for loop recieves the mark
        for (x=1 ;(x <= numberofMarks) ; x++) {
          printf ("%d> ", x);
          scanf ("%f", &markEntered);


//contd loop..loop makes sure mark entered is between 1-100
        for (y=1; (markEntered <0)||(markEntered>100); y++)
        {
            printf ("Error, Enter values between 0 and 100 incluisve.\n");
            printf ("%d> ", x);
             scanf ("%f", &markEntered);


            if (markEntered >= 50) {
              numofPasses=numofPasses+1;
           }

            if else (markEntered <= 49) {
              numofFails = numofFails+1;
           }

            if else (markEntered > highestMark) {
              highestMark = markEntered;
           }

            else (markEntered < lowestMark) {
              lowestMark = markEntered;
           }

        }
//adds the mark entered to all the marks entered for a overall sum
        totalMark = totalMark + markEntered;
        }

        avgofMarks = (float)totalMark / numberofMarks;
        avgpassedMarks = (float)sumpassedMarks / numberofMarks;
        avgfailedMarks = (float)sumfailedMarks / numberofMarks;


        printf ("Total of %d students passed with an average of %.1f.\n", numofPasses,avgpassedMarks);
        printf ("Total of %d students failed with an average of %.1f.\n", numofFails, avgfailedMarks);
        printf ("Highest mark in the group: %.1f\n", highestMark);
        printf ("lowest mark in the group: %.1f\n", lowestMark);
        printf ("The average of all marks in this group is %.1f.\n", avgofMarks);
        printf ("Program Ended.\n");

return 0;

}

The work 问,

在输入标记的循环中,每次输入后检查输入标记的值:

  • 如果是及格,则将通过次数加一,并将分数加到通过分数的总和中。
  • 如果是失败,则将失败次数加一,并将标记的值添加到失败标记的总和中。
  • 如果该值高于最高标记,则将最高标记设置为读取的值。
  • 如果值低于最低标记,则将最低标记设置为 读取的值。在所有的分数都输入和检查后,划分 相应分数的总和得到平均值和 打印结果。

This is my output vs the sample output.

【问题讨论】:

  • 这不是家庭作业服务。试着问一个更具体的问题,你目前在哪里挣扎(以及到目前为止你已经尝试过什么)
  • 为什么在你读完之前,通过和失败的次数是 1 而不是 0?这是一对令人担忧的初始化。

标签: c loops if-statement


【解决方案1】:

你的代码一团糟;让我们试着在这里弄清楚一些事情:

  • 如果您不打算在 for 循环体中使用 i,则没有理由对其进行初始化和递增。最好用一段时间。
  • 当您发布问题时,请从答案中清除所有非严格必要的代码,以便更容易提供帮助
  • 考虑使用数组,而不是创建 15 个变量,或者,如果您以后不打算在程序中使用这些值,则直接打印结果。

例如。

int a = 10, b = 15; 如果要打印总和,没有理由将其保存在新的int sum 中,只需 printf("%d", a + b);

  • 不要在循环之外请求票数,然后循环验证值(您的第一个 for 循环)。请考虑使用 DO..WHILE 循环。

例如

do{

 scanf("%d", &n);

} while(n <= 0);

//Scan integer and save into n, until you get a positive value
  • 避免无缘无故地嵌套for循环,如有必要,请使用更多if() .. else if() ..

  • 这不是最佳实践,但您也可以使用 continuebreak 关键字分别继续或停止循环。

  • 不要随意使用“else”。如果您有更多条件要检查,请留下 if 没有 else。您想在 if 条件后使用 else if(当第一个条件返回 true 时)您不想检查下一个条件(它们将被跳过!

【讨论】:

  • 请注意,在使用已读取(或未读取)的值之前,您应该检查来自scanf() 的返回值。而且while 循环通常比do … while 循环要好。
猜你喜欢
  • 1970-01-01
  • 2019-10-08
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2020-10-23
相关资源
最近更新 更多