C语言入门级教程三

 C语言入门级教程                  icesongqiang


2016.10.31

总结

  1. 现在很多同学已经知道数据类型为double, float时判断数据大小使用绝对值,但是要提的是我们要尽量使用 fabs(a) , 而 abs() 的返回值为int型,希望大家注意;
  2. 关于税收的问题,注意是分段累计求和;

税收

很多同学都是使用switch() case{} 语句,这里给出一个比较简单直观的方式。

// @author: zyd
#include<stdio.h>
int main()
{
    int s;
    float x;
    printf("请输入月收入\n");
    scanf("%d",&s);
    s<=3000?(x=0):(x=0.05*(s-3000));
    s<=3500?(x=x):(x=x+0.05*(s-3500));
    s<=4500?(x=x):(x=x+0.05*(s-4500));
    s<=6000?(x=x):(x=x+0.05*(s-6000));
    s<=8000?(x=x):(x=x+0.05*(s-8000));
    printf("应缴所得税%f元",x);
    return 0;
 } 

π的推算

// @author: fhy
#include<stdio.h>
int main(){
    double pi=2;
    int n;
    for(n=1;n<=1000;n++){
        pi=pi*(2.0*n)*(2.0*n)/((2.0*n-1)*(2.0*n+1));
        }
    printf("π的近似值为%f",pi);
    return 0;
}

二分法求解

关于π的推算有很多种方法,除了书上这一种公式外,也还有别的公式.

// @author: lxh
#include <stdio.h>
#include <math.h>
int main()
{
    double a,b,x;
    for(a=-10,b=10;fabs(2*a*a*a-4*a*a+3*a-6)>1e-6;){
        x=(a+b)/2;
        if(2*x*x*x-4*x*x+3*x-6<=0)
            a=x;
        else
            b=x;
    }
    printf("%f",x);
    system("pause");
    return 0;
}

我们最常见的还可以采用蒙特卡罗仿真,具体如下:
step1. 在边长为1的正方形中,以右下角的顶点为原点,建立直角左边系,想象一个四分之一圆放在该正方形中,那么可以很简单得到四分之一圆与正方形的面积比是 π4:1=pi:4 ;
step2. 在正方形中任意取一点,计算该点到原点的距离,如果距离小于1, 则认为该点落在圆内;
step3. 多次重复step2, 记下落在圆内的次数和总的仿真次数,两者的比例可以看成这个面积比,假设结果为m:n;
step4. 那么 π4=mn , π=4mn
感兴趣的可以自己写写代码。

牛顿法求解

将题中所给的函数式编写成自己的函数,很大程度上简化自己的代码,保证程序的易读性。

/*y初值为x=1.5时的函数值,x2初值为牛顿迭代的第一项, 
** 判断条件为两个x的差是否足够小,若不满足精度要求
** 则将x2赋值给x,并用牛顿迭代产生新的x2,重复此流程 
@ author chenyang
*/
#include<stdio.h>
#include<math.h>
double f(double x){
    double y;
    y=2*x*x*x-4*x*x+3*x-6.0;
    return(y);
}
int main(){
    float x=1.5,x2;
    x2=x-f(x)/(6*x*x-8*x+3.0); 
    while (fabs(x-x2)>=1e-6){
       x=x2;
       x2=x-f(x)/(6*x*x-8*x+3.0);
    }
    printf("x=%f\n",x2);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值