• C语言数组元素的查询


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

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

    对无序数组的查询

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

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main(){
    4. int nums[10] = {1, 10, 6, 296, 177, 23, 0, 100, 34, 999};
    5. int i, num, subscript = -1;
    6. printf("Please input an integer: ");
    7. scanf("%d", &num);
    8. for(i=0; i<10; i++){
    9. if(nums[i] == num){
    10. subscript = i;
    11. break;
    12. }
    13. }
    14. if(subscript<0){
    15. printf("%d isn't in the array. ", num);
    16. }else{
    17. printf("%d is in the array, and it's subscript is %d. ", num, subscript);
    18. }
    19. system("pause");
    20. return 0;
    21. }

    运行结果:

    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. int main(){
    4. int nums[10] = {0, 1, 6, 10, 23, 34, 100, 177, 296, 999};
    5. int i, num, subscript = -1;
    6. printf("Please input an integer: ");
    7. scanf("%d", &num);
    8. for(i=0; i<10; i++){
    9. if(nums[i] >= num){
    10. if(nums[i] == num){
    11. subscript = i;
    12. }
    13. break;
    14. }
    15. }
    16. if(subscript<0){
    17. printf("%d isn't in the array. ", num);
    18. }else{
    19. printf("%d is in the array, and it's subscript is %d. ", num, subscript);
    20. }
    21. system("pause");
    22. return 0;
    23. }

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

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


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

  • 相关阅读:
    【JZOJ5771】遨游【二分】【DFS】
    【JZOJ5773】简单数学题【数论,数学】
    【JZOJ5773】简单数学题【数论,数学】
    有效壳第2部分:成为一个剪贴板体操运动员
    具有多重选择和列表间拖拽的拖拽列表框
    将枚举绑定到下拉列表框并根据值对其排序
    一个具有子项格式的自定义绘制列表控件
    基本的c#屏幕截图应用程序
    将组合框下拉列表宽度调整为最长字符串宽度
    在应用程序中使用按钮控件
  • 原文地址:https://www.cnblogs.com/zhugeanran/p/8533492.html
Copyright © 2020-2023  润新知