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

【项目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语句解决问题_第1张图片

知识点 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;
}

运行结果

第二十六讲 利用switch语句解决问题_第2张图片

知识点 同上。

心得  同上。



【项目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语句解决问题_第3张图片


知识点 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;
}
运行结果

第二十六讲 利用switch语句解决问题_第4张图片

知识点 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;


}

运行结果

第二十六讲 利用switch语句解决问题_第5张图片


知识点 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语句解决问题_第6张图片

知识点 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");

	}
}

运行结果

第二十六讲 利用switch语句解决问题_第7张图片


知识点 同上。

心得 同上。





你可能感兴趣的:(c语言课程)