C 编写一个程序来查找一系列数字中的最大值。

C 编写一个程序来查找一系列数字中的最大值。,c,scanf,C,Scanf,我是C语言的新手。我正在使用King第二版的现代C语言编程方法 我被第六章难住了。问题1:编写一个程序,在用户输入的一系列数字中找出最大的一个。程序必须提示用户逐个输入数字。当用户输入0或负数时,程序必须显示输入的最大非负数 到目前为止,我已经: #include <stdio.h> int main(void) { float a, max, b; for (a == max; a != 0; a++) { printf("Enter number:"); scanf("%f

我是C语言的新手。我正在使用King第二版的现代C语言编程方法

我被第六章难住了。问题1:编写一个程序,在用户输入的一系列数字中找出最大的一个。程序必须提示用户逐个输入数字。当用户输入0或负数时,程序必须显示输入的最大非负数

到目前为止,我已经:

#include <stdio.h>

int main(void)
{
float a, max, b; 

for (a == max; a != 0; a++) {
printf("Enter number:");
scanf("%f", &a);
}

printf("Largest non negative number: %f", max);

return 0;
}

谢谢你的帮助

因此,如果通过循环的每次迭代a大于max,则需要更新max,如下所示:

#include <stdio.h>

int main(void)
{
    float max = 0, a;

    do{
        printf("Enter number:");

        /* the space in front of the %f causes scanf to skip
         * any whitespace. We check the return value to see
         * whether something was *actually* read before we
         * continue.
         */

        if(scanf(" %f", &a) == 1) {
            if(a > max){
                max = a;
            }
        }

        /* We could have combined the two if's above like this */
        /* if((scanf(" %f", &a) == 1) && (a > max)) {
         *     max = a;
         * }
         */
    }
    while(a > 0);

   printf("Largest non negative number: %f", max);

   return 0;
}
#包括
内部主(空)
{
浮动最大值=0,a;
做{
printf(“输入编号:”);
/*%f前面的空格导致scanf跳过
*任何空白。我们检查返回值以查看
*在我们之前是否有人读过
*继续。
*/
如果(scanf(“%f”,&a)==1){
如果(a>最大值){
max=a;
}
}
/*如果是这样的话,我们可以把这两个结合起来*/
/*如果((scanf(“%f”,&a)==1)和&(a>max)){
*max=a;
* }
*/
}
而(a>0);
printf(“最大非负数:%f”,最大值);
返回0;
}
然后您只需在末尾打印max。
do while循环在这里是一个更好的选择,因为它至少需要运行一次。

因此,如果通过循环的每次迭代中A大于它,则需要更新max,如下所示:

#include <stdio.h>

int main(void)
{
    float max = 0, a;

    do{
        printf("Enter number:");

        /* the space in front of the %f causes scanf to skip
         * any whitespace. We check the return value to see
         * whether something was *actually* read before we
         * continue.
         */

        if(scanf(" %f", &a) == 1) {
            if(a > max){
                max = a;
            }
        }

        /* We could have combined the two if's above like this */
        /* if((scanf(" %f", &a) == 1) && (a > max)) {
         *     max = a;
         * }
         */
    }
    while(a > 0);

   printf("Largest non negative number: %f", max);

   return 0;
}
#include<stdio.h>

int main()
{
    float enter_num,proc=0;

    for(;;)
    {
       printf("Enter the number:");
       scanf("%f",&enter_num);


       if(enter_num == 0)
       {
           break;
       }

       if(enter_num < 0)
       {
           proc>enter_num;
           proc=enter_num;
       }

       if(proc < enter_num)
       {
           proc = enter_num;
       }

    }

    printf("Largest number from the above is:%.1f",proc);
    return 0;
}
#包括
内部主(空)
{
浮动最大值=0,a;
做{
printf(“输入编号:”);
/*%f前面的空格导致scanf跳过
*任何空白。我们检查返回值以查看
*在我们之前是否有人读过
*继续。
*/
如果(scanf(“%f”,&a)==1){
如果(a>最大值){
max=a;
}
}
/*如果是这样的话,我们可以把这两个结合起来*/
/*如果((scanf(“%f”,&a)==1)和&(a>max)){
*max=a;
* }
*/
}
而(a>0);
printf(“最大非负数:%f”,最大值);
返回0;
}
然后您只需在末尾打印max。 do while循环在这里是一个更好的选择,因为它至少需要运行一次。

