文章目录
一、注意
提示: 读者可根据需求修该#difine N 15的值以达到重新定义数组的长度
如果读者使用的是Visual Studio的话第一行要加上如下代码否则使用scanf函数时会报错。
二、答案
运行结果
1.源代码
#define _CRT_SECURE_NO_WARNINGS 1
#define N 15
#include<stdio.h>
int main()
{
int a[N], e, f, g, b, c, d, h, i, j = 0, k, n;
b = 0; c = N - 1; d = 2;
printf("请输入数组a[%d]里面的%d个数:",N,N);
for (e = 0; e <= N-1;e++) {
scanf("%d,", &a[e]);
}
for (e = 0; e <= N - 2;e++) {
for (f = e + 1; f <= N - 1; f++) {
if (a[e] < a[f]) {
g = a[e]; a[e] = a[f]; a[f] = g; }
}
}
for (e = 0; e <= N - 1; e++) {
if (e == 0) { printf("该数组从大到小排列后a[%d]={",N); }
if (e<=N-2) { printf("%d,", a[e]); }
else
printf("%d}\n", a[e]);
}
printf("输入您要寻找的数:");
scanf("%d", &n);
do {
h = (b + c) / 2;
if (a[h] == n) {
d = 1;
for (i = 0; i < N; i++) {
if (a[i] == n) {
if (j < 1) {
printf("找到%d,对应的数组为:", n);
}
else
;
printf("a[%d] ", i);
j++;
}
}
break;
}
else if (a[h] < n) {
c = h - 1;
}
else
b = h + 1;
} while (c>=b);
if (d == 2) {
printf("不能找到%d",n);
}
return 0;
}
2.代码讲解
1.预定义difine N 15的作用
#define N 15
为了定义数组的长度,该代码表示该数组有15个元素,读者可以根据自身需求进行更改。
2.第一个for循环的作用
将数依次储存在a[N]中。
3.第二个for循环(包括其内部循环)的作用
将数组a[N]中的数进行降序排列。
如果需要进行升序排列的话,只需要将第二个for循环改为如下即可。
for (e = 0; e <= N - 2;e++) {
for (f = e + 1; f <= N - 1; f++) {
if (a[e] > a[f]) {
g = a[e]; a[e] = a[f]; a[f] = g; }
}
}
4.第三个for循环的作用
将排序后的数组进行输出
5.scanf(“%d”, &n)的作用
输入你准备查找的数字
5.do…while&&最后一个if的作用
查找并判断你输入的值是否存在,do…while…里面的第一个if判断存在的情况,循环体外的if用以判断不存在的情况。
do {
h = (b + c) / 2;
if (a[h] == n) {
d = 1;
for (i = 0; i < N; i++) {
if (a[i] == n) {
if (j < 1) {
printf("找到%d,对应的数组为:", n);
}
else
;
printf("a[%d] ", i);
j++;
}
}
break;
}
else if (a[h] < n) {
c = h - 1;
}
else
b = h + 1;
} while (c>=b);
if (d == 2) {
printf("不能找到%d",n);
}
总结
该代码在寻找你输入的数时用到了折中的思想,这么做提高了代码运行的效率,读者只要能够理解do…while…的意思基本上这个程序的精髓就得以掌握。