C语言程序基础实验5——求最大公约数和最小公倍数、输出水仙花数、判断一个数是否是回文数、分解一个整数的所有素数因子、递归完成x的n次方的计算


知识摘要

  1. 函数的声明与定义
  2. 水仙花数算法,将每一位数的3次方存起来再相加(详见题2)
  3. 回文数,将数倒序后判断是否与原来相等(详见题3)
  4. 分解素数因子,循环与判断语句的巧妙结合(详见题4)
  5. 函数的递归调用(详见题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;
} 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值