\include
#include<stdio.h>

int main()
{
    float enter_num,proc=0;

    for(;;)
    {
       printf("Enter the number:");
       scanf("%f",&enter_num);


       if(enter_num == 0)
       {
           break;
       }

       if(enter_num < 0)
       {
           proc>enter_num;
           proc=enter_num;
       }

       if(proc < enter_num)
       {
           proc = enter_num;
       }

    }

    printf("Largest number from the above is:%.1f",proc);
    return 0;
}
int main() { 浮点输入_num,proc=0; 对于(;;) { printf(“输入数字:”); scanf(“%f”,并输入_num); 如果(输入_num==0) { 打破 } 如果(输入_num<0) { proc>输入_num; proc=输入_num; } 如果(过程<输入数值) { proc=输入_num; } } printf(“上述最大值为:%.1f”,过程); 返回0; }
#包括
int main()
{
浮点输入_num,proc=0;
对于(;;)
{
printf(“输入数字:”);
scanf(“%f”,并输入_num);
如果(输入_num==0)
{
打破
}
如果(输入_num<0)
{
proc>输入_num;
proc=输入_num;
}
如果(过程<输入数值)
{
proc=输入_num;
}
}
printf(“上述最大值为:%.1f”,过程);
返回0;
}

您希望(a==max;a!=0;a++)做什么?这个问题要求您在用户输入负数(或零)后立即停止,并打印到目前为止输入的最大数字。顺便说一句,你的程序有问题,因为max没有初始化,在for循环中也没有比较/重新分配max。Luchian,我在末尾部分将a标记为max。然后测试a不等于0。然后我想我可以尝试在最后的max测试阶段将a增加到下一个字母?@caelan:Your
for
循环毫无意义。
a==max
部分将
a
max
(两者均未初始化)进行比较,并且在您拥有它的地方不做任何操作-用于执行初始化的
部分;你没有初始化任何东西。下一部分,
a!=0将导致未定义的行为,因为
a
未初始化-谁知道它包含什么值?如果
a
恰好是
0
,您的循环可能永远不会运行。您希望
做什么(a==max;a!=0;a++)
呢?这个问题要求您在用户输入负数(或零)后立即停止,并打印到目前为止输入的最大数。顺便说一句,你的程序有问题,因为max没有初始化,在for循环中也没有比较/重新分配max。Luchian,我在末尾部分将a标记为max。然后测试a不等于0。然后我想我可以尝试在最后的max测试阶段将a增加到下一个字母?@caelan:Your
for
循环毫无意义。
a==max
部分将
a
max
(两者均未初始化)进行比较,并且在您拥有它的地方不做任何操作-用于执行初始化的
部分;你没有初始化任何东西。下一部分,
a!=0将导致未定义的行为,因为
a
未初始化-谁知道它包含什么值?如果
a
恰好是
0
,您的循环可能永远不会运行。愚蠢的代码小精灵。我已经删除了我的其他评论。这是一项很好的工作,但您确实应该检查
scanf
的返回值,以确保实际读取了某些内容。@NikBougalis可能应该检查它,但这只是一个简单的问题。TBH,我不太熟悉如何在C中处理错误。我调整了你的帖子以检查错误,并正确地跳过空白,以及一些评论。希望这有帮助:)次要的一点:建议用0.0初始化“a”。如果不这样做,如果第一个scanf尝试读取垃圾,while(a>0)将对未初始化的“a”。愚蠢的代码小精灵进行操作。我已经删除了我的其他评论。这是一项很好的工作,但您确实应该检查
scan的返回值