C语言用指针函数寻找数组中的最大值与次大值
作者:zhuzhuxia⌓‿⌓
这篇文章主要给大家介绍了关于C语言用指针函数寻找数组中的最大值与次大值的相关资料,该代码通过定义一个名为LargestTow的函数来找出数组中的最大值和次大值,并将结果分别存入指针所指向的内存单元中,需要的朋友可以参考下
代码示例:
#include <stdio.h> // 函数用于找出数组中的最大值和次大值 void LargestTow(int a[], int n, int *pfirst, int *psecond) { *pfirst = a[0]; *psecond = a[1]; if (*psecond > *pfirst) { // 如果初始的次大值大于最大值,交换它们 int temp = *pfirst; *pfirst = *psecond; *psecond = temp; } for (int i = 2; i < n; i++) { if (a[i] > *pfirst) { // 如果当前元素大于最大值,更新次大值为原来的最大值,最大值更新为当前元素 *psecond = *pfirst; *pfirst = a[i]; } else if (a[i] > *psecond) { // 如果当前元素大于次大值但小于最大值,更新次大值为当前元素 *psecond = a[i]; } } } int main() { int n; scanf("%d", &n); int a[n]; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } int max, second_max; LargestTow(a, n, &max, &second_max); printf("%d %d\n", max, second_max); return 0; }
以下是按照先遍历数组找出最大值,然后再次遍历数组找出最小值的思路,使用 C 语言编写的代码来解决上述问题(找出n
个整数中的最大值和次大值):
#include <stdio.h> // 函数用于找出数组中的最大值和次大值 void LargestTow(int a[], int n, int *pfirst, int *psecond) { int max_value = a[0]; int max_index = 0; // 第一次遍历数组,找出最大值及其索引 for (int i = 1; i < n; i++) { if (a[i] > max_value) { max_value = a[i]; max_index = i; } } *pfirst = max_value; // 将最大值所在位置的元素设为一个很小的值,避免它干扰找次大值 a[max_index] = -99999999; int second_max_value = a[0]; // 第二次遍历数组,找出次大值 for (int i = 1; i < n; i++) { if (a[i] > second_max_value) { second_max_value = a[i]; } } *psecond = second_max_value; } int main() { int n; scanf("%d", &n); int a[n]; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } int max, second_max; LargestTow(a, n, &max, &second_max); printf("%d %d\n", max, second_max); return 0; }
题目描述
求n个整数中的最大值和次大值。要求定义一个函数LargestTow(),求数组a的最大值和次大值两个值,分别存入形参指针pfirst和psecond所指存储单元,函数原型如下:
void LargestTow(int a[],int n,int *pfirst,int *psecond) { /*数组a有n个元素,将数组中的最大值存入形参指针pfirst所指内存单元,将数组中第二大的值存入形参指针psecond所指内存单元。 */ }
输入描述
输入有两行,输入第一行是一个整数n,1<n<=1000;第二行是n个整数,由空格隔开。
输出描述
输入两个整数,表示数组中最大的两个值。输出占一行。
样例输入
5
6 3 4 9 8
样例输出
9 8
总结
到此这篇关于C语言用指针函数寻找数组中的最大值与次大值的文章就介绍到这了,更多相关C语言寻找数组最大值与次大值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!