#include<stdio.h>
void swa(int *, int *);
int main()
{
int i,j,arr[10];
arr[10]= (10,20,30,40,50);
printf("ascending order");
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
if (arr[i]<arr[j]);
swa(&arr[i],&arr[j]);
}
}
for(i=0;i<5;i++)
{
printf("%d",arr[i]);
}
return 0;
}
void swa(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
此代码在输出中提供垃圾值。如何使用函数说swa
进行交换?
答案 0 :(得分:3)
您的代码非常接近,但您犯了三个错误:
s
和if
应为if (arr[i]<arr[j])
修复这三个错误将产生一个有效的解决方案。初始化需要作为声明的一部分发生,并使用花括号:
if (arr[i]>arr[j])
答案 1 :(得分:0)
将其更改为:
int i,j,arr[10]= {10,20,30,40,50};
printf("ascending order");
for(i=0;i<5;i++)
{
for(j=i;j<(5-i-1);j++)
{
if (arr[j]>arr[j+1])
swa(&arr[j],&arr[j+1]);
}
}
for(i=0;i<5;i++)
{
printf("%d ",arr[i]);
}
答案 2 :(得分:0)
使用支撑列表声明数组时,可以初始化数组。
因此尝试初始化数组
int i,j,arr[10];
arr[10]= (10,20,30,40,50);
无效。事实上,在右侧的第二个语句中,使用了逗号运算符,并且索引为10的数组中不存在的元素被赋值为50。
这个if语句
if (arr[i]<arr[j]);
^^
由于分号放置错误,有一个空的子语句。它必须被删除。
此外,if语句中的条件表示您正在尝试按降序排序数组而不是升序。
使用魔术数字也是一种糟糕的编程风格,例如程序中的数字5。
程序可以按以下方式查看
#include <stdio.h>
void swap( int *x, int *y )
{
int tmp = *x;
*x = *y;
*y = tmp;
}
#define N 10
int main(void)
{
int arr[N] = { 10, 20, 30, 40, 50 };
size_t i, j;
size_t n = 0;
while ( n < N && arr[n] != 0 ) ++n;
printf( "descending order:" );
for ( i = 0; i < n; i++ )
{
for ( j = i + 1; j < n; j++ )
{
if ( arr[i] < arr[j] ) swap( &arr[i], &arr[j] );
}
}
for ( i = 0; i < n; i++ ) printf( " %d", arr[i] );
printf( "\n" );
return 0;
}
它的输出是
descending order: 50 40 30 20 10