c语言入门实验三——函数结构程序设计

本文提供了一系列编程问题的解决方案,包括使用递归计算Fibonacci数列、判断完数、十进制转二进制、阶乘计算以及勒让德多项式的值。每个问题都涉及递归函数的定义和调用,展示了递归在解决数学和计算问题中的应用。
摘要由CSDN通过智能技术生成

文章目录

一、Fibonacci数:定义并调用函数fib(n)

标题2.1 程序功能:输入两个正整数m和n(1<=m<=n<=10000),输出第m项至第n项之间所有的Fibonacci数。Fibonacci序列(第1项起):1 1 2 3 5 8 13 21…。要求定义并调用函数fib(n),返回第n项Fibonacci数。例如,fib(7)的返回值是13。程序运行结果如下:

输入两个正整数m和n(1<=m<=n<=10000): 10 20
第20项到第10项的fibonacci数是:
55 89 144 233 377 610 987 1597 2584 4181 6765

#include<stdio.h>
int fib(n);
int fib(int n){
	if(n==1||n==2)
		return 1;
	else if(n>2)
		return fib(n-1)+fib(n-2);
}
int main()
{
	int t1,n,m;
	printf("输入两个正整数m和n(1<=m<=n<=10000): ");
	scanf("%d %d",&n,&m);
	if(m>n)
	{
		t1=m;
		m=n;
		n=t1;
	}
	printf("第%d项到第%d项的fibonacci数是:\n",n,m);
	for(m;m<=n;m++){
	printf("%d ",fib(m));
	}
	printf("\n");
	return 0;
}

二、完数:定义并调用函数factorsum(i)

程序功能:输入两个正整数m和n(1<=m<=n<=10000),输出m到n之间的所有完数(完数就是因子和与它本身相等的数)。要求定义并调用函数factorsum(i),它的功能是返回i的因子和。例如:factorsum(12)的返回值是16(1+2+3+4+6)。运行结果如下:

输入两个正整数m和n(1<=m<=n<=10000): 1 1000
第1项到第1000项的factorsum数是:
6 28 496

#include<stdio.h>
int factorsum(int i){
	int j,sum=0;
	for(j=1;j<=i/2;j++){
		if((i%j)==0){
			sum+=j;
		}
		if(j==i/2)
			if(i==sum){
			printf("%d ",i);
			sum=0;//sum重置为0
			}
	}
	return 0;
}
int main()
{
	int t1,n,m;
	printf("输入两个正整数m和n(1<=m<=n<=10000): ");
	scanf("%d %d",&n,&m);
	if(m>n)
	{
		t1=m;
		m=n;
		n=t1;
	}
	printf("第%d项到第%d项的factorsum数是:\n",m,n);
	for(m;m<=n;m++){
	factorsum(m);
	}
	printf("\n");
	return 0;
}
}

三、进制转化:十进制数转化为二进制数

输入正整数n,将其转换为二进制数并输出转换结果。要求定义并调用函数dectobin(n),计算并返回n的二进制数。例如:调用dectobin(13),返回1101。运行结果如下

输入一个正整数n:13
十进制数13的二进制数是1101

#include<stdio.h>
int dectobin(int n);
int dectobin(int n){
	int a[20],i=0;
	for(n;n>0;i++){
		a[i]=(n%2);
		n=n/2;
	}
	i--;
	for(i;i>=0;){
		printf("%d",a[i]);
		i--;
	}
	printf("\n");
	return 0;
}
int main()
{
	int n;
	printf("输入一个正整数n:");
	scanf("%d",&n);
	printf("十进制数%d的二进制数是",n);
	dectobin(n);
	return 0;
}

四、 递归求阶乘:定义递归函数fact(n)计算表达式t=n!的值

标题2.4 程序功能:定义递归函数fact(n)计算表达式t=n!的值(n>=0)。在主函数中输入n,调用递归函数fact(n)求出t的值,最后输出t值。程序运行结果如下

请输入n值:5
t=5!的值:120

#include<stdio.h>
int fact(int n)
{
	if(n==1)
		return 1;
	else if(n>1)
		return fact(n-1)*n;
}
int main()
{
	int n;
	printf("请输入n值:");
	scanf("%d",&n);
	printf("t=%d!的值:%d\n",n,fact(n));
	return 0;
}

五、递归函数fun(n)

2.5 程序功能:定义递归函数fun(n)计算表达式t=1357…*(2n-1)的值(n>=1)。在主函数中输入n,调用递归函数fun(n)求出t的值,最后输出t值。程序运行结果如下

求t=1357……(2n-1)
请输入n值:5
1
3*…*9的值:945

#include<stdio.h>
int fun(int n)
{
	if(n==1)
		return 1;
	else if(n>1)
		return fun(n-1)*(2*n-1);
}
int main()
{
	int n;
	printf("求t=1*3*5*7*……*(2n-1)\n请输入n值:");
	scanf("%d",&n);
	printf("1*3*…*%d的值:%d\n",2*n-1,fun(n));
	return 0;
}

六、定义递归函数fun(n,x)求n阶勒让德多项式的值

2.6程序功能:定义递归函数fun(n,x)求n阶勒让德多项式的值,在主函数中输入整数n(n>=0)和实数x,调用递归函数fun(n,x)计算并返回n阶勒让德多项式的值,最后输出计算结果。程序运行结果如下图。递归公式如下:

在这里插入图片描述

求n阶勒让德多项式的值
请输入一个整数n(n>=0):2
请输入一个实数x:1.0
2阶勒让德多项式的值:0.5

#include<stdio.h>
float fun(int n,float x)
{
	if(n==0)
		return 1;
	else if(n==1)
		return x;
	else if(n>=1)
		return ((2*n-1)*x-fun(n-1,x)-(n-1)*fun(n-2,x))/n;
}
int main()
{
	int n;
	float x;
	printf("求n阶勒让德多项式的值\n请输入一个整数n(n>=0):");
	scanf("%d",&n);
	printf("请输入一个实数x:");
	scanf("%f",&x);
	printf("%d阶勒让德多项式的值:%.1f\n",n,fun(n,x));
	return 0;
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值