函数题目复习
题1:十进制转换二进制
本题要求实现一个函数,将正整数n转换为二进制后输出。
函数接口定义:
void dectobin( int n );
裁判测试程序样例:
#include <stdio.h>
void dectobin( int n );
int main()
{
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10
输出样例:
1010
解答:
void dectobin( int n )
{
if(n==1)
printf("1");
if(n==0)
printf("0");
if(n>=2)
{
dectobin(n/2);
printf("%d",n%2);
}
}
题2: 递归求Fabonacci数列
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。
函数接口定义:
int f( int n );
函数f
应返回第n
个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。
裁判测试程序样例:
#include <stdio.h>
int f( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", f(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
6
输出样例:
9
解答:
int f( int n )
{
if(n==0)
{
return 0;
}
else if(n==1)
{
return 1;
}
else
{
return f(n-2)+f(n-1);
}
}
题3:递归求简单交错幂级数的部分和
本题要求实现一个函数,计算下列简单交错幂级数的部分和:
函数接口定义:
double fn( double x, int n );
其中题目保证传入的n
是正整数,并且输入输出都在双精度范围内。函数fn
应返回上述级数的部分和。建议尝试用递归实现。
裁判测试程序样例:
#include <stdio.h>
double fn( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.2f\n", fn(x,n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
0.5 12
输出样例:
0.33
解答:
#include<math.h>
double fn( double x, int n )
{
double f;
if(n==1)
{
f=x;
}
else
{
f=pow(-1,n-1)*pow(x,n)+fn(x,n-1);
}
return f;
}
题4:递归计算P函数
本题要求实现下列函数P(n,x)
的计算,其函数定义如下:
函数接口定义:
double P( int n, double x );
其中n
是用户传入的非负整数,x
是双精度浮点数。函数P
返回P(n,x)
函数的相应值。题目保证输入输出都在双精度范围内。
裁判测试程序样例:
#include <stdio.h>
double P( int n, double x );
int main()
{
int n;
double x;
scanf("%d %lf", &n, &x);
printf("%.2f\n", P(n,x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10 1.7
输出样例:
3.05
解答:
double P( int n, double x )
{
double sum=0;
if(n==0)
sum= 1;
else if(n==1)
sum=x;
else if(n>1)
sum=((2*n-1)*P(n-1,x)-(n-1)*P(n-2,x))/n;
return sum;
}
题5:递归求阶乘和
本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+…+n! 的值。
函数接口定义:
double fact( int n );
double factsum( int n );
函数fact
应返回n
的阶乘,建议用递归实现。函数factsum
应返回 1!+2!+…+n
! 的值。题目保证输入输出在双精度范围内。
裁判测试程序样例:
#include <stdio.h>
double fact( int n );
double factsum( int n );
int main()
{
int n;
scanf("%d",&n);
printf("fact(%d) = %.0f\n", n, fact(n));
printf("sum = %.0f\n", factsum(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
10
输出样例1:
fact(10) = 3628800
sum = 4037913
输入样例2:
0
输出样例2:
fact(0) = 1
sum = 0
解答:
double fact( int n )
{
double f;
if(n==1||n==0)
f=1;
else
f=fact(n-1)*n;
return f;
}
double factsum( int n )
{
double fs;
if(n==1)
fs=1;
else if(n==0)
fs=0;
else
fs=factsum(n-1)+fact(n);
return fs;
}
Today复习以上!