C语言数组元素的查询

来源:互联网 发布:多益网络找回密码 编辑:程序博客网 时间:2024/05/18 08:18

对无序数组的查询

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

1.#include <stdio.h>

2.#include <stdlib.h>

3.

4.int main(){

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

6.    int i, num, subscript = -1;

7.

8.    printf("Please input an integer: ");

9.    scanf("%d", &num);

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

11.        if(nums[i] == num){

12.            subscript = i;

13.            break;

14.        }

15.    }

16.    if(subscript<0){

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

18.    }else{

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

20.    }

21.

22.    system("pause");

23.    return 0;

24.}

运行结果:

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个元素就没必要再比较了,肯定也大于输入的数字,这样就减少了循环的次数,提高了执行效率。

 

请看下面的代码:

1.#include <stdio.h>

2.#include <stdlib.h>

3.

4.int main(){

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

6.    int i, num, subscript = -1;

7.

8.    printf("Please input an integer: ");

9.    scanf("%d", &num);

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

11.        if(nums[i] >= num){

12.            if(nums[i] == num){

13.                subscript = i;

14.            }

15.            break;

16.        }

17.    }

18.    if(subscript<0){

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

20.    }else{

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

22.    }

23.

24.    system("pause");

25.    return 0;

26.}

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

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

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

 

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

 

0 0