我正在为我的介绍类写一个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: %.1fn", highestMark);
printf ("lowest mark in the group: %.1fn", lowestMark);
printf ("The average of all marks in this group is %.1f.n", avgofMarks);
printf ("Program Ended.n");
return 0;
}
工作要求,
在输入标记的循环中,在每个条目之后检查输入的标记的值:
- 如果是通过,则在通过数上加1,并将该分数的值与通过分数之和相加。
- 如果为不合格,则在不合格数上加1,并将评分值与不合格评分之和相加。
- 如果该值高于最高分,则将最高分设置为读取的值。
- 如果低于最低值,则将最低值设置为读取的值。所有的分数输入和检查后,分这些总和由相应的分数得到平均分和打印结果。
这是我的输出和样本输出的对比
你的代码一团糟;让我们把事情弄清楚:
- 如果你不打算在for循环体中使用
i
,没有理由初始化和自增它。最好用一会儿。 - 当你发布一个问题时,从答案中清除所有非严格必要的代码,这样更容易帮助
- 考虑使用数组代替15个变量,或者,如果你不打算在后面的程序中使用这些值,直接打印结果。
交货。
int a = 10, b = 15;
如果你想打印总和,没有理由将其保存在新的int sum
中,只需打印tf("%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()
..如果有必要。这不是最好的做法,但您也可以使用
continue
和break
关键字分别继续或停止循环。不要随意使用"else"。如果您有更多的条件要检查,留下If而不带else。如果(当第一个条件返回true时)你不希望检查下一个条件(它们将被跳过!)