【PTA|函数题|期末复习|PARR 1】函数(二)

目录

6-1 使用函数求e的近似值 (5分)

函数接口定义:

裁判测试程序样例:

输入样例:

输出样例:

代码

6-2 数字金字塔 (5分)

函数接口定义:

裁判测试程序样例:

输入样例:

输出样例:

代码

6-3 使用递归函数计算1到n之和 (5分)

函数接口定义:

裁判测试程序样例:

输入样例1:

输出样例1:

输入样例2:

输出样例2:

代码

6-4 递归计算Ackermenn函数 (5分)

函数接口定义:

裁判测试程序样例:

输入样例:

输出样例:

代码

6-5 递归求Fabonacci数列 (5分)

函数接口定义:

裁判测试程序样例:

输入样例:

输出样例:

代码


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 );

其中mn是用户传入的非负整数。函数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);
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值