lesson24 if语句嵌套

任务一:键入x(实型)根据分段函数计算输出x和y值。
分段函数
代码

/*
*Copyright @2017,CSDN学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:20171020*版 本 号:v1.0
*问题描述:键入x(实型)根据分段函数计算输出xy值。
*   x           x<2
*   x²+1        2x<6
*y= sqrt(x+1)   6x<10
*   1/(x+1)     x10
*/
#include <stdio.h>
#include <math.h>
int main()
{
    float x,y;
    int a;
    scanf("%f",&x);
    //方法一:
    /**if(x<2)
        y=x;
    else if(x<6)
        y=x*x+1;
    else if(x<10)
        y=sqrt(x+1);
    else
        y=1/(x+1);
    printf("x=%f\ny=%f\n",x,y);*/
    //方法二:
    a=(x<2)+(x<6)+(x<10);
    switch(a)
    {
    case 0:
        y=1/(x+1);
        break;
    case 1:
        y=sqrt(x+1);
        break;
    case 2:
        y=x*x+1;
        break;
    case 3:
        y=x;
        break;
    default :
        printf("error\n");
    }
    printf("x=%f\ny=%f\n",x,y);
    return 0;
}

心得
使用if语句嵌套实现分段函数求值,逻辑清晰,不易出错,注意格式对齐(else与其上方最靠近它且未配对的if匹配)。
连续区间的分段函数还可用switch函数实现,关键要找到跳转条件与自变量的关系,使关系表达式的值为常量。

任务二:【油量监控】该程序在赛车油量偏低(少于1/4,即0.25)时,警示车手应该注意;在油箱接近满载(不低于3/4)时,提示提手不要停车。而对于其他情况下,不提示任何信息,以免车手分心。输入油量刻度(0-1之内的数,如0.21),提示相应信息,如果需要的话。
代码

/*
*Copyright @2017,CSDN学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:2017年10月20日
*版 本 号:v1.0
*问题描述:该程序在赛车油量偏低(少于1/4,即0.25)时,警示车手应该注意;
*在油箱接近满载(不低于3/4)时,提示提手不要停车。
*而对于其他情况下,不提示任何信息,以免车手分心。
*输入油量刻度(0-1之内的数,如0.21),提示相应信息,如果需要的话。
*/
#include <stdio.h>
#include <math.h>
int main()
{
    float oil;
    printf("输入油表读数:");
    scanf("%f",&oil);
    if(oil<0||oil>1)
        printf("error!");
        else if(oil<0.25)
            printf("注意!");
        else if(oil<0.75);
        else
            printf("不要停!");

    return 0;
}

任务三:【一元二次方程全解】有一方程ax^2+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。
(1) a=0,b≠0时, 解为-c/b
(2) a=0,b=0,c=0, 解为任意值
(3) a=0,b=0,c≠0, 无解
(4) a≠0,b^2-4ac≥0, 有两个实根
(5) a≠0,b^2-4ac≤0, 有两个虚根
代码

/*
*Copyright @2017,CSDN学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:20171020*版 本 号:v1.0
*问题描述:有一方程ax^2+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。
*(1) a=0,b≠0时, 解为-c/b
*(2) a=0,b=0,c=0, 解为任意值
*(3) a=0,b=0,c≠0, 无解
*(4) a≠0,b^2-4ac≥0, 有两个实根
*(5) a≠0,b^2-4ac≤0, 有两个虚根
*/
#include <stdio.h>
#include <math.h>
//#define delt1=(b*b-4*a*c)
int main()
{
    float a,b,c,delt1,delt2;
    float x1,x2,d0,d1;
    //delt1=b*b-4*a*c;
    //delt2=fabs(delt1);
    printf("请输入一元二次方程系数:");
    scanf("%f %f %f",&a,&b,&c);
    if(a==0)
        if(b!=0)
            printf("一元一次解为:x=%f",-c/b);
        else if(c==0)
            printf("解为任意值!");
        else
            printf("无解!");
    else
    {
        delt1=b*b-4*a*c;
        delt2=fabs(delt1);
        if(delt1>=0)
        {
            printf("有两个实根:\n");
            x1=(-b+sqrt(delt1))/(2*a);
            x2=(-b-sqrt(delt1))/(2*a);
            printf("x1=%.2f,x2=%.2f",x1,x2);
        }
        else
        {
            printf("有两个虚根:\n");
            d0=-b/(2*a);
            d1=sqrt(delt2)/(2*a);
            printf("x1=%.2f%c%.2f%c,x2=%.2f%c%.2f%c",d0,'+',d1,'i',d0,'-',d1,'i');
        }
    }
    return 0;
}

运行结果
有两个虚根的运行结果
知识点
能用if语句嵌套,一元二次方程求解虚根的C语言输出表示。
心得
求解时,b^2-4ac最好作为整体用一个变量(程序用delt)表示,其定义的位置也有讲究,第一次我将delt放在第22行,运行发现39行总是运行,单步调试察觉delt在abc输入后并未改变值,说明delt赋值语句放错了位置。由于赋值语句存在变量,不能用宏定义去弄(我弄了一下一堆错),后来根据逻辑放35行,能及时对delt值进行变更,实现程序功能。
另,工程文件路径不可包含中文名,否则无法调试。

