文章目录
一、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
13*…*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;
}