C语言练习:求数组的最大值与最小值

news2025/1/8 16:43:20

文章目录

  • 1. 提出任务
  • 2. 完成任务
    • 2.1 方法一:通过返回结构体指针来间接返回结果
      • 2.1.1 编写程序,实现功能
      • 2.1.2 运行程序,查看结果
    • 2.2 方法二:通过参数传递数组,并在函数中修改传入的参数
      • 2.2.1 编写程序,实现功能
      • 2.2.2 运行程序,查看结果
  • 3. 实战小结

1. 提出任务

  • 本次任务要求编写C程序,求出整型数组的最大值和最小值。通过两种方法实现:一是使用结构体指针返回结果,动态分配内存存储最值;二是通过指针参数直接修改传入的变量,避免动态内存分配。两种方法均通过遍历数组更新最值,最终输出结果。任务旨在加深对指针、结构体及函数参数传递的理解,同时掌握高效处理数组最值问题的技巧。

2. 完成任务

2.1 方法一:通过返回结构体指针来间接返回结果

2.1.1 编写程序,实现功能

  • 创建FindMaxMin01.c 程序
    在这里插入图片描述
#include <stdio.h>
#include <stdlib.h>

// 定义结构体用于存放最大值和最小值
typedef struct Result
{
    int min;
    int max;
} Result;

// 函数用于求数组的最值,返回结构体指针
Result *findMinMax(int arr[], int size)
{
    Result *res = (Result *)malloc(sizeof(Result));
    if (size > 0)
    {
        res->min = arr[0];
        res->max = arr[0];
        for (int i = 1; i < size; i++)
        {
            if (arr[i] < res->min)
            {
                res->min = arr[i];
            }
            if (arr[i] > res->max)
            {
                res->max = arr[i];
            }
        }
    }
    return res;
}

int main()
{
    int arr[] = {5, 3, 8, 1, 9, 12, 67, -34, 100, 37, 87};
    int size = sizeof(arr) / sizeof(arr[0]);
    Result *result = findMinMax(arr, size);
    printf("MinValue: %d\n", result->min);
    printf("MaxValue: %d\n", result->max);
    free(result); // 释放动态分配的内存
    return 0;
}
  • 代码说明:该代码通过结构体 Result 存储数组的最小值和最大值。函数 findMinMax 遍历数组,更新最值并返回结构体指针。主函数中定义了一个数组,调用 findMinMax 获取最值并输出。代码逻辑清晰,动态分配内存后需手动释放,避免内存泄漏。整体实现了高效的最值查找功能。

2.1.2 运行程序,查看结果

  • 运行FindMaxMin.c程序
    在这里插入图片描述

2.2 方法二:通过参数传递数组,并在函数中修改传入的参数

2.2.1 编写程序,实现功能

  • 创建FindMaxMin02.c程序
    在这里插入图片描述
#include <stdio.h>

// 函数用于求数组的最值,通过指针参数返回结果
void findMinMax(int arr[], int size, int *min, int *max)
{
    if (size > 0)
    {
        *min = arr[0];
        *max = arr[0];
        for (int i = 1; i < size; i++)
        {
            if (arr[i] < *min)
            {
                *min = arr[i];
            }
            if (arr[i] > *max)
            {
                *max = arr[i];
            }
        }
    }
}

int main()
{
    int arr[] = {5, 3, 8, 1, 9, 12, 67, -34, 100, 37, 87};
    int size = sizeof(arr) / sizeof(arr[0]);
    int min, max;
    findMinMax(arr, size, &min, &max);
    printf("MinValue: %d\n", min);
    printf("MaxValue: %d\n", max);
    return 0;
}
  • 代码说明:该代码通过指针参数返回数组的最小值和最大值。函数 findMinMax 遍历数组,更新指针指向的最值。主函数中定义数组,调用 findMinMax 并传入 minmax 的地址,最后输出结果。代码避免了动态内存分配,直接通过指针传递结果,简洁高效,适合处理数组最值问题。

2.2.2 运行程序,查看结果

  • 运行FindMaxMin02.c程序
    在这里插入图片描述

3. 实战小结

  • 在本次实战中,我们通过两种不同的方法实现了对整型数组最大值和最小值的查找。第一种方法通过返回结构体指针来间接返回结果,利用动态内存分配存储最值,代码逻辑清晰,但需注意手动释放内存以避免内存泄漏。第二种方法通过指针参数直接修改传入的参数,避免了动态内存分配,代码更加简洁高效。两种方法各有优劣,第一种适合需要返回多个值的场景,第二种则更适合对性能要求较高的场景。通过本次实战,我加深了对指针、结构体以及函数参数传递的理解,同时也掌握了如何根据需求选择合适的方法来解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

conda安装及demo:SadTalker实现图片+音频生成高质量视频

1.安装conda 下载各个版本地址&#xff1a;https://repo.anaconda.com/archive/ win10版本&#xff1a; Anaconda3-2023.03-1-Windows-x86_64 linux版本&#xff1a; Anaconda3-2023.03-1-Linux-x86_64 Windows安装 环境变量 conda -V2.配置conda镜像源 安装pip conda…

【前端系列01】优化axios响应拦截器

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、axios响应拦截器&#xff1a;☀️☀️☀️2.1 为什么前端需要响应拦截器element ui的消息组件 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动之后&#xff0c;回报在行动之中。 这个系列可…

PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”

