#include <stdio.h> #include <stdlib.h> int main() { int m,k; scanf("%d %d",&m,&k); int arr1[100]; float arr2[100]; float t; for(int i =0; i < 100; i ++) { scanf("%d %f",&arr1[i],&arr2[i]); } for(int i = 0; i < 99; i ++) { for(int j = 0; j < 99 - i; j ++) { if(arr2[j + 1] < arr2[j]) { arr2[j + 1] = t; arr2[j] = arr2[j + 1]; arr2[j] = t; } } } for(int i = 0; i < 100; i ++) { printf("%d %f",arr1[i],arr2[i]); } return 0; }这段代码有什么问题
时间: 2024-02-01 08:04:07 浏览: 68
这段代码存在两个问题:
1. 在冒泡排序中,交换两个元素时,代码中的交换语句有问题,应该是:
```c
t = arr2[j + 1];
arr2[j + 1] = arr2[j];
arr2[j] = t;
```
2. 在打印排序后的数组时,会导致数组越界,应该根据题目要求的 m 的值来控制循环次数,即:
```c
for(int i = 0; i < m; i ++) {
printf("%d %f\n",arr1[i],arr2[i]);
}
```
同时,应该在打印的时候加上换行符 `\n`,以使结果更加清晰。完整的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,k;
scanf("%d %d",&m,&k);
int arr1[100];
float arr2[100];
float t;
for(int i =0; i < 100; i ++) {
scanf("%d %f",&arr1[i],&arr2[i]);
}
for(int i = 0; i < 99; i ++) {
for(int j = 0; j < 99 - i; j ++)
{
if(arr2[j + 1] < arr2[j])
{
t = arr2[j + 1];
arr2[j + 1] = arr2[j];
arr2[j] = t;
}
}
}
for(int i = 0; i < m; i ++) {
printf("%d %f\n",arr1[i],arr2[i]);
}
return 0;
}
```
阅读全文