C语言基础算法---从数组中找最大最小值的实际应用

简介: C语言基础算法---从数组中找最大最小值的实际应用

   最近几天有文章的读者反馈,本平台发布的文章只是讲了一些基础知识,并没有谈到具体应用,根据各位的反馈,我也做了相应的思考,所以咱们还是需要理论和实践结合来写比较好。等时机成熟,也会将具体的应用编写成一本全新的书籍。

   前面写的测试案例看似有点泛泛,可能各位看完也不知道具体用到哪里,接下来我们来看一个具体的应用案例吧!以下程序运行在秉火STM32F103霸道的开发板上,参考官方提供的程序demo,经过个人修改而来。

  用DS18B20温度传感器,设置4个窗值,找最大值,由于温度带有小数,所以类型应是浮点型数据:

#include "stm32f10x.h"
#include "bsp_usart.h"
#include "bsp_SysTick.h"
#include "bsp_ds18b20.h"
#define NR(x) (sizeof(x)/sizeof(x[0]))
static float find_buffer_max(float buffer_value_max,u32 size,float *buffer);
int main(void)
{ 
  int i = 0;
  float temp_max;
  //设置温度保存的缓存有4个窗值,可以更改 
  float temp_buffer[4] ;
  uint8_t uc, ucDs18b20Id [ 8 ];
  SysTick_Init();
  USART_Config();
  while( DS18B20_Init() ) 
    printf("\r\n no ds18b20 exsit \r\n");
  DS18B20_ReadId ( ucDs18b20Id  );          
  for ( uc = 0; uc < 8; uc ++ )            
   printf ( "%.2x", ucDs18b20Id [ uc ] );
  while(1)
  { 
    //当计数等于测试窗值时,则从4个窗值找温度的最大值 
    if(i == NR(temp_buffer))
    {
      temp_max = find_buffer_max(0.0,NR(temp_buffer),temp_buffer);
      printf"温度的最大值为:%.1f\n",temp_max);
      //清计数器 
      i = 0 ;
    }
    //将当前温度保存到窗值数组
    temp_buffer[i] = DS18B20_GetTemp_MatchRom (ucDs18b20Id); 
    Delay_ms(1000);   
    printf("当前温度值为:%.1f\n",temp_buffer[i]);
    i++ ;
  }  
        return 0 ;
}
//找最大值 
static float find_buffer_max(float buffer_value_max,u32 size,float *buffer)
{
  u8 count = 0 ; 
  float max = buffer_value_max ;
  for(count = 0 ; count < size ; count++)
  {
    if(buffer[count] > max)
      max = buffer[count];
  }
  return max ; 
}

运行结果:

640.jpg

   根据现实的工程应用情况,我们可能会对一个传感器的数据进行长时间的观察就需要用到这样的方法。

   又如,像光强值,加热值,声音值等模拟量也是可以用这样的方法。

目录
相关文章
|
23天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
34 1
|
21天前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
67 6
|
22天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
23天前
|
存储 缓存 算法
C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力
本文探讨了C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力。文章还分析了数据结构的选择与优化、算法设计的优化策略、内存管理和代码优化技巧,并通过实际案例展示了C语言在排序和图遍历算法中的高效实现。
41 2
|
24天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
23天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
39 1
|
23天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
54 1
|
24天前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法及应用
探索人工智能中的强化学习:原理、算法及应用
|
18天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
4天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。