作业2

#求两个正整数的最大公约数和最小公倍数

基本要求:

1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。

提高要求:

1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。

/*
author@田晨

2018/9/7

要求:
	一、求两个数的最大公约数和最小公倍数
	二、求三个正整数的最大公约数和最小公倍数
	
思想: 
	*求最大公约数 *
		1.相减法:
	 		输入两整数a和b,
			(1)如果a>b,a=a-b;
			(2)如果a<b,b=b-a;
			(3)如果a=b,a或b就为这两个整数的最大公约数;
			(4)如果a!=b,则再执行(1)或(2).

 		2.穷举法:
	 		输入两个整数a和b,
			(1)定义temp;
			(2)如果a>b,则temp=b;
			(3)如果a<b,则temp=a;
			(4)如果a%temp||b%temp!=0,则执行temp--;
			(5)如果a%temp&&b%temp==0,则temp为最大公约数.

		3.辗转相除法:
 	 		输入两个整数a和b,
			(1)如果a%b=temp,temp为0,则b为两数的最大公约数;
			(2)如果temp!=0,则令a=b,b=temp,执行(1).

	*最小公倍数*
			两数之积/两数的最大公约数=其最小公倍数
	
	*求三个整数的最大公约数和最小公倍数*
			类似上面的穷举法 
 */
#include "stdio.h"
#include "stdlib.h" 
#include "math.h"
int fun1(int a,int b) {
	while(a!=b) {
		if(a>b)a-=b;
		else b-=a;
	}
	return a;
}

int fun2(int a,int b) {
	int temp;
	if(a>b)temp=b;
	else temp=a;
	while(a%temp!=0||b%temp!=0) {
		temp--;
	}
	return temp;
}

int fun3(int a,int b) {
	int temp;
	if(a<b) {
		temp=a;
		a=b;
		b=temp;
	}
	while(b!=0) {
		temp=a%b;
		a=b;
		b=temp;
	}
	return abs(a);
}

int fun4(int a,int b) {
	int temp;
	temp=a*b/fun1(a,b);
	return temp;
}

int fun5(int a,int b,int c) {
	int temp,res;
	int x;
	temp=a;
	if(temp>b)temp=b;
	if(temp>c)temp=c;
	for(x=1; x<=temp; x++) {
		if(a%x==0&&b%x==0&&c%x==0) {
			res=x;
		}
	}
	return res;
}

int fun6(int a,int b,int c) {
	int temp=1;
	while(1) {
		if(temp%a==0&&temp%b==0&&temp%c==0)break;
		else temp++;
	}
	return temp;
}

void menu(){
	printf("              *********************************************************\n");
	printf("              #                                                       #\n");
	printf("              #                求最大公约数和最小公倍数               #\n");
	printf("              #                                                       #\n");
	printf("              #                      版本 : v1.0                     #\n");
	printf("              #                                                       #\n");
	printf("              *********************************************************\n");
	printf("              #                                                       #\n");
	printf("              #                      1.相减法                         #\n");
	printf("              #                                                       #\n");
	printf("              #                      2.穷举法                         #\n");
	printf("              #                                                       #\n");
	printf("              #                      3.辗转相除法                     #\n");
	printf("              #                                                       #\n");
	printf("              #                      4.求三个整数                     #\n");
	printf("              #                                                       #\n");
	printf("              #                      0.退出系统                       #\n");
	printf("              #                                                       #\n");
	printf("             **********************************************************\n");
	printf("\n");
}

int main() {
	int a1,b1,i;
	int a2,b2,c2;
	menu(); 
	do {
		printf("请选择你要使用的功能:\n");
		scanf("%d",&i);
		switch(i) {
			case 1:
				system("cls");
				menu();
				printf("相减法:\n");
				printf("请输入两个整数,用空格分开:\n");
				scanf("%d %d",&a1,&b1);
				
				printf("%d 与 %d 的最大公约数为 %d 最小公倍数为 %d\n\n",a1,b1,fun1(a1,b1),fun4(a1,b1)) ;
				break;
			case 2:
				system("cls");
				menu();
				printf("穷举法:\n");
				printf("请输入两个整数,用空格分开:\n");
				scanf("%d %d",&a1,&b1);
				
				printf("%d 与 %d 的最大公约数为 %d 最小公倍数为 %d\n\n",a1,b1,fun2(a1,b1),fun4(a1,b1)) ;
				break;
			case 3:
				system("cls");
				menu();
				printf("辗转相除法:\n");
				printf("请输入两个整数,用空格分开:\n");
				scanf("%d %d",&a1,&b1);
				
				printf("%d 与 %d 的最大公约数为 %d 最小公倍数为 %d\n\n",a1,b1,fun3(a1,b1),fun4(a1,b1)) ;
				break;
			case 4:
				system("cls");
				menu();
				printf("三个整数:\n");
				printf("请输入三个整数,用空格分开:\n");
				scanf("%d %d %d",&a2,&b2,&c2);
				
				printf("%d 、 %d 、 %d 的最大公约数为 %d 最小公倍数为 %d \n\n",a2,b2,c2,fun5(a2,b2,c2) ,fun6(a2,b2,c2));
				       break;
		}
	} while(i);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XJTU嵌入式作业2要求实现一个简单的温度转换程序。该程序需要输入一个摄氏温度值,并将其转换为华氏温度和开氏温度后输出。 为了完成这个任务,我们首先需要使用C语言编写一个能够进行温度转换的函数。该函数可以接受用户输入的摄氏温度值,并根据转换公式将其转换为华氏温度和开氏温度。 转换摄氏温度到华氏温度的公式如下: 华氏温度 = 摄氏温度 * 9/5 + 32 转换摄氏温度到开氏温度的公式如下: 开氏温度 = 摄氏温度 + 273.15 在程序中,我们可以使用scanf函数来接受用户输入的摄氏温度值。然后,我们可以声明并初始化华氏温度和开氏温度的变量,并根据转换公式进行计算。 最后,我们可以使用printf函数来输出转换后的华氏温度和开氏温度值。 除了实现温度转换的函数外,我们还可以编写一个主函数来测试该函数的正确性。在主函数中,我们可以调用温度转换函数,并将用户输入的摄氏温度值作为参数传递给该函数。 在运行程序时,用户将被要求输入一个摄氏温度值。程序将自动将该温度转换为华氏温度和开氏温度,并将转换结果输出到屏幕上。 总而言之,XJTU嵌入式作业2要求我们通过C语言编写一个温度转换程序。该程序可以将摄氏温度转换为华氏温度和开氏温度,并将转换结果输出到屏幕上。该程序包括一个温度转换函数和一个主函数来测试该函数的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值