- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编写一个C程序来读取一个数组,计算所有单个条目的总和,平均值,最小等级,最大等级,并打印所有这些值。这是一种有效的分类方法吗?我试图按输入时的最大值和最小值对数据值进行排序。我的编译器还将所有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);
}
最佳答案
解决您的问题的最严格的代码是
#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;
}
#define GRADE_ARRAY_LEN 10
中定义,可以轻松更改要输入的成绩数量。
if(scanf("%lf", &grade) != 1)
。
scanf()
返回成功填充的参数数目,格式“%lf”表示您希望将输入参数填充为双精度。因此,如果输入的值可以转换为double值,则
scanf("%lf", &grade)
将仅返回等于1的值。
scanf("%s");
,因为当
scanf("%lf", &grade)
失败时,输入流中会保留一个换行符,您必须实际读取。如果不这样做,那么下一个
scanf("%lf", &grade)
实际上将其作为输入,然后再次失败,从而创建一个无限循环。
if(i == 0)
扫描的第一个值。其中,i是成功扫描的值的数量。如果i == 0则还没有扫描任何值,因此必须使用此值初始化max和min,才能使max和min正常工作,因为必须对照第一个值检查所有其他值。如果i!= 0,则针对最大最小值检查该值,并在需要时对其进行修改。
i++;grades[i]= grade;
i++;
while(i<GRADE_ARRAY_LEN)
中提交。这样可以确保您输入正确的值量并获得正确的最大值和最小值。您实际上并不需要额外的循环来获取正确的最小值和最大值。
sum
进行计数。此后,计算成绩的
avg
。
main()
的内部,并且main必须返回一个int,这意味着您的代码具有以下内容:
float main()
int i;
float grades[10];
float grade;
float sum;
float avg;
float count;
float max;
float min;
{
int main()
{
int i = 0;
double grades[GRADE_ARRAY_LEN];
double grade;
double max;
double min;
scanf("%lf", &grade)
是否成功填充
grade
。这是错误的,因为您实际上可以在命令行中输入字符和数字的任何组合,但是唯一正确的输入是当您输入数字时,可以将其转换为双精度。这意味着您必须检查scanf返回什么。
max = 0; and min = 0;
不是初始化最大值和最小值的正确方法。
min=0;
是错误的,因为在仅正分数的情况下,分数永远不会小于min,因此min始终为0。正确的方法是使用从输入中第一个正确读取的分数来初始化min值,因此如果存在如果输入较小的值,则可以根据需要更改最小值。
max=0;
是不正确的,因为在仅负分数的情况下,分数永远不会大于max,因此max始终为0。正确的方法是使用从输入中第一个正确读取的分数初始化max值,因此如果存在如果输入一个较大的值,则可以根据需要更改最大值。
#define
在主函数之前定义固定长度的数组的长度。 Quote:“ #define创建一个宏,该宏是标识符或参数化标识符与令牌字符串的关联。定义宏后,编译器可以用令牌字符串替换源文件中每次出现的标识符。” 。基本上,这意味着您在主代码之前添加
#define GRADE_ARRAY_LEN 10
,如上面的代码所示,然后使用10作为迭代次数和数组元素(如
double grades[10]; while(i<10); for(i=0;i<10;i++)
)的数量
double grades[GRADE_ARRAY_LEN]; while(i<GRADE_ARRAY_LEN); for(i=0;i<GRADE_ARRAY_LEN;i++)
。编译器会自动将GRADE_ARRAY_LEN替换为10;这样,您就可以仅在一个位置上将任意其他数字更改为10(当然是正数),而不必在多个位置进行更改。
printf("Enter grade, (Type <0 or >100 to quit): ")
输出,如果您键入值<0或> 100,则程序应退出。考虑到根本没有检查输入值,因此不会发生这种情况。
scanf("%lf", &grade)
是否成功填满等级的检查。
#define GRADE_ARRAY_LEN
10用作长度数组的长度
min
和
max
值的查找移动到while循环中。如上所述,您实际上并不需要单独的循环来查找它们。还修改了最小值和最大值的初始化
sum
的计数方式
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];
}
avg
时删除了不必要的检查
if(count>0)
{avg=sum/count;}
else
{avg=0;}
double avg = sum/GRADE_ARRAY_LEN;
关于c - 如何优化此代码并将正在读取的数据排序到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33885968/
我有一个加号/减号按钮,希望用户不能选择超过 20 个但不知道如何让它工作。我尝试使用 min="1"max="5 属性,但它们不起作用。这是我的代码和一个 fiddle 链接。https://jsf
我正在尝试复制顶部底部图,如示例 here但它没有正确渲染(紫色系列有 +ve 和 -ve 值,绿色为负值)留下杂乱的人工制品。我也在努力创建一个玩具示例来复制这个问题,所以我希望尽管我缺乏数据,但有
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 6 年前。 社区去年审查了是
这个问题在这里已经有了答案: Adding two positive integers gives negative answer.Why? (4 个答案) 关闭 5 年前。 我遇到了一个奇怪的问题
有谁知道如何将字符串值类型 -4,5 或 5,4 转换为 double -4.5 或 5.4? 最佳答案 只需使用 Double.parseDouble(Locale, String); 糟糕,我很困
我正在尝试根据 TextBlob 分类插入一个仅包含“正”或“负”字符串的新数据框列:对于我的 df 的第一行,结果是 ( pos , 0.75, 0.2499999999999997)我想要' 正
我对 VBA 非常陌生,无法理解如何在一个循环中完成 2 个任务。我非常感谢您的帮助。 我已经能够根据第 3 列中的数据更改第 2 列中的数值,但我不明白如何将负值的字体更改为红色。 表格的大小每月都
欢迎, 我正在使用 jquery 通过 POST 发送表单。 这就是我获得值(value)的方式。 var mytext = $("#textareaid").val(); var dataStrin
double d = 0; // random decimal value with it's integral part within the range of Int32 and always p
我有这个字符串: var a='abc123#xyz123'; 我想构建 2 个正则表达式替换函数: 1) 用 '*' 替换所有确实有 future '#'的字符(不包括'#') 所以结果应该是这样的
我正在使用 DialogFragment。当用户从 Gmail 平板电脑应用程序的屏幕与下面示例图片中的编辑文本进行交互时,我希望正面和负面按钮保持在键盘上方。 在我的尝试中不起作用,这是我的 Dia
从组装艺术一书中,我复制了这句话: In the two’s complement system, the H.O. bit of a number is a sign bit. If the H.O
是否有更好更优雅的方法来实现下面的简单代码(diffYear、A 和 B 是数字): diffYear = yearA - yearB; if (diffYear == 0) { A = B
我正在设计一种语言,并尝试确定 true 应该是 0x01 还是 0xFF。显然,所有非零值都将转换为 true,但我正在尝试确定确切的内部表示。 每种选择的优点和缺点是什么? 最佳答案 没关系,只要
在我的 dialogfragment 类的 OnCreateDialog 中,我正在这样做: AlertDialog.Builder builder = new AlertDialog.Builder
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda usin
我偶然发现了一个奇怪的 NSDecimalNumber 行为:对于某些值,调用 integerValue、longValue、longLongValue 等,返回意想不到的值(value)。示例: l
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda using
我有这个正则表达式来测试用户输入是否有效: value.length === 0 || value === '-' || (!isNaN(parseFloat(value)) && /^-?\d+\.
我想用高斯混合模型拟合数据集,数据集包含大约 120k 个样本,每个样本有大约 130 个维度。当我使用 matlab 执行此操作时,我运行脚本(簇号为 1000): gm = fitgmdist(d
我是一名优秀的程序员,十分优秀!