解题基础:
scanf("输入模式",地址列表);//输入语句及其格式。注:地址列表一定要加取地址符号&,如:&a,&b
printf("输出模式",输出列表);//输出语句及其格式。注:输出模式和输出列表一一对应,如:printf("%d%d",a,b);
switch(表达式){
case 常量值1:
若干语句1
break;//可省略
case 常量值2:
若干语句2
break;//可省略
......
case 常量值n:
若干语句n
break;//可省略
default://可省略
若干语句
}//开关语句及其格式,若表达式的值等于某个常量值,则进行某常量值相对应的语句,若没遇到break,则接着运行下一个常量值后面的语句,直到遇到break为止,若表达式的值不等于某个常量值,则执行default后面的若干语句,default可省略(不执行语句)
思路:因为题目要求,需要一个输入的值和一个输出的值,因为定义a的是一个整型变量int,所以a/100000的值也是一个int型变量(整数)(注:C语言的取整不是四舍五入,是直接舍去小数),直接用switch函数可以写出运算语句(当然if也行,不过比较麻烦),t=对应区间的全部数*相应利润+(a-区间最大数)*超出相应的利润
答案:
#include<stdio.h> int main(){ int a,t; scanf("%d",&a); switch(a/100000){ case 0: t=a*0.1; break; case 1: t=100000*0.1+(a-100000)*0.075; break; case 2: case 3: t=100000*0.1+100000*0.075+(a-200000)*0.05; break; case 4: case 5: t=100000*0.1+100000*0.075+200000*0.05+(a-400000)*0.03; case 6: case 7: case 8: case 9: t=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(a-600000)*0.015; default: t=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(a-1000000)*0.01; } printf("%d",t); return 0; }
ps:当a/100000=2时,因为常量值后面的若干语句中没有break,则接着运行下一个常量值(case 3)后面的若干语句,直到遇到break为止
同理,后面的4,6,7,8都是一样的
程序结束return 0;不可省。
因为题目表达原因,生活中t应该为浮点型常量,保留两位小数,可是答案不给对,所以代码就以答案为准
若对switch函数还有疑问,可以对应我的上一个题解题解1008:C语言程序设计教程(第三版)课后习题5.6 (C语言描述)参照学习
0.0分
54 人评分
#include<stdio.h> int main() { int a,t; scanf("%d",&a); switch(a/100000) { case 0:t=a*0.1;break; case 1:t=100000*0.1+(a-100000)*0.075;break; case 2: case 3:t=100000*0.1+100000*0.075+(a-200000)*0.05;break; case 4: case 5:t=100000*0.1+100000*0.075+200000*0.05+(a-400000)*0.03;break; case 6: case 7: case 8: case 9:t=100000*0.01+100000*0.075+200000*0.05+200000*0.03+(a-600000)*0.015;break; default:t=100000*0.01+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(a-1000000)*0.01;break; } pri
int x,y,z,n; while(scanf("%d",&x)==1) { if(x<0) { printf("try again\n"); continue; } y=0; n=0; z=100000; switch(x/z) { default:y+=(n=(x-10*z-n))*0.01; case 10:y+=(n=(x-10*z-n))*0.01; case 6 :y+=(n=(x-6*z-n))*0.15; case 4 :y+=(n=(x-4*z-n))*0.03; case 2 :y+=(n=(x-2*z-n))*0.05; case 1 :y+=(n=(x-z-n))*0.075; case 0 :y+=(x-n
#include<stdio.h> int main() { int x,y,z,n; while(scanf("%d",&x)==1) { if(x<0) { printf("try again\n"); continue; } y=0; n=0; z=100000; switch(x/z) //利用标签内没有break语句的话便会依次执行 { //每次计算出相应部分的奖金然后相加起来 default:y+=(n=(x-10*z-n))*0.01; //超出110w以上 case 10:y+=(n=(x-10*z-n))*0.01; //超出100w case 6 :y+=(n=(x-6*z-n))*0.15; //超出60w case 4 :y+=(n=(x-4*z-n))*0.03; //超出40w case
#include<stdio.h> int main() { int l,l1,y; scanf("%d",&l); l1=l/100000; if(l1<=1) printf("%.0f",0.1*l); else switch(l1) { case 1:printf("%.0f",10000+0.075*(l-100000)); break; case 3: case 2:printf("%.0f",10000+7500+0.05*(l-200000)); break; case 5: case 4:printf("%.0f",10000+7500+10000+0.03*(l-400000)); break; case 7: case 6: case 8: case 9:printf("%.0f",10000+7500+10000+6000+0.015*(l-600000)); break; default :printf("%.0f",39500+0.01*(l-1000000)); } return 0; }
#include<stdio.h> int main() { //获取输入奖金 int a,s; scanf("%d",&a); if (a<=100000) s=a*0.1; if (a>100000 && a<=200000) { s=(a-1000000)*0.075+100000*0.1; } if (a>200000 && a<=400000) { s=(a-200000)*0.05+100000*(0.1+0.075); } if (a>400000 && a<=600000) { s=(a-400000)*0.03+100000*(0.1+0.075)+200000*0.05; } if (a>600000 && a<=1000000) { s=(a-600000)*0.015+100000*(0.1+0.075)+200000*(0.05+0.3); } if (a>1000000) { s=(a-1000000)*0.01+100000*(0.1+0.075)+200000*(0.05+0.03)+400000*0.015;
不明白为什么case 5的语句后不用加break,不加的话不是case 9的t覆盖了case 5的t了吗
健身的熊 2019-10-07 09:14:01 |
我试着跑了代码,不加break得到的是错误的结果.
#include<stdio.h> int main() { int a,c,b; scanf("%d",&a); if(a>0) { c=a*0.1; b=100000*0.1; if(a>100000) { c=b+(a-100000)*0.075; b=b+100000*0.075; if(a>200000) { c=b+(a-200000)*0.05; b=b+200000*0.05; if(a>400000) { c=b+(a-400000)*0.03; b=b+200000*0.03; if(a>600000) { c=b+(a-600000)*0.015; b=b+400000*0.015; if(a>1000000) c=b+(a-1000000)*0.01; } } } } } printf("%d",c); return 0; }
#include<stdio.h> int main() { int a,b; printf("请输入当月利润:\n"); scanf("%d",&a); if(a<=100000) { b=a*0.1; } else if(100000<a&&a<=200000) { b=10000+(a-100000)*0.075; } else if(200000<a&&a<=400000) { b=10000+7500+(a-200000)*0.05; } else if(400000<a&&a<=600000) { b=10000+7500+10000+(a-400000)*0.03; } else if(600000<a&&a<=1000000) { b=10000+7500+10000+6000+(a-600000)*0.015; } else if(a>1000000) { b=10000+7500+10000+6000+6000+(a-1000000)*0.01; } printf("应发的奖金数为:"); printf("%d",b); return 0; }