近日&#xff0c;全球 IT 市场研究和咨询公司 Gartner 发布最新报告《Magic Quadrant™ for Cloud Database Management Systems》&#xff08;云数据库管理系统魔力象限&#xff09;&#xff0c;PingCAP 因其企业级开源分布式数据库 TiDB 在全球市场的表现&#xff0c;连续两年…

CSS——2.书写格式一

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写中&#xff1a;--><!--1.css 由属性名:属性值构成--><!--style"color: red;font-size: 20px;&quo…

QT上实现SVM进行数据分类

针对不了解SVM的原理的同学强推下面这个课程&#xff1a; 6.机器学习课程&#xff08;六&#xff09;支持向量机&#xff08;线性模型&#xff09;问题_哔哩哔哩_bilibili 一、QT实现SVM的方法 1.调用SVM的C语言库&#xff1a;麻烦&#xff0c;要专门去找库&#xff0c;cmak…

idea( 2022.3.2)打包报错总结

一 报错 class lombok.javac.apt.LombokProcessor (in unnamed module 0x4fe64d23) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing …

极客说|微软 Phi 系列小模型和多模态小模型

作者&#xff1a;胡平 - 微软云人工智能高级专家 「极客说」 是一档专注 AI 时代开发者分享的专栏&#xff0c;我们邀请来自微软以及技术社区专家&#xff0c;带来最前沿的技术干货与实践经验。在这里&#xff0c;您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…

解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南

目录 前言1. 分析问题原因2. 解决方案 2.1 修改 IntelliJ IDEA 的 JVM 选项2.2 配置 Tomcat 实例的 VM 选项 2.2.1 设置 Tomcat 的 VM 选项2.2.2 添加环境变量 3. 进一步优化 3.1 修改 Tomcat 的 logging.properties3.2 修改操作系统默认编码 3.2.1 Windows 系统3.2.2 Linux …

某小程序sign签名参数逆向分析

文章目录 1. 写在前面2. 接口分析3. 分析还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

医学图像分析工具02:3D Slicer || 医学影像可视化与分析工具 支持第三方插件

3D Slicer 是一款功能全面的开源医学影像分析软件&#xff0c;广泛应用于影像处理、三维建模、影像配准和手术规划等领域。它支持多种医学影像格式&#xff08;如 DICOM、NIfTI&#xff09;和丰富的插件扩展&#xff0c;是神经科学、放射学和生物医学研究中不可或缺的工具。 在…

Linux系统安装es详细教程

一、下载es及插件 从下面的网址进行对应es版本的下载https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-linux-x86_64.tar.gz &#xff0c;想要不同版本的es只需更换对应的版本号即可。 插件下载地址&#xff08;ik分词器、pinyin等&#xff09;es…

电子电气架构 --- 汽车总线基础介绍

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

安装PyQt5-tools卡在Preparing metadata (pyproject.toml)解决办法

为了在VS code中使用PyQt&#xff0c;在安装PyQt5-tools时总卡在如下这一步 pyqt5 Preparing metadata (pyproject.toml)经过各种尝试&#xff0c;最终问题解决&#xff0c;在此记录方法。 首先进入PyQt5-tools官网查看其适配的Python版本&#xff0c;网址如下&#xff1a; h…

38 Opencv HOG特征检测

文章目录 HOGDescriptor 构造函数setSVMDetector 设置支持向量机&#xff08;SVM&#xff09;检测器&#xff0c;用于目标检测。compute 用于计算图像区域的HOG描述符。detectMultiScale 多尺度检测目标。示例 HOGDescriptor 构造函数 HOGDescriptor(); HOGDescriptor(const S…

分布式搜索引擎之elasticsearch基本使用3

分布式搜索引擎之elasticsearch基本使用3 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&…

人工智能知识分享第九天-机器学习_集成学习

集成学习 概念 集成学习是机器学习中的一种思想&#xff0c;它通过多个模型的组合形成一个精度更高的模型&#xff0c;参与组合的模型称为弱学习器&#xff08;基学习器&#xff09;。训练时&#xff0c;使用训练集依次训练出这些弱学习器&#xff0c;对未知的样本进行预测时…

在线机考|2024华为实习秋招春招编程题(最新)——第3题_个性化歌单推荐系统_300分(十一)

题目内容 假设你是音乐服务的开发者,为了提高用户体验需要解决推荐歌单的同质化问题,保证推荐给用户的所有歌单不包含相同歌曲的。给定一个包含N个歌单和M条歌单重复记录,每个歌单用一个从1到N的整数编号,歌单重复记录包含两个歌单的ID,表示两个歌单有相同的歌曲。 你的任…

学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#xff1a;先看关键单词&#xff0c;再看英文&#xff0c;最后看中文总结&#xff0c;再回头看一遍英文原文&#xff0c;效果更佳&#xff01;&#xff01; 关键词 Functional Testing功能测试[ˈfʌŋkʃənəl ˈtɛstɪŋ]Sample样…

最新最详细的配置Node.js环境教程

配置Node.js环境 一、前言 &#xff08;一&#xff09;为什么要配置Node.js&#xff1f;&#xff08;二&#xff09;NPM生态是什么&#xff08;三&#xff09;Node和NPM的区别 二、如何配置Node.js环境 第一步、安装环境第二步、安装步骤第三步、验证安装第四步、修改全局模块…

PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)

文章目录 接收消息的原理接收消息JavaScript代码 接收消息的原理 接收消息&#xff0c;就是接受服务器转发的客户端消息。并不需要单独创建函数&#xff0c;因为 ws.onmessage会自动接收消息。我们需要在这个函数里进行处理。因为初始化的时候&#xff0c;已经处理的init类型的…