用c语言代码编写两个函数,其功能分别为: ①求N个整数的次大值和次小值。 ②求两个整数的最大公约数和最小公倍数。 输人10个整数,调用函数求它们的次大值和次小值,及次大值和次小值的最大公约数和最小公倍数。 要求:这两个函数和主函数分属3个文件。
时间: 2024-05-07 21:23:25 浏览: 139
假设主函数文件名为main.c,求次大值和次小值的函数文件名为find2.c,求最大公约数和最小公倍数的函数文件名为gcd_lcm.c。
以下是每个文件的代码实现:
main.c
```
#include <stdio.h>
#include "find2.h"
#include "gcd_lcm.h"
#define MAX 10
int main() {
int arr[MAX];
int i, second_largest, second_smallest, gcd, lcm;
printf("Enter %d integers:\n", MAX);
for (i = 0; i < MAX; i++) {
scanf("%d", &arr[i]);
}
find2(arr, MAX, &second_largest, &second_smallest);
printf("Second largest: %d\n", second_largest);
printf("Second smallest: %d\n", second_smallest);
gcd_lcm(arr[0], arr[1], &gcd, &lcm);
for (i = 2; i < MAX; i++) {
gcd_lcm(gcd, arr[i], &gcd, &lcm);
}
printf("GCD: %d\n", gcd);
printf("LCM: %d\n", lcm);
return 0;
}
```
find2.c
```
void find2(int arr[], int n, int *second_largest, int *second_smallest) {
int largest, smallest, i;
if (arr[0] > arr[1]) {
largest = arr[0];
smallest = arr[1];
} else {
largest = arr[1];
smallest = arr[0];
}
for (i = 2; i < n; i++) {
if (arr[i] > largest) {
*second_largest = largest;
largest = arr[i];
} else if (arr[i] > *second_largest) {
*second_largest = arr[i];
}
if (arr[i] < smallest) {
*second_smallest = smallest;
smallest = arr[i];
} else if (arr[i] < *second_smallest) {
*second_smallest = arr[i];
}
}
}
```
gcd_lcm.c
```
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
void gcd_lcm(int a, int b, int *gcd_val, int *lcm_val) {
*gcd_val = gcd(a, b);
*lcm_val = lcm(a, b);
}
```
在每个文件中,我们都使用了函数原型:
```
void find2(int arr[], int n, int *second_largest, int *second_smallest);
```
和
```
void gcd_lcm(int a, int b, int *gcd_val, int *lcm_val);
```
分别用于求次大值和次小值以及最大公约数和最小公倍数。
然后我们在 main.c 文件中包含了这两个函数文件的头文件:
```
#include "find2.h"
#include "gcd_lcm.h"
```
最后,我们编译并运行 main.c 文件即可得到结果。
阅读全文