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; }