C语言入门级教程三

来源:互联网 发布:网络招聘怎么做 编辑:程序博客网 时间:2024/05/17 06:48

 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;}
0 0
原创粉丝点击