C语言编程作业答案:求最大公约数与插入排序实践

版权申诉
5星 · 超过95%的资源 2 下载量 117 浏览量 更新于2024-07-02 3 收藏 959KB PDF 举报
本资源是一份针对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语言核心概念的理解和实践能力的提升。