保存する整数の数を入力してください: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);
}
私のプログラムの何が問題になっていますか?私は知っていることをすべて試しました:(奇妙な値は奇妙な結果をもたらしています。
偶数の合計を計算する部分は次のとおりです。これは機能します。
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];
}
違いがわかりますか?2番目の行には余分な行があります。動作しないバージョンでは、いくつかのローカル変数を再宣言し、それらのローカル変数に値を割り当てました。それが機能しない理由です。後で画面に出力する上位スコープの「元の」変数には何もしませんでした。
さらに、どちらかsumEven
またはsumOdd
を初期化したことがないため、両方の部分が実際に壊れているため0
、それらの値は指定されておらず、指定されていない値に追加して他の指定されていない値を作成しています。このバグが観察可能な症状を引き起こすかどうかは未定義です。
もう1つの問題は、配列を次のように宣言することです。
int even_lister[i];
ただし、これi
は設定した変数であり、0
変更されることはありません。したがって、これらの配列の長さはゼロであり、それらへのすべてのアクセスは違法です。おそらくあなたはn
代わりに使うつもりでしたか?
コンパイラの警告をオンにして、コードをより注意深く読む必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加