函数程序设计
知识摘要
- 函数的声明与定义
- 水仙花数算法,将每一位数的3次方存起来再相加(详见题2)
- 回文数,将数倒序后判断是否与原来相等(详见题3)
- 分解素数因子,循环与判断语句的巧妙结合(详见题4)
- 函数的递归调用(详见题5)
题目1:求最大公约数和最小公倍数
内容详情
题目1:
输入提示:输入仅一行,输入二个整数。
输出提示:输出仅二行;
第一行:输出最大公约数
第二行:输出最小公倍数
输图样本:12 18
输出样本:6
36
程序源码
#include <stdio.h>
#include <stdlib.h>
int max(int x,int y); //如果子函数定义在主函数之后,则要在主函数前声明子函数
int min(int x,int y);
int i,s;
int main()
{
int m,n; //分别代表max、min
scanf("%d%d",&m,&n);
printf("%d\n",max(m,n));
printf("%d",min(m,n));
return 0;
}
int max(int x,int y) //最大公因数
{
for (i=1;i<=x&&i<=y;i++)
{
if (x%i==0&&y%i==0)
s=i;
}
return(s);
}
int min(int x, int y) //最小公倍数
{
i=x;
while(i%x!=0||i%y!=0)
{
i++;
s=i;
}
return(s);
}
题目2:输出水仙花数
内容详情
题目2:
输入提示:输入仅一行,输入2个数,最小三位数和最大三位数。
输出提示:输出一行,输出所有水仙花数。(数据间隔一个空格)
输入样本:100 400
输出样本:153 370 371
程序源码
#include <stdio.h>
#include <stdlib.h>
int shui(int x); //水仙花数
int main()
{
int m,n,i;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
if(shui(i))
printf("%d ",i);
}
return 0;
}
int shui(int x)
{
int s,a,b,c;
a=(x/100)*(x/100)*(x/100);
b=(x/10%10)*(x/10%10)*(x/10%10);
c=(x%10)*(x%10)*(x%10);
s=a+b+c;
if(s==x)
return s;
else
return 0;
}
题目3:判断一个数是否是回文数
内容详情
回文数定义:
回文数是指一个像14641这样“对称”的数,即:将这个数的数字按相反的顺序重新排列所得到的“倒序数”或“反序数”,和原来的数一样。这里,“回文”是指像“妈妈爱我,我爱妈妈”这样的,正读反读都相同的单词或句子。
题目3:
输入提示:输入仅一行,输入一个整数。
输出提示:输出仅一行,如果是回文数,输出yes,否则输出no。
输入样本:1231
输出样本:no
程序源码
#include <stdio.h>
#include <stdlib.h>
int re(int x);
int main()
{
int n,ren; //“原数”、“倒序数”
scanf("%d",&n);
ren=re(n);
if (ren==n)
printf("yes");
else
printf("no");
return 0;
}
int re(int x) //求倒序数
{
int c=0,i,t,n,m=0;
t=x;
while(t!=0) //判断输入的数有几位
{
t=t/10;
c++;
}
for(i=0;i<c;i++) //倒序
{
n=x%10;
x=x/10;
m=m*10+n;
}
return m;
}
题目4:分解一个整数的所有素数因子
内容详情
题目4:
输入提示:输入仅一行,输入m的值。
输出提示:输出仅一行,输出素数因子,用空格分隔。
输入样本:120
输出样本:2 2 2 3 5
程序源码
#include <stdio.h>
#include <stdlib.h>
int primedec(int m);
int main()
{
int m;
scanf("%d",&m);
primedec(m);
return 0;
}
int primedec(int m) //打印素数因子
{
int t,i=2;
t=m;
while(t-1) //t一直除于其质数,最后t=1,退出循环
{
if (!(t%i)) //如果能整除,则执行以下语句,i不变再次循环
{
t=t/i;
printf("%d ",i);
}
if(t%i) //如果不能整除i加1,再次循环
i++;
}
return 0;
}
题目5:递归完成x的n次方的计算
内容详情
题目5:
输入提示:输入仅一行,输入x和n(n>0)值。
输出提示:输出仅一行,输出x的n次方的值。
输入样本:2 3
输出样本:8
程序源码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x,n;
scanf("%d%d",&x,&n);
printf("%d",fang(x,n));
return 0;
}
int fang(int x,int n) //x的n次方
{
int t;
t=x;
if(n==1)
t=x;
else
t=t*fang(x,n-1);
return t;
}