一.知识点函数需要改变实参时必要要用地址传递不能用值传递。当一个数%比自己大的数是%的值就是自己本身。数辗转相除法欧几里得算法求两个数的最大公约数。两个数的最小公倍数为两个数的乘积除以最大公约数。二.C代码#define_CRT_SECURE_NO_WARNINGS#define_CRT_SECURE_NO_WARNINGS#includestdio.h// 交换两个整数的值地址传递voidChange(int*x,int*y){inttemp*x;*x*y;*ytemp;}//打印1-100直接3倍数的数字voidprint(){intcnt0;//计数intnum0;//当前数字while(num3100){numnum3;printf(%d ,num);//乘法比加法指令速度慢乘法运算耗时更高数值越大差距越明显。cnt;//每5个数字打印一行if(cnt%50){printf(\n);}}}//for循环打印1-100直接3倍数的数字voidprint1(){intcnt10;// 从3开始步长3遍历无需乘法计算for(intnum13;num1100;num13){printf(%d ,num1);cnt1;// 满5个换行if(cnt1%50){printf(\n);}}}//给定两个数求两个数最大公约数//暴力求解法(先求2个数的最小值然后递减第一个两个数都能整除的数结果)intmax_com(intx,inty){// 三目运算符一步取最小值精简代码intminxy?x:y;for(intimin;i1;i--){if(x%i0y%i0){returni;}}}// 辗转相除法欧几里得算法求最大公约数intmax_com1(intx,inty){// 循环直到余数为 0while(x%y!0){inttempx%y;// 先算余数被除数小于除数时余数就是被除数本身所以不用比较值的大小。xy;// 旧除数 → 新被除数ytemp;// 旧余数 → 新除数}returny;// 最后不为0的数就是最大公约数}//两个数的最小公倍数最小公倍数 两数乘积 / 最大公约数intmin_com(intx,inty){intminx*y;// 循环直到余数为 0while(x%y!0){inttempx%y;// 先算余数被除数小于除数时余数就是被除数本身所以不用比较值的大小。xy;// 旧除数 → 新被除数ytemp;// 旧余数 → 新除数}returnmin/y;// 最小公倍数 两数乘积min / 最大公约数y}intmain(){inta,b,c;printf(请输入3个整数以空格分隔\n);scanf(%d %d %d,a,b,c);// 从大到小排序确保 a b cif(ab)Change(a,b);if(ac)Change(a,c);if(bc)Change(b,c);// 输出结果printf(\n3个数从大到小排序为\n);printf(%d %d %d\n,a,b,c);printf(\n);printf(1-100中是3的倍数的数为\n);//调用打印函数print();printf(\n);//最大公约数intmax_com_a,max_com_b;printf(请输入两个整数\n);scanf(%d %d,max_com_a,max_com_b);printf(这两个数的最大公约数为%d\n,max_com(max_com_a,max_com_b));printf(这两个数的最小公倍数为%d\n,min_com(max_com_a,max_com_b));return0;}三.运行结果