C语言程序设计慕课下编译答案(完美)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档