c - 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);
}
我的程序有什么问题?我已经尝试了我所知道的一切:(奇怪的值给出了奇怪的结果。
解决方案
这是计算偶数总和的部分,它有效:
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];
}
你看得到差别吗?第二行多了一行。在不起作用的版本中,您重新声明了一些局部变量并将您的值分配给这些局部变量。这就是为什么它不起作用。您没有对稍后打印到屏幕的更高范围内的“原始”变量做任何事情。
此外,这两个部分实际上都被破坏了,因为您从未初始化sumEven
or 或sumOdd
to 0
,因此它们的值是未指定的,并且您正在添加到未指定的值以创建其他未指定的值。这个错误是否会产生可观察到的症状是未定义的。
另一个问题是你声明你的数组是这样的:
int even_lister[i];
但是i
是您设置的变量,0
并且从未更改过。所以这些数组的长度为零,每次访问它们都是非法的。也许您打算n
改用?
您确实需要打开编译器警告并更仔细地阅读您的代码。
推荐阅读
- javascript - 错误 [prerender-spa-plugin] - 无法预渲染所有路由
- python - 在品脱中继承 Q_ - 为什么超级调用不带参数?
- django - 使用 django-storages 进行 S3 版本控制
- mysql - 使用 CASE 更新 VIRTUAL GENERATED 列
- listview - 将复选框添加到 TableView 列
- sql - 如何根据多列按行排序
- javascript - 通过点属性访问器将对象键作为字符串获取
- java - 将 ModelAttribute 与布尔对象一起使用时未找到默认构造函数
- swift - 将 swift 字符串复制到固定大小的 char[][]
- python - 日志记录模块:StreamHandler 似乎没有附加到记录器