我编写这些代码以找到五个不同整数的最大值和最小值。
我知道这不是最好的方法。它可以找到最大值,但是' min'总是等于' a',这是在开头分配的。
#include <stdio.h>
#include <stdlib.h>
//Enter five numbers and find the maximum and minimum.
int main()
{
int a = 1, b = 2, c = 3, d = 4, e = 5, max = a, min = a;
scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
if (b > max) {
max = b;
}
if (c > max) {
max = c;
}
if (d > max) {
max = d;
}
if (e > max) {
max = e;
}
if (b < min) {
min = b;
}
if (c < min) {
min = c;
}
if (d < min) {
min = d;
}
if (e < min) {
min = e;
}
printf("Maximum: %d\nMinimum: %d", max, min);
return 0;
}
答案 0 :(得分:4)
在您要求用户输入之前,您需要使用max
的值初始化min
和a
。更新a
不会更新min
和max
。
表达式max = a
将a
的值复制到max
。它没有将max设置为跟踪a
。
由于您从所有计算中省略了a
,因此最小值和最大值都不会考虑在内。
答案 1 :(得分:3)
您还可以将值输入到数组中。如果您使用此方法,则可以将Link
和max
设置为min
,并从array[0]
迭代到i=1
并将i=n
与array[i]
和max
值。如果找到新的min
或max
值,请将其设置为min
。
以下是一个例子:
array[i]
答案 2 :(得分:2)
您的max
和min
在开头设置为1
,但在输入后,a
的值发生了变化,但最大值和分钟仍为1
您可以通过在max
语句后初始化min
和scanf
来解决此问题,或者您可以将max
和min
初始化为INT_MAX
如Barak Manos所指出的INT_MIN
中定义的{} limits.h
。
#include <stdlib.h>
//Enter five numbers and find the maximum and minimum.
int main()
{
int a,b,c,d,e;
scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
int max = a, min = a;
....
....
}
此外,简单版本会将所有输入数字存储在一个数组中,并在该数组上调用min
和max
。
答案 3 :(得分:2)
这是因为您在影响min
之前对max
和a
进行了初始化。
int a;
int b;
int c;
int d;
int e;
// you should check the return of function
if (scanf("%d%d%d%d%d", &a, &b, &c, &d, &e) != 5) {
return 1;
}
int max = a;
int min = a;
顺便说一下,在你的情况下,主要的正确原型是int main(void);
答案 4 :(得分:2)
以这种方式重构代码:
string[] string_suggestion = {"suman goa - SGMN","sugar khamaturan - SKMN","goan kuman - GKMN","karan thapa - TTMN"};
var source = new AutoCompleteStringCollection();
source.AddRange(string_suggestion);
textBox1.AutoCompleteCustomSource = source;
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
// there are more than 1000 words
此外,当您要从标准输入扫描这些输入时,不要看到使用不同的值初始化a,b,c,d和e。
当用户输入全0作为输入时,此代码不起作用。那么你的最小计算将是不正确的。
因此,最好使用int main()
{
int a = 1, b = 2, c = 3, d = 4, e = 5;
scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
int min = a, max = a;
// rest of your code here;
}
初始化min,并使用INT_MAX
答案 5 :(得分:1)
您好,您可以通过此代码实现以下内容。 如果在扫描值之前指定max和min的值,则可能存在问题。
例如:我输入5个数字3,4,5,6,7,如下所示我将从你的代码得到1作为min的值。所以这个问题可以通过在获得用户输入后定义max和min来删除。
#include <stdio.h>
#include <stdlib.h>
//Enter five numbers and find the maximum and minimum.
int main(void) {
int a, b, c, d, e, min, max;
if (scanf("%d%d%d%d%d", &a, &b, &c, &d, &e) != 5)
return 1;
min = max = a;
if (b > max) {
max = b;
}
if (c > max) {
max = c;
}
if (d > max) {
max = d;
}
if (e > max) {
max = e;
}
if (min > b) {
min = b;
}
if (min > c) {
min = c;
}
if (min > d) {
min = d;
}
if (min > e) {
min = e;
}
printf("Maximum: %d\nMinimum: %d", max, min);
return 0;
}
干杯!
答案 6 :(得分:0)
正如其他人诊断出的那样:
min
的值之前,max
和1
设置为a
。修复方法是在读取值后初始化min
和max
。a
,b
,c
,d
和e
的初始化无用。scanf()
的返回值以避免未定义的行为。main
原型是int main(void)
。printf
应输出最终换行符,以确保在所有平台上正确刷新。这是一种采用单循环的不同方法。它使用经典技巧使所有比较都具有通用性:min
初始化为最大可能int
值,max
初始化为最小值:
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
int main(void) {
int array[SIZE], min = INT_MAX, max = INT_MIN;
printf("Enter %d numbers:\n", SIZE);
for (size_t i = 0; i < SIZE; i++) {
if (scanf("%d", &array[i]) != 1) {
printf("Invalid number entered\n");
exit(EXIT_FAILURE);
}
if (max < array[i]) {
max = array[i];
}
if (min > array[i]) {
min = array[i];
}
}
printf("Maximum: %d\nMinimum: %d\n", max, min);
return 0;
}