我有一个正在构建的成绩簿程序,可以正常运行,但是现在我想在现有代码中添加3个新功能。我无法将自己的大脑围绕着使它起作用所需的逻辑路径。我需要一种简单的方法来同时获得最高,最低和平均分数。这是我的程序...
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_GRADE_COUNT 200
int main() {
int grade[MAX_GRADE_COUNT];
int i;
int count = 0;
char continueResponse;
printf("Welcome to Gradebooker!\n\n");
for(i = 0; i < MAX_GRADE_COUNT; i++) {
printf("Please enter grade (0-100): ");
scanf(" %d", &grade[i]);
count++;
printf("Do you have more grades to enter?(Y/N): ");
scanf(" %c", &continueResponse);
if(toupper(continueResponse) != 'Y') {
printf("\n >> Thank you for using Gradebooker! <<\n");
break;
}
}
printf("\n\nCurrent Gradebooker listings: \n\n");
for(i = 0; i < count; i++) {
printf("\t%5d\n", grade[i]);
}
return 0;
}
答案 0 :(得分:0)
程序需要在第二个循环中计算最大值,最小值和平均值,如下所示:
git
最小值以大于列表中所有值的值开头(例如int sum = 0;
int minimum = INT_MAX;
int maximum = 0;
for(i = 0; i < count; i++) {
printf("\t%5d\n", grade[i]);
sum += grade[i];
if(grade[i] < minimum) minimum = grade[i];
if(grade[i] > maximum) maximum = grade[i];
}
float average = (float)sum / count;
printf("min grade: %d\n", minimum);
printf("max grade: %d\n", maximum);
printf("average: %f\n", average);
是INT_MAX
可以取的最大可能值)。然后,对于数组中的每个等级,如果它小于int
变量中当前的等级,则将其替换为该等级。这样,minimum
最终将包含最小的成绩。
最大相同,但是相反。
对于平均值,它会累加所有成绩的总和(minimum
首先需要初始化为0),最后将其除以成绩数。这在sum
中给出了算术平均值。
使用average
,将平均值计算为浮点数(因此,平均值可以是非整数)。需要float
,以便首先将(float)sum / count
转换(转换)为浮点数,并在其上进行浮点除法。否则,使用sum
将进行整数除法(返回一个舍入的整数),然后将其作为浮点数存储在sum / count
变量中。
答案 1 :(得分:0)
寻找最大值的想法是:首先声明一个变量(比如说MAXX)来存储最大值,并以尽可能小的最小值进行初始化,然后遍历数组,如果有的话在数组中找到的值大于MAXX变量的当前值,而不是用该值更新MAXX的值。
寻找最小值的想法是:首先声明一个变量(假设是MINN)以存储最小值,并以尽可能大的最大值进行初始化,然后遍历数组,如果有的话在数组中找到的值大于MINN变量的当前值,而不是用该值更新MINN的值。
求平均值的想法:将所有年级求和,然后将 sum 除以年级数。
请参阅下面的实现以更好地理解:
<tr key={reply.text}>
答案 2 :(得分:-1)
我看不到您的所有代码(它似乎在底部被截断了),但是在C语言中获取平均值,最大值和最小值的基本过程如下:
int running_total = 0;
int count_grades = 0;
int max_so_far = 0;
int min_so_far = 999;
while( -1 ){ // infinite loop
// get input (a grade)
// if input is done, break
count_grades++;
running_total += iCurrentGrade; // (iCurrentGrade should be defined during input phase)
if( iCurrentGrade > max_so_far ) max_so_far = iCurrentGrade;
if( iCurrentGrade < min_so_far ) min_so_far = iCurrentGrade;
}
printf( "avg: %d min: %d max: %d\n", (int)(running_total / count_grades), min_so_far, max_so_far );