当前位置: 首页 > news >正文

【C语言学习笔记】:数组倒序排列,数组倒置

数组倒置就是将数组元素中的数据倒过来!

举个例子,比如下面程序:

#include <stdio.h>int main(void) {    int a[5] = {1, 2, 3, 4, 5};    int b[5];  //用来存放倒置后的数据    int i, j;    for (i=0, j=4; i<5, j>=0; ++i, --j)    {        b[i] = a[j];        printf("%d\n", b[i]);    }    return 0;}​​​​​​​

----------------------

输出结果是:

5

4

3

2

1

----------------------

此程序中,for 循环括号中的写法是正确的。之前讲过,for 循环的格式为:

for (表达式1;表达式2;表达式3)

这只是一般的形式。以表达式 1 为例,它是一个“整体”,它可以是一个表达式,也可以是多个表达式,如果是多个表达式就用逗号隔开,如程序中那样。但是如果表达式间用分号隔开就不能看成一个“整体”,即只能看成一个表达式了,如上面的“表达式 1;表达式 2;表达式 3”。

但是上面这个程序还不能称得上完美。程序中,完成相同功能执行的步数越少,算法就越好,效率也就越高。上面这个算法是完全的“复制”,数组有几个元素就执行多少次。其实有更好的算法,只需要上面算法执行步数的一半就能完成任务,即互换思想。

要完成倒置的功能,只需要第一个元素和最后一个元素交换、第二个元素和倒数第二个元素交换、第三个元素和倒数第三个元素交换……不管数组元素的个数是奇数还是偶数,这个算法都是成立的。如果是偶数那么每个元素都有机会交换;如果是奇数,那么最中间的那个元素就不交换。

----------------------

下面将数组加长,再将这种算法的程序给大家写一下:​​​​​​​

#include <stdio.h>int main(void){    int a[23] = {1,5,66,8,55,9,1,32,5,65,4,8,5,15,64,156,1564,15,1,8,9,7,215};    int i = 0;  //循环变量1, i的值为数组第一个元素的下标    int j = 22;  //循环变量2, j的值为数组最后一个元素的下标    int buf;  //互换时的中间存储变量    for (; i<j; ++i, --j)  /*因为i和j已经初始化过了, 所以表达式1可以省略, 但表达式1后面的分号不能省。*/    {        buf = a[i];        a[i] = a[j];        a[j] = buf;    }    for (i=0; i<23; ++i)    {        printf("%d\x20", a[i]);  //\x20表示空格    }    printf("\n");    return 0;}

----------------------

输出结果是:

215 7 9 8 1 15 1564 156 64 15 5 8 4 65 5 32 1 9 55 8 66 5 1

----------------------

http://www.lryc.cn/news/4410.html

相关文章:

  • sni+tomcat漏洞复现
  • Linux ALSA 之十:ALSA ASOC Machine Driver
  • Spring 面试题(一):Spring 如何处理全局异常?
  • Threadlocal为何引发内存泄漏问题
  • 如何写好 Python 的 Lambda 函数?
  • 大数据技术架构(组件)32——Spark:Spark SQL--Execute Engine
  • Leetcode.1138 字母板上的路径
  • 一个自动配置 opengrok 多项目的脚本
  • JAVA同步代码块 同步方法
  • 分享111个助理类简历模板,总有一款适合您
  • Allegro如何更改临时高亮的颜色设置操作指导
  • 知识图谱嵌入技术研究综述
  • Scratch少儿编程案例-水果忍者-超完整
  • 练 习
  • Urho3D整体结构
  • 大数据技术之Hudi
  • libxlsxwriter条件格式
  • nodejs+vue+elementui在线求助系统vscode
  • 电子技术——BJT差分输入对
  • [MySQL教程②] - MySQL介绍和发展史
  • 多表查询--实例
  • Differentially Private Grids for Geospatial Data
  • Java学习记录day8
  • Solon2 开发之容器,三、注入或手动获取 Bean
  • 微信小程序_调用openAi搭建虚拟伙伴聊天
  • 硬件工程师入门基础知识(一)基础元器件认识(一)
  • TCP的运输连接管理
  • 地级市用电、用水、用气数据指标
  • 安装deepinlinuxV20.8配置docker和vscode开发c语言
  • java08-面向对象3