【问题标题】:Write a programme to input 10 numbers from the user and print greatest of all编写一个程序,从用户那里输入 10 个数字并打印出最大的数字
【发布时间】:2022-01-20 08:11:23
【问题描述】:

我已经编写了程序,我猜可能存在某种编码错误。 输入部分正常工作但查找和打印最大数字不是。

#include<stdio.h>
int main()
    {
    int i, arr[10],c=0;
    for(i=1;i<=10;i++)
    {
        printf("enter 10 nos. for arr[%d] :",i);
        scanf("%d",&arr[i]);
    }
    for(i=1;i<=10;i++)
    {
        while(arr[i]>c)
        {
            c=arr[i];
        }
        printf("Greatest number in a given array is:%d",c);
    }
    return 0;
} 

【问题讨论】:

  • 当 i == 10 时,您超出了 arr 的范围,数组基于 0。从 0 迭代到 i

标签: arrays c for-loop max undefined-behavior


【解决方案1】:

如果你有一个像这样声明的数组

int a[N];

其中 N 是某个正整数值,那么访问数组元素的有效索引范围是 [0, N)

这意味着例如这个for循环

for(i=1;i<=10;i++)
{
    printf("enter 10 nos. for arr[%d] :",i);
    scanf("%d",&arr[i]);
}

必须看起来像

for ( i = 0; i < 10; i++ )
{
    printf("enter 10 nos. for arr[%d] :",i);
    scanf("%d",&arr[i]);
}

这个while循环

    while(arr[i]>c)
    {
        c=arr[i];
    }

只是没有意义,可能是一个无限循环。

此外,这个 printf 调用

    printf("Greatest number in a given array is:%d",c);

放置在 for 循环中。

程序可以如下所示

#include <stdio.h>

int main( void )
{
    enum { N = 10 };
    int arr[N];

    printf( "Enter %d numbers:\n", N );
 
    for ( int i = 0; i < N; i++ )
    {
        printf("\t%d: ", i + 1 );
        scanf( "%d", arr + i );
    }

    int max = 0;

    for ( int i = 1; i < N; i++ )
    {
        if ( arr[max] < arr[i] ) max = i;
    }

    printf( "The greatest number in the given array is: %d\n", arr[max] );

    return 0;
} 

【讨论】:

  • 在这种特殊情况下,while 循环不能是无限的,但我同意这不是正确的编写方式
【解决方案2】:

在 C 中,索引从 0 开始,因此 for(i=1;i&lt;=10;i++) 条件在两个方面是错误的:您从第二个数组项开始(缺少 arr[0]),然后您将超出 arr[i] 的范围i 是 10。

您也应该将while 更改为if,因为您实际上并不打算在那里有一个循环。您只需要执行一次条件下的代码。您还应该考虑当您的输入中有负值时会发生什么。

最后但同样重要的是 - 如果您想打印最终结果,printf 可能应该在 for 循环之外。

【讨论】:

    【解决方案3】:

    首先,数组的索引从零开始,并且 arr[10] 超出范围。
    二、将最小整数值赋给c。
    第三,把while改成if,把第二个printf()放到第二个for语句之外。

    【讨论】:

      【解决方案4】:

      这应该可以工作

      #include<stdio.h>
      int main()
          {
          int i, arr[10],c=0;
          for(i=1;i<=10;i++)
          {
              printf("enter 10 nos. for arr[%d] :",i);
              scanf("%d",&arr[i]);
          }
          for(i=1;i<=10;i++)
          {
              if(arr[i]>c)
              {
                  c=arr[i];
              }
          }
          printf("Greatest number in a given array is:%d",c);
          return 0;
      }
      

      【讨论】:

      • 不应该也不会
      【解决方案5】:

      这是代码

      #include <stdio.h>
        int main() {
          // Taking Variables
          int a[10];
          int i;
          int greatest;
      
          //Taking exactly 10 inputs in an array by using for loop
          printf("Enter ten values:");
          for (i = 0; i < 10; i++) {
            scanf("%d", &a[i]);
          }
      
          //Iterating through the array and comparing all the values, the one which is the greatest of all is printed
          greatest = a[0];
          for (i = 0; i < 10; i++){
            if (a[i] > greatest){
              greatest = a[i];}
            }
          printf("Greatest of ten numbers is %d", greatest);
          return 0;
        }
      

      【讨论】:

      • 请至少正确缩进代码。一些解释也是一个好主意。
      • 很好,你用 a[0] 而不是 0 初始化 c 来表示负数
      • 从长远来看,我认为仅仅提供代码并没有多大帮助。所以你解决了这个问题,荣誉,但这会帮助 OP 解决下一个问题吗?
      • 编辑后,情况更糟。它不仅比以前可读性差,而且缩进仍然是错误的。而且您添加的 cmets 并没有真正的帮助。
      • @Jabberwocky Oops.. 现在我已经解释并修复了一切
      猜你喜欢
      • 1970-01-01
      • 2020-11-09
      • 2012-03-18
      • 1970-01-01
      • 2022-10-24
      • 2016-11-25
      • 2017-10-07
      • 2018-09-18
      • 1970-01-01
      相关资源
      最近更新 更多