习题10-6 递归求Fabonacci数列(10 分)

习题10-6 递归求Fabonacci数列(10 分)

本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

$f(n)=f(n−2)+f(n−1) (n\ge2)$,其中$f(0)=0,f(1)=1$。

函数接口定义:

1
int f( int n );

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

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int f( int n );

int main()
{
int n;

scanf("%d", &n);
printf("%d\n", f(n));

return 0;
}

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

输入样例:

1
6

输出样例:

1
8

习题10-5 递归计算Ackermenn函数(15 分)

习题10-5 递归计算Ackermenn函数(15 分)

本题要求实现Ackermenn函数的计算,其函数定义如下:
$$
\operatorname{ack}(m, n)=\begin{cases}
n+1, & m = 0 \\\\
\operatorname{ack}(m-1, 1), & n=0 \& \& m\gt0 \\\\
\operatorname{ack}(m-1, \operatorname{ack}(m, n-1)),& m \gt0 \& \& n\gt 0
\end{cases}
$$

函数接口定义:

1
int Ack( int m, int n );

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

范围内。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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;
}

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

输入样例:

1
2 3

输出样例:

1
9

习题10-4 递归求简单交错幂级数的部分和(15 分)

习题10-4 递归求简单交错幂级数的部分和(15 分)

本题要求实现一个函数,计算下列简单交错幂级数的部分和:

$f(x, n)=x-x^{2}+x^{3}-x^{4}+\cdots+(-1)^{n-1} x^{n}$

函数接口定义:

1
double fn( double x, int n );

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

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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;
}

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

输入样例:

1
0.5 12

输出样例:

1
0.33

习题10-3 递归实现指数函数(15 分)

习题10-3 递归实现指数函数(15 分)

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

函数接口定义:

1
double calc_pow( double x, int n );

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

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

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

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

输入样例:

1
2 3

输出样例:

1
8

习题10-2 递归求阶乘和(15 分)

习题10-2 递归求阶乘和(15 分)

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

函数接口定义:

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

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

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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:

1
10

输出样例1:

1
2
fact(10) = 3628800
sum = 4037913

输入样例2:

1
0

输出样例2:

1
2
fact(0) = 1
sum = 0

习题10-1 判断满足条件的三位数(15 分)

练习10-1 使用递归函数计算1到n之和(10 分)

本题要求实现一个用递归计算$1+2+3+\ldots+n$的和的简单函数。

函数接口定义:

1
int sum( int n );

该函数对于传入的正整数n返回1+2+3+…+n的和;若n不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int sum( int n );

int main()
{
int n;

scanf("%d", &n);
printf ("%d\n", sum(n));

return 0;
}

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

输入样例1:

1
10

输出样例1:

1
55

输入样例2:

1
0

输出样例2:

1
0

练习10-1 使用递归函数计算1到n之和(10 分)

练习10-1 使用递归函数计算1到n之和(10 分)

本题要求实现一个用递归计算$1+2+3+\ldots+n$的和的简单函数。

函数接口定义:

1
int sum( int n );

该函数对于传入的正整数n返回1+2+3+…+n的和;若n不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int sum( int n );

int main()
{
int n;

scanf("%d", &n);
printf ("%d\n", sum(n));

return 0;
}

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

输入样例1:

1
10

输出样例1:

1
55

输入样例2:

1
0

输出样例2:

1
0

习题9-6 按等级统计学生成绩(20 分)

习题9-6 按等级统计学生成绩(20 分)

本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。

函数接口定义:

1
int set_grade( struct student *p, int n );

其中p是指向学生信息的结构体数组的指针,该结构体的定义为:

1
2
3
4
5
6
struct student{
int num;
char name[20];
int score;
char grade;
};

n是数组元素个数。学号num、姓名name和成绩score均是已经存储好的。set_grade函数需要根据学生的成绩score设置其等级grade。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时,set_grade还需要返回不及格的人数。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#define MAXN 10

struct student{
int num;
char name[20];
int score;
char grade;
};

int set_grade( struct student *p, int n );

int main()
{ struct student stu[MAXN], *ptr;
int n, i, count;

ptr = stu;
scanf("%d\n", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
}
count = set_grade(ptr, n);
printf("The count for failed (<60): %d\n", count);
printf("The grades:\n");
for(i = 0; i < n; i++)
printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
return 0;
}

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

输入样例:

1
2
3
4
5
6
7
8
9
10
11
10
31001 annie 85
31002 bonny 75
31003 carol 70
31004 dan 84
31005 susan 90
31006 paul 69
31007 pam 60
31008 apple 50
31009 nancy 100
31010 bob 78

输出样例:

1
2
3
4
5
6
7
8
9
10
11
12
The count for failed (<60): 1
The grades:
31001 annie A
31002 bonny B
31003 carol B
31004 dan B
31005 susan A
31006 paul C
31007 pam C
31008 apple D
31009 nancy A
31010 bob B

习题9-5 通讯录排序(20 分)

习题9-5 通讯录排序(20 分)

输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:

输入第一行给出正整数$n(\lt 10)$。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+-组成的字符串。

输出格式:

按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:

1
2
3
4
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543

输出样例:

1
2
3
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678

习题9-4 查找书籍(20 分)

习题9-4 查找书籍(20 分)

给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

输入格式:

输入第一行给出正整数$n(\lt 10)$,随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。

输出格式:

在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。

输入样例:

1
2
3
4
5
6
7
3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0

输出样例:

1
2
25.00, Programming in Delphi
18.50, Programming in VB
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×