1、最大公约数、最小公倍数
//循环法求最大公约数
#include <stdio.h>
int Gcd_self(int a,int b)
{
int max,i;
max = a<b?a:b ;
for(i = max ; i > 0; i--)
{
if (a % i == 0 && b % i == 0)
{
return i;
break;
}
}
}
//最小公倍数=两数的乘积/最大公约数
int Lcm_self(int a,int b)
{
int min;
min = (a*b)/Gcd(a,b);
return min;
}
int main(void)
{
int a,b,max,min;
printf("input a,b:\n");
scanf("%d,%d",&a,&b);
if(a>0 && b>0)
{
max = Gcd_slef(a,b);
min = Lcm_slef(a,b);
printf("最大公约数:%d\n",max);
printf("最小公倍数:%d\n",min);
}
else printf("Input number should be positive!\n");
return 0;
}
2、统计字符
统计字符串里有几个字母、空格、数字和其它符号
#include <stdio.h>
int main()
{
char c;
int letters =0, space=0,number=0,others=0;
printf("请输入一串字符:\n");
while ((c = getchar())!='\n')
{
if ((c>='a' && c<='z')|| (c>='A' && c<='Z'))
{
letters++;
}
else if (c ==' ')
{
space++;
}
else if (c >= '0' && c <= '9')
{
number++;
}
else{
others++;
}
}
printf("letters:%d space:%d number:%d others:%d",letters,space,number,others);
return 0;
}
3、求Sn=a+aa+……+n个a
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,n,i,tmp=0,sum=0;
printf("input a and n:");
scanf("%d %d",&a,&n);
for(i=1;i<=n;i++)
{
tmp = tmp +a;
sum = sum +tmp;
a = a*10;
}
printf("%d",sum);
return 0 ;
}
4、猴子吃桃
每次吃一半多一个,第十天只有一个,求第一天个数
int main()
{
int i,n;
for(i=1,n=10;n>=1;n--)
{
i = (i+1)*2;
}printf("%d" ,i);
return 0;
}
5、牛顿迭代法求根
#include <stdio.h>
#include<math.h>
//形如ax^3+bx^2+cx+d=0
float niudundiedai(float a,float b,float c,float d)
{
float x0,f,fd,h;
float x =1.5;
do{
x0=x;
f = a*x0*x0*x0 + b*x0*x0 + c*x0 + d;
fd = 3*a*x0*x0 +2*b*x0 + c;
h = f/fd;
x = x0 -h;
}while(fabs(x-x0)>=1e-5);
return x;
}
int main()
{
float x = niudundiedai(2,-4,3,-6);
printf("根=%f",x);
return 0;
}
6、二分法求根
//形如ax^3+bx^2+cx+d=0
double f(double x)
{
return 2*x*x*x-4*x*x+3*x-6;
}
double erfenfa(double x1,double x2)
{
double x0,fx0;
if (f(x1)*f(x2)<0)
{
while(fabs(x2-x1)>1e-6)
{
x0 = (x1+x2)/2.0;
fx0 = f(x0);
if(fabs(fx0)<1e-6)
break;
else if(f(x0)*f(x1)<0)
{
x2=x0;
}
else if(f(x0)*f(x2)<0)
{
x1=x0;
}
}
}
else{
printf("该区间没有根");
return 0;
}
return (x1+x2)/2;
}
int main()
{
double x1,x2;
printf("请输入范围:");
scanf("%lf %lf",&x1,&x2);
double x0 = erfenfa(x1,x2);
printf("根=%lf",x0);
}