三木社区

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

C语言数组元素的查询

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-9-1 10:13:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. 在实际开发中,经常需要查询数组中的元素。例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家⻓想知道他的孩子是否进入了实验班,只要提供孩子子的编号就可以,如果编号和数组中的某个元素相等,就进入了实验班,否则就没进入.不幸的是,C语言标准库没有提供与数组查询相关的函数,所以我们只能自己编写代码。
  2. 对无序数组的查询所谓无序数组,就是数组元素的排列没有规律。无序数组元素查询的思路也很简单,就是用循环遍历数组中的每个元素,把要查询的值挨个比比较一遍。请看下面的代码:
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. int main(){
  6. int nums[10] = {1, 10, 6, 296, 177, 23, 0, 100, 34, 999};
  7. int i, num, subscript = -1;
  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
  20. ", num, subscript);
  21. }
  22. system("pause");
  23. return 0;
  24. }
  25. 运行结果:
  26. Please input an integer: 100
  27. 100 is in the array, and it's subscript is 7.
  28. 或者
  29. Please input an integer: 28
  30. 28 isn't in the array.
  31. 这段代码的作用是让用户输入一个数字,判断该数字是否在数组中,如果在,就打印出下标。
  32. 第10~15行代码是关键,它会遍历数组中的每个元素,和用户输入的数字进行比较,如果相等就获取它的下标并跳出循环。
  33. 注意:数组下标的取值范围是非负数,当 subscript >= 0 时,该数字在数组中,当 subscript < 0时,该数字不在数组中,所以在定义 subscript 变量时,必须将其初始化为一个负数。
  34. 对有序数组的查询
  35. 查询无序数组需要遍历数组中的所有元素,而查询有序数组只需要遍历其中一部分元素。例如有一个长度为10的型数组,它所包含的元素按照从小到大的顺序(升序)排列,假设比较到第4个元素时发现它的值大于输入的数字,那么剩下的5个元素就没必要再比比较了,肯定也大于输入的数字,这样就减少了循环的次数,提高了执行效率。
  36. 请看下面的代码:
  37. #include <stdio.h>
  38. #include <stdlib.h>
  39. int main(){
  40. int nums[10] = {0, 1, 6, 10, 23, 34, 100, 177, 296, 999};
  41. int i, num, subscript = -1;
  42. printf("Please input an integer: ");
  43. scanf("%d", &num);
  44. for(i=0; i<10; i++){
  45. if(nums[i] >= num){
  46. if(nums[i] == num){
  47. subscript = i;
  48. }
  49. break;
  50. }
  51. }
  52. if(subscript<0){
  53. printf("%d isn't in the array.\n", num);
  54. }else{
  55. printf("%d is in the array, and it's subscript is %d.\n
  56. ", num, subscript);
  57. }
  58. system("pause");
  59. return 0;
  60. }
  61. 注意第11行代码,只有当 nums[i] >= num 成立时才进行处理,否则继续循环。nums[i] >= num 有两重含义:
  62. 如果 nums[i] == num,则 num 在数组中,那么就需要给 subscript 赋值,记录当前元素的下标;
  63. 如果 nums[i] > num,则 nums 不在数组中。
  64. 无论哪种情况,都没有必要再继续循环下去了,所以一旦满足nums[i] >= num,就应该使用break跳出循环。
复制代码


回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-10-22 00:36 , Processed in 0.025518 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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