C语言以下程序用于实现冒泡排序,请改正程序中的错误: 注:程序中单行注释部分为需要修改部分 #include<stdio.h> void bubble(int [], int); #define LEN 10; //zcfu main( ) { int data[len], i; //zcfu for (i=0; i<= LEN-1; i++) scanf("%d", data[i]); //zcfu printf("\n"); void bubble(data[LEN], LEN); //zcfu for(i=0; i<= LEN; i++) // Output printf("%8d", data[i]); } void bubble(int dat[], int length) { int head, tail,round,i; int t; head = 0; tail = length - 1; for (round = head; round <= tail; round++) for (i = tail; i >= round+1; i--) if ( dat[i] < dat[i-1] ) { t=dat[i-1]; //zcfu dat[i]=dat[i-1]; dat[i-1]=t; } }
时间: 2024-03-05 09:48:31 浏览: 10
修改后的程序如下:
```c
#include<stdio.h>
void bubble(int [], int);
#define LEN 10
int main( ) {
int data[LEN], i;
for (i=0; i<LEN; i++) // 修改1:将循环条件修改为 i<LEN
scanf("%d", &data[i]); // 修改2:需要加上 & 取地址符
printf("\n");
bubble(data, LEN); // 修改3:需要传递参数,不需要再加上类型和[]符号
for(i=0; i<LEN; i++) // 修改4:将循环条件修改为 i<LEN
printf("%8d", data[i]);
}
void bubble(int dat[], int length) {
int head, tail, round, i;
int t;
head = 0;
tail = length - 1;
for (round = head; round <= tail; round++)
for (i = tail; i >= round+1; i--)
if ( dat[i] < dat[i-1] ) {
t=dat[i-1];
dat[i-1]=dat[i]; // 修改5:将 dat[i] 赋值给 dat[i-1],即将大的数往后移
dat[i]=t; // 修改6:将 t 赋值给 dat[i],即将小的数往前移
}
}
```
对比原程序,主要的错误有:
1. 定义 `LEN` 的时候不能加上分号 `;`,应该改为 `#define LEN 10`。
2. 在 `main` 函数中输入数组元素时,需要加上 `&` 取地址符。
3. 在调用 `bubble` 函数时,不需要加上类型和 `[]` 符号。
4. 在输出数组元素时,循环条件应该是 `i<LEN`。
5. 在冒泡排序中,需要将大的数往后移,因此应该将 `dat[i]` 赋值给 `dat[i-1]`。
6. 在冒泡排序中,需要将小的数往前移,因此应该将 `t` 赋值给 `dat[i]`。