A. 函数求值
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: bupt_admin | 是否specialjudge: False |
题目描述
求下列函数值:

输入格式:第一行是测试数据的组数T(1 <= T <= 20),后面跟着T行输入。每组测试数据占1行,包括一个正整数n(1 <= n <= 200),和一个浮点数x(0 < x < 100)。
输出格式:T行,每行输出对应一个输入,为所求得的函数值(保留3位小数)
输入样例
2
1 3.
20 3.3
输出样例
2.000
4.987
示例代码
#include<stdio.h>
#include<math.h>
double f(double, int);
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
double x;
int n;
scanf("%d %lf", &n, &x);
printf("%.3lf\n", f(x, n));
}
return 0;
}
double f(double x, int n)
{
if (n == 1)
{
return sqrt(1 + x);
}
else
{
return sqrt(n + f(x, n - 1));
}
}
B. 实验6_4_二进制转十进制
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: bupt_admin | 是否specialjudge: False |
题目描述
问题描述:
设计递归函数int convert(int n);用于将二进制数n转换为十进制数并返回。
递归函数设计思路与提示:
如将1101转换为十进制的形式:
1101=1*2^0+0*2^1+1*2^2+1*2^3=1101%10+convert(110)*2;
110=0*2^0+1*2^1+1*2^2=110%10+ convert(11)*2;
11=1*2^0+1*2^1=11%10+convert(1)*2;
convert(1)=1;
所以得到以下结论:当n==0或n==1时,函数返回n,否则返回n%10+convert(n/10)*2。
输入与输出要求:
输入一个整数n,代表二进制数,其长度不大于10。输出转换后的十进制数,占一行。
输入样例
101010
42
输出样例
11
3
示例代码
#include<stdio.h>
int convert(long long int);
int main()
{
long long int n;
scanf("%lld", &n);
printf("%d", convert(n));
return 0;
}
int convert(long long int n)
{
if (n == 0 || n == 1)
{
return n;
}
else
{
return n % 10 + convert(n / 10) * 2;
}
}
C. 实验6_5_二进制的位数
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: bupt_admin | 是否specialjudge: False |
题目描述
问题描述:
设计递归函数int countBinary(int n);用于将非负十进制整数n转换成二进制形式,并返回该二进制数的位数。如十进制数13的二进制形式为1101,位数为4,那么调用countBinary(13)的结果为4。
要求同学们先写出该问题的递归定义式,再设计递归函数。
输入与输出要求:
输入一个非负整数n。输出求得的结果,如输入“13”,输出“4”,占一行。
输入样例
13
4
输出样例
2000000000
31
示例代码
#include<stdio.h>
int count = 0;
void f(int);
int main()
{
int n;
scanf("%d", &n);
f(n);
printf("%d", count);
return 0;
}
void f(int x)
{
if (x != 1 && x != 0)
{
count++;
f(x / 2);
}
else
{
count++;
}
return;
}
D. 实验6_7_最大公约数
关于如何用辗转相除法求最大公因数和最小公倍数
https://www.jray.xyz/index.php/2019/11/15/%e8%be%97%e8%bd%ac%e7%9b%b8%e9%99%a4%e6%b3%95%e6%b1%82%e6%9c%80%e5%a4%a7%e5%85%ac%e7%ba%a6%e6%95%b0%e3%80%81%e6%9c%80%e5%b0%8f%e5%85%ac%e5%80%8d%e6%95%b0/
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: bupt_admin | 是否specialjudge: False |
题目描述
问题描述:
设计递归函数int GCD(int a,int b);计算正整数a和b的最大公约数并返回。如GCD(32,48)为16。
GCD(a,b)递归定义为:
GCD(a,b)=GCD(b,a MOD b) | a MOD b≠0
GCD(a,b)=b | a MOD b=0
输入与输出要求:
输入两个正整数a和b,输出两数的最大公约数数,占一行。
输入样例
32 48
8 12
输出样例
16
4
示例代码
#include<stdio.h>
int GCD(int, int);
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", GCD(a, b));
return 0;
}
int GCD(int a,int b)
{
if (a % b != 0)
{
return GCD(b, a % b);
}
else
{
return b;
}
}
E. 实验6_9_素数分解
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: bupt_admin | 是否specialjudge: False |
题目描述
问题描述:
设计递归函数void recurPrintFactor(int n,…);打印出对n进行素数分解的结果。当执行recurPrintFactor(60)时,打印效果为:60=2*2*3*5。在函数的参数中“…”代表你可以添加参数。并且也可使用全局变量。关于素数分解的描述,见实验五第14题。
设计程序,已知一段数据范围[a,b],且a<=b,要求对其中的每一个数进行素数分解。你也可以设计其它辅助函数,如判断素数的函数isPrime(n)。
输入与输出要求:
输入两个正整数a、b,代表所分解的区间,满足1<=a<=b<=100000,且b-a<=100。输出b-a+1行,即b-a+1个数的分解。
输入样例
100 105
9999 10005
输出样例
100=2*2*5*5
101=101
102=2*3*17
103=103
104=2*2*2*13
105=3*5*7
9999=3*3*11*101
10000=2*2*2*2*5*5*5*5
10001=73*137
10002=2*3*1667
10003=7*1429
10004=2*2*41*61
10005=3*5*23*29
示例代码
#include<stdio.h>
void recurPrintFactor(int);
int main()
{
int x, y;
scanf("%d %d", &x, &y);
if (x == 1)
{
printf("1=1\n");
x++;
}
for (int i = x; i <= y; i++)
{
printf("%d=", i);
recurPrintFactor(i);
}
return 0;
}
void recurPrintFactor(int n)
{
int i = 2;
for (; i < n; i++)
{
if (n % i == 0)
{
printf("%d*", i);
recurPrintFactor(n / i);
return;
}
}
if (n != 1)
{
printf("%d\n", i);
}
return;
}