题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1,2,3]
[4,5,6]
[7,8,9]
]
给定 n = 7,返回 true。
给定 n = 3,返回 false
解题过程加代码
首先看题目给出的是一个有顺序的数组,利用这个有序的二维数组可以很容易遍历出想要查找的那个数。先上代码一边看一边清晰思路。

#include <stdio.h>
int add(int arr[][3], int x, int y, int n)//函数的形参为:数组,行数,列数,还有n。
{int i = 0;//把i赋值为0数组的第一行int j = y - 1;//把列数赋值给j这里要-1,不-1会越界访问。while (i<=x && j>=0){if (arr[i][j] < n)//先从第一行的最后一个值来进行比较。如果小于目标值,行数加1.{i++;}else if (arr[i][j] > n)//如果大于要找的目标值,列数-1。{j--;}else//相等返回0.{return 1;}}return 0;//遍历了整个数组都没有找到目标值返回0.
}
int main()
{int arr[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };//创建一个有序的二维数组int n = 0;//创建一个变量nscanf("%d", &n);//输入n,代表你想要找的那个数。if (add(arr, 3, 3, n))//利用if判断这个函数返回值是1的话代表数组中有n这个数字。{printf("存在\n");}else{printf("不存在\n");}return 0;
}

记住题目给出的数组条件,我们来看图来理解一下代码执行的过程。
1.创建一个二维数组

2.创建输入要查找的变量n

3.进入函数赋值i与j,第一次循环从第一行的最后一位开始

4.循环内比较arr[i][j]的值<n,i++,i++后指向下一个行最后一个的位置。

5.然后再次判断进入第二次循环比较,比较结果还是小于,i再++,找到下一个位置。

6.此时再次判断是结果不是小于了是大于,大于就证明要找的数在这一行,j–,为什么呢,因为上一次判断n大于上一行最大的那个数字,这一判断又小于这一行最大的数字所以n一定在这行中j–,来查找这一行剩下的数。

7.此时判断还是大于所以再j–。

最后成功找到,函数返回了1主函数内if判断条件成立找到了。

c语言题之二维数组的查找相关推荐

  1. 数据结构与算法--数组:二维数组中查找

    数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存.即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存, ...

  2. C语言4种二维数组三角题

    C语言4种二维数组三角题 此处都以将此三角形的元素乘以n为例 int i,j; for(i=0;i<N;i++) //行编译总是不变 for(j=0;*j<=i*;j++)a[i][j]= ...

  3. c语言动态生成二维数组,C语言 动态创建二维数组

    /*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include #include #include #define RANK 10 #define COLUMN ...

  4. C语言指针和二维数组

    二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 a 为例: int a[3][4] = { {0, 1, 2, ...

  5. c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc

    C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...

  6. (c语言)编程输出二维数组中元素的最大值,要求用指针实现。

    (c语言)编程输出二维数组中元素的最大值,要求用指针实现. #include<stdio.h> #include<stdlib.h> #define N 6 //行数 #def ...

  7. 二维数组在c语言中的作用,C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

  8. c语言二维数组对角线输出字符,用C编程一个4*4的矩阵,用二维数组,求对角线元素的和。,c语言如何使二维数组 输出为矩阵的形式...

    导航:网站首页 > 用C编程一个4*4的矩阵,用二维数组,求对角线元素的和.,c语言如何使二维数组 输出为矩阵的形式 用C编程一个4*4的矩阵,用二维数组,求对角线元素的和.,c语言如何使二维数 ...

  9. c语言字符二维数组传参,C语言函数传递二维数组

    C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...

最新文章

  1. AI一分钟 | 传许家印已投资贾跃亭FF;腾讯将发布可接收微信的智能音箱;阿里确认研发自动驾驶技术
  2. tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率 损失率,便于判断模型的训练效果:是过拟合还是欠拟合(过拟合)
  3. 全国计算机等级考试三级网络技术考试大纲
  4. python查题_python 数据库连表查询习题
  5. Atitit. 订单管理 收银单持久化 功能设计  基于ecshop订单结构
  6. 2022-03-17
  7. c语言无效参数视为严重错误,C语言编译错误:错误:‘-’参数类型无效(有‘int’)...
  8. Waymo 2020 | 2D/3D目标检测、跟踪和域自适应性冠军解决方案解析
  9. vue中通过js控制页面样式方法
  10. 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 1
  11. linux Pci字符驱动基本加载流程
  12. [Web Chart系列之五] 图形布局-Circle Layout 之实现
  13. python和c 的区别-Python和c语言的主要区别在哪
  14. 服务器芯片组 硒武,不到两个月的服务器,武器炼化出这属性是什么水平?
  15. OSX 安装配置Maven
  16. 模块度Q——复杂网络社区划分评价标准
  17. python web面试题部分汇总
  18. 微信小程序开发之实现一个弹幕评论
  19. 计算机开机硬盘扫描,电脑开机出现磁盘扫描故障的原因及解决妙招
  20. VMWare连接外网的配置操作

热门文章

  1. 安装 CentOS 7 后必做的七件事
  2. IDEA build委托到Maven build
  3. 什么样的软件算是功能安全软件?
  4. 用友U8各版本操作系统是数据库支持情况
  5. 智慧城市总体解决方案和建设思路
  6. 1.我所了解的内网渗透
  7. 黑群晖给局域网电脑发消息_在局域网内怎么用CMD和别的电脑发消息?
  8. 图像去模糊算法代码实践!
  9. WebService(CXF对外发布WebService服务)(1)
  10. 传统ERP软件如何SaaS化?