C 语 言 --- 二 维 数 组 的 应 用

C 语 言 --- 二 维 数 组 的 应 用

  • 第 一 题 - - - 冒 泡 排 序
    • 冒 泡 排 序
    • 冒 泡 排 序 的 原 理
  • 第 二 题 - - - 回 型 矩 阵
    • 特 点
  • 第 三 题 - - - 蛇 形 矩 阵
  • 总结

💻作者简介:曾 与 你 一 样 迷 茫,现 以 经 验 助 你 入 门 C 语 言
💡个人主页:@ 笑 口 常 开 xpr 的 个 人 主 页
📚系列专栏:C 启 新 程
✨代码趣语:世 上 只 有 两 种 编 程 语 言:一 种 是 总 是 被 人 骂 的,一 种是 从 来 没 人 用 的。
💪代码千行,始 于 坚 持 ,每 日 敲 码,进 阶 编 程 之 路。
📦gitee 链 接:gitee

在这里插入图片描述

       在 编 程 的 奇 妙 宇 宙 里,每 一 道 C 语 言 的 题 目 都 宛 如 一 颗 神 秘 的 星 辰 ,潜 藏 着 无 尽 的 解 题 思 路 和 创 新 可 能 。你 可 曾 在 夜 深 人 静 时 苦 思 冥 想,一 道 看 似 简 单 的 C 语言 题 目 背 后 ,究 竟 藏 着 怎 样 的 算 法 奥 秘 ?又 能 为 我 们 解 决 实 际 问题 带 来 怎 样 的 启 发 ?今 天 ,让 我 们 投 身 C 语 言 刷 题 海 洋,挖 掘 代 码 宝 藏 ,体 验 解 题 快 感,解 锁 其 无 限 潜 力,向 编 程 高 手 迈 进!

第 一 题 - - - 冒 泡 排 序

描 述:
首 先 输 入 一 个 整 数 n (0 < n <= 100),然 后 输 入 n 个 整 数(整 数 之 间 用 空 格 隔 开),程 序 将 对 所 输 入 的 整 数 进 行 排 序 操 作,排 序 规 则 为 升 序( 即 从 大 到 小),最 终 输 出 排 序 后 的 整 数 序 列。
输 入 描 述:
两 行 ,第 一 行 为 整 数 n ,第 二 行 为 n 个 整 数,中 间 用 空 格 隔 开。
输 出 描 述:
一 行,整 数 之 间 用 空 格 隔 开。
示 例 1 :
输 入 :1 2 3 4 5 6 7 8 9
输 出 :9 8 7 6 5 4 3 2 1
示 例 2 :
输 入 :1 2 5 6 8 7 9 9 10
输 出 :10 9 9 8 7 6 5 2 1

思 路 分 析:

         针 对 这 道 题 目,我 们 可 以 先 定 义 一 个 数 组,将 给 定 的 n 个 数 字 依 次 存 储 到 该 数 组 中 。随 后,运 用 函 数 来 完 成 排 序 操 作。在 此,我 们 以 冒 泡 排 序 算 法 为 例,对 数 组 中 的 数 字 进 行 从 大 到 小 排 序。

冒 泡 排 序

         冒 泡 排 序(Bubble Sort)是 一 种 基 础 的 排 序 算 法,它 的 基 本 思 想 就 如 同 水 中 的 气 泡 一 样,较 小 的 元 素 会 逐 渐 “ 浮 ” 到 数 组 的 顶 部 ( 即 数 组 的 前 面 ),而 较 大 的 元 素 则 会 “ 沉 ” 到 数 组 的 底 部( 即 数 组 的 后 面 )。具 体 来 说,冒 泡 排 序 会 重 复 地 走 访 过 要 排 序 的 数 列,一 次 比 较 两 个 元 素,如 果 它 们 的 顺 序 错 误(例 如 ,在 升 序 排 序 中 前 一 个 元 素 大 于 后 一 个 元 素),就 把 它 们 交 换 过 来。这 个 过 程 会 一 直 重 复,直 到 整 个 数 列 都 被 排 序 好。

