找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3157|回复: 16
收起左侧

关于C语言数据比较,找出最大数和最小数的算法

  [复制链接]
ID:510170 发表于 2021-4-19 14:54 | 显示全部楼层 |阅读模式
我想从eeprom中取出80个数,然后进行比较,找出最大数和最小数,应该怎么写程序呢?谢谢各位大神了。
回复

使用道具 举报

ID:94489 发表于 2021-4-19 15:38 | 显示全部楼层
1.先求和,算平均值
2.循环80个数,计算与平均值的差
3,.比较差大小,得出最大最小值

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:47286 发表于 2021-4-19 15:40 | 显示全部楼层
本帖最后由 dzbj 于 2021-4-19 15:52 编辑

最笨的算法

uchar a=0;
uchar b=255;

for(x=0;x<80;x++)
{
if(a<eeprom[x])//求最大
{
a=eeprom[x];
}
if(b>eeprom[x])
{
b=eeprom[x];//求最小
}
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:332214 发表于 2021-4-19 17:20 | 显示全部楼层
伪代码
回复

使用道具 举报

ID:332214 发表于 2021-4-19 17:41 | 显示全部楼层
伪代码:
  1. //从 eeprom 读取数据
  2. char* Get_eeprom_data(void)
  3. {
  4.      .......
  5.      return data
  6. }
  7. //获取最大 最小 值
  8. void Get_max_or_min_mum (void)
  9. {
  10.      char max=0,min=127,i=0;
  11.      char *datanum=Get_eeprom_data();
  12.      for(i=0;i < 80;i++)
  13.      {
  14.           if(datanum[i] > max)
  15.           {
  16.                max = datanum[i];
  17.           }
  18.           else if(datanum[i] < min)
  19.           {
  20.                 min = datanum[i];
  21.           }
  22.           else
  23.           {
  24.               continue;
  25.            }
  26.      }
  27. // max 最大值  min 最小值
  28. }
复制代码
回复

使用道具 举报

ID:451718 发表于 2021-4-19 18:01 | 显示全部楼层
有个非常经典的算法,冒泡比较法了解下

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:908654 发表于 2021-4-19 21:13 | 显示全部楼层
冒泡算法比较好用。从eeprom中依次取数字,然后再寄存器中保存当前最大值。遍历一整遍后即可。
回复

使用道具 举报

ID:844772 发表于 2021-4-19 23:28 | 显示全部楼层
冒泡法是排序用的,这里只要简单遍历而已。
回复

使用道具 举报

ID:889094 发表于 2021-4-19 23:39 | 显示全部楼层
很多人都学过,如果没学过就简单走一遍,先变量shud,shux,shudi,shuxi标记大数,小数,大数位置,小数位置,走一遍,连走边比较,如果比大数大,大数赋值,大数位置指过去,如果比小数小,小数赋值,小数位置指过去,继续下一个,一遍下来全搞定,这种一遍的事没有什么太简单或者太高精尖的算法

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:592807 发表于 2021-4-20 08:44 | 显示全部楼层
dzbj 发表于 2021-4-19 15:40
最笨的算法

uchar a=0;

所有的数都在10-20之间,你这算法会怎么样。
回复

使用道具 举报

ID:47286 发表于 2021-4-20 09:50 来自手机 | 显示全部楼层
黄youhui 发表于 2021-4-20 08:44
所有的数都在10-20之间,你这算法会怎么样。

没想那么多情况 人家不是没说范围么 先按最简单的来呗
回复

使用道具 举报

ID:908839 发表于 2021-4-20 10:07 | 显示全部楼层
当然可以使用冒泡排序,但只是为了找最值的话,未免有点杀鸡用牛刀了,代码实现思路如下:
回复

使用道具 举报

ID:510170 发表于 2021-4-20 11:10 | 显示全部楼层
谢谢各位回答,我去了解下冒泡算法。
回复

使用道具 举报

ID:518902 发表于 2021-4-20 15:33 | 显示全部楼层
你好! 我有一个解决办法,既然你只是要找出最大最小,只需要遍历一遍就行,不需要冒泡排序,冒泡排序还是挺占用资源的.
首先定义2个变量 ,max,min,然后分别装入数组里的第一个元素,随后分别遍历数组, 前者: 如果就比他大的 就把数值换成那个大的,后者和前者一样,只不过是比谁小.
这样只需要遍历2次数组即可,也可以一次遍历完,都可以的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:518902 发表于 2021-4-20 15:34 | 显示全部楼层
也可以在一次遍历中同时判断,都可以的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:723547 发表于 2021-4-23 14:04 | 显示全部楼层
定义·两个变量,最大和最小值,然后把第一个数付给他,然后循环比较
回复

使用道具 举报

ID:824490 发表于 2021-4-24 09:35 | 显示全部楼层
直接冒泡就行了。又不用排序,简单:

定义MAX、MIN

max=arr[0];
min=arr[0];

从数组1到数组80

for (i=1;i<80;i++)
{
  if arr[i]>max;max=arr[i];//大于最大,则更新最大值
  if arr[i]<min;min=arr[i];//小于最小,则更新最小值
}
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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