我试图用这个程序做两件主要的事情:
- 让用户输入数字,直到输入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_。
此外,您应该在扫描array
if(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
的值可以是1
或0
,因此只访问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循环将只检查1
、2
、3
和4
- 如果
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;
}