C语言程序设计——经典流程控制程序

程序流程控制经典实例

一.C语言判断并求素数(素数是只能被1和本身整除)

方法一:判断n是否能被1~n-1整除

#include <stdio.h>

int main()
{
    int i, n;
    printf("please input a number:"); 
    scanf("%d", &n);
    for (i = 2; i < n ; i++)
    {
        if (n%i == 0)
            break;
    }
    if (n <=1 ) 
    printf("This is not a prime\n");//n<=1的数当然是非素数
    else  if (i < n) 
    printf("This is not a prime.\n"); 
    else 
    printf("This is a prime.\n");
    return 0;
 
}

求100到200间的全部素数

#include<stdio.h>
int main() {
	int i, j, k;
	for (i = 101; i < 201;i++) 
	{
		k = 1;
		for (j = 2; j <i;j++)
		{
			if (i%j == 0) 
			{
				k = 0;
				break;
			}
		}
		if (k == 1)
			printf("%d \n", i);
	}
		
		
	return 0;
}

方法二:判断n是否能被2~√n间的整数整除

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i;
    double k;
    printf("please input a number:"); 
    scanf("%d", &n);
    k = sqrt(n);
    for (i = 2; i <= k;i++)
    {
        if (n%i == 0) 
        break;
    }
    if (n <=1 ) 
    printf("This is not a prime\n");
    else if (i <= k) 
    printf("This is not a prime.\n");
    else 
    printf("This is a prime\n");
    return 0;
 
}

求100到200间的全部素数

#include <stdio.h>
#include <math.h>

int main()
{
    int m, k, i, n = 0;
	for(m = 101; m <=200; m = m+2)
	{
		k = sqrt(m);
		for(i = 2; i <= k; i++)
			if(m%i == 0)
				break;
			if(i >= k+1)
			{
				printf("%d\t", m);
				n = n+1;
			}
			if(n%10 == 0)
				printf("\n");
	}
	printf("\n");
 
}

二.输入两个正整数 m 和 n,求其最大公约数和最小公倍数(辗转相除法)

#include <stdio.h>

 int main()

{

    int m,n,k,a,b;

    printf("请输入2个正整数,两者间用逗号隔开:\n");

    scanf("%d,%d",&m,&n);//输入两个数字时用逗号隔开


//开始判定

    if(m<=0||n<=0)//如果两者中在任意一个为小于等于0

    {
        printf("输入有误,请您输入两个 正!整!数!\n");

    }

    else

    {

//交换两个数,始终让较大的一个等于m,较小的一个数等于n

        if(m<n)

        {

            k=m;

            m=n;

            n=k;

        }

        a=m;

        b=n;

//利用辗转相除法,直到b等于0为止

        while(b!=0)

        {

            k=a%b;

            a=b;

            b=k;

        }

        printf("最大公约数:%d\n",a);

        printf("最小公倍数:%d\n",m*n/a);

    }

}

三.编程序找出1000之内的完数(完数是指一个数如果恰好等于它的因子之和)

/完数
//一个数如果恰好等于它的因子之和,这个数就称为"完数"。
//例如6=1+2+3.
//例如28=1+2+4+7+14
//例如496=1+2+4+8+16+31+62+124+248
//编程找出1000以内的所有完数。

 
#include <stdio.h>
 
void main()
 {
	int s, i, j, m;
	for(i = 1; i <= 1000; i++)
	{
		s = 0;
		for(j = 1; j < i; j++)
			if(i%j==0)
				s=s+j;
			if(s == i)
			{
				printf("%d its factors are ", s);
                for(m = 1; m < s; m++)
					if(s%m == 0)
						printf("%d\t" , m);
			}
			printf("\n");
   }
}

四.输出所有的水仙花数(水仙花数是指一个3位数,其各位数字立方和等于该数本身)

 #include <stdio.h>
 #include <math.h>

 int main()
 {
	 int a,b,c,i;
     for(i=100;i<1000;i++)  //for 循环,注意范围(i<1000)等价于(i<=999)
	 {
		 a=i/100;
		 b=i/10%10;
		 c=i%10;
		 if(i==(pow(a,3)+pow(b,3)+pow(c,3)))   //pow(a,3)也可以写成 a*a*a ;
		 {
			 printf("%d\n",i);
       			  
         }
                 	 
	 }
         return 0;
 }

五.求1!+2!+3!+4!+……+20!

#include <stdio.h>

int main()
{
float n,s=0,t=1;
for(n=1;n<=20;n++)
{
	t*=n;
	s+=t;

}
printf("1+2!+3!...+20!=%e\n",s);
return 0;
}

六.有一分数序列2/1,3/2,5/3,8/5,13/8,21/13……求出这个数列的前20项之和

#include <stdio.h>

void main()
{
	double a=1,b=2,s=0,t;
	int i;
    for(i=0; i<20; i++)
	{
		s += b/a;
        t = a;
        a = b;
        b += t;
    }
    printf("和为:%.10f\n",s);
}

七.用牛顿迭代法求下面法求下面方程在1.5附近的根:f(x)=2x3-4x2+3x-6

基本公式为:

Xn+1=Xn-f(Xn)/f *(Xn) 其中Xn+1为第n+1次迭代结果,Xn为第n次迭代结果,f *(Xn)为f (Xn))的导函数值。

基本步骤:

第一步把方程改写为多项式f(x)=2x3-4x2+3x-6,给定初值X0;

第二步将Xn带入迭代公式Xn+1=Xn-f(Xn)/f *(Xn),求出Xn+1

第三步判断精度fabs(Xn+1-Xn)是否达到要求,满足则输出,否则返回上一步;

#include <stdio.h>
#include <math.h>

int main(void)
{
double x1,x0,f1,f;
x1=1.5;
//可以用while或者do while 但是需要进行一次绝对值的比较,所以do while比较方便
//如果用while 的话必须要提前写x1,x0的值和公式
do
{
x0 = x1;
f=(2*pow(x1, 3)-4*pow(x1, 2)+3*x1-6)/(6*pow(x1, 2)-8*x1+3);
f1 = (6*x0-8)*x0+3;
x1 = x0-f/f1;
}
while(fabs(x1-x0) >= 1e-5);
printf("%5.2lf\n", x1);
return 0;
}

八.用二分法求下面方程在(-10,10)之间的根:f(x)=2x3-4x2+3x-6

根据二分法方法:
1 确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ.
2 求区间(a,b)的中点c.
3 计算f©.
(1) 若f©=0,则c就是函数的零点;
(2) 若f(a)·f©<0,则令b=c;
(3) 若f©·f(b)<0,则令a=c.
(4) 判断是否达到精确度ξ:即若|a-b|<ξ,则得到零点近似值a(或b),否则重复2-4

#include <stdio.h>
#include <math.h>

int main()
{
    double a=-10, b=10, c, x, x1, x2, x3;
	int i;
    for ( i=0; ; i++)
	{
        c = (a+b)/2;
        x1 = 2*pow(a, 3)-4*pow(a, 2)+3*a-6;
        x2 = 2*pow(b, 3)-4*pow(b, 2)+3*b-6;
        x3 = 2*pow(c, 3)-4*pow(c, 2)+3*c-6;
        if (!x3) 
			x=c;
        else if (x1*x3<0) 
			b=c;
        else if (x2*x3<0) 
			a=c;
        if (fabs(a-b) < 1e-8)
		{
            x = a;
            break;
        }
    }
    printf("Root=%lf\n", fabs(x));
    return 0;
}
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟小小哲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值