C语言——利用函数实现某一特定功能

本文展示了使用C语言实现一系列数学功能的代码示例,包括计算分段函数、输出完数及其因子、打印素数、计算排列数、将偶数表示为素数之和、计算e的指数近似值以及找出各位数和为5的三位数。同时,还使用递推法求解数列的前n项和。
摘要由CSDN通过智能技术生成

编写分段函数,计算相应的值

#include <stdio.h>
double f1(double);
double f2(double);
double f3(double);
int main (void)
{
	double x,y;
	printf("请输入x的值:\n");
	scanf("%lf",&x);
	if (x<2)
		y=f1(x);
	else if (x>=2 && x<4)
		y=f2(x);
	else 
		y=f3(x);
	printf("y=%lf",y);
	return 0;
}

	
double f1(double x)
{
	return (-x+2.5);
}
double f2(double x)
{
	return (2-1.5*(x-3)*(x-3));
}
double f3(double x)
{
	return (0.5*x-1.5);
}

编写函数,输出1000以内的所有完数及其因子。

(所谓完数是指一个整数的值等于它的因子之和。例如6的因子是1、2、3,而6=1+2+3,故6是一个完数。)

#include<stdio.h>
int is_wanshu(int);
void print_(int x);
int main (void)
{
	int x;
	for (x=2;x<=1000;x++)
	{
		if(is_wanshu(x))    //条件非0即可
		{
			printf("%d\t",x);
			print_(x);
		}
	}
	return 0;
}
int is_wanshu(int x)    //这个函数的功能是判断一个是是否是完数。
{
	int i,s=0;
	for (i=1;i<x;i++)
	{
		if (x%i==0)
			s+=i;
	}
	if (s==x)
		return x;
	else 
		return 0;
}
void print_(int x)    //函数的功能是输出完数的因子。
{
	int i;
	for (i=1;i<x;i++)
	{
		if (x%i==0)
			printf("%d\t",i);
	}
	return;    //定义的是无返回值函数
}

输出200~300之家所有的素数。

#include <stdio.h>
int is_Prime(int x);
int main (void)
{
	int x;
	for (x=200;x<=300;x++)
	{
		if (is_Prime(x))
			printf("%d\n",x);
	}
	return 0;
}
int is_Prime(int x)   //函数的功能:判断一个数是否是素数
{
	int divisor;  
	if (x==1)
		return 0;    
	for (divisor=2;divisor*divisor<=x;divisor++)  //注意是从2开始!
		{
		if (x%divisor==0)
			return 0;
	}
	return 1;  //注意所有路径都要有返回值!这个return不能写在for循环内部!
}

编写函数,计算排列数

#include<stdio.h>
double fac_(int);
int main (void)
{
	int m,n;
	double a,b;
	printf("请输入m、n的值(m<n):\n");
	scanf("%d%d",&m,&n);
	a=fac_(n);
	b=fac_(n-m);  //注意阶乘的公式
	printf("%lf",a/b);
	return 0;
}
double fac_(int x)   //函数的功能是计算某一个数的阶乘!
{
	int i;
	double	product=1;
	for(i=1;i<=x;i++)
	{
		product*=i;
	}
	return product;
}

编写函数,将10~20之间所有的偶数表示为两个素数之和

#include <stdio.h>
int is_Prime(int x);
int main (void)
{
	int x,i;
	for (x=10;x<=20;x=x+2)
	{
		for (i=1;i<x/2;i++)
		{
			if (is_Prime(i))
			{
				if (is_Prime(x-i))   // 判断偶数减去一个素数是否还是素数
					printf("%d+%d=%d\n",i,x-i,x);
			}
		}
	}
	return 0;
}
int is_Prime (int x)    //判断一个数是否是素数
{
	int divisor;
	if (x==1)
		return 0;
	for (divisor =2;divisor*divisor<=x;divisor++)
	{
		if (x%divisor==0)
			return 0;
	}
	return 1;
}

编写函数,计算eˣ的近似值(计算前n项的和,n在主函数中输入)

#include <stdio.h>
#include <math.h>
double x;        //定义x为全局变量
double func(double k);
double factorial(int m);
int main (void)
{
	int i,n;
	double s=1;
	printf("Please input x:\n");
	scanf("%lf",&x);
	printf("Please input n:\n");
	scanf("%d",&n);
	for (i=1;i<=n-1;i++)
	{
		func(i);
		s+=func(i);
	}
	printf("eˣ的近似值为:%f\n",s);
	return 0;
}
double func(double k)     //函数功能:表示公式中的一项
{
	return pow(x,k)/factorial(k);
}
		
double factorial(int m)    //函数功能:计算阶乘
{
	int i;
	double s=1;
	for (i=1;i<=m;i++)
	{
		s*=i;
	}
	return s;
}

编写函数,输出所有各位数之和等于5的3位数。

#include <stdio.h>
int func(int x);
int main (void)
{
	int i;
	for (i=100;i<=999;i++)
		if (func(i))
			printf("%d\n",i);
	return 0;
}
int func (int x) //函数的功能是判断(一个数的所有各位数之和等于5)
{
	int a,b,c;
	a=x%10;b=x/10%10;c=x/100;
	if (a+b+c==5)
		return 1;  //函数的返回值为逻辑量
	else
		return 0;
}

用递推法求一下数列的前n项和,n从主函数中输入。

#include <stdio.h>
double add(int n);
int main (void)
{
	int n;
	double sum;
	printf("Please input n:\n");
	scanf("%d",&n);
	sum=add(n);
	printf("数列前n项和为%lf\n",sum);
	return 0;
}
	
double add(int n)
{
	int i;
	double term,sum,a,b,temp;
	a=2;b=1;sum=0;term=a/b;
	for (i=1;i<=n;i++)
	{
		sum+=term;
		temp=b;
		b=a;
		a=a+temp;
		term=a/b;
	}
	return sum;
}

编写函数,用公式计算ex的近似值(计算前n项和,n 从键盘输入)

#include <stdio.h>
double add(double x,int n);
double fac(int i);
int main (void)
{
	double x,ex;
	int n;
	printf("请输入x的值:\n");
	scanf("%lf",&x);
	printf("请输入n的值:\n");
	scanf("%d",&n);
	ex=add(x,n);
	printf("ex的近似值为%lf\n",ex);
	return 0;
}
double add(double x,int n)
{
	double ex,term,a,b;//a表示分子,b表示分母,term表示当前项
	int i;  //i是循环控制变量
	term=1;ex=0; a=1;     //完成初始化
	for (i=1;i<=n;i++)
	{
		ex+=term;
		a*=x;
		b=fac(i);
		term=a/b;
	}
	return ex;
}
double fac(int i)
{
	int k;double s=1;
	for (k=1;k<=i;k++)
		s*=k;
	return s;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

釉色清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值