C语言利用函数实现某一功能
编写分段函数,计算相应的值
#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;
}