集美大学 - 2840 - 实验10 - 函数题

实验10-2 判断满足条件的三位数

本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。

函数接口定义:

int search( int n );

其中传入的参数int n是一个三位数的正整数(最高位数字非0)。函数search返回[101, n]区间内所有满足条件的数的个数。

裁判测试程序样例:

#include 
#include 

int search( int n );

int main()
{
    int number;

    scanf("%d",&number);
    printf("count=%d\n",search(number));
        
    return 0;
}


/* 你的代码将被嵌在这里 */

输入样例:

500

输出样例:

count=6
int search(int n) {
    int cnt = 101, count = 0;;
    while (cnt <= n) {
        int m = 1;
        while (m <= sqrt(cnt)) {
            if (cnt == m * m) {
                int a, b, c;
                a = cnt % 10;
                b = cnt % 100 / 10;
                c = cnt / 100;
                if (a == b || b == c || c == a)count++;
            }
            m++;
        }
        cnt++;
    }
    return count;
}

实验10-3 递归函数 递归求阶乘和

本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+…+n! 的值。

函数接口定义:

double fact( int n );
double factsum( int n );

函数fact应返回n的阶乘,建议用递归实现。函数factsum应返回 1!+2!+…+n! 的值。题目保证输入输出在双精度范围内。

裁判测试程序样例:

#include 

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) {
    int cnt = 1;
    int y = 1;
    if (n == 0) return y;
    for (cnt = 1; cnt <= n; cnt++) y *= cnt;
    return y;
}

double factsum(int n) {
    int cnt = 1;
    double sum = 0;
    if (n == 0) return sum;
    else {
        for (cnt = 1; cnt <= n; cnt++) sum = sum + fact(cnt);
    }
    return sum;
}

实验10-4 递归函数 递归实现指数函数

本题要求实现一个计算 x n x^n xn(n≥1)的函数。

函数接口定义:

double calc_pow( double x, int n );

函数calc_pow应返回xn次幂的值。建议用递归实现。题目保证结果在双精度范围内。

裁判测试程序样例:

#include 

double calc_pow( double x, int n );

int main()
{
    double x;
    int n;

    scanf("%lf %d", &x, &n);
    printf("%.0f\n", calc_pow(x, n));

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

2 3

输出样例:

8
double calc_pow(double x, int n) {
    int m = 1;
    double y;
    y = 1;
    for (m = 1; m <= n; m++) y = y * x;
    return y;
}

实验10-5 递归函数 递归求简单交错幂级数的部分和

本题要求实现一个函数,计算下列简单交错幂级数的部分和: f ( x , n ) = x − x 2 + x 3 − x 4 + . . . + ( − 1 ) n − 1 x n f(x,n)=x-x^2+x^3-x^4+...+(-1)^{n-1}x^n f(x,n)=xx2+x3x4+...+(1)n1xn

函数接口定义:

double fn( double x, int n );

其中题目保证传入的n是正整数,并且输入输出都在双精度范围内。函数fn应返回上述级数的部分和。建议尝试用递归实现。

裁判测试程序样例:

#include 

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
double fn(double x, int n) {
    if (n == 1) return x;
    else return pow(-1, n - 1) * pow(x, n) + fn(x, n - 1);
}

实验10-6 递归函数 递归计算Ackermenn函数

本题要求实现Ackermenn函数的计算,其函数定义如下:
在这里插入图片描述

函数接口定义:

int Ack( int m, int n );

其中mn是用户传入的非负整数。函数Ack返回Ackermenn函数的相应值。题目保证输入输出都在长整型范围内。

裁判测试程序样例:

#include 

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) {
    if (m == 0) return n + 1;
    else if (n == 0 && m > 0) return Ack(m - 1, 1);
    else if (m > 0 && n > 0)return Ack(m - 1, Ack(m, n - 1));
}

实验10-7 递归函数 递归求Fabonacci数列

本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:
f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。

函数接口定义:

int f( int n );

函数f应返回第nFabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。

裁判测试程序样例:

#include 

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 == 0) return 0;
    else if (n == 1) return 1;
    else if (n >= 2) return f(n - 1) + f(n - 2);
}

实验10-8 递归函数 递归计算P函数

本题要求实现下列函数P(n,x)的计算,其函数定义如下:

集美大学 - 2840 - 实验10 - 函数题_第1张图片
函数接口定义:

double P( int n, double x );

其中n是用户传入的非负整数,x是双精度浮点数。函数P返回P(n,x)函数的相应值。题目保证输入输出都在双精度范围内。

裁判测试程序样例:

#include 

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) {
    if (n == 0) return 1;
    else if (n == 1)return x;
    else if (n > 1) return ((2 * n - 1) * P(n - 1, x) - (n - 1) * P(n - 2, x)) / n;
}

实验10-9 递归函数 十进制转换二进制

本题要求实现一个函数,将非负整数n转换为二进制后输出。

函数接口定义:

void dectobin( int n );

函数dectobin应在一行中打印出二进制的n。建议用递归实现。

裁判测试程序样例:

#include 

void dectobin( int n );

int main()
{
    int n;
    
    scanf("%d", &n);
    dectobin(n);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

10

输出样例:

1010
void dectobin(int n) {
    if (n < 2)printf("%d", n);
    else {
        dectobin(n / 2);
        printf("%d", n % 2);
    }
}

实验10-10 递归函数 递归实现顺序输出整数

本题要求实现一个函数,对一个整数进行按位顺序输出。

函数接口定义:

void printdigits( int n );

函数printdigits应将n的每一位数字从高位到低位顺序打印出来,每位数字占一行。

裁判测试程序样例:

#include 

void printdigits( int n );

int main()
{
    int n;
    
    scanf("%d", &n);
    printdigits(n);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

12345

输出样例:

1
2
3
4
5
void printdigits(int n) {
    if (n < 10)
        printf("%d\n", n);
    else {
        printdigits(n / 10);
        printf("%d\n", n % 10);
    }
}

你可能感兴趣的:(集美大学,-,2840,c++,c语言,算法)