lili200238 发表于 2016-10-25 16:12:25

请大家来找茬!!!

/*
题目:对 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:48:59

本帖最后由 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:24:10

本帖最后由 代码农民 于 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

lili200238 发表于 2016-10-28 16:39:28

Whitehat_K 发表于 2016-10-25 19:48


19行前插入if(a>a)程序应该通用性好点。

谢谢您的指点{:7_113:}

lili200238 发表于 2016-10-28 16:39:59

代码农民 发表于 2016-10-26 22:24
发现的错误:
1:
   你的main函数是个例程(过程函数,无返回值),所以第10行的int应改为void。


谢谢您{:7_113:}{:7_146:}
页: [1]
查看完整版本: 请大家来找茬!!!