#include <stdio.h> #include <math.h> int sort(int *a,int n) {int i,j,t,s; int max[4]; for(s=0;s<(n/5);s++) { for(i=0;i<5;i++) {for(j=s*5;j<(s*5)+4;j++) {if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } max[s]=a[(s*5)+4]; } return max; } int main() { int ikun[20]; int i; int max[4]; for(i=0;i<20;i++) { scanf("%d",&ikun[i]); } int *p=sort(ikun,20); for(i=0;i<20;i++) { printf("%5d",ikun[i]); } printf("\n"); for(i=0;i<4;i++) { printf("%d",p[i]); } return 0; }
时间: 2024-03-14 14:48:12 浏览: 54
这段代码中有一些问题,我来帮你分析和修改。
1. 函数sort的返回值类型应该是int*,因为它返回的是一个int数组的地址,而不是一个int值。
2. 函数sort中,max数组的长度应该是n/5,而不是4。因为题目要求找出每组中的最大值,而每组有5个数。
3. 在函数sort中,max数组应该在循环外部定义,因为它需要保存所有组的最大值。
4. 在函数sort中,比较大小的循环应该是j从s*5到(s+1)*5-1,而不是j从s*5到(s*5)+4。因为要比较的数的下标是从s*5到(s+1)*5-1。
5. 在主函数中,sort函数的返回值应该赋给int*类型的指针变量p,而不是直接赋给int类型的数组变量max。
6. 在主函数中,printf("%d",p[i])应该改为printf("%d ",p[i]),因为题目要求输出的每个数之间有一个空格。
下面是修改后的代码:
```
#include <stdio.h>
#include <math.h>
int* sort(int *a, int n) {
int i, j, t, s;
int *max = (int *)malloc(n/5 * sizeof(int));
for(s = 0; s < (n/5); s++) {
for(i = 0; i < 5; i++) {
for(j = s*5; j < (s+1)*5-1; j++) {
if(a[j] > a[j+1]) {
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
max[s] = a[(s+1)*5-1];
}
return max;
}
int main() {
int ikun[20];
int i;
int *p;
for(i = 0; i < 20; i++) {
scanf("%d", &ikun[i]);
}
p = sort(ikun, 20);
for(i = 0; i < 20; i++) {
printf("%5d", ikun[i]);
}
printf("\n");
for(i = 0; i < 4; i++) {
printf("%d ", p[i]);
}
free(p);
return 0;
}
```
阅读全文