SCAU高级语言程序设计--实验9 函数的应用(2)
二、堂下练习
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", _______________________);
}
思路:辗转相除法可看下图:
#include<stdio.h>
int fanc(int m,int n){
int r;
while((r=m%n)!=0){
m = n;
n = r;
}
return m;
}
int main (){
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",fanc(a,b));
return 0;
}
注意:函数中局部参数可以和主函数重名的,调用在函数中的参数注意数据类型。
2、求函数值
题目:输入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
思路:分段函数,直接嵌套。
#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;
}