VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 66|回复: 3

[已解决]22课作业

[复制链接]
62_avatar_middle
最佳答案
0 
在线会员 发表于 2020-2-14 15:30:39 | 显示全部楼层 |阅读模式
  1. #include <iostream>
  2. using namespace std;
  3. int  max_min(int num[100], int* max, int* min)
  4. {
  5.         //计算num中数据的个数;
  6.         [b]int m = 0;
  7.         for (int i = 0; i <= 100; ++i)
  8.         {
  9.                 if (num[i] != 0)
  10.                         ++m;
  11.         }
  12.         int num_size = m;[/b][/b]
  13.         //寻找最大最小值;
  14.         for (int i=0 ; i <= num_size; ++i)
  15.         {
  16.                 *max= *max > num[i] ? *max : num[i];
  17.                 *min= *min< num[i] ? *min : num[i];
  18.         }
  19.         return *max, *min;
  20. }
  21. int main()
  22. {
  23.         int num_1[] = { 8,34,54,54,100,109,16,7,18,23 };
  24.         //int num_1[100] = { 1,2,3,4,5,6,7,8,9,88,77,66 };
  25.         int a = num_1[0], b = num_1[0];
  26.         max_min(num_1,&a,&b);
  27.         cout << "最大值为:"<<a<< endl << "最小值为:"<< b << endl;
  28.         return 0;
  29. }
复制代码

这个时代码,其中求数组数据个数的那部分,单独测试是可以的,但放一起后就出问题了;
最佳答案
<font color=red>[已解决]</font>22课作业
2020-2-15 13:46:52
本帖最后由 明月出天山 于 2020-2-15 13:48 编辑

试着回答一下,数组作为参数传递,在函数中是无法得到它的长度,可以在主函数中得到它的长度,作为参数传递到函数里,就可以解决问题了。
  1. #include <iostream>
  2. using namespace std;

  3. void max_min(int num[], int *max, int *min, int a)
  4. {

  5. //        int m = 0;
  6. //        for (int i = 0; i < 10; ++i)
  7. //        {
  8. //                if (num[i] != 0)
  9. //                  {
  10. //                    ++m;
  11. //                                         
  12. //                }         
  13. //                  
  14. //        }
  15. //        cout << m << endl;
  16. //       
  17. //        int num_size = m;
  18.        
  19.         for (int i = 0; i < a; ++i)
  20.         {
  21.                
  22.                 *max = *max > num[i] ? *max : num[i];               
  23.                 *min = *min < num[i] ? *min : num[i];
  24.                
  25.         }
  26. }

  27. int main()
  28. {
  29.         int num_1[] = {8,34,54,54,100,109,16,7,18,23};
  30.         int len = (sizeof(num_1)/sizeof(num_1[0]));
  31.         int a = num_1[0], b= num_1[0];
  32.        
  33.         max_min(num_1, &a, &b, len);
  34.         cout <<"最大值为:" << a << endl << "最小值为:" << b << endl;
  35.         return 0;
  36. }
复制代码

因为传入到函数参数的是数组的首地址,int  max_min(int num[100], int* max, int* min) 和主函数中数组的定义 int num_1[] = { 8,34,54,54,100,109,16,7,18,23 };
//计算num中数据的个数;
      
  1. [b]int m = 0;
  2.         for (int i = 0; i <= 100; ++i)
  3.         {
  4.                 if (num[i] != 0)
  5.                         ++m;
  6.         }
  7.         int num_size = m;[/b][/b]
复制代码

这段代码估计是数组下标越界,所以得不到正确的m值。
不知道分析的对不对,希望sky老师能看到,给出正确的解答吧。




上一篇:error C2143 error C2181
下一篇:不重启电脑修改IP
51_avatar_middle
最佳答案
33 
online_admins 发表于 2020-2-14 16:52:03 | 显示全部楼层
int a = num_1[0], b = num_1[0];
为什么是0,一个元素没有?
62_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-15 11:19:58 | 显示全部楼层
Syc 发表于 2020-2-14 16:52
int a = num_1[0], b = num_1[0];
为什么是0,一个元素没有?

我是让它等于num_1中的第一个元素的
23_avatar_middle
最佳答案
2 
在线会员 发表于 2020-2-15 13:46:52 | 显示全部楼层    本楼为最佳答案   
<font color=red>[已解决]</font>22课作业
本帖最后由 明月出天山 于 2020-2-15 13:48 编辑

试着回答一下,数组作为参数传递,在函数中是无法得到它的长度,可以在主函数中得到它的长度,作为参数传递到函数里,就可以解决问题了。
  1. #include <iostream>
  2. using namespace std;

  3. void max_min(int num[], int *max, int *min, int a)
  4. {

  5. //        int m = 0;
  6. //        for (int i = 0; i < 10; ++i)
  7. //        {
  8. //                if (num[i] != 0)
  9. //                  {
  10. //                    ++m;
  11. //                                         
  12. //                }         
  13. //                  
  14. //        }
  15. //        cout << m << endl;
  16. //       
  17. //        int num_size = m;
  18.        
  19.         for (int i = 0; i < a; ++i)
  20.         {
  21.                
  22.                 *max = *max > num[i] ? *max : num[i];               
  23.                 *min = *min < num[i] ? *min : num[i];
  24.                
  25.         }
  26. }

  27. int main()
  28. {
  29.         int num_1[] = {8,34,54,54,100,109,16,7,18,23};
  30.         int len = (sizeof(num_1)/sizeof(num_1[0]));
  31.         int a = num_1[0], b= num_1[0];
  32.        
  33.         max_min(num_1, &a, &b, len);
  34.         cout <<"最大值为:" << a << endl << "最小值为:" << b << endl;
  35.         return 0;
  36. }
复制代码

因为传入到函数参数的是数组的首地址,int  max_min(int num[100], int* max, int* min) 和主函数中数组的定义 int num_1[] = { 8,34,54,54,100,109,16,7,18,23 };
//计算num中数据的个数;
      
  1. [b]int m = 0;
  2.         for (int i = 0; i <= 100; ++i)
  3.         {
  4.                 if (num[i] != 0)
  5.                         ++m;
  6.         }
  7.         int num_size = m;[/b][/b]
复制代码

这段代码估计是数组下标越界,所以得不到正确的m值。
不知道分析的对不对,希望sky老师能看到,给出正确的解答吧。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2020-2-24 09:45

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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