#include <stdio.h> int main()//主函数 { int a[1010],b[1010];//两个队列数组,可以稍微定大一点,方便存。 int ca=0,cb=0;//ca是奇数客户队列的数量,cb是偶数客户队列的数量,此时因为没有入队,所以都为0。 int i,n,temp;//i是循环变量,从第一个客户遍历到最后一个客户,存入到队里;n是客户数量;temp相当一个中间变量,存放当前客户的数字。 scanf("%d",&n);//输入客户的数量。 for(i=0;i<n;i++)//从第一个客户遍历到最后一个客户,奇数入a队,偶数入b队。 { scanf("%d",&temp); if((temp%2)==1) { a[++ca]=temp;//a[0]其实没有存,从a[1]开始存放数据。++ca是先进行自加,然后再参与赋值运算。下标大小代表了客户的总数量。 } else { b[++cb]=temp; } } int x=1, f=1, k; while(x<ca || f<cb) { while (k=0;k<2;k++) { if(x<=ca){ if(x==1) { printf("%d", a[x]); } else { printf(" %d", a[x]); } } x++; } if (f<=cb){ if(f==1) { printf("%d", a[f]); } else { printf(" %d", a[f]); } f++; } } return 0; }这个代码错在哪里
时间: 2024-03-09 20:46:31 浏览: 122
这段代码存在以下问题:
1. 在第29行,应该输出 `b[f]`,而不是 `a[f]`。
2. 在第23行,应该使用 `else if`,而不是 `else`。因为如果客户的数字既不是奇数也不是偶数,那么它就不应该被存入任何一个队列。
3. 在第18行,应该使用 `==` 进行相等比较,而不是 `=`。因为 `=` 是赋值运算符,将会改变 `temp` 的值。
4. 在第14行,应该使用 `%` 进行取模运算,而不是 `/`。因为 `/` 是除法运算符,将会得到商而不是余数。
5. 在第12行和第13行,应该初始化数组 `a` 和 `b`。虽然在这个程序中,这两个数组的元素默认为 0,但是在实际使用中,这种做法可能会导致一些难以预料的问题。
6. 第17行中,`++ca` 的位置应该在赋值运算符之前,否则会出现数组越界的问题。
7. 在第23行中,因为如果客户的数字既不是奇数也不是偶数,那么它就不应该被存入任何一个队列,所以应该使用 `else if` 进行判断,而不是只用 `else`。
8. 在第26行中,应该使用 `for` 循环,而不是 `while` 循环。因为 `while` 循环的条件变量 `k` 没有被初始化,不能保证循环次数。
9. 第26行中,`if (f<=cb)` 应该改为 `if (k == 1 && f<=cb)`,因为此时需要输出的是队列 `b` 的元素,而不是队列 `a` 的元素。
下面是修改后的代码:
```c
#include <stdio.h>
int main()
{
int a[1010] = {0}, b[1010] = {0};
int ca = 0, cb = 0;
int i, n, temp;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &temp);
if (temp % 2 == 1)
{
a[++ca] = temp;
}
else if (temp % 2 == 0)
{
b[++cb] = temp;
}
}
int x = 1, f = 1, k;
for (k = 0; k < 2; k++)
{
while (x <= ca)
{
if (x == 1)
{
printf("%d", a[x]);
}
else
{
printf(" %d", a[x]);
}
x += 2;
}
while (f <= cb)
{
if (f == 1)
{
printf("%d", b[f]);
}
else
{
printf(" %d", b[f]);
}
f += 2;
}
}
return 0;
}
```
阅读全文