网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 418|回复: 0
打印 上一主题 下一主题

【C语言】判断数组中是否包含某个元素

[复制链接]

686

主题

693

帖子

3101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3101
跳转到指定楼层
楼主
发表于 2024-3-25 20:49:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在实际开发中,经常需要查询数组中的元素。例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家长想知道他的孩子是否进入了实验班,只要提供孩子的编号就可以,如果编号和数组中的某个元素相等,就进入了实验班,否则就没进入。

不幸的是,C语言标准库没有提供与数组查询相关的函数,所以我们只能自己编写代码。对无序数组的查询所谓无序数组,就是数组元素的排列没有规律。无序数组元素查询的思路也很简单,就是用循环遍历数组中的每个元素,把要查询的值挨个比较一遍。请看下面的代码:
  • #include <stdio.h>
  • 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 <stdio.h>
  • 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 > num 时,i 后边的元素也都大于 num 了,num 肯定不在数组中了,就没有必要再继续比较了,终止循环即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-24 01:20 , Processed in 0.036496 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表