第三次作业:程序控制语句(顺叙、选择、循环)
注:建议同学们在深入理解顺序、选择、循环三种控制语句的基础上再做本次作业,过程可能会更顺利,效果可能会更好一些。
1.三角形的面积和周长
对于一个三角形,设它的三条边分别为a、b、c,三角形的周长、面积计算公式分别为:Perimeter= a+b+c
aere*area = s(s-a)(s-b)(s-c),其中:s = (a+b+c)/2
要求编程实现以下功能:
输入一个正整数repeat (0 输入三条边a, b, c,如果能构成一个三角形,输出面积area 和周长perimeter(保 留2 位小数);否则,输出“These sides do not correspond to a valid triangle”。 程序代码: #include #include void main() { int a,b,c,s,repeat,p,t,q,u,i; float perimeter,area; i=1; scanf("%d",&repeat); do { scanf("%d,%d,%d",&a,&b,&c); t=(a>b)?a:b; p=(a q=(t>c)?t:c; u=(t perimeter=a+b+c; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); if(p+u>q&&q-p printf("%.2f,%.2f\n",perimeter,area); else printf("These sides do not correspond to a valid triangle\n"); i=i+1; } while(i<=repeat); } 2.竖式打印 键盘输入两个两位正整数a,b ( 11 < = a,b < = 99,且a和b都不包含数字’0’ ),在屏幕上输出a与b相乘的竖式。注意尽量按照样例的格式进行输出。 样例: 程序代码: #include #include void main() { int a,b,m,n,k; scanf("%d %d",&a,&b); m=(b%10)*a; n=floor(b/10)*a; k=a*b; printf("%6d\n",a); printf("*"); printf("%5d\n",b); printf("------\n"); printf("%6d\n%5d\n",m,n); printf("------\n"); printf("%6d\n",k); } 3.铅笔工厂 在铅笔工厂里,一支铅笔要经过下列工序:首先在一台机器中喷上彩漆,随后在另一台机器中喷上清漆。遗憾的是这两台机器都有一些毛病。上彩漆的机器在每处理n支铅笔后就“罢工”一次(也就是下一支铅笔将不被喷上彩漆),而上清漆机器在处理m支铅笔后“罢工”一次。于是这所工厂出产四种铅笔,一种是成品铅笔,一种是只上过彩漆的铅笔,一种是只上过清漆的铅笔,最后一种是没有上过任何漆的铅笔。 请编写程序,对给定的n, m 和k (被处理的铅笔总数),计算四种铅笔的数量。 17支铅笔中,有12支是成品。而第12支是什么漆也没上的;第6支只上了彩漆,还有3支只上了清漆。 输入: 仅一行,三个整数n, m 和k。0 < n < 106, 0 < m < 106, 0 < k < 109。 输出: 在一行中依次输出下列4个数: a) 铅笔成品数。 b) 没被上漆的铅笔数。 c) 上过彩漆而没上清漆的铅笔数。 d) 上过清漆而没上彩漆的铅笔数。 样例2 程序代码: #include #include void main() { int m,n,k,a,b,c,d,p,q,i; scanf("%d,%d,%d",&n,&m,&k); i=n-1; do { i=i+1; p=i%(n+1); q=i%(m+1); } while(p!=0||q!=0); b=floor(k/i); c=floor(k/(m+1))-b; d=floor(k/(n+1))-b; a=k-(b+c+d); printf("%d %d %d %d\n",a,b,c,d); } 4.计算工资 某工厂规定一个工人工作时间每个月160小时,每小时工资为5元,如果加班的话,每小时加班费为4元;但是单位同时又规定,一个工人每月加班时间平均计算下来最多不能超过6个小时/天,多出的加班时间不给加班费。(本题暂规定即使是周末、节假日加班也不能超过6小时;2月份假设全按照28天计算)。请编程完成如下的功能。 输入一个正整数repeat (0 由键盘输入月份数,某个工人的当月工作总时间,计算并打印此工人该月的工资。 程序代码: #include void main() { int time,worktime=160,overtime,month,days,pay,repeat,i=1; scanf("%d",&repeat); do { scanf("%d,%d",&month,&time); overtime=time-worktime; if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)days=31 ; else if(month==4||month==6||month==9||month==11)days=30; else if(month==2)days=28; { if(overtime<=6*days) pay=worktime*5+overtime*4; else pay=worktime*5+6*days*4; } printf("%d\n",pay); i=i+1; } while(i<=repeat); }错误原因没有考虑到工作时间小于160小时的情况 5.个人所得税 按照国家关于《中华人民共和国个人所得税法实施条例》的规定,我国公民个人所得税税率(工资、薪金所得适用)如下表: (注:本表所称全月应纳税所得额是指以每月收入额减除费用三千五百元后的余额,即通 常所说的个税起征点。) 要求编写以下的程序: 输入一个正整数repeat (0 输入一个职工的月薪salary,输出应交的个人所得税tax(保留2 位小数)。 程序代码: #include void main() { int salary,a,repeat,i; float tax; i=1; scanf("%d",&repeat); do { scanf("%d",&salary); a=salary-3500; if(a<=0) tax=0; else if(0 tax=a*0.03; else if(1500 tax=(a-1500)*0.1+1500*0.03; else if(4500 tax=(a-4500)*0.2+3000*0.1+1500*0.03; else if(9000 tax=(a-9000)*0.25+4500*0.2+3000*0.1+1500*0.03; else if(35000 tax=(a-35000)*0.3+26000*0.25+4500*0.2+3000*0.1+1500*0.03; else if(55000 tax=(a-55000)*0.35+20000*0.3+26000*0.25+4500*0.2+3000*0.1+1500*0.03;