第一章的题不难,但是代码是从下标0开始的,题目非要要求从下标1开始。所以手写的时候还是要按照题目的要求写。怎么更改已经在注释标明。
9.(1)找到数组对应元素下标即可。
代码:
int search(int a[],int length, int k) {
//按照题的要求,遍历初始值应该是1,跳出循环的条件是i<=length
for (int i = 0; i < length; i++)
{
if (a[i] == k)
{
return i;
}
}
return 0;
}
(2)定义两个变量用来存储最大值和最小值,根据具体情况来更新这两个变量的值。
代码:
void search1(int a[],int length) {
int first = 0;
int second = 0;
//按照题的要求,遍历初始值应该是1,跳出循环的条件是i<=length
for (int i = 0; i <length; i++)
{
//当前数组的元素比最大值大时,原来的最大值变为次最大值,该元素变为最大值。
if (a[i]>first)
{
second = first;
first = a[i];
}
//当前数组的元素比最大值小,但是比次最大值大时,只更新次最大值
else if (a[i]<first&&a[i]>second)
{
second = a[i];
}
}
printf("\n最大值为%d,次最大值为%d",first, second);
}
使用main函数验证:
int main(){
int a[5] = {6,2,3,4,5};
int n=5;
int s=search(a,n,2);
printf("%d", s);
search1(a,n);
}
执行结果:
这里就有一个小细节,如果首元素的下标可以从1开始,那么实际2对应的位置应该是2。