void enqueue(int *num) { int i,j,sum=0; if(queue[0]==0) { for(i=0;i<10;i++) { queue[i]=num; } for(i=0;i<10;i++) { printf("queue=%d",queue[i]); } } else { for(j=8;j>=0;j--) { queue[j+1]=queue[j]; } queue[0]=*num; for(i=0;i<10;i++) { printf("queue=%d",queue[i]); } for(i=0;i<10;i++) { sum+=queue[i]; } num=sum/10; } printf("num=%d",*num); return num; }
时间: 2023-07-14 14:09:03 浏览: 41
在上述代码中,存在一些问题。首先,在 `enqueue` 函数中,`queue` 数组没有被定义或声明。其次,在 `queue` 数组的赋值部分,应该将 `num` 的值赋给 `queue[i]` 而不是 `queue[i]` 的地址。此外,在最后返回 `num` 的语句中,返回类型应该是 `int*` 而不是 `void`。修正后的代码如下:
```c
#include <stdio.h>
int queue[10] = {0};
int* enqueue(int* num) {
int i, j, sum = 0;
if (queue[0] == 0) {
for (i = 0; i < 10; i++) {
queue[i] = *num;
}
for (i = 0; i < 10; i++) {
printf("queue=%d\n", queue[i]);
}
} else {
for (j = 8; j >= 0; j--) {
queue[j + 1] = queue[j];
}
queue[0] = *num;
for (i = 0; i < 10; i++) {
printf("queue=%d\n", queue[i]);
}
for (i = 0; i < 10; i++) {
sum += queue[i];
}
*num = sum / 10;
}
printf("num=%d\n", *num);
return num;
}
int main() {
int num = 5;
enqueue(&num);
return 0;
}
```
在修正后的代码中,我们定义了一个全局数组 `queue`,并将其初始化为全零。在 `enqueue` 函数中,我们首先检查 `queue[0]` 是否为零,如果是,则将 `num` 的值赋给 `queue` 数组。然后,我们按照先后顺序将 `queue` 数组中的元素向后移动一位,并将 `num` 的值赋给 `queue[0]`。接着,我们计算 `queue` 数组中所有元素的和,并将其除以 10,将结果赋给 `num`。最后,我们打印出更新后的 `queue` 数组和最新的 `num` 值。
请注意,上述代码中的 `queue` 数组是一个全局数组,因此在多次调用 `enqueue` 函数时,该数组的内容将会保留。如果你需要每次调用 `enqueue` 函数时都使用独立的队列,可以将 `queue` 数组定义为局部变量,并且需要注意传递队列长度等相关参数。