C语言经典编程282例14 (阶乘、最大公约数与最小公倍数等)

116 输出两个数中的最大值

设计一个求最大值的函数,在屏幕上输入两个数,输出其中的最大值。

int max(int a, int b)
{
	int temp;
	//此处可以改为:temp = a > b? a:b;
	if(a > b)
	{
		temp = a;
	}
	else
	{
		temp = b;
	}
	return temp;
}

main()
{
	int a, b, c;
	scanf("%d%d", &a, &b);
	c = max(a, b); 
	printf("max = %d\n", c);
	
	printf("\n");
}

117 判断素数

编写一个判断素数的函数,实现输入一个整数,使用判断素数的函数进行判断!

将判断素数的代码模块化,更容易移植

int sprime(int x)
{
	int i, flag = 1;
	for(i = 2; i <= x / 2; i++)
	{
		if(x % i == 0)
		{
			flag = 0;
		}
	}
	
	return flag;
}

main()
{
	int x;
	scanf("%d", &x);
	
	if(sprime(x))
	{
		printf("该数是素数\n");
	}
	else
	{
		printf("该数不是素数\n");
	}
	
	printf("\n");
}

118 递归解决年龄问题

有5个人坐一起,问等5个人多大?他说比第4个人大2岁,问第4个人,他说比第三人大2岁,问第3个人,他说比第二人大2岁,问第2个人,他说比第一人大2岁,问最后一人,他说是10岁,编写程序,当输入第几个人时求出其对应年龄。

首先要明确递归要有一个最终界限,不然就会无止尽执行下去,这里的界限就是第一个时,年龄为10;,这样就采取倒推方式,来进行编写代码。


int age(int n)
{
	int m;
	if(n == 1)
	{
		m = 10;
	}
	else
	{
		m = age(n - 1) + 2;
	}
	
	return m;
}

main()
{
	int n, m;
	scanf("%d", &n);

	m = age(n);
	printf("第%d个,age = %d", n, m);
	printf("\n");
}

119 递归解决分🐟问题

A,B,C,D,E5个人在某天捕鱼,第二天A第一个醒来,把🐟分成5份,丢掉一个,拿走自己一份。B第二个醒来,把🐟分成5份,丢掉一个,拿走自己一份。C,D,E也是如此,请问至少补几条🐟??

int total(int n)
{
	static int i = 0;
	if(n == 1)
	{
		do
		{
			i++;
		}while(i % 5 == 0);
		return (i + 1);
	}
	else
	{
		int t;
		do
		{
			t = total(n - 1);
		}while(t % 4 != 0);
		return (t / 4 * 5 + 1);
	}
}

main()
{
	int fish;
	fish = total(5);
	printf("fish = %d", fish);
	printf("\n");
}

120 小数分离

利用数学函数实现以下功能:从键盘中输入一个小数,将其分解为整数部分和小数部分,并将其显示在屏幕上。

使用modf()函数将小数分解,将分解出的小数部分作为函数返回值赋给value,整数部分赋值给tail


 main()
{
	float num;
	double value, tail;
	scanf("%f", &num);
	
	tail = modf(num, &value);
	printf("%f %f", value ,tail);
    
	printf("\n");
}

在这里插入图片描述

121 求任意数的n次幂

利用数学函数,实现以下功能:从键盘中输入底数及次幂,求出从该次幂开始的连续5个结果,要求每次次幂数加1。
在这里插入图片描述

#include <stdio.h> 
     
void main()   
{ 
    int d;
    int t;
    int i;
        
    scanf("%d", &d);
	scanf("%d", &t);
		
	for(i = t; i < t + 5; i++)
	{
		printf("%f\n", pow(d, i));
	}	
}  

122 固定格式输出当前时间

编程实现将当前时间用以下形式输出:
星期 月 日 小时:分:秒 年

