【项目1:投票表决器】
设计一个投票表决器,其功能是:
#include "stdio.h"
int main()
{
char c;
scanf("%c",&c);
switch(c)
{
case'Y':
case'y':
printf("Agree\n",c);break;
case 'N':
case'n':
printf("Disagree\n",c);break;
default:
printf("Lose\n",c);
}
return 0;
}
运行结果
知识点 switch()语句的使用。
心得 不区分大小写可以用case'y':case'Y'来写。
【项目2:成绩等级】
给出一百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’。90分以上为’A’,80-89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为’E’。
#include "stdio.h"
int main()
{
int a,b;
scanf("%d",&a);
b=a/10;
switch(b)
{
case 10:
case 9:
printf("等第为A\n");break;
case 8:
printf("等第为B\n");break;
case 7:
printf("等第为C\n");break;
default:
printf("等第为E\n");
}
return 0;
}
知识点 同上。
心得 同上。
【项目3:分段函数求值switch语句版】
从键盘输入x的值(要求为整型),根据公式1计算并输出x和y的值。要求用switch语句完成。
#include "stdio.h"
#include "math.h"
int main()
{
int x,t;
float y;
printf("please input x\n");
scanf("%d",&x);
t=(x<2)+(x<6)+(x<10);
switch(t)
{
case 3:
y=x;
printf("x=%d,y=%f\n",x,y);
break;
case 2:
y=x*x+1;
printf("x=%d,y=%f\n",x,y);
break;
case 1:
y=sqrt(x+1);
printf("x=%d,y=%f\n",x,y);
break;
case 0:
y=1/(x+1);
printf("x=%d,y=%f\n",x,y);
}
return 0;
}
知识点 switch()中参数只能用int或char型等基本类型,若为float型会有不匹配的危险。下面附上百度解释:原因嘛,你可以理解为double的对于case不精确,无法精确定位分配到哪个case来执行,所以不允许。
关于字符型:
C语言中,字符常量的字面值是整型,表达式运算时,字符型也会自动提升为整型。
这也就是说,在switch或case中写的表达式,其值是整型:
switch('a')
{
case 97:....或者case 'a':....都是一样的
}
心得 数学问题变量用float型。switch()中整型参数用了t=(x<2)+(x<6)+(x<10)这个逻辑表达式很巧妙。法二根据2,6,10都是偶数 。t/2来写。
【项目4:本月有几天?】
编程序,输入年份和月份,输出本月有多少天。合理选择分支语句完成设计任务。
样例输入1:2004 2
输出结果1:本月29天
样例输入2:2010 4
输出结果2:本月30天
#include "stdio.h"
int main()
{
int year,month;
printf("please input year and month.\n");
scanf("%d,%d",&year,&month);
if((year%4==0&&year%100!=0)||(year%400))
{
switch(month)
{
case 4:
case 6:
case 9:
case 11:
printf("This month has 30 days\n");
break;
case 2:
printf("This month has 29 days\n");
break;
default:
printf("This month has 31 days\n");
}
}
else
{ switch(month)
{
case 4:
case 6:
case 9:
case 11:
printf("This month has 30 days\n");
break;
case 2:
printf("This month has 28 days\n");
break;
default:
printf("This month has 31 days\n");
}
}
return 0;
}
运行结果
知识点 if()语句和switch()语句的混用。
心得 看了贺老师3种方法,自己属于第二种首先判断闰年的那种,程序较长不简洁。问题关键在于,闰年和非闰年的区别仅在2月份。而其他月份天数还是一样。
此时可以用一三两种方法if嵌套和switch()。
【项目5:个人所得税计算器switch语句版】
编写选择结构程序,输入个人月收入总额,计算出他本月应缴税款和税后收入(计算办法见附:关于个人所得税的有关背景知识)。
(1)用switch语句完成;
#include "stdio.h"
int main()
{
double dSalary,dTax=0,dNetIncome=0;
int t;
printf("请输入您的本月收入总额(元):");
scanf("%lf",&dSalary);
if(dSalary<9000)
{
t=(dSalary-3500)/1500;
switch(t)
{
case 0:
dTax=(dSalary-3500)*0.03;
dNetIncome=dSalary-dTax;
printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
break;
case 1:
case 2:
dTax=(dSalary-3500)*0.10-105;
dNetIncome=dSalary-dTax;
printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
break;
case 3:
case 4:
case 5:
dTax=(dSalary-3500)*0.20-555;
dNetIncome=dSalary-dTax;
printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
break;
}
}
else if(dSalary<35000)
{
dTax=(dSalary-3500)*0.25-1005;
dNetIncome=dSalary-dTax;
printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
}
else if(dSalary<55000)
{
dTax=(dSalary-3500)*0.30-2755;
dNetIncome=dSalary-dTax;
printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
}
else if(dSalary<80000)
{
dTax=(dSalary-3500)*0.35-5505;
dNetIncome=dSalary-dTax;
printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
}
else
{
dTax=(dSalary-3500)*0.45-13505;
dNetIncome=dSalary-dTax;
printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
printf("依法纳税,共享繁荣。谢谢使用!\n");
}
return 0;
}
知识点 if与switch混用。是1500倍数的时候用switch,不是的时候就用if。
心得 感觉自己写的这个有点蹩脚。贺老师的法一是先用if语句将工资分档,这样switch()的参数值就可以确定了。
法二t=(s>=1500)+(s>=4500)+(s>=9000)+(s>=35000)+(s>=55000)+(s>=80000); 这是亮点,条件表达式为真,其值为1,t表示符合条件的个数
【项目6:定期存款利息计算器】
输入存款金额并选择存款种类,计算出利息(不计利息税)和本息合计。要求使用switch语句,根据选择的存款种类,确定利率和存期后计算。
提示:利息=金额×年利率×存期(单位:年,3个月为0.25年,6个月为0.5年)。
例如:1000元存6个月,利息=1000×0.033×0.5=16.5元
利率使用2011年7月7日公布的年利率:3个月 3.10%,6个月 3.30%,一年 3.50%,二年 4.40%,三年 5.00%,五年 5.50%。
#include "stdio.h"
int main()
{
float money,year,year_rate,money_value,total_money;
int t;
printf("欢迎使用利息计算器\n");
printf("请输入存款金额\n");
scanf("%f",&money);
printf("输入存款金额:%f\n",money);
printf("======存款期限======\n");
printf("1.3个月\n");
printf("2.6个月\n");
printf("3.一年\n");
printf("4.二年\n");
printf("5.三年\n");
printf("6.五年\n");
scanf("%d",&t);
printf("请输入存款期限的代号:%d\n",t);
if(t<7)
{ switch(t)
{
case 1:
year_rate=0.0310;
year=0.25;
break;
case 2:
year_rate=0.0330;
year=0.5;
break;
case 3:
year_rate=0.0350;
year=1;
break;
case 4:
year_rate=0.0440;
year=2;
break;
case 5:
year_rate=0.0500;
year=3;
break;
case 6:
year_rate=0.0550;
year=5;
}
money_value=money*year_rate*year;
total_money=money_value+money;
printf("到期利息为:%f,本息和计共%f\n",money_value,total_money);
}
else
{
printf("选择存款类型错误!\n");
}
printf("感谢您的使用,欢迎下次光临!\n");
return 0;
}
运行结果
知识点 switch()和printf()做界面还有if语句。
心得 可以把计算总值公式拿出来,拿到switch()外面,使得程序简洁。
【项目7:构造菜单】
在应用程序中,很多都将各种功能设计了“菜单”供用户选择,本项目做些体验。
请编写程序,显示“菜单”,由用户输入代号后,输出对所选项目的简短评论。运行结果参考下图:
#include "stdio.h"
int main()
{
int t;
printf("====今天晚饭吃什么?====\n");
printf("1.山西刀削面\n");
printf("2.兰州拉面\n");
printf("3.西安羊肉泡馍\n");
printf("4.烟台焖子\n");
printf("5.西北风\n");
printf("请输入你选择的代号:");
scanf("%d",&t);
switch(t)
{
case 1:
printf("吃\n");
break;
case 2:
printf("吃吃\n");
break;
case 3:
printf("吃吃吃\n");
break;
case 4:
printf("吃吃吃吃\n");
break;
case 5:
printf("吃吃吃吃吃\n");
break;
default:
printf("你选错咯\n");
}
}
知识点 同上。
心得 同上。