(一)改错题
输出三角形的面积和周长,输入三角形的三条边a、b、c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出“These sides do not correspond to a valid triangle”。
输入输出样例1:
Enter 3 sides of the triangle: 5 5 3 area = 7.15; perimeter = 13.00 输入输出样例2: Enter 3 sides of the triangle: 1 4 1 These sides do not correspond to a valid triangle源程序(有错误的程序)
include <stdio.h>
#includeint main(void){ double a,b,c; double area,perimeter,s; printf("Enter 3 sides of the triangle: "); scanf( "%lf%lf%lf",&a,&b,&c ); if( a + b > c || b + c > a || a + c > b) s = ( a + b + c ) / 2; area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ); perimeter = a + b + c; printf("area = %.2f; perimeter = %.2f\n",area,perimeter); else printf("These sides do not correspond to a valid triangle\n"); return 0; }
对源程序进行编译:
![1253780-20171104194118920-1617543021.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104194118920-1617543021.png)
错误原因:
area=语句最后缺一个小括号。 改正方法: 在area=语句最后加上小括号。![1253780-20171104194459373-1202567986.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104194459373-1202567986.png)
错误原因:
if语句缺大括号 改正方法: if后几条语句加上大括号![1253780-20171104194821982-1424405189.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104194821982-1424405189.png)
验证样例1
![1253780-20171104195042982-1479728710.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104195042982-1479728710.png)
![1253780-20171104195144060-233068713.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104195144060-233068713.png)
![1253780-20171104195717326-1560284882.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104195717326-1560284882.png)
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。
if语句,if else if语句和switch case语句都属于流程控制语句。当判断条件比较少时应用if会比其他两个要方便,当条件比较多时应该用另外两种。当使用多个if语句时会对每个语句都进行判断;对于if.....else if语句的使用会在满足一个条件后终止判断,只处理一个满足条件的语句。在多个判断条件的情况下,使用if...else if语句相对于使用多个if语句而言,可以减少程序的判断次数,提高效率。在进行多个条件判断时还可以使用switch...case,有时候还会比if...else if更加好用,例如判断那年中某月的天数,应用switch...case。 所有的switch语句都可以用if-else语句来替换(因为if-else语句只需对每个离散值分别做判断即可),而并不是所有的if-else语句都可以用switch语句来替换(因为区间里值的个数是无限的并且switch所接受的值只能是整型或枚举型,所以不能用case来一一列举)。switch...case与if...else if的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳 转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else if那样遍历条件分支直到命中条件,而只需访问对应 索引号的表项从而到达定位分支的目的。
2.对其他你认为需要进行总结的内容进行总结。 该章节学习了switch...case语句,在用switch语句时,总是忘记加break。(三)实验总结
本次实验总结,学号末位数是单数的同学完成选择结构(2)中的1、5、7、9题,学号末位数是双数的同学完成选择结构(2)中的2、4、6、8题。
格式如下: 1 (1)题目 7-2 比较大小(10 分) 本题要求将输入的任意3个整数从小到大输出。 (2)流程图![1253780-20171104212737341-1450524628.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104212737341-1450524628.png)
(3)源代码
include<stdio.h>
int main()
{ int x,y,z,temp; scanf("%d %d %d",&x,&y,&z); if(x>y) { temp=x; x=y; y=temp;}
if(x>z) { temp=z; z=x; x=temp;}
if(y>z) { temp=y; y=z; z=temp;}
printf("%d->%d->%d",x,y,z);return 0;
} (4)实验分析 问题:再做流程图时总是无法输出结果 原因:总忘记数字前后加+和‘“” 解决办法:记得加上+“” (5)本题PTA提交列表![1253780-20171104202523576-1844295339.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104202523576-1844295339.png)
![1253780-20171104211211810-1449055614.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104211211810-1449055614.png)
(3)源代码
include<stdio.h>
int main()
{ int a,b; double z; scanf("%d %d",&a,&b); z=(double)(a-b)/(double)b*100; if(z<10&&a>b) { printf("OK"); } if(z>=10&&z<50) { printf("Exceed %0.f%%. Ticket 200",z); } if(z>=50) {printf("Exceed %0.f%%. License Revoked",z);
} return 0; } (4)实验分析问题:在小于百分之十时应该输出OK,但是由于没有加引号,找不到结果没有办法输出。
解决办法: 在OK输出框内加上引号。 (5)本题PTA提交列表![1253780-20171104203840560-2104048422.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104203840560-2104048422.png)
![1253780-20171104212615591-196270746.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104212615591-196270746.png)
(3)源代码
include<stdio.h>
int main(void)
{ int a,b,c; double m; scanf("%d%d %c",&a,&b,&c); switch(b) { case 90: m = 6.95 * a; break; case 93: m = 7.44 * a; break; default: m = 7.93 * a; break; } if(c == 'm') { m = m * 0.95; } else { m = m * 0.97; } printf("%.2f",m); return 0; } (4)实验分析 问题:无 (5)本题PTA提交列表![1253780-20171104204557404-104281820.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104204557404-104281820.png)
![1253780-20171104211941763-418318867.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104211941763-418318867.png)
(3)源代码
include<stdio.h>
int main(void)
{ int a,b; char c; scanf("%d%c%d",&a,&c,&b); if(a>12) { a=a-12; printf("%d:%d PM",a,b); } else if(a==12) { printf("%d:%d PM",a,b); } else { printf("%d:%d AM",a,b); } return 0; } (4)实验分析 问题:if语句中a==12写成了a=12 解决办法:等于号相对大于小于不同,需写成== (5)本题PTA提交列表![1253780-20171104210054935-213894137.png](https://images2017.cnblogs.com/blog/1253780/201711/1253780-20171104210054935-213894137.png)