20251期《C语言程序设计B》专项训练02-函数05部分-程序P256.C

21 阅读3分钟

1 题目

根据要求编写程序P256.C的指定部分:
  程序P256.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
  程序的功能是:从键盘分别读入5个数到arrA中、8个数至arrB中,再读入一个数num(这些数均≥0),然后分别调用自定义函数在数组arrA和arrB中查找小于num的最大数(不考虑有多个最大值的情况)所在位置的下标、再输出该下标。
  程序的运行效果应类似地如图1所示,图1中的91 95 93 98 9288 11 33 77 22 55 95  6681是从键盘输入的内容。
请输入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 知识点

  • 函数的声明、定义、调用

  • 按需要,确定函数的参数个数,一般情况下,传入数组,同时也传入数组的长度参数

  • 按题目要求,选定可用算法

    • 先确定有没有符合要求的数
    • 再循环处理找符合要求的最大的数
    • 主要使用是打擂算法
  • 另外,局部变量的值的初始化要合理,符合业务的某一种情况即可