L1-022 奇偶分家
分数 10
给定N个正整数,请统计奇数和偶数各有多少个?
输入格式:
输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。
输出格式:
在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。
输入样例:
9
88 74 101 26 15 0 34 22 77
输出样例:
3 6
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
错误程序:
#include<stdio.h>
#define max 1000;
int main()
{
int n=0,a[max];
int odd=0,ever=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",a[i]);
if(a[i]%2!=0)
{
odd++;
}
else
{
ever++;
}
}
return 0;
}
错误原因:
-
宏定义错误:
#define max 1000; -
#define max 1000;在宏定义中不应该有分号。
-
for(int i=1;i<=n;i++){scanf("%d",a[i]);// ...}数组是从
a[0]开始到a[max-1]结束,但循环是从a[1]开始,到a[n]结束。如果n等于max,则a[n]会越界访问数组,导致未定义行为。通常,C语言数组是从0开始计数的,所以循环应该从i=0开始,到i<n结束。 -
错误的
scanf调用:scanf("%d",a[i]);scanf的第二个参数应该是一个指向变量的指针,而不是变量的值。正确的调用方式是:scanf("%d",&a[i]); -
变量命名不一致:
变量ever应该是用来统计偶数的数量,但按照命名习惯,even可能会更合适,更易于理解。 -
缺少输出:
程序计算了奇数和偶数的数量,但没有输出它们。如果想看到结果,应该添加如下代码 -
正确程序:
#include<stdio.h> #define max 1000 int main() { int n=0, a[max]; int odd=0, even=0; // 变量命名修正 scanf("%d ", &n); for(int i=0; i<n; i++) // 循环从0开始,到n-1结束 { scanf("%d",&a[i]); if(a[i] % 2 != 0) { odd++; } else { even++; } } printf("%d %d", odd,even); return 0; }
这篇文章指导如何在C语言中修复一个程序,用于统计给定正整数列表中奇数和偶数的数量。错误包括数组索引问题、变量命名不一致以及缺少输出。修正后的代码确保正确处理输入并输出结果。
3848

被折叠的 条评论
为什么被折叠?



