首页 > 解决方案 > C 中的程序显示错误结果,奇数

问题描述

输入要存储的整数个数:5

输入 5 个整数:

 1 2 3 4 5

集合中有 2 个偶数。该组有 3 个奇数。

偶数:

2
4

奇数:

1
3
5

输出:

Sum of Odd Numbers is 51
Sum of Even Numbers is 6
--------------------------------
Process exited after 3.389 seconds with return value 0
Press any key to continue . . .

这是代码:

#include <stdio.h>

int main()
{
    int N, n;
    printf("Enter number of integers to be stored : ");
    scanf("%d", &N);
    int count[N];
    printf("\nEnter %d integers: \n", N);
    for(int n=0;n<N;n++)    
    {
      scanf("%d", &count[n]);
    }
    //Even and Odd Counter
    int even_counter=0, odd_counter=0;
    for(n=0;n<N;n++)
    {
        //even_counter
        if(count[n]%2==0)
        {
            even_counter++;
        }
        //odd_counter
        else
        {
            odd_counter++;
        }
    }
    printf("\nThere are %d even numbers in the set.", even_counter);
    printf("\nThere are %d odd numbers in the set.\n", odd_counter);


    //Sorting of Even and Odd
    int i=0;
    printf("\nEven numbers: \n");
    for(n=0;n<N;n++)
    {   
        if(count[n]%2==0)
        {
            printf("%d\n", count[n]);
        }
    }
    printf("\nOdd numbers: \n");
    for(n=0;n<N;n++)
    {
        if(count[n]%2==1)
        {
            printf("%d\n", count[n]);
        }
    }

    //Sum of Odd and Even Values

    //EvenSummation
    int even_lister[i], sumEven, odd_lister[i], sumOdd;
    for(n=0;n<N;n++)
    {   
        if(count[n]%2==0)
        {
            even_lister[i]=count[n];
            sumEven+=even_lister[i];
        }
        else //OddSummation      
        {
            int odd_lister[i], sumOdd, i=0;

            odd_lister[i]=count[n];
            sumOdd+=odd_lister[i];

        }
     }
     printf("\nSum of Odd Numbers is %d", sumOdd);
     printf("\nSum of Even Numbers is %d", sumEven);
}

我的程序有什么问题?我已经尝试了我所知道的一切:(奇怪的值给出了奇怪的结果。

标签: c

解决方案


这是计算偶数总和的部分,它有效:

    if(count[n]%2==0)
    {
        even_lister[i]=count[n];
        sumEven+=even_lister[i];
    }

现在这是您计算奇数总和的部分,它没有:

    else //OddSummation      
    {
        int odd_lister[i], sumOdd, i=0;

        odd_lister[i]=count[n];
        sumOdd+=odd_lister[i];

    }

你看得到差别吗?第二行多了一行。在不起作用的版本中,您重新声明了一些局部变量并将您的值分配给这些局部变量。这就是为什么它不起作用。您没有对稍后打印到屏幕的更高范围内的“原始”变量做任何事情。

此外,这两个部分实际上都被破坏了,因为您从未初始化sumEvenor 或sumOddto 0,因此它们的值是未指定的,并且您正在添加到未指定的值以创建其他未指定的值。这个错误是否会产生可观察到的症状是未定义的。

另一个问题是你声明你的数组是这样的:

int even_lister[i];

但是i是您设置的变量,0并且从未更改过。所以这些数组的长度为零,每次访问它们都是非法的。也许您打算n改用?

您确实需要打开编译器警告并更仔细地阅读您的代码。


推荐阅读