查找习题

这是一组关于查找算法的练习题,涵盖了顺序查找、二分查找等方法。题目包括选择题和填空题,涉及了查找算法的基本概念、平均查找长度、适用场景等方面的知识。通过这些练习,可以加深对不同查找算法的理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1.4.3.1)查找练习题

一、 选择题

1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为(   C )。                      

A. (n-1)/2       B. n/2        C. (n+1)/2        D. n

2. 对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为( A  ) 

A.(N+1)/2      B. N/2      C. N      D. [(1+N)*N ]/2

3.顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为((1D)),二分法查找只适用于查找顺序存储的有序表,平均比较次数为((2C))。 在此假定N为线性表中结点数,且每次查找都是成功的。

A.N+1       B.2log2N      

### C语言一维数组顺序查找习题 以下是几个关于C语言中一维数组顺序查找的经典习题: #### 练习1:查找目标值的位置 编写一个程序,输入若干整数存入一维数组 `arr` 中,并指定一个目标值 `target`。通过顺序查找的方式,在数组中找到该目标值并返回其索引位置;如果未找到,则输出提示信息。 ```c #include <stdio.h> int main() { int arr[10], target, foundIndex = -1; printf("请输入10个整数:\n"); for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } printf("请输入要查找的目标值:"); scanf("%d", &target); for (int i = 0; i < 10; i++) { if (arr[i] == target) { foundIndex = i; break; } } if (foundIndex != -1) { printf("目标值%d位于索引位置:%d\n", target, foundIndex)[^3]; } else { printf("目标值%d不在数组中。\n", target)[^4]; } return 0; } ``` --- #### 练习2:统计某个数值出现次数 给定一组数据存储在一维数组中,要求用户输入一个特定的数值,利用顺序查找的方法统计这个数值在数组中的总出现次数。 ```c #include <stdio.h> int main() { int arr[15], valueToCount, count = 0; printf("请输入15个整数:\n"); for (int i = 0; i < 15; i++) { scanf("%d", &arr[i]); } printf("请输入要统计的数值:"); scanf("%d", &valueToCount); for (int i = 0; i < 15; i++) { if (arr[i] == valueToCount) { count++; } } printf("数值%d出现了%d次。\n", valueToCount, count)[^5]; return 0; } ``` --- #### 练习3:删除第一个匹配项 创建一个函数实现从一维数组中移除第一次出现的目标值的功能。具体来说,先让用户定义一个数组以及目标值,再调用此函数完成操作后打印修改后的数组。 ```c #include <stdio.h> #define MAX_SIZE 20 void removeFirstOccurrence(int array[], int size, int targetValue, int* newSize) { int indexToRemove = -1; for (int i = 0; i < size && indexToRemove == -1; ++i) { if (array[i] == targetValue) { indexToRemove = i; } } if (indexToRemove >= 0) { for (int j = indexToRemove; j < (*newSize)-1; ++j) { array[j] = array[j + 1]; } --(*newSize); } } int main() { int arr[MAX_SIZE], originalSize, newValueSize = 0, targetVal; printf("请输入最多%u个整数(以负数结束):\n", MAX_SIZE); for (originalSize = 0; originalSize < MAX_SIZE;) { scanf("%d", &arr[originalSize]); if (arr[originalSize++] < 0) break; } printf("请输入想要删除的第一个值:"); scanf("%d", &targetVal); newValueSize = originalSize; removeFirstOccurrence(arr, originalSize, targetVal, &newValueSize); printf("更新后的数组为:\n"); for (int k = 0; k < newValueSize; ++k) { printf("%d ", arr[k]); } printf("\n"); return 0; } ``` --- #### 练习4:寻找最大最小值及其下标 设计一段代码来找出一维数组的最大值和最小值所在的具体位置(即它们各自的索引)。假设所有元素均不相同以便简化逻辑处理过程。 ```c #include <stdio.h> int main() { int numbers[8], maxIdx = 0, minIdx = 0; printf("请输入8个不同的整数:\n"); for (int idx = 0; idx < 8; ++idx) { scanf("%d", &numbers[idx]); if (numbers[idx] > numbers[maxIdx]) { maxIdx = idx; } if (numbers[idx] < numbers[minIdx]) { minIdx = idx; } } printf("最大值=%d, 它的索引是=%d.\n", numbers[maxIdx], maxIdx)[^6]; printf("最小值=%d, 它的索引是=%d.\n", numbers[minIdx], minIdx)[^7]; return 0; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值