二、堂下练习
1、[填空题]函数定义
下面是使用辗转相除法,求最大公约数的程序,请补充完整程序中函数的定义与调用,运行通过后提交代码。
#include "stdio.h"
____________________
{
int r;
while ((r=m%n)!=0)
{
m=n;
n=r;
}
return n;
}
main()
{
int a, b, n;
scanf("%d%d", &a, &b);
printf("%d\n", _______________________);
}
输入样例
24 16
输出样例
8
思路:辗转相除法
答案:
#include "stdio.h"
int abc(int m,int n){
int r;
while ((r=m%n)!=0)
{
m=n;
n=r;
}
return n;
}
main()
{
int a, b, n;
scanf("%d%d", &a, &b);
printf("%d\n", abc(a,b));
}
2、求函数值
题目:Description 输入x(x为整数),求函数值。
函数定义如下:
F(x)=x x小于3
F(x)=F(x/3)*2 x大于等于3且x为3的倍数
F(x)=F((x-1)/3)+1 x大于等于3且x除3余1
F(x)=F((x-2)/3)+2 x大于等于3且x除3余2
输入样例
20
输出样例
6
#include<stdio.h>
int F(int x){
if(x<3)
return x;
else if(x>=3 && x%3 == 0)
return F(x/3)*2;
else if(x>=3 && x%3 == 1)
return F((x-1)/3)+1;
else if(x>=3 && x%3 == 2)
return F((x-2)/3)+2;
}
int main (){
int a;
scanf("%d",&a);
printf("%d\n",F(a));
return 0;
}