鱼C论坛

 找回密码
 立即注册
查看: 6813|回复: 4

请大家来找茬!!!

[复制链接]
发表于 2016-10-25 16:12:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. /*
  2. 题目:对 10 个数进行排序
  3. 1.程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一
  4. 个元素交换,下次类推,即用第二个元素与后 8 个进行比较,并进行交换。
  5. */

  6. #include<stdio.h>
  7. int swap(int a[],int b[]);

  8. int main(void)
  9. {
  10.         int i, j;
  11.         int a[10] = { 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 };
  12.        
  13.         for( i=0 ; i<10 ; i++)
  14.         {
  15.                 for( j=i+1 ; j<10 ; j++)
  16.                 {
  17.                         swap(a[i],a[j]);
  18.                 }
  19.         }
  20.        
  21.         for( i=0 ; i<10 ; i++)
  22.         {
  23.                 printf("%5d\n",a[i]);
  24.         }
  25. }

  26. int swap(int a[],int b[])
  27. {
  28.         int i, j , temp;
  29.         if( a[i]>b[j] )
  30.         {
  31.                 temp = a[i] ;
  32.                 a[i] = b[j] ;
  33.                 b[j] = temp ;
  34.         }

  35.         return 0;
  36. }
复制代码


想用函数调用来实现题目功能,奈何功力不够,请有识之士出来指正题目中的错误,该怎样改正?

错误提示截图:
QQ截图20161025160629.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-25 19:48:59 | 显示全部楼层
本帖最后由 Whitehat_K 于 2016-10-25 19:53 编辑
  1. /*
  2. 题目:对 10 个数进行排序
  3. 1.程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一
  4. 个元素交换,下次类推,即用第二个元素与后 8 个进行比较,并进行交换。
  5. */

  6. #include<stdio.h>
  7. void swap(int *a,int *b);

  8. int main(void)
  9. {
  10.         int i, j;
  11.         int a[10] = { 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 };
  12.         
  13.         for( i=0 ; i < 10 ; i++)
  14.         {

  15.                         for( j = i+1; j < 10; j++ )
  16.                         {
  17.                                 swap(&a[i], &a[j]);
  18.                         }
  19.         }
  20.         
  21.         for( i=0 ; i<10 ; i++)
  22.         {
  23.                 printf("%5d\n",a[i]);
  24.         }
  25. }


  26. void swap(int *a, int *b)
  27. {
  28.         int temp;
  29.         temp = *a;
  30.         *a = *b;
  31.         *b = temp;
  32. }


  33. #if(0)
  34. int swap(int a[],int b[])//另写交换函数要改变多个值为什么不试试指针传递参数
  35. {
  36.         int i, j, temp;
  37.         if( a[i] > b[j] )       
  38.         //warning C4700: local variable 'i' used without having been initialized
  39.         //warning C4700: local variable 'j' used without having been initialized
  40.         //这里的i,j是swap函数中的局部变量只定义没赋值;还有这里的i,j和main函数中的i,j不相同
  41.         //swap函数这里的a[i],a[j]并不会改变main中的数组值
  42.         {      
  43.                 temp = a[i] ;
  44.                 a[i] = b[j] ;
  45.                 b[j] = temp ;
  46.         }

  47.         return 0;//void swap()就可以不写
  48. }
  49. #endif
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-26 22:24:10 | 显示全部楼层
本帖最后由 代码农民 于 2016-10-26 22:30 编辑

发现的错误:
1:
   你的main函数是个例程(过程函数,无返回值),所以第10行的int应改为void。
2:
   根据你写的swap函数的原型(第29行),swap形参应接收的是地址(指针),所以第19行两个参数前应加取址运算符&,即swap(&a[I][i][i],&a[j]);//也可以写成指针运算型swap(a+i,a+j);//
3:
    在你写的swap函数的原型(第29行开始)里,32行的i,j没有始初化,a[I][i],a[j]指向谁?

修改的建议:
1:重写swap函数,定义为例程(void型),用于两个操作数直接交换。
2:在第17行swap前函数前比较a和a[j][/i][/i][/i]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-28 16:39:28 | 显示全部楼层

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

谢谢您的指点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-28 16:39:59 | 显示全部楼层
代码农民 发表于 2016-10-26 22:24
发现的错误:
1:
   你的main函数是个例程(过程函数,无返回值),所以第10行的int应改为void。

谢谢您
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-16 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表