函数作业

仅供交流,禁止抄袭
实验一
求序列的和
【问题描述】求Y=1-1/2+1/3-1/4+…-1/2*n 的前n项之和。

【输入形式】从键盘输入n

【输出形式】输出n项和,按四舍五入的方式精确到小数点后第二位。

【样例输入】30

【样例输出】0.68

#include <stdio.h>
int main()
{
    double sum=0,a;
    int i,n;
    scanf("%d", &n);
    n=n*2;
    for(i=1;i<=n;i++)
    {
        if(i%2!=0)
        {
            a=i;
        }
        else
        {
            a=-i;
        }
        sum+=1/a;
    }
    printf("%.2lf",sum);
    return 0;
}

运行结果
在这里插入图片描述

实验二
寻找回文数
【问题描述】

所谓回文数就是将一个数从左向右读与从右向左读是一样的,例如,121和1331都是回文数。编写一个函数实现求正整数n以内的回文数。

【源文件名】

ex403.c

【输入形式】

输入一个正整数,为n的值

【输出形式】

每行输出10个回文数,每两个回文数之间用逗号分隔

【样例输入】

150

【样例输出】

0,1,2,3,4,5,6,7,8,9,

11,22,33,44,55,66,77,88,99,101,

111,121,131,141,

#include<stdio.h>
int main()
{
	int n,i,sum,a,b=0;
	scanf("%d",&n);
	for(i=0;i<=n;i++)
	{
		a=i;
		sum=0;
		while(a)
		{
			sum=sum*10+a%10;
			a=a/10;
		}
		if(sum==i)printf("%d,",i),b++;
		if (b / 10 == 1)
		{
			printf("\n");
			b = 0;
		}
	}
	return 0;
} 

输出结果
在这里插入图片描述
实验三
【问题描述】

假设你每月在储蓄账户上存100元,年利率是5%,则每月的利率是0.05/12=0.00417。

第一个月后,账户上的值变成100×(1+0.00417)=100.417;

第二个月后,账户上的值变成(100+100.417)×(1+0.00417)=201.252;

第三个月后,账户上的值变成(100+201.252)×(1+0.00417)=302.507;

以此类推。

写一个函数,根据用户输入的每月存款数、年利率和月份数,计算给定月份后账户上的钱数并输出。

【源文件名】

ex404.c

【输入形式】

输入每月存款数、年利率、月份数,每两个数据之间用逗号分隔

【输出形式】

月末账户本息余额(保留小数点后两位)

【样例输入】

100,0.05,3

【样例输出】

302.51

#include<stdio.h>
int main()
{
	int  i,month;
	double saving,rate,b;     
	scanf("%lf,%lf,%d",&saving,&rate,&month);
	b=saving;
	for(i=1;i<=month;i++)
	{
		saving=saving*(1+rate/12);
		saving+=b;
	}
	saving-=b;
	printf("%.2lf",saving);
	return 0;
} 

输出结果
在这里插入图片描述
实验四
求解勒让德多项式
【问题描述】

使用递归方法求n阶勒让德多项式的值,递归公式为:

image.png

其中:n和x为int型;Pn(x)为float型。

【源文件名】

ex405.c

【输入形式】

先后从键盘输入n和x,用逗号分隔

【输出形式】

若n小于0,则输出“error”。若n大于等于0,则输出Pn(x),保留小数点后两位

【样例输入】

-1,3

【样例输出】

error

【样例说明】

【样例输入】

2,-3

【样例输出】

-3.50

#include <stdio.h>
float p(int n, int x);                  
float main()
{
    float r;
    int s, y;
    scanf("%d,%d", &s,&y);              
    r=p(s, y);                           
    if(s>=0)printf("%.2f\n", r);                   
    return 0;
}
float p(int n, int x)
{
	if(n>=0)
	{
    if (n==0)
        return 1;
    else if (n==1)
        return x;
    else
        return ((2*n-1)*x-p(n-1, x)-(n-1)*p(n-2, x))/n;
    }
    else
    {
    	printf("error\n");
    }
}

输出结果
在这里插入图片描述
实验五
【问题描述】
编写函数fac(n),用递归法求出n的阶乘(1<=n<=10)。
在main()函数中测试此函数:从键盘输入整数n,然后调用该函数并输出结果。

【输入形式】

从键盘输入整数n(1<=n<=10)。

【输出形式】

在屏幕上输出计算结果。

【样例输入】

5

【样例输出】

120

【样例说明】

5的阶乘为:5! = 120

【评分标准】

结果完全正确得20分,每个测试点4分,提交程序文件名称为c0404.c。

include<stdio.h>
int fac(int n);
int main()
{	
	int n;
	scanf("%d",&n);
	fac(n);
	printf("%d",fac(n));
	return 0;
}
int fac(int n)
{
	int i;
	long int result=1;/*long类型提高精确度,防止整型溢出*/
	for(i=2;i<=n;i++)
	{
		result*=i;
	} 
	return result;
} 

输出结果
在这里插入图片描述

  • 17
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值