本学期我正在参加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;
}
另外,您是否可以推荐和参考有助于我学习这些内容的材料,谢谢。
答案 0 :(得分:3)
应该是:
if(a > max) {
max = a;
}
if(a < min) {
min = a;
}
答案 1 :(得分:1)
如果您解决以下问题,它应该有效。
您需要更改
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
。
答案 2 :(得分:0)
试试这个:
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,则max将替换为该数字。如果a小于min,则min被该数字替换。