一、要求说明: 1. 请点击出题按钮,下载并打开试题文件 CTK.c ;按试题要求进行操作。 2. 该程序中标有“【____________】”为需要程序填空的标志,考生可以把题干中的代码在编译器中编辑,根据程序的功能,在填空标志处填入合适的代码(覆盖填空标志),并调试运行程序; 3. 完成相关操作后,按本题的程序文件名进行保存并关闭文件;再按本页界面的上传向导选择试题文件,点击【上传到服务器评分】。 二、注意事项: 1. 在填空时,需删除填空标志“【____________】”、确保不会产生语法错误,再根据程序功能填充;调试运行程序。 2. 不得加行、减行、加句、减句。 三、程序功能: 有12个已经排好序的整数存放在一个数组中,输入1个整数,要求用二分查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出无此数。 【输入样例】 72 【输出样例】 3 【程序代码】 #include <stdio.h> int main(void) { int N = 12, val, left, right, mid,index=-1; int a[12] = {97,78,72,71,67,66,63,56,43,8,7,3}; left = 0; right = N - 1; scanf("%d", &val); while(【____________】) { mid = (left + right) / 2; if(val == a[mid]) { 【____________】; break; } else { if(【____________】) right = mid - 1; else left = mid + 1; } } if(index==-1) printf("not found\n"); else printf("%d\n", index + 1); return 0; }
时间: 2024-01-23 10:03:35 浏览: 134
CTK示例工程代码(Qt5.9.9 + MSVC2015_x64 + CMake3.23.1)
根据程序功能,在相应的填空标志处填入以下代码:
```
while (left <= right) {
mid = (left + right) / 2;
if (val == a[mid]) {
index = mid;
break;
} else {
if (val < a[mid]) right = mid - 1;
else left = mid + 1;
}
}
```
填空后的完整程序代码如下:
```
#include <stdio.h>
int main(void) {
int N = 12, val, left, right, mid, index = -1;
int a[12] = {97, 78, 72, 71, 67, 66, 63, 56, 43, 8, 7, 3};
left = 0;
right = N - 1;
scanf("%d", &val);
while (left <= right) {
mid = (left + right) / 2;
if (val == a[mid]) {
index = mid;
break;
} else {
if (val < a[mid]) right = mid - 1;
else left = mid + 1;
}
}
if (index == -1) printf("not found\n");
else printf("%d\n", index + 1);
return 0;
}
```
程序的实现方法是利用二分查找法在已经排好序的数组中查找元素,如果元素在数组中,则输出它在数组中的下标加1;否则输出 not found。程序维护了左右两个指针 left 和 right,表示当前查找范围的左右边界,每次取中间位置的元素进行比较,根据比较结果更新边界,并不断逼近目标元素,直到找到目标元素或者查找范围为空为止。
阅读全文