目录
6-1 使用函数求e的近似值 (5分)
自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。本题要求实现一个计算阶乘的简单函数,使得可以利用该函数,对给定的非负整数n,求该级数的前n+1项和。
函数接口定义:
double fact( int n );
其中n是用户传入的参数,函数返回n的阶乘。
裁判测试程序样例:
#include <stdio.h>
double fact( int n );
int main(void)
{
int i, n;
double sum;
scanf("%d", &n);
sum = 1;
for(i = 1; i <= n; i++){
sum = sum + 1.0/fact(i);
}
printf("%f\n", sum);
return 0;
}
/* 请在这里填写答案 */
输入样例:
10
输出样例:
2.718282
代码
double fact( int n )
{
int i;
double m=1.0;
for(i=1;i<=n;i++)
{
m=m*i; //要使用double,会超出int的范围!!
}
return m;
}
6-2 数字金字塔 (5分)
本题要求实现函数输出n行数字金字塔。
函数接口定义:
void pyramid( int n );
其中n
是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n
行数字金字塔。注
意每个数字后面跟一个空格。
裁判测试程序样例:
#include <stdio.h>
void pyramid( int n );
int main()
{
int n;
scanf("%d", &n);
pyramid(n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
5
输出样例:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
代码
void pyramid( int n ){
int i,j,k;
//三层for嵌套
for(i=1;i<=n;i++){//控制行数
for( j=1;j<=n-i;j++){//根据行数输出空格
printf(" ");//输出数字前空格
}
for(k=1;k<=i;k++){//根据行数输出数字
printf("%d",i);
printf(" ");//输出数字后的空格
}
printf("\n");
}
}
6-3 使用递归函数计算1到n之和 (5分)
本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。
函数接口定义:
int sum( int n );
该函数对于传入的正整数n
返回1+2+3+…+n
的和;若n
不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。
裁判测试程序样例:
#include <stdio.h>
int sum( int n );
int main()
{
int n;
scanf("%d", &n);
printf ("%d\n", sum(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
10
输出样例1:
55
输入样例2:
0
输出样例2:
0
代码
int sum( int n )
{
int result;
if(n<=0)
result=0;
else if(n==1)
result=1;
else
result=sum(n-1)+n;
return result;
}
6-4 递归计算Ackermenn函数 (5分)
本题要求实现Ackermenn函数的计算,其函数定义如下:
函数接口定义:
int Ack( int m, int n );
其中m
和n
是用户传入的非负整数。函数Ack
返回Ackermenn函数的相应值。题目保证输入输出都在长整型范围内。
裁判测试程序样例:
#include <stdio.h>
int Ack( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("%d\n", Ack(m, n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
2 3
输出样例:
9
代码
int Ack( int m, int n ){
int result;
if (m == 0){
result = n + 1;
}else if (n == 0&&m > 0){
result = Ack(m - 1,1);
}else if (m > 0&&n > 0){
result = Ack(m - 1,Ack(m,n - 1));
}
return result;
}
6-5 递归求Fabonacci数列 (5分)
本题要求实现求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
输出样例:
8
代码
int f(int n)
{
if(n == 1)
return 1;
else if(n == 0)
return 0;
else
return f(n - 2) + f(n - 1);
}