educoderC语⾔平台实训答案【添加结构体+⽂件部分】(仅供参考)第5部分函数
第1关
求和
任务描述
题⽬描述:给你⼀个n,要求你编写⼀个函数求1+2+…+n.
输⼊
输⼊⼀个n
输出
输出1+2+…+n的和
测试说明
样例输⼊:
100
样例输出:
5050
#include"stdio.h"
void he(long long n)
{
long long i,sum=0;
for(i=1;i<=n;i++)
sum+=i;
printf("%lld",sum);
}
int main()
{
long long n;
scanf("%lld",&n);
he(n);
}
第2关
回⽂数计算
任务描述
本关任务:编写函数求区间[200,3000]中所有的回⽂数,回⽂数是正读和反读都是⼀样的数。如525, 1551
输⼊
⽆需输⼊
输出
输出区间[200,3000]中所有的回⽂数,⼀⾏⼀个回⽂数,不需要输出其它⽆关的字符。
202
212
222
232
242
…
#include"stdio.h"
int isPalindrome(int x) {
if (x < 0 || (x > 0 && x % 10 == 0)) return 0;
int back = 0;
while (x > back) {
back = back * 10 + x % 10;
x = x / 10;
}
return (x == back) || (x == back / 10);
}
int main()
{
int a,i;
for(i=200;i<=3000;i++)
if(isPalindrome(i)!=0)
printf("%d\n",i);
}
第3关
编写函数求表达式的值
任务描述
题⽬描述:有如下表达式 s = 1 + 1 / 3 + (1 * 2) / (3 * 5) + (1 * 2 * 3) / (3 * 5 * 7) + … + (1 * 2 * 3 * … * n) / (3 * 5 * 7 * … * (2 * n + 1))。
编写函数求给出的n所对应的表达式s的值。
输⼊
⼀个整数n
输出
输出表达式的值,保留⼩数点后10位的值。
测试说明
样例输⼊:
4
样例输出:
1.5492063492
#include"stdio.h"
double fun(int n)
{
double s, t; int i;
s=1.0; t=1.0;
for(i=1;i<=n;i++)//这⾥应该是i++
{
t=t*i/(2*i+1);
s+=t;
}
return s;
}
int main(int argc, char *argv[])
{
int x;
scanf("%d",&x);
printf("%12.10lf", fun(x));
return 0;
}
第4关
阶乘数列
任务描述
题⽬描述:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是⼀个数字。
输⼊
⼀个整数n(1<=n<=20)
输出
输出表达式的值,占⼀⾏。
测试说明
样例输⼊:
5
样例输出:
153
提⽰:
⽤int可能会溢出,需要⽤能表⽰更⼤范围的long long int(注:VC6.0不⽀持此类型,VC下使⽤可使⽤__int64替代)
#include<stdio.h>
int main()
{
int a,b,x;
scanf("%d",&x);
long long jiecheng=1, sum=0;
for (a=1;a<=x;a++) //因为有30项
{
for (b = 1;b <= a;b++)//分别求各项的阶乘
{
jiecheng*= b;
}
sum+=jiecheng;//相加
jiecheng = 1;//因为前⾯的变量jiecheng有上⼀项的值,所以重置为⼀,以接下来算下⼀项
}
printf("%lld",sum);//以科学计数法输出,保留2位⼩数
}
第5关
亲密数
任务描述
题⽬描述:两个不同的⾃然数A和B,如果整数A的全部因⼦(包括1,不包括A本⾝)之和等于B;且整数B的全部因⼦(包括1,不包括B本⾝)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
输⼊
⽆需输⼊
输出
3000以内的全部亲密数(输出格式:(A,B),不加换⾏,不加分隔符号)
⼀对亲密数只输出⼀次,⼩的在前
for (a = 1; a < 3000; a++)
{
for (b = 0, i = 1; i <= a / 2; i++ )
{
if(! (a % i))
b += i;
}
for (n = 0, i = 1; i <= b/2; i++)
{
if(! (b % i))
n += i;
}
if(n == a && a < b)
printf("(%d,%d)", a, b);
}
return 0;
}
第6关
公约公倍数
任务描述
题⽬描述:写两个函数,分别求两个整数的最⼤公约数和最⼩公倍数,⽤主函数调⽤这两个函数,并输出结果。两个整数由键盘输⼊。输⼊
两个正整数
输出
最⼤公约数 最⼩公倍数
如果输⼊的数中包含负数,则输出Input Error
测试说明
样例输⼊:
6 15
样例输出:
3 30
提⽰:
负数没有最⼤公约数和最⼩公倍数。
最⼤公约数和最⼩公倍数⼀定为正数,不可以为负数。
scanf("%ld%ld", &x, &y);
m = x, n = y;
if(x>0&&y>0)
{
while (y != 0)
{
z = x%y;
x = y;
y = z;
}
printf("%ld ", x);
c语言用递归函数求n的阶乘printf("%ld", m*n / x);}
else
printf("Input Error");
}
第7关
递归求阶乘数列
任务描述
题⽬描述:⽤递归求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是⼀个数字。输⼊
⼀个整数n(1<=n<=20)
输出
输出表达式的值,占⼀⾏。
测试说明
样例输⼊:
5
样例输出:
153
提⽰:
因阶乘结果变化很快,所以输⼊数据不可太⼤。
#include<stdio.h>
long long solve(long long n){
/
*********Begin*********/
if(n<=1)
return 1;
return(n*solve(n-1));
/*********End**********/
}
int main(void)
{
long long n;
scanf("%lld",&n);
long long ans=0;
for(long long i=1;i<=n;i++)
ans+=solve(i);
printf("%lld", ans);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论