使用C语言函数对数组进行操作

        前言

        在我们了解数组和函数之后,我们对数组和函数进行结合,之后完成一些操作吧

        题目描述

        杰克想将函数与数组结合进行一些操作,以下是他想要达到的效果,请你帮帮他吧!

        创建一个整型数组,完成对数组的操作

        1.实现函数init(),初始化数组全为0。

        2.实现函数print(),打印数组每个元素。

        3.实现函数reverse(),完成数组元素的逆置。

        输入描述:

        无

        输出描述:

        三行,第一行打印数组每个元素,第二行逆置,第三行初始化

        题目分析

        我们来分析一下这道题目,我们需要先定义一个数组,但是题目中没有要求,我们就定义数组arr={5,2,0,1,3,1,4},哎,这里也和代码浪漫一下吧,博主也只能如此了。

        我们看看第一条要求,我们需要对数组进行初始化,使用init函数实现,在这个时候,我们需要想到初始化数组的时候我们需要遍历数组之后将0赋予数组中的元素,所以这里我们需要for循环来实现,但是我们不知道数组中的元素个数啊,我们需要使用sizeof操作符来实现对我们数组元素的计算,如果有小伙伴对sizeof操作符的使用方法不太理解可以翻翻博主之前的博客哦。

        第二条要求是打印数组中的元素,这个就简单了,我们使用for循环直接打印就好啦。

        第三条要求我们完成数组元素的逆置,这里我们就需要动点脑筋了,我们需要置换数组中的元素,再来一遍,上图!!!

        

        如图所示3步走,之后就可以逆置得到我们想要的数组了,话不多说了,上代码

        代码展示

        

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//初始化函数
void init(int arr[], int sz)
{int i;for (i = 0;i < sz;i++){arr[i]=0;}
}
//输出函数
void print(int arr[], int sz)
{int i;for (i = 0;i < sz;i++){printf("%d", arr[i]);}printf("\n");
}
//逆置函数
void reserve(int arr[], int left,int right)
{//注意,这里我们应该先判断之后再置换,不能等到置换结束之后再判断,这样会导致程序bugif (left < right){char tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;reserve(arr, left + 1, right - 1);}
}
int main()
{int arr[] = { 5,2,0,1,3,1,4 };//计算数组中元素个数int sz = sizeof(arr) / sizeof arr[0];int right = sz - 1;int left = 0;print(arr, sz);reserve(arr, left,right);print(arr, sz);init(arr, sz);print(arr, sz);return 0;
}

        代码解析

        我们先来看看主函数,我们定义数组,之后计算数组中元素个数,之后我们注意,在我们传参的时候在init函数和print函数中只需要将数组的首地址和数组中元素个数传输过去,但是在逆置函数reverse中我们需要将数组元素的左右下标定义好之后进行传参。

        注意啦,在这里我们使用reserve函数的时候我们需要先判断数组中元素左下标是否小于右下标,我们不能将判断放在置换之后,这样的话会发生一个问题,什么问题呢,就是当我们输入的数组元素个数是偶数的时候,在最后一步会发生两次置换,以520131为例,如果我们输入数组中元素是520131的话,置换后的结果就会变为130125,我们会发现01的位置没有改变,这里其实是发生了两次置换,当我们数组中元素置换为131025的时候中间元素再次进行了置换,这里我们就会发现,唉,这个代码是有问题的。

        

        修正:

        

        

        运行结果

        

        

        兄弟们,今天就到这里喽,大家如果有不了解的问题,评论区我随时都在哦,欢迎大家评论区留言嘞!!!

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

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

相关文章

签约速递 | 看零信任如何打造安全互联的数字底座?

近期&#xff0c;易安联再传佳音&#xff0c;签约南通市公安局、隆基绿能科技股份有限公司、南京体育学院等&#xff0c;持续为客户提供功能更完善、体验更好的零信任安全解决方案&#xff0c;赋能千行百业数字化转型升级&#xff0c;共创网络安全繁荣生态。 南通市公安局 数字…

c语言:getchar()和getch()的区别

1.getchar( ): 使用getchar( )函数读取键盘输入时&#xff0c;只有用户敲击回车键后&#xff0c;getchar( )函数才会返回字符。getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区(输入缓冲区)中.直到用户按回车为止(回车字…

K-means聚类算法的原理、应用与实例

文章目录 K-means 聚类算法&#xff1a;原理K-means 聚类算法的应用K-means 聚类算法的优化与改进 一个使用 K-means 聚类算法进行客户细分的简单实例 K-means 聚类算法&#xff1a;原理 K-means 算法是一种经典的无监督学习方法&#xff0c;用于对未标记的数据集进行分群&…

智慧公厕是智慧城市建设中不可或缺的一部分

智慧城市的数字化转型正在取得显著成效&#xff0c;各项基础设施的建设也在迅速发展&#xff0c;其中智慧公厕成为了智慧城市体系中不可或缺的一部分。作为社会生活中必要的设施&#xff0c;公共厕所的信息化、数字化、智慧化升级转型能够实现全区域公共厕所管理的横向打通和纵…

数据处理-pandas之多sheet专题

pandas读取具有多个sheet的xlsx文件 import pandas as pddf1 pd.read_excel(data_path, sheet_nameNone) df2 pd.read_excel(data_path) print(df1.keys()) print(df2.keys())两个print不一样&#xff0c;如果不设定sheet_name为None&#xff0c;默认指读取一个sheet&#x…

PostgreSQL介绍

PostgreSQL是一个高度先进的对象关系型数据库管理系&#xff08;ORDBMS&#xff09;&#xff0c;其起源可以追溯到1986年&#xff0c;最初是加州大学伯克利分校计算机系的一个项目&#xff0c;名为POSTGRES。它是从Ingres项目演变而来的&#xff0c;目的是克服当时关系数据库系…