冒 泡 排 序 的 原 理

比 较 相 邻 元 素
         从 数 组 的 第 一 个 元 素 开 始,依 次 比 较 相 邻 的 两 个 元 素。如 果 顺 序 错 误,则 交 换 它 们 的 位 置。

重 复 比 较

         对 数 组 中 的 每 一 对 相 邻 元 素 都 进 行 上 述 比 较 和 交 换 操 作,直 到 最 后 一 对 元 素。这 样,经 过 一 轮 比 较 后,最 大 的 元 素 就 会 被 移 动 到 数 组 的 末 尾。

缩 小 范 围

         排 除 已 经 排 好 序 的 最 后 一 个 元 素,对 剩 余 的 元 素 重 复 上 述 步 骤,直 到 整 个 数 组 都 被 排 序 好。

如 图 所 示 为 冒 泡 排 序 的 过 程:

在这里插入图片描述

温 馨 提 示:读 者 们 ,先 自 己 写 代 码,这 是 提 升 编 程 能 力 的 好 机 会。若 未 达 要 求 ,别 气 馁 ,参 考 下 文 代 码 会 有 新 收 获。

下 面 展 示 代 码 示 例

#include<stdio.h>
#include<string.h>
void sort(int arr[], int sz)
{int i = 0;int j = 0;for (i = 0;i < sz - 1;i++)//进行sz - 1次比较{for (j = 0;j < sz - 1 - i;j++)//进行sz - 1 - i已经排好的数{if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}
int main()
{int num = 0;scanf("%d", &num);int arr[100];memset(arr, 0, sizeof(arr));int i = 0;for (i = 0;i < num;i++){scanf("%d", &arr[i]);}int sz = num;sort(arr, sz);for (i = 0;i < sz;i++){printf("%d ",arr[i]);}return 0;
}

代 码 解 释:

冒 泡 排 序 函 数 sort

void sort(int arr[], int sz)
{int i = 0;int j = 0;for (i = 0; i < sz - 1; i++) // 进行 sz - 1 次比较{for (j = 0; j < sz - 1 - i; j++) // 进行 sz - 1 - i 次比较,排除已经排好的数{if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}

函 数 定 义

void sort(int arr[ ], int sz) 定 义 了 一 个 名 为 sort 的 函 数,它 接 受 一 个 整 型 数 组 arr 和 数 组 的 大 小 sz 作 为 参 数,不 返 回 任 何 值(void)。

外 层 循 环

       for (i = 0; i < sz - 1; i++) 控 制 排 序 的 轮 数,总 共 需 要 进 行 sz - 1 轮 排 序。因 为 每 一 轮 排 序 都 会 将 一 个 最 大 的 元 素 放 到 正 确 的 位 置,经 过 sz - 1 轮 后,整 个 数 组 就 会 有 序。

内 层 循 环

       for (j = 0; j < sz - 1 - i; j++) 用 于 比 较 相 邻 的 元 素 。随 着 外 层 循 环 的 进 行,已 经 排 好 序 的 元 素 会 越 来 越 多,所 以 内 层 循 环 的比 较 次 数 会 逐 渐 减 少(sz - 1 - i)。

元 素 交 换

         if(arr[ j ] > arr[ j + 1 ]) 判 断 相 邻 的 两 个 元 素,如 果 前 一 个 元 素 大 于 后 一 个 元 素,则 交 换 它 们 的 位 置,通 过 临 时 变 量 temp 实 现 交 换。**如 果 想 要 数 字 从 小 到 大 进 行 排 序,只 需 将 " > " 改 为 " < " 即 可。

第 二 题 - - - 回 型 矩 阵

描 述:
给 你 一 个 整 数 n,输 出 n ∗ n 的 回 型 矩 阵。
输 入 描 述 :
输 入 一 行,包 含 一 个 整 数 n
1 <= n <= 19
输 出 描 述 :
输 出 n 行,每 行 包 含 n 个 正 整 数.
示 例 :
输 入 :
4
输 出 :
  1   2   3 4
12 13 14 5
11 16 15 6
10   9   8 7

特 点

         回 型 矩 阵 的 特 点 是 从 外 向 内 一 圈 一 圈 地 填 充 数 字。我 们 可 以 按 照 顺 时 针 方 向,从 矩 阵 的 最 外 层 开 始,逐 步 向 内 层 填 充 数 字。

确 定 边 界:定 义 矩 阵 的 四 个 边 界,分 别 是 上 边 界 top、下 边 界 bottom、左 边 界 left 和 右 边 界 right。初 始 时,top = 0,bottom = n - 1,left = 0,right = n - 1。​

填 充 方 向:按 照 顺 时 针 方 向 填 充,即 先 从 左 到 右 填 充 上 边 界 ,然 后 从 上 到 下 填 充 右 边 界,接 着 从 右 到 左 填 充 下 边 界,最 后 从 下 到 上 填 充 左 边 界。每 次 填 充 完 一 圈 后,将 边 界 向 内 收 缩,即 top++,bottom–,left++,right–。​

填 充 数 字:使 用 一 个 变 量 num 来 记 录 当 前 要 填 充 的 数 字,初 始 值 为 1。在 每 次 填 充 时 ,将 num 的 值 赋 给 当 前 位 置 的 矩 阵 元 素,并 将 num 自 增 1。

温 馨 提 示:读 者 们 ,先 自 己 写 代 码,这 是 提 升 编 程 能 力 的 好 机 会。若 未 达 要 求 ,别 气 馁 ,参 考 下 文 代 码 会 有 新 收 获。

下 面 展 示 代 码 示 例

#include<stdio.h>
#define ROW 100
#define COL 100
void back(int num1)
{int arr1[ROW][COL] = { 0 };int top = 0;int bottom = num1 - 1;int left = 0;int right = num1 - 1;int num = 1;int i = 0;while (left <= right && top <= bottom){//从左向右填充上边界for (i = left;i <= right;i++){arr1[top][i] = num++;}top++;//从上向下填充右边界for (i = top;i <= bottom;i++){arr1[i][right] = num++;}right--;//从右向左填充下边界for (i = right;i >= left;i--){arr1[bottom][i] = num++;}bottom--;//从下向上填充左边界for (i = bottom;i >= top;i--){arr1[i][left] = num++;}left++;}for (i = 0;i < num1;i++){int j = 0;for (j = 0;j < num1;j++){printf("%3d ", arr1[i][j]);}printf("\n");}
}
int main()
{int num1 = 0;scanf("%d", &num1);back(num1);
}

开 头

  • #include<stdio.h> 引 入 输 入 输 出 库,供 printf、scanf 使 用。​
  • #define ROW 100 和 #define COL 100设 数 组 arr1 行 列 数,能 存 n ≤ 100 的 矩 阵。​

back 函 数:​

  • void back(int num1) 负 责 生 成、输 出 矩 阵,num1 为 矩 阵 大 小 n。​
  • 定 义 int arr1[ROW][COL] = { 0 }; 存 矩 阵,初 始 全 为 0。​
  • 初 始 化 边 界 top = 0、bottom = num1 - 1、left = 0、right = num1 - 1,num = 1 记 填 充 数,i 作 循 环 变 量。​

生 成 矩 阵

  • while (left <= right && top <= bottom) 为 循 环 核 心,确 保 各 圈 正 确 填 充。​
  • 4 个 for 循 环 依 次 填 充 上、右、下、左 边 界,每 圈 结 束 边 界 收 缩。​

输 出 矩 阵

用 嵌 套 for 循 环 输 出,外 层 控 行,内 层 控 列,以 宽 度 3 格 式 输 出 并 换 行。​

main 函 数

  • 定 义 int num1 = 0; 存 输 入 的 n。​
  • 用 scanf(“%d”, &num1); 读 n。​
  • 调 用 back(num1) 生 成 输 出 矩 阵,return 0; 结 束 程 序。​

上 述 代 码 的 改 进:

#include<stdio.h>
#define ROW 100
#define COL 100
void back(int num1)
{int arr1[ROW][COL] = { 0 };int top = 0;int bottom = num1 - 1;int left = 0;int right = num1 - 1;int num = 1;int i = 0;while (left <= right && top <= bottom){//从左向右填充上边界for (i = left;i <= right;i++){arr1[top][i] = num++;}top++;//从上向下填充右边界for (i = top;i <= bottom;i++){arr1[i][right] = num++;}right--;if (top <= bottom){//从右向左填充下边界for (i = right;i >= left;i--){arr1[bottom][i] = num++;}bottom--;}if (left <= right){//从下向上填充左边界for (i = bottom;i >= top;i--){arr1[i][left] = num++;}left++;}}for (i = 0;i < num1;i++){int j = 0;for (j = 0;j < num1;j++){printf("%2d ", arr1[i][j]);}printf("\n");}
}
int main()
{int num1 = 0;scanf("%d", &num1);back(num1);
}

第 三 题 - - - 蛇 形 矩 阵

描 述:
给 你 一 个 整 数 n,输 出 n ∗ n 的 蛇 形 矩 阵。
输 入 描 述 :
输 入 一 行,包 含 一 个 整 数 n
输 出 描 述 :
输 出 n 行,每 行 包 含 n 个 正 整 数,通 过 空 格 分 隔。
1 <= n <= 1000
示 例 :
输 入 :
4
输 出 :
  1  2   6    7
  3  5   8  13
  4  9  12 14
10 11 15 16

温 馨 提 示:读 者 们 ,先 自 己 写 代 码,这 是 提 升 编 程 能 力 的 好 机 会。若 未 达 要 求 ,别 气 馁 ,参 考 下 文 代 码 会 有 新 收 获。

下 面 展 示 代 码 示 例

#include<stdio.h>
#define ROW 100
#define COL 100
void snake(int num) 
{int arr[ROW][COL] = { 0 };int i = 0;int j = 0;int num1 = 1;int derection = 0;i = 0;j = 0;while (num1 <= num * num) {arr[i][j] = num1++;//右上方向if (derection == 0) {if (i == 0 && j < num - 1) {j++;//到达上边界,右移derection = 1;}else if (j == num - 1) {i++;//到达右边界,下移derection = 1;}else {i--;j++;}}//左下方向else {if (j == 0 && i < num - 1) {i++;//到达左边界,下移derection = 0;}else if (i == num - 1) {j++;//到达下边界,右移derection = 0;}else {i++;j--;}}}for (i = 0; i < num; i++) {for (j = 0; j < num; j++) {printf("%d ", arr[i][j]);}printf("\n");}
}
int main() 
{int num = 0;scanf("%d", &num);snake(num);return 0;
}

头 文 件 与 宏 定 义

  • #include <stdio.h> 引 入 输 入 输 出 库
  • #define ROW 100 和 #define COL 100 设 定 存 储 矩 阵 的 二 维 数 组 大 小。

snake 函 数

         void snake(int num) 负 责 生 成 矩 阵。内 部 定 义 二 维 数 组 arr 并 初 始 化 为 0,初 始 化 行 索 引 i、列 索 引 j、填 充 数 字 num1(初 始 值 1)和 方 向 标 志 derection(0 为 右 上,1 为 左 下)。​

矩 阵 填 充 循 环

       while (num1 <= num * num) 确 保 矩 阵 完 整 填 充。通 过 derection 判 断 方向,按 右 上 或 左 下 方 向 填 充,遇 边 界 则 改 变 方 向 和 移 动 方 式。​

矩 阵 输 出

嵌 套 for 循 环 遍 历 arr,输 出 矩 阵 元 素 并 换 行 展 示 。​

main 函 数

         定 义 num 存 储 输 入 矩 阵 大 小,用 scanf 获 取 输 入,调 用 snake(num) 生 成 输 出 矩 阵,最 后 return 0 结 束 程 序。

在这里插入图片描述

总结

       至 此,关 于 C 语 言 的 探 索 暂 告 一 段 落 ,但 你 的 编 程 征 程 才 刚 刚 启 航。写 代 码 是 与 机 器 深 度 对 话 ,过 程 中 虽 会 在 语 法 、算 法 困 境 里 挣 扎,但 这 些 磨 砺 加 深 了 对 代 码 的 理 解。愿 你 合 上 电 脑 后,灵 感 不 断,在 C 语 言 的 世 界 里 持 续 深 耕,书 写 属 于 自 己 的 编 程 传 奇,下 一 次 开 启 ,定 有 全 新 的 精 彩 等 待。小 编 期 待 重 逢,盼 下 次 阅 读 见 你 们 更 大 进 步,共 赴 代 码 之 约!

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

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

相关文章

微信小程序实现根据不同的用户角色显示不同的tabbar并且可以完整的切换tabbar

直接上图上代码吧 // login/login.js const app getApp() Page({/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad(options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函…

CTA重建:脑血管重建,CT三维重建,三维建模 技术,实现

CTA&#xff08;CT血管造影&#xff09;是一种基于CT扫描的医学成像技术&#xff0c;主要用于血管系统的三维重建和可视化。脑血管重建是CTA的重要应用之一&#xff0c;能够帮助医生诊断脑血管疾病&#xff08;如动脉瘤、狭窄、畸形等&#xff09;。以下是实现CTA脑血管重建、C…

告别XML模板的繁琐!Word文档导出,easy!

word模板导出 最近项目中有个功能&#xff0c;导出月报&#xff0c;发现同事使用了docx格式模板,感觉比之前转成xml的简单多了&#xff0c;这边记录下使用方法。 xml方式导出word,模板太复杂了 资料 poi-tl 一个基于Apache POI的Word模板引擎&#xff0c;也是一个免费开源的Jav…

Vue 过滤器深度解析与应用实践

文章目录 1. 过滤器概述1.1 核心概念1.2 过滤器生命周期 2. 过滤器基础2.1 过滤器定义2.2 过滤器使用 3. 过滤器高级用法3.1 链式调用3.2 参数传递3.3 动态过滤器 4. 过滤器应用场景4.1 文本格式化4.2 数字处理4.3 数据过滤 5. 性能优化与调试5.1 性能优化策略5.2 调试技巧 6. …

ST电机库电流采样 三电阻单ADC

一、概述 下图是三电阻采样的电路结构 其中流过三相系统的电流I1、I2、I3遵循以下关系: 因此,为了重建流过普通三相负载的电流,在我们可以用以上公式计算的情况下,只需要对三相中的两相进行采样即可。 STM32的ADC可以很灵活的配置成同步采集两路ADC数据,…

【测试篇】打破测试认知壁垒,从基础概念起步

前言 &#x1f31f;&#x1f31f;本期讲解关于测试的基本概念相关知识介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话…

SpringBoot MCP 入门使用

随着AI的火爆&#xff0c;最近发现MCP在未来确实大有可为&#xff0c;作为一名javaer怎么可以落后在历史洪流呢&#xff0c;根据官网和cursor也从零开始体验一下自定义mcp server。以后可以根据自己业务场景做出各种适合自身业务的工具。 至于什么是MCP 可以到https://modelcon…

@Autowired和@Resource的区别是?

前情回顾 正确使用Autowired Autowired 注解在构造器上的使用规则&#xff08;字段注入也挺好的&#xff09; 正确使用Resource 来源不同 Autowired的“爹”是Spring Resource的“爹”是Java&#xff08;JSR-250&#xff09; 这是一个规范&#xff0c;Spring对这个注解进行…

3.9/Q2,Charls最新文章解读!

文章题目&#xff1a;Association between remnant cholesterol and depression in middle-aged and older Chinese adults: a population-based cohort study DOI&#xff1a;10.3389/fendo.2025.1456370 中文标题&#xff1a;中国中老年人残留胆固醇与抑郁症的关系&#xff1…

无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战

一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏&#xff1a; 流量入口层&#xff1a;用户访问域名解析至高防CNAME节点&#xff08;如ai-protect.example.com&#xff09;智能调度层&#xff1a;基于AI模型动态分配清洗节点&#xff0c;实时更新节点IP池回…

项目开发 1-确定选题,制作原型

一、AI问答 问&#xff1a; 作为计算机专家&#xff0c;密码学家&#xff0c;给研究生一年级学生设计20个实践项目&#xff0c;具体要求如下&#xff1a; 一. 总体要求 必须使用 Linux 系统调用&#xff0c;要求使用文件I/O,多进程或多线程&#xff0c;一定要用到 Socket 系统…

使用SetupTools 管理你的项目打包工作

Setuptools 是一个用于 Python 的包管理工具&#xff0c;主要用于构建、打包和分发 Python 软件包。它是 distutils 的增强版&#xff0c;提供了更多的功能和灵活性&#xff0c;是 Python 包管理的核心模块之一。 功能与特点 依赖管理&#xff1a;Setuptools 提供了强大的依赖…

人工智能与人的智能,改变一生的思维模型【8】逆向思维

逆向偏差思维模型&#xff1a;顶尖高手如何「反常识」破局 &#xff08;斯坦福决策科学中心认证的逆向思考框架&#xff09; 一、直击本质&#xff1a;什么是逆向偏差思维&#xff1f; 定义&#xff1a; 逆向偏差思维是一种主动对抗本能认知倾向的决策模式&#xff0c;通过系…

YOLO优化之扫描融合模块(SimVSS Block)

研究背景 在自动驾驶技术快速发展的背景下,目标检测作为其核心组成部分面临着严峻挑战。 驾驶场景中目标尺度和大小的巨大差异 ,以及 视觉特征不显著且易受噪声干扰 的问题,对辅助驾驶系统的安全性构成了潜在威胁。 传统的卷积神经网络(CNN)虽然在目标检测领域取得了显著…

(全)2024下半年真题 系统架构设计师 综合知识 答案解析01

系统架构设计师第二版教程VIP课程https://edu.csdn.net/course/detail/40283 操作系统 下列选项中不能作为预防死锁措施的是 。 A. 破坏“循环等待"条件 B. 破坏“不可抢占”条件 C. 破坏“互斥”条件 D. 破坏“请求和保持”条件 答案&#xff1a;C 解析&…

通义万相 2.1 + 蓝耘算力,AI 视频生成的梦幻组合

在这个科技日新月异的时代&#xff0c;人工智能不断刷新着我们对世界的认知。一次偶然的机会&#xff0c;我借助北京蓝耘科技股份有限公司提供的算力支持&#xff0c;踏上了使用通义万相 2.1 进行 AI 视频生成的奇妙之旅。 目录 1.1初遇蓝耘科技&#xff1a; 1.2通义万相 2.1…

链表·简单归并

cur->next la; //将 p指针所指向的链表节点的 next 指针&#xff08;也就是 p 节点的下一个节点的指针&#xff09;指向 l1 所指向的链表节点。简单来说&#xff0c;就是把 la 节点连接到 p 节点的后面&#xff0c;更新了链表的连接关系。 p la; //将p指针的值更新为 la …

kmp报错→Cannot find skiko-windows-x64.dll.sha256

1、前言 学习kmp&#xff08;Kotlin MultiPlatform简称&#xff09;过程中报了错误&#xff0c;这个报错在直接运行desktop的main方法才会出现&#xff0c;用gradle运行却不会报错&#xff0c;新建的kmp项目也不会出现&#xff0c;我学习的写了一些代码的项目才会出现。   运…

MySQL(事物下)

目录 一 多版本并发控制&#xff08; MVCC &#xff09;是一种用来解决 读-写冲突 的无锁并发控制 1. 前置知识 示例&#xff1a; 二 Read View 1. 当事物进行快照读(读历史数据)会MySQL会创建一个Read Vidw类对象&#xff0c;用来记录和当前一起并发的事物(活跃的事物)&a…

星型组网模块的两种交互方式优缺点解析

星型组网模块简介 星型组网模块工作在433MHz频段&#xff1b;星型组网模块集主机&#xff08;协调器&#xff09;、终端为一体&#xff0c;星型组网模块具有长距离、高速率两种传输模式&#xff0c;一个主机&#xff08;协调器&#xff09;支持多达200个节点与其通讯&#xff0…