此 C 程序中的意外 return 值
Unexpected return value in this C program
我写了一个 C 程序来查找数组中最大偶数和最小偶数的索引差异(这里 0 被认为是偶数,从测试用例来看它肯定不像数组应该排序)。如果数组只有一个元素或该数组中没有偶数,它将 return 一个值或否。
#include <math.h>
#include <stdio.h>
int main() {
int n,small,big,a[50],b1,s1,diff;
scanf("%d",&n);
for(int i =0;i<n;i++){
scanf("%d",&a[i]);
}
small = a[0];
big = a[0];
for (int i = 1; i < n; i++)
{
if (a[i] < small && a[i]%2 == 0)
{
small = a[i];
s1 = i;
}
if (a[i] > big && a[i]%2 == 0)
{
big = a[i];
b1 = i;
}
}
diff = b1-s1;
if(diff==0){
printf("NO");
}
else{
printf("%d",diff);
}
return 0;
}
当我输入时
4
120 0 4 7
它没有 return 1 。它 returns 32657。
我在这里不理解什么逻辑?请帮助我。
在此代码段中
small = a[0];
big = a[0];
你还需要初始化s1
和b1
s1 = 0;
b1 = 0;
总的来说,您的方法是不正确的,因为 a[0] 可以是奇数,也可以是数组中最大或最小的数。
所以首先你需要在数组中找到第一个偶数,如果这样的数字存在(例如在索引 i 处)然后写
small = a[i];
big = a[i];
s1 = i;
b1 = i;
注意您实际上可以在程序的任何地方包含 header <stdio.h>
因为在第一次包含 header 之后所有其他 header s 实际上不会被包括在内。但是不要那样做,因为它会让你的程序很奇怪。:)
所以在 main
中删除这个指令
#include <stdio.h>
还有指令
#include <math.h>
是多余的,因为您的程序中没有使用 header 中的任何声明。您也可以删除它。
我写了一个 C 程序来查找数组中最大偶数和最小偶数的索引差异(这里 0 被认为是偶数,从测试用例来看它肯定不像数组应该排序)。如果数组只有一个元素或该数组中没有偶数,它将 return 一个值或否。
#include <math.h>
#include <stdio.h>
int main() {
int n,small,big,a[50],b1,s1,diff;
scanf("%d",&n);
for(int i =0;i<n;i++){
scanf("%d",&a[i]);
}
small = a[0];
big = a[0];
for (int i = 1; i < n; i++)
{
if (a[i] < small && a[i]%2 == 0)
{
small = a[i];
s1 = i;
}
if (a[i] > big && a[i]%2 == 0)
{
big = a[i];
b1 = i;
}
}
diff = b1-s1;
if(diff==0){
printf("NO");
}
else{
printf("%d",diff);
}
return 0;
}
当我输入时
4
120 0 4 7
它没有 return 1 。它 returns 32657。 我在这里不理解什么逻辑?请帮助我。
在此代码段中
small = a[0];
big = a[0];
你还需要初始化s1
和b1
s1 = 0;
b1 = 0;
总的来说,您的方法是不正确的,因为 a[0] 可以是奇数,也可以是数组中最大或最小的数。
所以首先你需要在数组中找到第一个偶数,如果这样的数字存在(例如在索引 i 处)然后写
small = a[i];
big = a[i];
s1 = i;
b1 = i;
注意您实际上可以在程序的任何地方包含 header <stdio.h>
因为在第一次包含 header 之后所有其他 header s 实际上不会被包括在内。但是不要那样做,因为它会让你的程序很奇怪。:)
所以在 main
中删除这个指令#include <stdio.h>
还有指令
#include <math.h>
是多余的,因为您的程序中没有使用 header 中的任何声明。您也可以删除它。