任务四:编写选择结构程序,输入个人月收入总额,计算出他本月应缴税款和税后收入
附:关于个人所得税的有关背景知识
计算方法:个人所得税=(收入总额-3500)*税率-速算扣除数
从2011年9月1日起,我国个人所得税起征点基数为3500元,超出部分按以下7级计算。

序号 收入范围 税率 速算扣除数
1 超过0至1500 3% 0
2 超过1500元至4500元的部分 10% 105
3 超过4500元至9000元的部分 20% 555
4 超过9,000元至35,000元的部分 25% 1005
5 超过35,000元至55,000元的部分 30% 2755
6 超过55,000元至80,000元的部分 35% 5505
7 超过80,000以上 45% 13505

代码

/*
*Copyright @2017,CSDN学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:20171020*版 本 号:v1.0
*问题描述:编写选择结构程序,输入个人月收入总额,
*计算出他本月应缴税款和税后收入
附:关于个人所得税的有关背景知识
计算方法:个人所得税=(收入总额-3500)*税率-速算扣除数
从201191日起,我国个人所得税起征点基数为3500元,超出部分按以下7级计算。
序号      收入范围                     税率             速算扣除数
1       超过01500                    3%              0
2       超过1500元至4500元的部分        10%             105
3       超过4500元至9000元的部分        20%             555
4       超过9,000元至35,000元的部分     25%             1005
5       超过35,000元至55,000元的部分    30%             2755
6       超过55,000元至80,000元的部分    35%             5505
7       超过80,000以上                 45%             13505
*/
#include <stdio.h>

int main()
{
    double dSalary,dTax=0,dNetIncome;
    printf("请输入您本月收入总额(元):");
    scanf("%lf",&dSalary);
    if(dSalary-3500<=0)
        printf("您要加油哦!");
        else if(dSalary-3500<=1500)
            dTax=(dSalary-3500)*0.03;
        else if(dSalary-3500<=4500)
            dTax=(dSalary-3500)*0.10-105;
        else if(dSalary-3500<=9000)
            dTax=(dSalary-3500)*0.20-555;
        else if(dSalary-3500<=35000)
            dTax=(dSalary-3500)*0.25-1005;
        else if(dSalary-3500<=55000)
            dTax=(dSalary-3500)*0.30-2755;
        else if(dSalary-3500<=80000)
            dTax=(dSalary-3500)*0.35-5505;
        else
            dTax=(dSalary-3500)*0.45-13505;
    dNetIncome=dSalary-dTax;
    printf("您本月应缴个人所得税 %.2lf 元,税后收入是 %.2lf 元\n",dTax,dNetIncome);
    printf("依法纳税,共享繁荣.谢谢使用!\n");

    return 0;
}

运行结果
这里写图片描述

任务五:输入3个正整数,其中任一数不是正整数,程序输出Invalid number!,然后结束运行。当第1个数为奇数时,计算后两数之和,当第1个数为偶数时,计算第2数减去第3数的差。无论哪种情形,当结果不超过10时,什么也不输出。否则,若第一种情形结果超10输出后两数和,若为第二种则输出计算的差值。
代码

/*
*Copyright @2017,CSDN学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:20171020*版 本 号:v1.0
*问题描述:输入3个正整数,其中任一数不是正整数,程序输出Invalid number!,
然后结束运行。当第1个数为奇数时,计算后两数之和,当第1个数为偶数时,
计算第2数减去第3数的差。无论哪种情形,当结果不超过10时,什么也不输出。否则,
若第一种情形结果超10输出后两数和,若为第二种则输出计算的差值。
*/
#include <stdio.h>
int main()
{
    int n1,n2,n3,add=0,sub=0;
    printf("Enter number 1: ");
    scanf("%d",&n1);
    if(n1<=0)
    {
        printf("Invalid number!\n");
        return 0;
    }
    else
    {
        printf("Enter number 2: ");
        scanf("%d",&n2);
        if(n2<=0)
        {
            printf("Invalid number!\n");
            return 0;
        }
        else
        {
            printf("Enter number 3: ");
            scanf("%d",&n3);
            if(n3<=0)
            {
                printf("Invalid number!\n");
                return 0;
            }
            else
            {
                if(n1%2==1)
                {
                    add=n2+n3;
                    if(add>10)
                    {
                        printf("Result:%d",add);
                        return 0;
                    }
                }
                else
                {
                    sub=n2-n3;
                    if(sub>10)
                    {
                        printf("Result:%d",sub);
                        return 0;
                    }
                }
            }
        }
    }
    return 0;

}

运行结果
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
心得
读懂题意是关键,题中隐含“所输数据不为正则不继续输入,程序结束”条件。

猜你喜欢

转载自blog.csdn.net/epsilono1/article/details/78300289