c# 为什么条件句没有给出正确答案?

mspsb9vt  于 2022-12-28  发布在  C#
关注(0)|答案(2)|浏览(158)

扫描完所有的数组元素后,我怎样才能分别打印偶数和奇数。

#include <stdio.h>  
void  main()  
{  
    int arr[100]; 
    int n,i;
    printf("Number of Elements:-");
    scanf("%d",&n);
    for (i=0;i<=n;i=i+1)
    {
        printf("Elem %d:-",i);
        scanf("%d",&arr[i]);
    }
        for(i=0;i<=n;i=i+1)
        {
            if(arr[i]/2==0)
            {
                printf("Even%d\n",arr[i]);
            }
            else
            {
                printf("odd%d\n",arr[i]);
            }
        }

}

输出:

Number of Elements:-4
Elem 0:-1
Elem 1:-2
Elem 2:-3
Elem 3:-4
Elem 4:-5
Even1
odd2
odd3
odd4
odd5
mznpcxlj

mznpcxlj1#

编写循环的传统方法是:

for( i=0; i<n; ++i )
{
    printf("%s %d\n", (arr[i]%2)? "Odd" : "Even", arr[i]);
}

在C中,大多数循环的初始条件为var=0,在var<target时运行,并以++var递增(有些人更喜欢var++
测试一个数是偶数还是奇数的传统方法是使用模(%)运算符,而不是除法(/)。
为什么像10/2这样的表达式会等于0??
10显然是偶数,除以2得到5,而不是零!!?
把这些加在一起,我得到了:

#include <stdio.h> 
#include <stdlib.h>

int main(void)  
{  
    int arr[100]; 
    int n = 20;
    
    for ( int i=0; i<n; ++i )
    {
        arr[i] = rand() % 100;
        // Replaced user-input with pseudo-random numbers, for ease and simplicity. 
        // You can stick with scanf if you want.
    }
    
    for( int i=0; i<n; ++i )
    {
        printf("%-4s %d\n", (arr[i]%2)? "Odd" : "Even", arr[i]);
    }
    
    return 0;
}

输出:

Success #stdin #stdout 0.01s 5404KB
Odd  83
Even 86
Odd  77
Odd  15
Odd  93
Odd  35
Even 86
Even 92
Odd  49
Odd  21
Even 62
Odd  27
Even 90
Odd  59
Odd  63
Even 26
Even 40
Even 26
Even 72
Even 36
2g32fytz

2g32fytz2#

main()返回int,除非您使用Microsoft扩展。请使用常量LEN而不是硬编码的幻数。已添加对数组大小的边界检查,并检查了scanf()的返回值以确保您读取了一个值。本地化了循环变量i,并使用了cfor(int i = 0; i < n; i++)中循环的常见习惯用法。模运算符%,特别是,% 2对偶数返回0,对奇数返回1。“分别地”对我来说意味着两个循环。

#include <stdio.h>
#define LEN 100

int main() {
    int arr[LEN];
    printf("Number of Elements: ");
    int n;
    if(scanf("%d", &n) != 1) {
        printf("scanf failed\n");
        return 1;
    }
    if(n < 1 || n > LEN) {
        printf("n must be between 1 and 100\n");
        return 1;
    }
    for (int i=0; i<n; i++) {
        printf("Elem %d: ", i);
        if(scanf("%d", &arr[i]) != 1) {
            printf("scanf failed\n");
            return 1;
        }
    }
    for(int i=0; i<n; i++)
        if(arr[i] % 2) printf("odd: %d\n",arr[i]);

    for(int i=0; i<n; i++)
        if(!(arr[i] % 2)) printf("even: %d\n",arr[i]);
}

下面是相应的输出:

Number of Elements: 4
Elem 0: 0
Elem 1: 1
Elem 2: 2
Elem 3: 3
odd: 1
odd: 3
even: 0
even: 2

相关问题