6-1 递归求简单交错幂级数的部分和 分数 15
本题要求实现一个函数,计算下列简单交错幂级数的部分和:
f(x,n)=x−x2+x3−x4+⋯+(−1)n−1xn
函数接口定义:
double fn( double x, int n );
其中题目保证传入的n
是正整数,并且输入输出都在双精度范围内。函数fn
应返回上述级数的部分和。建议尝试用递归实现。
裁判测试程序样例:
#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;
}
/* 你的代码将被嵌在这里 */
输入样例:
0.5 12
输出样例:
0.33
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
double fn(double x, int n)
{
if(n == 1) return x;
return (n % 2 ? 1 : -1) * pow(x, n) + fn(x, n - 1);
}
6-2 简单实现x的n次方 分数 10
本题要求实现一个计算xn(n≥0)的函数。
函数接口定义:
double mypow( double x, int n );
函数mypow
应返回x
的n
次幂的值。题目保证结果在双精度范围内。
裁判测试程序样例:
#include <stdio.h>
double mypow( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%f\n", mypow(x, n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
0.24 4
输出样例:
0.003318
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
double mypow(double x, int n)
{
if(!n) return 1;
return x * mypow(x, n - 1);
}
6-3 使用函数求1到10的阶乘和
分数 10
本题要求实现一个计算非负整数阶乘的简单函数,使得可以利用该函数,计算1!+2!+⋯+10!的值。
函数接口定义:
double fact( int n );
其中n
是用户传入的参数,其值不超过10。如果n
是非负整数,则该函数必须返回n
的阶乘。
裁判测试程序样例:
#include <stdio.h>
double fact( int n );
int main(void)
{
int i;
double sum;
sum = 0;
for(i = 1; i <= 10; i++)
sum = sum + fact(i);
printf("1!+2!+...+10! = %f\n", sum);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
本题没有输入。
输出样例:
1!+2!+...+10! = 4037913.000000
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int st[100010];
double fact(int n)
{
if(!n) return 1;
return fact(n - 1) * n;
}
6-4 使用函数计算两点间的距离 分数 10
本题要求实现一个函数,对给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离。
函数接口定义:
double dist( double x1, double y1, double x2, double y2 );
其中用户传入的参数为平面上两个点的坐标(x1
, y1
)和(x2
, y2
),函数dist
应返回两点间的距离。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
double dist( double x1, double y1, double x2, double y2 );
int main()
{
double x1, y1, x2, y2;
scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("dist = %.2f\n", dist(x1, y1, x2, y2));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10 10 200 100
输出样例:
dist = 210.24
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
double dist(double x1, double y1, double x, double y)
{
double dx = x1 - x, dy = y1 - y;
return sqrt(dx * dx + dy * dy);
}
6-5 符号函数 分数 10
本题要求实现符号函数sign(x)。
函数接口定义:
int sign( int x );
其中x
是用户传入的整型参数。符号函数的定义为:若x
大于0,sign(x)
= 1;若x
等于0,sign(x)
= 0;否则,sign(x)
= −1。
裁判测试程序样例:
#include <stdio.h>
int sign( int x );
int main()
{
int x;
scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10
输出样例:
sign(10) = 1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int sign(int x)
{
return x ? x > 0 ? 1 : -1 : 0;
}
6-6 使用函数判断完全平方数 分数 10
本题要求实现一个判断整数是否为完全平方数的简单函数。
函数接口定义:
int IsSquare( int n );
其中n
是用户传入的参数,在长整型范围内。如果n
是完全平方数,则函数IsSquare
必须返回1,否则返回0。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int IsSquare( int n );
int main()
{
int n;
scanf("%d", &n);
if ( IsSquare(n) ) printf("YES\n");
else printf("NO\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
90
输出样例1:
NO
输入样例2:
100
输出样例2:
YES
鸣谢安阳师范学院段晓云老师、用户黄凯涵修正数据~
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int IsSquare(int n)
{
return (int)sqrt(n) * (int)sqrt(n) == n;
}
6-7 使用函数求素数和 分数 20
本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。
素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
函数接口定义:
int prime( int p ); int PrimeSum( int m, int n );
其中函数prime
当用户传入参数p
为素数时返回1,否则返回0;函数PrimeSum
返回区间[m
, n
]内所有素数的和。题目保证用户传入的参数m
≤n
。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int prime( int p );
int PrimeSum( int m, int n );
int main()
{
int m, n, p;
scanf("%d %d", &m, &n);
printf("Sum of ( ");
for( p=m; p<=n; p++ ) {
if( prime(p) != 0 )
printf("%d ", p);
}
printf(") = %d\n", PrimeSum(m, n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
-1 10
输出样例:
Sum of ( 2 3 5 7 ) = 17
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int prime(int p)
{
if(p <= 1) return 0;
for(int i = 2; i <= p / i; ++ i)
if(p % i == 0) return 0;
return 1;
}
int PrimeSum(int m, int n)
{
int res = 0;
for(int i = m; i <= n; ++ i)
if(prime(i)) res += i;
return res;
}
6-8 数字金字塔 分数 15
本题要求实现函数输出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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void pyramid(int n)
{
for(int i = 1; i <= n; ++ i)
{
for(int j = 1; j <= n - i; ++ j) putchar(' ');
for(int j = 1; j <= i; ++ j) printf("%d ", i);
putchar('\n');
}
}
6-9 使用函数计算两个复数之积 分数 10
若两个复数分别为:c1=x1+y1i和c2=x2+y2i,则它们的乘积为 c1×c2=(x1x2−y1y2)+(x1y2+x2y1)i。
本题要求实现一个函数计算两个复数之积。
函数接口定义:
double result_real, result_imag; void complex_prod( double x1, double y1, double x2, double y2 );
其中用户传入的参数为两个复数x1
+y1
i和x2
+y2
i;函数complex_prod
应将计算结果的实部存放在全局变量result_real
中、虚部存放在全局变量result_imag
中。
裁判测试程序样例:
#include<stdio.h>
double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 );
int main(void)
{
double imag1, imag2, real1, real2;
scanf("%lf %lf", &real1, &imag1);
scanf("%lf %lf", &real2, &imag2);
complex_prod(real1, imag1, real2, imag2);
printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
1 2
-2 -3
输出样例:
product of complex is (4.000000)+(-7.000000)i
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void complex_prod(double x1, double y1, double x, double y)
{
result_real = x1 * x - y1 * y;
result_imag = x1 * y + x * y1;
}
6-10 使用函数求最大公约数 分数 10
本题要求实现一个计算两个数的最大公约数的简单函数。
函数接口定义:
int gcd( int x, int y );
其中x
和y
是两个正整数,函数gcd
应返回这两个数的最大公约数。
裁判测试程序样例:
#include <stdio.h>
int gcd( int x, int y );
int main()
{
int x, y;
scanf("%d %d", &x, &y);
printf("%d\n", gcd(x, y));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
32 72
输出样例:
8
感谢集美大学蓝华斌同学修正测试数据!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int gcd(int x, int y)
{
return y ? gcd(y, x % y) : x;
}