macOS 启动 Nacos(2),50家大厂面试万字精华总结

进来之后一定要选择支持 arm64 的版本不然会出现因为版本不支持导致无法启动 WARNING: The requested images platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested点击 copy docker pull nacos/naco…

Blender2.83 下载地址及安装教程

Blender是一款开源的3D计算机图形软件&#xff0c;广泛应用于动画制作、游戏开发、建模、渲染等领域。它提供了一套强大的工具和功能&#xff0c;让用户能够进行三维建模、动画制作和视觉效果的创作。 Blender支持多种文件格式的导入和导出&#xff0c;使用户能够与其他软件进…

Java中的Lambda表达式和例子

在Java中&#xff0c;Lambda表达式是一种简洁地表示实例化一个只有一个抽象方法的接口&#xff08;函数式接口&#xff09;的方式。它使得代码更加简洁和易读&#xff0c;特别是在处理函数式编程和集合操作时。Lambda表达式的主要组成部分包括参数列表、箭头&#xff08;->&…

Redis从入门到精通(七)Redis实战(四)库存超卖、一人一单与Redis分布式锁

↑↑↑请在文章开头处下载测试项目源代码↑↑↑ 文章目录 前言4.3 优惠券秒杀4.3.4 库存超卖问题及其解决4.3.4.1 问题分析4.3.4.2 问题解决 4.3.5 一人一单需求4.3.5.1 需求分析4.3.5.2 代码实现4.3.5.3 并发问题4.3.5.4 悲观锁解决并发问题4.3.5.5 集群环境下的并发问题 4.4 …

最新版手机软件App下载排行网站源码/App应用商店源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 一款简洁蓝色的手机软件应用app下载排行&#xff0c;app下载平台&#xff0c;最新手机app发布网站响应式织梦模板。 主要有&#xff1a;主页、app列表页、app介绍详情页、新闻资讯列…

Linux中磁盘的分区,格式化,挂载和文件系统的修复

一.分区工具 1.分区工具介绍 fdisk 2t及以下分区 推荐 (分完区不保存不生效&#xff0c;有反悔的可能) gdisk 全支持 推荐 parted 全支持 不推荐 ( 即时生效&#xff0c;分完立即生效) 2.fdisk 分区,查看磁盘 格式:fdisk -l [磁盘设备] fdisk -l 查看…

网络协议——RSTP(快速生成树)与MSTP(多实例生成树)

一. RSTP 1. STP的不足 1、依靠计时器超时的方式进行收敛导致它的收敛时间需要30到50秒 2、端口状态和端口角色没有细致区分&#xff0c;指导数据转发依靠的不是端口状态而是端口所扮演角色。 3、如果拓扑频繁变化导致用户通信质量差&#xff0c;甚至通信中断&#xf…

详解cmake简单语法与使用

注意&#xff1a;这是一篇cmake入门浅显的文章&#xff0c;深入学习的话没必要阅读。 CMake的使用流程及其语法非常丰富&#xff08;其实就是过于灵活&#xff0c;一个项目一个风格&#xff0c;看上去相当麻烦&#xff09;&#xff0c;下面逐步介绍一些核心概念和常用命令&…

排序:冒泡排序,直接插入排序,简单选择排序,希尔排序,快速排序,堆排序,二路归并排序

目录 一.冒泡排序 代码如下 冒泡排序时间复杂度分析 二.直接插入排序 直接插入排序时间复杂度分析 直接插入排序优化&#xff1a;折半插入排序 三.简单选择排序 简单选择排序优化&#xff1a;双向选择排序 选择排序时间复杂度 双向选择排序时间复杂度 四.希尔排序 希…

rust学习(recursive mutex 实现)

问题&#xff1a; 编写如下代码的时候出现死锁&#xff1a; pub fn test_double_lock() {let t Arc::new(Mutex::new(1));let t1 t.clone();let t2 t.clone();let h std::thread::spawn(move || {println!("hello trace1");let l1 t1.lock().unwrap();println…

达梦的归档日志参数ARCH_RESERVE_TIME测试

达梦的参数ARCH_RESERVE_TIME测试 前面有提到和oracle相比&#xff0c;达梦的归档日志相关参数有个比较特别&#xff0c;可以通过设置它去规定归档日志的保留时间。 ARCH_RESERVE_TIME&#xff1a;归档日志保留时间&#xff0c;单位分钟&#xff0c;取值范围 0~2147483647。只…

黄金白银价格上涨是投资机会吗?

黄金和白银&#xff0c;作为历史悠久的贵重金属&#xff0c;一直以来都被投资者视为避险资产。近年来&#xff0c;随着全球经济环境的变动&#xff0c;我们观察到黄金与白银的价格不断攀升&#xff0c;这是否预示着投资机会的到来&#xff1f;今天&#xff0c;就让我们来深度探…

R+VIC模型融合实践技术应用及未来气候变化模型预测

在气候变化问题日益严重的今天&#xff0c;水文模型在防洪规划&#xff0c;未来预测等方面发挥着不可替代的重要作用。目前&#xff0c;无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然&#xff0c;这些软件有各自的优点&#xff1b;但是&am…

如何在 Ubuntu 14.04 上使用 Rsyslog、Logstash 和 Elasticsearch 实现日志集中管理

Elastic 的一篇文章 介绍 理解组织生成的数百万条日志行可能是一个艰巨的挑战。一方面&#xff0c;这些日志行提供了对应用程序性能、服务器性能指标和安全性的视图。另一方面&#xff0c;日志管理和分析可能非常耗时&#xff0c;这可能会阻碍对这些日益必要的服务的采用。 …