本资源是一份针对C语言程序设计下学期在线课程的作业答案文档,包含两道编程练习题目。第一题是关于求两个正整数的最大公约数(GCD)和最小公倍数(LCM),题目要求在主函数中通过调用fun1()和fun2()函数实现计算,并输出结果。fun1()采用欧几里得算法,通过递归找到两个数的最大公约数;fun2()则是利用最大公约数计算最小公倍数,即两数乘积除以最大公约数。
代码示例:
```c
#include<stdio.h>
int fun1(int m, int n) {
int r;
r = m % n;
return r == 0 ? n : fun1(n, r);
}
int fun2(int m, int n) {
int t;
t = m * n / fun1(m, n);
return t;
}
int main() {
int m, n, t;
scanf("%d, %d", &m, &n);
if (m < n) {
t = m; m = n; n = t;
}
printf("最大公约数:%d\n", fun1(m, n));
printf("最小公倍数:%d\n", fun2(m, n));
return 0;
}
```
第二题是排序并插入操作,要求在主函数中创建一个包含10个元素的整数数组,输入9个数进行排序,然后接收一个额外的数并插入到正确位置。这里使用了冒泡排序算法,通过嵌套循环对比相邻元素并交换,确保数组有序。输入输出样例展示了如何输入和预期的输出格式。
代码示例:
```c
#include<stdio.h>
int main() {
int t, j, i, n[10];
for (i = 0; i < 9; i++) {
scanf("%d", &n[i]);
if (i < 8) scanf(",");
}
scanf("%d", &n[9]);
// 冒泡排序
for (i = 0; i < 9; i++) {
for (j = 0; j < 8 - i; j++) {
if (n[j] > n[j + 1]) {
t = n[j];
n[j] = n[j + 1];
n[j + 1] = t;
}
}
}
// 插入操作
int insert_num;
scanf("%d", &insert_num);
// 插入到正确位置
for (i = 9; i >= 0 && n[i] > insert_num; i--) {
n[i + 1] = n[i];
}
n[i + 1] = insert_num;
// 输出排序后的数组
for (i = 0; i < 10; i++) {
printf("%d", n[i]);
if (i != 9) printf(",");
}
printf("\n");
return 0;
}
```
这两道题目都是C语言基础编程中的经典问题,涉及到数组操作、函数调用、排序算法以及递归的应用,有助于巩固对C语言核心概念的理解和实践能力的提升。