C 如何优化此代码并对读取到数组中的数据进行排序?
我想写一个C程序来读取一个数组,计算所有单个条目的总和,平均值,最小值,最大值,然后打印所有这些值。这是一种有效的排序方法吗?我正在尝试按最小值和最大值对数据值进行排序,并在输入时进行比较。我的编译器还对所有浮点值抛出一个声明错误C 如何优化此代码并对读取到数组中的数据进行排序?,c,arrays,sorting,C,Arrays,Sorting,我想写一个C程序来读取一个数组,计算所有单个条目的总和,平均值,最小值,最大值,然后打印所有这些值。这是一种有效的排序方法吗?我正在尝试按最小值和最大值对数据值进行排序,并在输入时进行比较。我的编译器还对所有浮点值抛出一个声明错误 #include <stdio.h> #include <stdlib.h> #include <float.h> float main() int i; float grades[10]; float grade; float
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
float main()
int i;
float grades[10];
float grade;
float sum;
float avg;
float count;
float max;
float min;
{
max =0;
min=0;
printf("Enter your grades (Type <0 and >100 to quit): ");
scanf("%f", &grade);
sum=0;
i=0;
while(grades>0 && i<10)
{grades[i]= grade;
i++;
if(i<10)
{printf("Enter grade, (Type <0 or >100 to quit): ");
scanf("%f", &grade); }}
for (i=0; i < 10; i++)
{if (grades[i] > max)
{
max=grades[i];
}
else if (grades[i] < min)
{
min = grades[i];
}}
count=i;
for(i=0; i<count; i++)
{printf("Grade %d is %f \n", i+1, grades[i]);}
grade=0;
for(i=0;i<count; i++)
{sum= sum + grades[i];}
if(count>0)
{avg=sum/count;}
else
{avg=0;}
printf("The average of the %f grades is %f \n",count, avg);
printf("The Minimum Grade is %f",min);
printf("The Maximum Grade is %f", max);
printf("Count is %f ", count);
printf("Sum is %f", sum);
printf("Average is %f", avg);
}
#包括
#包括
#包括
浮球总管
int i;
浮动等级[10];
浮子等级;
浮点数;
浮动平均值;
浮点数;
浮动最大值;
浮动最小值;
{
max=0;
最小值=0;
printf(“输入成绩(键入100退出):”;
scanf(“%f”、&grade);
总和=0;
i=0;
而(等级>0和(&i最大值)
{
max=等级[i];
}
否则如果(等级[i]<最小值)
{
min=等级[i];
}}
计数=i;
对于(i=0;i,用于解决问题的重新定义的代码是
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#define GRADE_ARRAY_LEN 10
int main()
{
int i = 0;
double grades[GRADE_ARRAY_LEN];
double grade;
double max;
double min;
while(i<GRADE_ARRAY_LEN)
{
printf("Enter grade, (Type <0 or >100 to quit): ");
if(scanf("%lf", &grade) != 1)
{
printf("The value entered could not be converted to double. Please enter another value.\n");
scanf("%s");
continue;
}
if(grade < 0.0 || grade > 100.0)
{
return 1;
}
else
{
if(i == 0)
{
max = grade;
min = grade;
}
else
{
if(grade > max)
{
max = grade;
}
if(grade < min)
{
min = grade;
}
}
grades[i]= grade;
i++;
}
}
double sum = 0;
for(i=0; i<GRADE_ARRAY_LEN; i++)
{
printf("Grade %d is %lg \n", i+1, grades[i]);
sum+=grades[i];
}
double avg = sum/GRADE_ARRAY_LEN;
printf("The average of the %d grades is %g \n", GRADE_ARRAY_LEN, avg);
printf("The Minimum Grade is %lg\n",min);
printf("The Maximum Grade is %lg\n", max);
printf("Number of grades is %d\n", GRADE_ARRAY_LEN);
printf("Sum is %lg\n", sum);
printf("Average is %lg\n", avg);
return 0;
}
注意!!!:以上所有操作都在一个循环中提交,(i替换此:
double min;
while(i<GRADE_ARRAY_LEN)
{
.......
printf("The value entered could not be converted to double. Please enter another value.\n");
scanf("%s");
但是!!!应该是这样的
printf("Average is %lg\n", avg);
return 0;
} // !!!!
假设分数均为正值,如果没有人获得0
,则您的代码将无法获得正确的min
值,因为您的初始min
值已经是0
(最小有效值)。您是否有特定的问题?您的代码是否像现在这样工作?您提到了一个声明错误,但没有显示编译器产生的确切错误。float main()
应该是int main()
;main应该始终返回int,而不是float。您还需要在主体内部声明变量,而不是在main()之间声明变量
声明和正文。请编辑您的帖子并缩进您的代码。仅代码回答对OP或未来的访问者都没有多大帮助,请详细介绍一下您所做的工作以及您认为这项工作有效的原因。当然,在编程时您会想到一些东西,当然您会发现OP所犯的错误。写下来,然后继续更详细地修改你的答案会大大提高你的答案。不幸的是,你现在已经解释了你的代码是如何工作的,而不是它与OP的代码相比的工作原理。你所做的本质区别和更正是什么。我编辑的时间更长。我只会在晚上再编辑一次,如果之前没有人编辑它,我会尝试回答-为什么它是w更重要的是,为什么它能正确工作,更重要的是clear@EugeneAnisiutkin请记住,我们并不是要贬低你的工作或侮辱你,我们的评论只是为了让你的答案更实用、更适合每个人。顺便说一句,我没有投反对票。
int main()
{
int i = 0;
double grades[GRADE_ARRAY_LEN];
double grade;
double max;
double min;
for(i=0;i<count; i++)
{sum= sum + grades[i];}
double sum = 0;
for(i=0; i<GRADE_ARRAY_LEN; i++)
{
printf("Grade %d is %lg \n", i+1, grades[i]);
sum+=grades[i];
}
if(count>0)
{avg=sum/count;}
else
{avg=0;}
double avg = sum/GRADE_ARRAY_LEN;
double min;
while(i<GRADE_ARRAY_LEN)
{
.......
printf("The value entered could not be converted to double. Please enter another value.\n");
scanf("%s");
double min;
char c;
while(i<GRADE_ARRAY_LEN)
{
.......
printf("The value entered could not be converted to double. Please enter another value.\n");
scanf("%s", &c);
printf("Average is %lg\n", avg);
return 0;
printf("Average is %lg\n", avg);
return 0;
} // !!!!