请大家来找茬!!!
/*题目:对 10 个数进行排序
1.程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一
个元素交换,下次类推,即用第二个元素与后 8 个进行比较,并进行交换。
*/
#include<stdio.h>
int swap(int a[],int b[]);
int main(void)
{
int i, j;
int a = { 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 };
for( i=0 ; i<10 ; i++)
{
for( j=i+1 ; j<10 ; j++)
{
swap(a,a);
}
}
for( i=0 ; i<10 ; i++)
{
printf("%5d\n",a);
}
}
int swap(int a[],int b[])
{
int i, j , temp;
if( a>b )
{
temp = a ;
a = b ;
b = temp ;
}
return 0;
}
想用函数调用来实现题目功能,奈何功力不够,请有识之士出来指正题目中的错误,该怎样改正?
错误提示截图:
本帖最后由 Whitehat_K 于 2016-10-25 19:53 编辑
/*
题目:对 10 个数进行排序
1.程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一
个元素交换,下次类推,即用第二个元素与后 8 个进行比较,并进行交换。
*/
#include<stdio.h>
void swap(int *a,int *b);
int main(void)
{
int i, j;
int a = { 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 };
for( i=0 ; i < 10 ; i++)
{
for( j = i+1; j < 10; j++ )
{
swap(&a, &a);
}
}
for( i=0 ; i<10 ; i++)
{
printf("%5d\n",a);
}
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
#if(0)
int swap(int a[],int b[])//另写交换函数要改变多个值为什么不试试指针传递参数
{
int i, j, temp;
if( a > b )
//warning C4700: local variable 'i' used without having been initialized
//warning C4700: local variable 'j' used without having been initialized
//这里的i,j是swap函数中的局部变量只定义没赋值;还有这里的i,j和main函数中的i,j不相同
//swap函数这里的a,a并不会改变main中的数组值
{
temp = a ;
a = b ;
b = temp ;
}
return 0;//void swap()就可以不写
}
#endif 本帖最后由 代码农民 于 2016-10-26 22:30 编辑
发现的错误:
1:
你的main函数是个例程(过程函数,无返回值),所以第10行的int应改为void。
2:
根据你写的swap函数的原型(第29行),swap形参应接收的是地址(指针),所以第19行两个参数前应加取址运算符&,即swap(&a,&a);//也可以写成指针运算型swap(a+i,a+j);//
3:
在你写的swap函数的原型(第29行开始)里,32行的i,j没有始初化,a,a指向谁?
修改的建议:
1:重写swap函数,定义为例程(void型),用于两个操作数直接交换。
2:在第17行swap前函数前比较a和a Whitehat_K 发表于 2016-10-25 19:48
19行前插入if(a>a)程序应该通用性好点。
谢谢您的指点{:7_113:} 代码农民 发表于 2016-10-26 22:24
发现的错误:
1:
你的main函数是个例程(过程函数,无返回值),所以第10行的int应改为void。
谢谢您{:7_113:}{:7_146:}
页:
[1]