C语言程序设计慕课下编译答案(完美)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 求最大公约数和最小公倍数(15分)
#include
int fun1( int m, int n) //辗转相除法求m/n的公约数
{
int r;
while (n)
{
r=m % n;
m=n;
n=r;
}
return m;
}
int fun2(int m,int n) //最小公倍数
{
return m*n/fun1(m,n);
}
int main()
{
int a,b;
scanf("%d,%d",&a,&b); //输入
printf("最大公约数:%d\n最小公倍数:%d\n",fun1(a,b),fun2(a,b));
return 0;
}
2排序并插入(15分)
#include
void InsertionSort(int* arr, int n) // 插入排序
{
int *last = 0, *next = 0, key = 0, i = 0;
for (i = 1; i < n; ++i)
{
next = arr + i, key = *next;
if (key < *arr) // 将待插的数据比第一个数据小,直接插到最前面。
{
for (last = next; next != arr; next = last)
*next = *--last;
*arr = key;
}
else // 否则从后往前遍历,找到第一个小于关键字的位置插入。
{
for (last = next; key < *--last; next = last)
*next = *last;
*next = key;
}
}
}
void OutPutArray(const int* arr, int n) // 打印一个数组
{
int i;
for (i = 0; i < n; ++i)
{
printf("%d", arr[i]);
if(i } printf("\n"); } void InsertNumber(int* arr, int n) { int key = 0, i = 0; InsertionSort(arr, n - 1); // 对之前的n-1个数排序 // OutPutArray(arr, n - 1); // 这里可以打印出来看一下对之前的数据排序是否正确scanf("%d", &key); // 输入一个数 if (key < arr[0]) // 参照之前的插入排序原理,将这个数插入到数组。 { for (i = n-1; 0 < i; --i) { arr[i] = arr[i - 1]; } arr[0] = key; } else { for (i = n-2; key < arr[i]; --i) { arr[i + 1] = arr[i]; } arr[++i] = key; } } int main() { int arr[10] = { 0 }; scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d" // 输入9个数 , arr + 0, arr + 1, arr + 2, arr + 3, arr + 4, arr + 5, arr + 6, arr + 7, arr + 8); InsertNumber(arr, 10); // 调用函数,将输入的第10个数插进去。 OutPutArray(arr, 10); // 输出 return (0); } 3.最大公约数 #include int fun1( int m, int n) //辗转相除法求m/n的公约数 { int r; while (n) { r=m % n; m=n; n=r; } return m; } int main() { int a,b; scanf("%d,%d",&a,&b); //输入 printf("%d\n",fun1(a,b)); return 0; } 4.奇数球和 #include int main() { int n; int sum(int n); scanf("%d",&n); printf("%d\n",sum(n)); } int sum(int n) { int b; if(n>1) b=sum(n-1)+2*n-1; if(n==1) b=1; return b;} 5.巧算自然数 #include int step = 1; void fc(int n)//输出n这个数并按角谷猜想对n做处理以便进入下一步。返回值是总步数。{ if(n == 1) { printf("%d",n); return; } else if(n%2 == 0) { printf("%d,",n); fc(n/2); step++; } else { printf("%d,",n); fc(n*3+1); step++; } } int main(int argc, char* argv[]) { int n; scanf("%d",&n);