C语言数组元素的查询 - 技术分享 - 志盟培训
首页技术分享 C语言数组元素的查询

C语言数组元素的查询

更新时间:2017-06-16      作者:周老师       阅读:772

在实际开发中,经常需要查询数组中的元素。例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家⻓想知道他的孩子是否进入了实验班,只要提供孩子子的编号就可以,如果编号和数组中的某个元素相等,就进入了实验班,否则就没进入.不幸的是,C语言标准库没有提供与数组查询相关的函数,所以我们只能自己编写代码。

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

#include <stdio.h>

#include <stdlib.h>

int main(){

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

int i, num, subscript = -1;

printf("Please input an integer: ");

scanf("%d", &num);

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

if(nums[i] == num){

subscript = i;

break;

}

}

if(subscript<0){

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

}else{

printf("%d is in the array, and it's subscript is %d.\n

", num, subscript);

}

system("pause");

return 0;

}

运行结果:

Please input an integer: 100

100 is in the array, and it's subscript is 7.

或者

Please input an integer: 28

28 isn't in the array.

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

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

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

对有序数组的查询

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

请看下面的代码:

#include <stdio.h>

#include <stdlib.h>

int main(){

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

int i, num, subscript = -1;

printf("Please input an integer: ");

scanf("%d", &num);

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

if(nums[i] >= num){

if(nums[i] == num){

subscript = i;

}

break;

}

}

if(subscript<0){

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

}else{

printf("%d is in the array, and it's subscript is %d.\n

", num, subscript);

}

system("pause");

return 0;

}

注意第11行代码,只有当 nums[i] >= num 成立时才进行处理,否则继续循环。nums[i] >= num 有两重含义:

如果 nums[i] == num,则 num 在数组中,那么就需要给 subscript 赋值,记录当前元素的下标;

如果 nums[i] > num,则 nums 不在数组中。

无论哪种情况,都没有必要再继续循环下去了,所以一旦满足nums[i] >= num,就应该使用break跳出循环。

在线报名

志盟科技上海招聘

在线报名 联系我们

志盟科技深圳招聘

在线报名 联系我们

志盟科技北京招聘

在线报名 联系我们
联系我们

咨询热线:

咨询 QQ:517578         

就业学员

  • 就业学员

    姓名:郭凡凡 
    院校:阜阳师范学院
    就职:佳戴
    职位:软件工程师
    月薪:10000

  • 就业学员

    姓名:陈祥龙 
    院校:中北大学
    就职:美囤妈妈
    职位:软件工程师
    月薪:9000

  • 就业学员

    姓名:陈建伟
    院校:南昌航空大学
    就职:SONY
    职位:嵌入式工程师
    月薪:8000

×
×
  • *真实姓名
  • *联系手机
  • *上课地址
  •    QQ号码

温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一报名服务。

×
  • *真实姓名
  • *联系手机
  • *联系邮箱
  • * QQ号码

温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一的服务。

本站由 宽敬科技——创新企业的建站运营顾问 提供支持