/*【项目1:分段函数求值】
从键盘输入x的值(要求为实型),根据公式1计算并输出x和y的值。
1 x x<2
2 x*x+1 2<=x<6
3 sqrt(x+1) 6<=x<10
4 1/(x+1) x>=10
*/
#include <stdio.h>
#include <math.h>
int main()
{
double x, y;
printf("Please enter x: ");
scanf("%lf", &x);
if(x < 2)
y = x;
else if (x<=2 && x<6)
y = x * x + 1;
else if (x<=6 && x<10)
y = sqrt(x+1);
else
y = 1.0 / (x+1);
printf("x = %.2lf, y = %.2lf\n", x, y);
return 0;
}
/*
Please enter x: 5
x = 5.00, y = 2.45
Process returned 0 (0x0) execution time : 4.356 s
Press any key to continue.
*/
/*
[参考解答]
解法1
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
#include <stdio.h>
#include <math.h>
int main ( )
{
double x, y;
scanf("%lf", &x);
if (x<2)
y=x;
else if(x<6) //此处已经自然满足x>=2的条件
y=x*x+1;
else if(x<10)
y=sqrt(x+1);
else //自然是x>=10的时候执行下一语句
y=1/(x+1);
printf("%lf\n", y);
return 0;
} */
/*【项目2:油量监控】
设计一个程序,用于赛车油量的监控。该程序在赛车油量偏低(少于1/4,
即0.25)时,警示车手应该注意;在油箱接近满载(不低于3/4)时,提示提手不要停车。
而对于其他情况下,不提示任何信息,以免车手分心。
请设计出这个程序来,输入油量刻度(0-1之内的数,如0.21),
提示相应信息,如果需要的话。*/
#include <stdio.h>
int main()
{
double petrol;
printf("输入油量表读数(0-1): ");
scanf("%lf", &petrol);
if(petrol < 0.25)
printf("油量过低,请注意!\n");
else if (petrol > 0.75)
printf("高油量,不必停!\n");
else
printf("");
return 0;
}
/*
[参考解答]
解法1
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
#include <stdio.h>
int main ( )
{
double fuel_reading;
printf("输入油量表读数(0-1): ");
scanf("%lf", &fuel_reading);
//下面加上花括号使if-else能够正确匹配
if (fuel_reading < 0.75)
{
if (fuel_reading < 0.25)
printf("油量低,注意!\n");
}
else
{
printf("高油量,不必停!\n");
}
return 0;
}
解法2:
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
#include <stdio.h>
int main ( )
{
double fuel_reading;
printf("输入油量表读数(0-1): ");
scanf("%lf", &fuel_reading);
//没有正确解答中的花括号,将使if-else的匹配关系改变
if (fuel_reading > 0.75)
printf("高油量,不必停!\n");
if (fuel_reading < 0.25)
printf("油量低,注意!\n");
return 0;
}
*/
/*【项目3:一元二次方程全解】(x^2代表x的平方)
有一方程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>
int main()
{
float a, b, c, d, pr, pi, x1, x2;
scanf("%f %f %f", &a, &b, &c);
printf("a=%.0f, b=%.0f, c=%.0f\n", a, b, c);
if (a == 0)
{
if (b != 0)
printf("Only one solution x=%.2f\n", -c / b);
else if (c != 0)
printf("No solution\n");
else
printf("x is any value\n");
}
else
{
d = b*b-4*a*c;
if (d >= 0)
{
x1 = (-b+sqrt(d)) / (2*a);
x2 = (-b-sqrt(d)) / (2*a);
printf("x1 = %6.2f, x2 = %6.2f\n", x1, x2);
}
else
{
pr = -b / (2*a);
pi = sqrt(-d) / (2*a);
printf("x1 = %6.2f +%6.2f!\n", pr, pi);
printf("x2 = %6.2f -%6.2f!\n", pr, pi);
}
}
return 0;
}
/*
10 8 5
a=10, b=8, c=5
x1 = -0.40 + 0.58!
x2 = -0.40 - 0.58!
Process returned 0 (0x0) execution time : 2.642 s
Press any key to continue.
*/
/*编写选择结构程序,输入个人月收入总额,计算出他本月应缴税
款和税后收入
序号 收入范围 税率 速算扣除数
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()
{
//解法1:
double dSalary, dTax=0, dNetIncome=0;//请欣符合匈牙利命名法的变量名
double dValue=0;//在模板基础上加一个变量,表示超出起征点的收入
printf("请输入您本月的收入总额(元):");
scanf("%lf", &dSalary);
// 下面求解应缴个人所和税dTax和税后收入dNetIncome
dValue = dSalary - 3500; //在起征点基础上考虑纳税
if (dValue <= 0.0)
dTax = 0.0;
else
{
if (dValue <= 1500)
dTax = dValue * 0.03 - 0.0;//直接根据税率和速算扣除数计算
else if (dValue <= 4500)
dTax = dValue * 0.10 - 105.0;
else if (dValue <= 9000)
dTax = dValue * 0.20 - 555.0;
else if (dValue <=35000)
dTax = dValue * 0.25 - 1005.0;
else if (dValue <= 55000)
dTax = dValue * 0.30 - 2755.0;
else if (dValue <= 80000)
dTax = dValue * 0.35 - 5505.0;
else
dTax = dValue * 0.45 - 13505.0;
}
dNetIncome = dSalary - dTax;
printf("您本月应缴个人所和税 %.2lf元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
return 0;
}
/*
请输入您本月的收入总额(元):5000
您本月应缴个人所和税 45.00元,税后收入是 4955.00 元。
依法纳税,共享繁荣。谢谢使用!
Process returned 0 (0x0) execution time : 3.012 s
Press any key to continue.
*/
/*
解法2:
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
#include <stdio.h>
int main ( )
{
double dSalary,dTax=0,dNetIncome=0; //请欣符合匈牙利命名法的变量名
double dValue; //在模板基础上加一个变量,表示超出起征点的收入
double dRate, dOffset; //分别表示税率和速算扣除数
printf("请输入您本月的收入总额(元):");
scanf("%lf", &dSalary);
// 下面求解应缴个人所和税dTax和税后收入dNetIncome
dValue = dSalary - 3500; //在起征点基础上考虑纳税
if(dValue <= 0.0)
dTax = 0.0; //不需要交税
else
{
if(dValue <= 1500)
dRate = 0.03, dOffset = 0.0; //这一组if语句用于得到税率和速算扣除数
else if(dValue <= 4500)
dRate = 0.1, dOffset = 105.0;
else if(dValue <= 9000)
dRate = 0.2, dOffset = 555.0;
else if(dValue <= 35000)
dRate = 0.25, dOffset = 1005.0;
else if(dValue <= 55000)
dRate = 0.3, dOffset = 2755.0;
else if(dValue <= 80000)
dRate = 0.35, dOffset = 5505.0;
else
dRate = 0.45, dOffset = 13505.0;
dTax = dValue * dRate - dOffset; //计算所得税,体会将“确定参数”与“计算”分开的好处:思路更明晰,不易在计算公式上犯大错
}
dNetIncome = dSalary-dTax; //计算税后收入
printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
return 0;
}
*/
/* 自己写的。感觉不太对头,看答案了。
double dSalary, dTax=0, dNetIncome=0;
printf("请输入您本月的收入总额(元):");
scanf("%lf", &dSalary);
if (dSalary <= 1500)
{
dTax = dSalary * 0.03 - 0;
dNetIncome = dSalary - dTax;
}
else if (dSalary>1500 && dSalary<=4500)
{
dTax = dSalary * 0.1 - 105;
dNetIncome = dSalary - dTax;
}
else if (dSalary>4500 && dSalary<=9000)
{
dTax = dSalary * 0.2 - 555;
dNetIncome = dSalary - dTax;
}
..............
printf("您本月应缴个人所得税%.2lf元,税后收入是%.2lf元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
*/