1 题目
根据要求编写程序P256.C的指定部分:
程序P256.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:从键盘分别读入5个数到arrA中、8个数至arrB中,再读入一个数num(这些数均≥0),然后分别调用自定义函数在数组arrA和arrB中查找小于num的最大数(不考虑有多个最大值的情况)所在位置的下标、再输出该下标。
程序的运行效果应类似地如图1所示,图1中的91 95 93 98 92、88 11 33 77 22 55 95 66和81是从键盘输入的内容。
请输入5个数:91 95 93 98 92
请输入8个数:88 11 33 77 22 55 95 66
请再输入一个数:81
arrA: not Find!
maxPos(arrB) = 3
2 下载文件
代码
#include <stdio.h>
/* userCode(<70字符): 自定义函数之原型声明 */
______________________________
int main(void)
{
int arrA[5], arrB[8], num, maxPosA, maxPosB;
printf("请输入5个数:");
scanf("%d%d%d%d%d", &arrA[0], &arrA[1], &arrA[2], &arrA[3], &arrA[4]);
printf("请输入8个数:");
scanf("%d%d%d%d%d%d%d%d", &arrB[0], &arrB[1], &arrB[2], &arrB[3], &arrB[4], &arrB[5], &arrB[6], &arrB[7]);
printf("请再输入一个数:");
scanf("%d", &num);
______________________________ /* userCode(<50字符): 调用函数查找在arrA中小于num的最大数所在的下标 */
if (-1 == maxPosA)
{
printf("\narrA: not Find!");
}
else
{
printf("\nmaxPos(arrA) = %d", maxPosA);
}
______________________________ /* userCode(<50字符): 调用函数查找在arrB中小于num的最大数所在的下标 */
if (-1 == maxPosB)
{
printf("\narrB: not Find!\n");
}
else
{
printf("\nmaxPos(arrB) = %d\n", maxPosB);
}
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
3 改后文件
#include <stdio.h>
/* userCode(<70字符): 自定义函数之原型声明 */
int getMax(int* arr,int n, int num);
int main(void)
{
int arrA[5], arrB[8], num, maxPosA, maxPosB;
printf("请输入5个数:");
scanf("%d%d%d%d%d", &arrA[0], &arrA[1], &arrA[2], &arrA[3], &arrA[4]);
printf("请输入8个数:");
scanf("%d%d%d%d%d%d%d%d", &arrB[0], &arrB[1], &arrB[2], &arrB[3], &arrB[4], &arrB[5], &arrB[6], &arrB[7]);
printf("请再输入一个数:");
scanf("%d", &num);
maxPosA=getMax(arrA,5, num); /* userCode(<50字符): 调用函数查找在arrA中小于num的最大数所在的下标 */
if (-1 == maxPosA)
{
printf("\narrA: not Find!");
}
else
{
printf("\nmaxPos(arrA) = %d", maxPosA);
}
maxPosB=getMax(arrB,8, num); /* userCode(<50字符): 调用函数查找在arrB中小于num的最大数所在的下标 */
if (-1 == maxPosB)
{
printf("\narrB: not Find!\n");
}
else
{
printf("\nmaxPos(arrB) = %d\n", maxPosB);
}
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
int getMax(int* arr,int n, int num)
{
int i = 0;
int max;
int pos = -1; // 位置,默认找不到,返回-1
// 第一个符合:小于num的数,作为符合的最大的数
for (i = 0; i < n; i++)
{
if (arr[i] < num)
{
max = arr[i];
pos = i;
break;
}
}
// 接下来看,这个数之后还有没有更小的符合大于num的数
for (; i < n; i++)
{
if (arr[i] < num && arr[i] > max)
{
max = arr[i];
pos = i;
}
}
return pos;
}
4 知识点
-
函数的声明、定义、调用
-
按需要,确定函数的参数个数,一般情况下,传入数组,同时也传入数组的长度参数
-
按题目要求,选定可用算法
-
- 先确定有没有符合要求的数
- 再循环处理找符合要求的最大的数
- 主要使用是打擂算法
-
另外,局部变量的值的初始化要合理,符合业务的某一种情况即可