查找存储在C中的用户输入数组中的最小值和最大值



我试图用这个程序做两件主要的事情:

  • 让用户输入数字,直到输入0或到达数组末尾
  • 在第二部分中,我想找到存储在数组中的最小值和最大值,并打印它们

最大值打印准确,但最小值打印的内容看起来像地址。

到目前为止,这是我的代码,你能帮我吗?

#include<stdio.h>
#define SIZE 100
int main()
{
int count = 0, store, array[SIZE], total;
int min = array[0], max = array[0];
do
{
printf("nEnter integer number %d. Press 0 to exit: n", (count + 1));
scanf("%d", &store);
array[count ++] = store;
} while ( count < SIZE && store != 0 );
total = count;
printf("Total number of values in array is %d.n", total);
for ( count = 0 ; count <= total && array[count] != 0 ; count ++)
{
if(array[count] < min)
{
min = array[count];
}
if(array[count] > max)
{
max = array[count];
}
}
printf("nThe min value is %d.nThe max value is %d.n", min, max);
return 0;
}

在数组填充后移动的最小和最大变量声明,如以下

#include<stdio.h>
#define SIZE 100
int main()
{
int count = 0, store, array[SIZE], total;
do
{
printf("nEnter integer number %d. Press 0 to exit: n", (count + 1));
scanf("%d", &store);
array[count ++] = store;
} while ( count < SIZE && store != 0 );
int min = array[0], max = array[0];
total = count;
printf("Total number of values in array is %d.n", total);
for ( count = 0 ; count <= total && array[count != 0] ; count ++)
{
if(array[count] < min)
{
min = array[count];
}
if(array[count] > max)
{
max = array[count];
}
}
printf("nThe min value is %d.nThe max value is %d.n", min, max);
return 0;
}

但是,如果您写入0以停止插入数字,则最小值将始终为0

您的代码中存在错误。首先,这个初始化是未放置的int min = array[0], max = array[0];,当您没有array[0]的值时,您不能将其分配给其他变量。这个初始化应该在do-while之后。(否则就像使用未初始化的变量(

第二个CCD_ 4这应该是CCD_。

此外,您应该在扫描arrayif(count==1) return 0后检查此语句,这意味着用户没有输入任何输入。

请注意,这里的count<=total您正在传递"数组"的边界,这将导致未定义的行为。

#define SIZE 100
int main()
{
int count = 0, store, array[SIZE], total;
do
{
printf("nEnter integer number %d. Press 0 to exit: n", (count + 1));
scanf("%d", &store);
array[count++] = store;
} while (count < SIZE && store != 0);
int min = array[0], max = array[0];
if(count==1)
{
printf("no data");
return 0;
}
total = count;
printf("Total number of values in array is %d.n", total);
for (count = 0; count < total && array[count]!=0; count++)//or use count < total-1 instead of  total && array[count]!=0
{
if (array[count] < min)
{
min = array[count];
}
if (array[count] > max)
{
max = array[count];
}
}
printf("nThe min value is %d.nThe max value is %d.n", min, max);
return 0;
}

您的代码的问题是(我认为您键入错误(for循环中的第二个条件。如果测试array [count != 0],则表达式count != 0的值可以是10,因此只访问array[0]array[1]

如果你想纠正它,只需将其替换为array[count] != 0,但这不是一个好的解决方案。你已经计算了需要检查的数字,为什么不忽略最后一个(0(呢?

这样做,这就是你想要的代码:

#define SIZE 100
int main()
{
int count = 0, store, array[SIZE], total;
do
{
printf("nEnter integer number %d. Press 0 to exit: n", (count + 1));
scanf("%d", &store);
array[count ++] = store;
} while ( count < SIZE && store != 0 );
int min = array[0], max = array[0];
total = count;
printf("Total number of values in array is %d.n", total);
for (count = 0; count < total-(total != SIZE); count ++)
{
if(array[count] < min)
min = array[count];
if(array[count] > max)
max = array[count];
}
printf("nThe min value is %d.nThe max value is %d.n", min, max);
return 0;
}

请注意,for循环count <= total中的旧条件会产生未定义的行为,因为您在右边访问了1个元素。

我也忘了提,但我想你在其他答案中读到了。。。当您将值设置为min,并将max设置为读取数组后数组中的第一个数字时,您必须移动该行。在读取任何输入之前使用min = array[0]会将垃圾值设置为min,然后产生未定义的行为。


编辑:如果您不确定是否所有输入序列都以0结束,则应更改for条件以同时检查最后一个元素,在这种情况下,该元素不是0。您可以简单地通过替换for循环条件来做到这一点:

// until here the code is the same.
for (count = 0; count < total-(total != SIZE); count ++)
// and from here the code is the same.

有了这个,您的代码在以下情况下应该表现为这样:

  • 如果SIZE是10并且您输入了数字:1, 2, 3, 4, 0,for循环将只检查1234
  • 如果SIZE是10,并且您输入了数字:1, 2, 3, 4, 5, 6, 7, 8, 9, 10,则for循环将检查所有数字,因为表达式(total != SIZE)的计算结果将为0,因此total-(total != SIZE)total-0相同

这个任务可以用一个非常优化的代码来完成,你的代码有很多错误。但在这里,我只是在您的代码中进行更正,并在每次更正时提供注释,所以它可以帮助您找到它不起作用的原因,并帮助您理解程序。

请参阅以下代码,并且必须阅读代码中的所有注释

#include<stdio.h>
#define SIZE 100
int main()
{
int count = 0, store, array[SIZE], total;
//int min = array[0], max = array[0];
// above line will set garbase in min and max
int min=0, max=0; // we will initialize it later
do
{
printf("nEnter integer number %d. Press 0 to exit: n", (count + 1));
scanf("%d", &store);
if(store == 0){
break;
/* if you should not break here it put 0 in array so
you always fiind 0 as min*/
}
array[count ++] = store;
//above count ++ , its post increment so count is one more than total elements
} while ( count < SIZE && store != 0 );
total = count-1;
/*count - 1 , reason , when you put last value in count,
it incremented after that, because you are using post
increment operator after that*/
printf("Total number of values in array is %d.n", total);
if(total > 0)
{ /*it helps to initialize min with first element then
it will update with your condition*/
min = array[0];
max = array[0];
}
for ( count = 0 ; count < total && array[count != 0] ; count ++)
{ // count < total, because loop starts from 0
if(array[count] < min)
{
min = array[count];
}
if(array[count] > max)
{
max = array[count];
}
}
printf("nThe min value is %d.nThe max value is %d.n", min, max);
return 0;
}

如果有任何困惑,你应该在评论中问,祝你好运。在Turbo-C 上检查代码

下面是程序中有一些更改的代码,它有助于您理解下一个级别,您可能会考虑更好的方法。

#include<stdio.h>
#define SIZE 100
int main()
{
int count = 0, store, array[SIZE], total;
int min, max; // we will initialize it later
do
{
printf("nEnter integer number %d. Press 0 to exit: n", (count + 1));
scanf("%d", &store);
if(store == 0){
break;
}
array[count++] = store;
if(count == 1){
min = array[0];
max = array[0];
}
if(store < min)
{
min = store;
}
if(store > max)
{
max = store;
}
} while ( count < SIZE);
if(count > 0){
printf("nThe min value is %d.nThe max value is %d.n", min, max);
}
else{
printf("No element in array");
}
return 0;
}

相关内容

  • 没有找到相关文章

最新更新