头文件<time.h> 声明一些处理日期与时间的类型和函数
struct tm:用于保存日历时间的各个构成部分
在这里插入图片描述
time_t time(time_t tp):
在这里插入图片描述
char
asctime(const struct tm *tp):
在这里插入图片描述
struct tm *localtime(const time_t *tp)
在这里插入图片描述

方式一:

#include <stdio.h> 
 #include <stdlib.h>
 #include <time.h> 
     
void main()   
{ 
    time_t p;
    
    time(&p);
    
    printf("%s", asctime(localtime(&p)));
}  

在这里插入图片描述
方式二:

 #include <stdio.h> 
// #include <stdlib.h>
 #include <time.h> 
     
void main()   
{ 
    struct tm *p;
    time_t local;
    
    local = time(NULL);
    p = localtime(&local);
    
    printf("tm_year = %d\n", p->tm_year + 1900);
    printf("tm_mon = %d\n", p->tm_mon + 1 );
    printf("tm_mday = %d\n", p->tm_mday);
    printf("tm_hour = %d\n", p->tm_hour);
    printf("tm_min = %d\n", p->tm_min);
    printf("tm_yday = %d\n", p->tm_yday);
    //printf("%s", asctime(localtime(&p)));
}  

在这里插入图片描述

123 设计函数计算学生平均身高

输入学生数并逐个输入学生的身高,然后输出身高的平均值

#include <stdio.h> 

void main()   
{ 
    int i;
    int n;
    int a[100];
    int sum =0;
    float avg = 0;
    
    printf("需要学生数:");
    scanf("%d", &n);
    
    for(i = 0; i < n; i++)
    {
    	scanf("%d", &a[i]);
	}
	
	for(i = 0; i < n; i++)
	{
		sum += a[i];
	}
	printf("sum = %d", sum);
	
	avg = sum / n;
	printf("avg = %f", avg);
}  

在这里插入图片描述

124 求数组元素中的最小值

从键盘中输入数组元素的个数(不大于20),根据输入的个数相应个数的数值,并显示出输入数值中的最小值。

 #include <stdio.h>  
void main()   
{ 
    int i;
    int n;
    int a[100];
    int min;
	 
    printf("输入个数:");
    scanf("%d", &n);
    
    for(i = 0; i < n; i++)
    {
    	scanf("%d", &a[i]);
	}
	
	min = a[0];
	
	for(i = 1; i < n; i++)
	{
		if(a[i] < min)
		{
			min = a[i];
		}
	}
	
	printf("min = %d", min)}  

在这里插入图片描述

125 打印 1 ~ 5 的阶乘

在屏幕输出1 ~ 5 的阶乘数

 #include <stdio.h> 

void func(int n)
{
	int sum = 1, i;
	
	for(i = 1; i <= n; i++)
	{
		sum = i * sum;
	}
	
	printf("%d ! = %d\n", n, sum);

}

void main()   
{ 
    int i;
    
    for(i = 1; i <= 5; i++)
    {
        func(i);
	}
	
}  

在这里插入图片描述

126 求最大公约数和最小公倍数

设计2个函数,分别计算2个整数的最大公约数和最小公倍数,并在主函数中将结果输出

最大公约数:
辗转相除法:用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。
在这里插入图片描述
最小公倍数:
最小公倍数=两数的乘积/最大公约(因)数;

 #include <stdio.h> 

int gcd(int a, int b)
{
   int c;
   
   c = a % b;
   if(c == 0)
   {
   	 return b;
   }
   else
   {
   	 gcd(b, c);
   }
}

int lcm(int a, int b, int c)
{
	return (a * b) / c;
}

void main()   
{ 
    int a, b, c, d;
	
	scanf("%d %d", &a, &b); 
	
	if(a > b)
	{
		c = gcd(a, b);
	}
	else
	{
	 	c = gcd(b, a);
	} 
	
	d = lcm(a, b, c);
	
	printf("最大公约数%d\n", c);
	printf("最小公倍数%d", d);
	
}  

在这里插入图片描述
在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值