第二十六讲 利用switch语句解决问题

来源:互联网 发布:手机宽带拨号软件 编辑:程序博客网 时间:2024/05/26 05:53

【项目1:投票表决器】
设计一个投票表决器,其功能是:

  • 输入Y、y,打印agree
  • 输入N、n,打印disagree
  • 输入其他,打印lose

#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");}}

运行结果



知识点 同上。

心得 同上。





0 0
原创粉丝点击