lesson24 if语句嵌套
任务一:键入x(实型)根据分段函数计算输出x和y值。
代码
/*
*Copyright @2017,CSDN学院
*All rights reserved.
*文件名称:main.c
*作 者:袁生
*完成日期:2017年10月20日
*版 本 号:v1.0
*问题描述:键入x(实型)根据分段函数计算输出x和y值。
* x x<2
* x²+1 2≤x<6
*y= sqrt(x+1) 6≤x<10
* 1/(x+1) x≥10
*/
#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
*作 者:袁生
*完成日期:2017年10月20日
*版 本 号: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
*作 者:袁生
*完成日期:2017年10月20日
*版 本 号:v1.0
*问题描述:编写选择结构程序,输入个人月收入总额,
*计算出他本月应缴税款和税后收入
附:关于个人所得税的有关背景知识
计算方法:个人所得税=(收入总额-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
*/
#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
*作 者:袁生
*完成日期:2017年10月20日
*版 本 号: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;
}
运行结果
心得
读懂题意是关键,题中隐含“所输数据不为正则不继续输入,程序结束”条件。
上一篇: linux学习lesson28