我这学期要上一门C编程课,我完全没有编程经验,这使我很难完成作业甚至学习。
任务是编写一个程序,允许用户输入任意数量的值并显示输入的最大值和最小值。
它必须接受正数和负数,输入 0 将终止程序。
如果输入的第一个数字是 0,则必须显示一条消息,说明这一点。
这对你们中的一些人来说可能很可笑,但这就是我所拥有的。
#include <stdio.h>
int main(void)
{
float max=0, a;
float min=0, b;
printf("Entering 0 will terminate the sequence of input values.n");
do{ printf("Enter Number:");
if (scanf(" %f", &a)==1);{
if(a<max){
a=max;}
if(a>min){
a=min;}
}
} while(a!=0);
printf("Your largest number was %.3f. Your smallest number was %.3f.", max, min);
return 0;
}
另外,你们中的任何人都可以推荐和参考材料来帮助我学习这些东西,谢谢。
应该是:
if(a > max) {
max = a;
}
if(a < min) {
min = a;
}
如果您修复以下问题,它应该可以工作。
-
你需要改变
if (scanf(" %f", &a)==1);{ ^ ^
自
if (scanf("%f", &a)==1){
-
为while(a!=0); ^^^
使用
!=
比较float
是一种不好的做法。最好改用以下内容while(fabs(a) > 0.001);
.
正如@JonathanLeffler所评论的那样,实际上这种情况是可以的。但总的来说,您当然需要注意比较两个浮点值是否合适相等,尤其是在计算之后
-
你的逻辑是错误的,你应该更新
max/min
而不是a
.所以改变if(a > max) { a = max; } if(a < min) { a = min; }
自
if ( fabs(a) < 0.001 ) // if a~0, stop evaluating //, otherwise, you will always get 0 as the min break; if(a > max) { max = a; } if(a < min) { min = a; }
-
您应该将
min
初始化为一个非常大的数字(例如FLT_MAX
)首先使其能够根据a < min
进行更新。如果你想处理负数,你最好设置float max=FLT_MIN
。
现场观看:http://ideone.com/XQYkeD。
试试这个:
while(1)
{
printf("Enter Number:");
if (scanf("%f", &a)==1)
{
if(a==0) //check if the input value is 0 then break the loop
break;
else
{
if(a>max)
max=a;
if(a<min)
min=a;
}
}
else
break;
}
如果输入的值大于最大值,则 max 将替换为该数字。如果 a 小于 min,则 min 将替换为该数字。