精华内容
下载资源
问答
  • 例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家长想知道他的孩子是否进入了实验班,只要提供孩子的编号就可以,如果编号和数组中的某个元素相等,就进入了...

    在实际开发中,经常需要查询数组中的元素。例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家长想知道他的孩子是否进入了实验班,只要提供孩子的编号就可以,如果编号和数组中的某个元素相等,就进入了实验班,否则就没进入。

    不幸的是,C语言标准库没有提供与数组查询相关的函数,所以我们只能自己编写代码。

    对无序数组的查询

    所谓无序数组,就是数组元素的排列没有规律。无序数组元素查询的思路也很简单,就是用循环遍历数组中的每个元素,把要查询的值挨个比较一遍。请看下面的代码:

    #include

    int main(){

    int nums[10] = {1, 10, 6, 296, 177, 23, 0, 100, 34, 999};

    int i, num, thisindex = -1;

    printf("Input an integer: ");

    scanf("%d", &num);

    for(i=0; i<10; i++){

    if(nums[i] == num){

    thisindex = i;

    break;

    }

    }

    if(thisindex < 0){

    printf("%d isn't in the array.\n", num);

    }else{

    printf("%d is in the array, it's index is %d.\n", num, thisindex);

    }

    return 0;

    }

    运行结果:

    Input an integer: 100↙

    100 is  in the array, it's index is 7.

    或者

    Input an integer: 28↙

    28 isn't  in the array.

    这段代码的作用是让用户输入一个数字,判断该数字是否在数组中,如果在,就打印出下标。

    第10~15行代码是关键,它会遍历数组中的每个元素,和用户输入的数字进行比较,如果相等就获取它的下标并跳出循环。

    注意:数组下标的取值范围是非负数,当 thisindex >= 0 时,该数字在数组中,当 thisindex < 0 时,该数字不在数组中,所以在定义 thisindex 变量时,必须将其初始化为一个负数。

    对有序数组的查询

    查询无序数组需要遍历数组中的所有元素,而查询有序数组只需要遍历其中一部分元素。例如有一个长度为 10 的整型数组,它所包含的元素按照从小到大的顺序(升序)排列,假设比较到第 4 个元素时发现它的值大于输入的数字,那么剩下的 5 个元素就没必要再比较了,肯定也大于输入的数字,这样就减少了循环的次数,提高了执行效率。

    请看下面的代码:

    #include

    int main(){

    int nums[10] = {0, 1, 6, 10, 23, 34, 100, 177, 296, 999};

    int i, num, thisindex = -1;

    printf("Input an integer: ");

    scanf("%d", &num);

    for(i=0; i<10; i++){

    if(nums[i] == num){

    thisindex = i;

    break;

    }else if(nums[i] > num){

    break;

    }

    }

    if(thisindex < 0){

    printf("%d isn't in the array.\n", num);

    }else{

    printf("%d is in the array, it's index is %d.\n", num, thisindex);

    }

    return 0;

    }

    与前面的代码相比,这段代码的改动很小,只增加了一个判断语句,也就是 12~14 行。因为数组元素是升序排列的,所以当 nums[i] > num 时,i 后边的元素也都大于 num 了,num 肯定不在数组中了,就没有必要再继续比较了,终止循环即可。

    展开全文
  • 只需要两个循环,外层循环遍历a数组,内层循环判断元素在b数组中能否查找到相同元素,如果查找到需要把一个标记数组对应位置为1 代码 #include <stdio.h> #include <stdlib.h> int main(void) { ...

    基于C语言判断两个数组是否元素相同

    基于C语言判断两个数组是否元素相同

    只需要两个循环,外层循环遍历a数组,内层循环判断该元素在b数组中能否查找到相同元素,如果查找到需要把一个标记数组对应位置为1

    代码

    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main(void) {
    	int n;
    
    	printf("Enter the n:");
    	scanf_s("%d",&n,sizeof(int));
    
    	int* a = (int*)malloc(n * sizeof(int));
    	int* b = (int*)malloc(n * sizeof(int));
    	int* flag_b = (int*)malloc(n * sizeof(int));
    	
    	for (int i = 0; i < n; i++) {
    		flag_b[i] = 0;
    	}
    
    	printf("Enter array a:");
    	for (int i = 0; i < n; i++) {
    		scanf_s("%d",a + i, n * sizeof(int));
    	}
    
    	printf("Enter array b:");
    	for (int i = 0; i < n; i++) {
    		scanf_s("%d", b + i,n * sizeof(int));
    	}
    
    	int i;
    	for (i = 0; i < n; i++) {
    		int temp = a[i];
    		int j;
    		for (j = 0; j < n; j++) {
    			if (flag_b[j] == 0 && temp == b[j]) {			
    				flag_b[j] = 1;
    				break;	
    			}
    		}
    		if (j >= n) {
    			break;
    		}
    	}
    
    	if (i >= n) {
    		printf("YES!\n");
    	}
    	else {
    		printf("NO!\n");
    	}
    	
    	free(a);
    	free(b);
    	free(flag_b);
    	return 0;
    }
    

    运行截图

    成功结果
    失败结果

    展开全文
  • 下面是我做IF语句练习时遇到的一个练习题,想要整理博客上判断两个数组中是否有相同的元素,需要的朋友可以参考下
  • (小菜鸟自己的地盘儿愉快的撒泼打滚= =)下面是我做IF语句练习时遇到的一个练习题,想要整理博客上:判断两个数组中是否有相同的元素。思路:首先创建两个数组,分别为a[ ]和b[ ]先拿a数组里的第一个元素和b...

    第一次写博客的我有一丝丝の小紧张~


    但是超开心的呀嗨!(小菜鸟在自己的地盘儿愉快的撒泼打滚= =)

    下面是我在做IF语句练习时遇到的一个练习题,想要整理在博客上判断两个数组中是否有相同的元素。

    思路:

    首先创建两个数组,分别为a[ ]和b[ ]先拿a数组里的第一个元素和b数组的所有元素比较是否相同,再拿a数组里的第二个元素与b数组所有元素进行比较,以此类推。运用两次for循环来完成,用i循环生成a数组的各个下标,在循环体中用j循环生成b数组下标,j循环中判断a[ i ]是否等于b[ j ],如果条件成立即相同元素。flag用来标记程序运行到某一刻的状态,来加以判断if中的语句是否执行。

    system函数的作用是运行以字符串参数的形式传递给他的命令,并且等待该命令的完成,形式:#include <stdlib.h>  int system(const char * string);

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    	int a[5] = {5,3,2,65,8};
    	int b[8] = {78,8,9,56,3,6,0,7};
    	int i = 0;
    	int j = 0;
    	int flag = 0;    //flag用于标记
    	for (i = 0; i < 5; i++)
    	{
    		for (j = 0; j < 8; j++)
    		{
    			if (a[i] == b[j])
    			    flag++;	
    		}
    	}
    	if (flag == 0)
    	        printf("两数组无相同元素\n");
    	else
    		printf("两数组有相同元素\n");
    	system("pause");
    	return 0;
    }

    为实现代码通用性,下面进行优化,推广到两数组有任意个数的元素,来实现此功能。

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int a[] = {34,24,78,5,3};
    	int b[] = {23,7,98,5,23,3};
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)//此时sizeof(a) / sizeof(a[0])=5
    	{
    		for (j = 0; j < sizeof(b) / sizeof(b[0]); j++)//此时sizeof(b) / sizeof(b[0])=6
    		{
    			if (a[i] == b[j])
    			{
    				printf("两数组有相同元素\n");
    				system("pause");
    				return 0;//存在相同元素就返回,减少循环结构的运行次数
    			}
    		}
    	}
    	if (i == sizeof(a) / sizeof(a[0]))
    	printf("两数组无相同元素\n");
    
    	system("pause");
    	return 0;
    }

    sizeof( )是一种容量度量函数,功能是返回一个变量或者类型的大小,以字节为单位。

    用法:sizeof(类型说明符,数组名或表达式)或sizeof(变量名)。

    sizeof(a)是数组a的总大小。整型时sizeof(a[0])=4。因上面代码中数组a中有五个元素,那么此时sizeof(a)=20,sizeof(a[0])=4,所以sizeof(a) / sizeof(a[0])=5。这样无论数组中的元素个数为多少,无论为哪种数据类型,这部分代码都不需要更改了。

    ——————————————————————

    开始写博客一方面是为了记录下自己学习的过程,让自己慢慢积累、收获;也是为了锻炼自己的逻辑思维和表达能力;当然,如果能够带给别人一些帮助那就再好不过了~Fine~

    展开全文
  • 请输入一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。如下二维数组:问题分析 对于这种题目,需要仔细观察数据,从而数据中得出规律,找规律从上下左右,以及左上、右上...

    点击蓝色 “小鹿动画学编程” 关注我哦!

    加个 “星标” ,每天一篇动画喂饱你!

    3534fa5d5cd93529ca092aae0a805541.png

    作者 |  小鹿

    来源 |  小鹿动画学编程

    题目

    2b015f1faafcaa0e1f7eacc5ca1096cb.png

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,从上到下递增的顺序排序。请输入一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    如下二维数组:

    02cacb33cdb2c1a9d5ea17c96a5f7f76.png

    问题分析

    2b015f1faafcaa0e1f7eacc5ca1096cb.png

    对于这种题目,需要仔细观察数据,从而在数据中得出规律,找规律从上下左右,以及左上、右上、左下、右下,可以一一测试发现,从右上开始比较数据发现规律。

    动画实现

    2b015f1faafcaa0e1f7eacc5ca1096cb.png7a9244198a493de6b4278f512dfc6557.gif

    解题思路

    2b015f1faafcaa0e1f7eacc5ca1096cb.png

    比如查找7,与 9 比较,小于 9 ,所以可以在 9 的左侧列继续查找,直到到 2 ,7 > 2 。然后开始往下寻找,4 < 7,继续递增寻找,直到找到 7 。

    代码实现

    2b015f1faafcaa0e1f7eacc5ca1096cb.png

    JavaScript

    ec9f423aed156a1dbd88da06b92b42fb.png

    Java

    0d92ff2f2429be7e1bc4a65dc1dafc69.png

    Python

    f7ce8a16e31407c3d0769c3a41a343e1.png

    测试用例

    2b015f1faafcaa0e1f7eacc5ca1096cb.png
    • 二维数组包含查找的数据和没有要查找的数据 —— 普通测试

    • 查找二维数组中最大的数据、最小的数据 —— 特殊测试

    • 空数组或 null、非整数 —— 输入测试

    1、动画:面试必刷之二叉树的深度

    2、动画:面试必刷之二叉树中和为某一值的路径

    3、动画:面试必刷之找出数组中重复的数字

    「小鹿动画学编程」用动画的形式和你分享技术!

    长按识别二维码关注

    6450186404f5653896b529c7b7986a71.gif8ff79036db2d58fc71b4af330ba732b2.png

    在看和转发

    都会带来更多好运

    4d418c948521a4dc06455199dd6e3701.gif

    展开全文
  • 一开始的思路是先快排,变有序后再进行相邻元素是否相等的判断即可,然后自己写了快排提交后发现执行第最后一个测试用例时超时了,后来换成c语言自带的排序qsort()后通过了。 qsort(void* base, size_t num, size_t...
  • 题目:杨氏矩阵(一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的)这样的数组中查找一个数字是否存在。要求时间复杂度小于O(N); 主要思路:题目要求时间复杂度度不能大于O(N),所以判断次数必须...
  • C语言 数组中重复的数字解决方法: ...解法2:建立一个大小为O(N)的哈希表,遍历数组中的元素并判断是否存在于哈希表中。若不存在于哈希表中,将这个元素加入哈希表之中并且继续扫描,若这个元素存在于哈希表中,则
  • 判断二维数组中元素是否互不相同,只有逐个比较,找到一对相等的元素,就可结论为不是互不相同。如何达到每个元素同其它元素比较一次且只一次?当前行,每个元素要同本行后面的元素比较一次(下面第一个循环控制...
  • 二维数组中的查找(C语言实现)

    千次阅读 2018-03-07 21:11:36
    请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思考:这个二维数组的每一行中,最左边的数字是最小的,每一列中,最上面的数字是最小的;那么,我们可以找到一个中间值(即第一...
  • 由于原数组为有序数组,可以由之后需要比对的数字依次与排序数组的最后一个数字进行对比,从而判断该数字是否应该排列进去。 以[1,1,2]为例,默认第一个数“1”为实际排序数组的第一个数字,第二个数为“1”,与当前...
  • 找出一个二维数组中的鞍点(C语言) 题目要求:如标题,鞍点即该位置上的元素在该行上最大、该列上最小,也可能没有鞍点 思路: 先找出每行中的最大值,并且确定其位置 然后判断该位置的值是否为该列中最小:如果...
  • C语言中的空数组是什么??

    千次阅读 2018-12-12 22:35:27
    假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对返回数组进一步处理,而如果返回空数组,则无须null引用检查。鉴于此,返回数组的方法没有结果时我们通常返回空数组,而不是...
  • 种方式,数组中只有五个元素,但是第二种方式,赋予的是字符串常量,而字符串常量在C语言中约定用'\0'作为字符串的结束标志,它占内存空间。这里的"china"的有效长度为 5 ,但实际上还有第 6 个字符'\0'。也...
  • 在c语言中,不带任何下标的数组名代表数组的首地址(pushAndPopIsValid(char sq[],int length)),即第一个元素的地址。 采用数组名最为函数参数时,无需用&运算符,系统自动将数组在内存的起始地址传递给被调...
  • 当然8种只是一个大概的划分,是一个“仁者见仁、智者见智”的问题。其实这些算法都是用来处理数据的,这些被处理的数据必须按照一定的规则进行组织。当这些数据之间存在一种或多种特定关系时,通常将这些关系称为...
  • 队列是一种先进先出的的数据结构,我们同样可以使用数组、链表等来实现。我们可以队列的尾部进行插入元素队列的头部取出元素。普通的队列由于空间利用率不高,... 我判断队满的方法:牺牲一个单元来区分对空和
  • -12 0 6 16 23 56 80 100 110 115,从键盘上输入一个数,判定该数是否在数组中,若在,输出所在序号。 第一步:设low、mid和high三个变量,分别指示数列中的起始元素、中间元素与最后一个元素位置, 其初始值为low=0...
  • 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回真。如果数组中每个元素都不相同,则返回错误。 示例1: 输入: [1,2,3,1] 输出: true//1 示例2: 输入: [1,2,3,4] 输出:...
  • )数组的本质就是可以一次定义多个类型相同的变量,同时一个数组中所有的元素内存中都是顺序存放的。但要记得在C语言中如果定义了如下数组:Char s[100] ;//s[0] – s[99],切记没有s[100]这个元素,而且C语言...
  • VS2017,对数组的初始化,添加,插入,删除,获取,判断是否为空,是否已满,冒泡排序,输出,倒置的代码实现 #include<stdio.h> #include<windows.h> struct Arr {//结构体是一个数据类型,该数据...
  • 线性结构小编前面文章有讲到的数组和链表属于逻辑上的关系,物理关系上,数据都是线性的。即,可以通过根线(不管是直线还是曲线)将所有的数据串起来,所以称这种数据结构为线性表,如图:线性表树与线性...
  • C语言中选择排序和冒泡排序

    万次阅读 多人点赞 2018-06-17 15:25:55
    给定一个数组,这种思想首先假定数组的首元素为最大或者最小的。此时就要利用3个变量表示元素的下标。一个表示当前,一个表示找到的最大或者最小的下标,一个用于存放每次循环最大值的下标。掌握了程序的基本...
  • 原题地址 ...给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 示例 1: 输入: [1,2,3,1] 输出: tru...
  • 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] ...
  • 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 ①示例1 输入: [1,2,3,1] 输出: true ②示例2 输入: [1,2,3,4] ...
  • 给定一个海拔平面图,相当于一个二维数组数组的每个元素表示一个点的海拔高度。请判断该图中是否存在鞍点,如果存在,则输出该鞍点的位置,即行、列坐标。 本题规定鞍点的定义为:该点的值它所在的那行...
  • Q1、判断素数 问题讲述:输入若干个整数,逆序输出这若干个整数中的所有素数。...然后遍历这个数组依次判断该数组中的每个元素,如果这个数是素数,将该数进行输出。 解决问题2:编写一个函数,用于判断一个

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 160
精华内容 64
关键字:

判断一个元素是否在数组中c语言

c语言 订阅