Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何优化此代码并对读取到数组中的数据进行排序?_C_Arrays_Sorting - Fatal编程技术网

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

我想写一个C程序来读取一个数组,计算所有单个条目的总和,平均值,最小值,最大值,然后打印所有这些值。这是一种有效的排序方法吗?我正在尝试按最小值和最大值对数据值进行排序,并在输入时进行比较。我的编译器还对所有浮点值抛出一个声明错误

#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;  
} // !!!!