(一)改错题

输出三角形的面积和周长,输入三角形的三条边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>
#include <math.h>
int 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;        
}

(1) 错误信息:

错误原因:题中所用的为函数,函数后面缺半个括号。
改正方法:在所用函数的最后加上半个括号。
(2) 错误信息:

错误原因:在if else 语句里应该用大括号表示语句属于条件语句里的句子。
改正方法:在if else 语句代码中加上大括号。
(* 。 *)错误改正后,经编译无错误,如图所示:

输入第一组样例输出结果与预期相符,如图所示:

但在输入第二组样例,输出结果与预期结果不符,结果如图所示:

经发现错误存在于源代码第十一行语句的错误。
(3) 错误信息:

错误原因:源代码第十一行的if语句出现错误。
改正方法:将if语句的或者“||”的符号改成并且,“&&”。
(4) 正确程序如图所示:

经改正后,再次输入第二组数据,发现结果与预期相符,结果如图所示:

(二)学习总结

1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。
(1) if else 语句大多是条件与条件之间有关联的句子。(两者是或者或者的关系)
<1>例如:
12-24小时制(10 分)
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

输入格式:

输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。

提示:在scanf的格式字符串中加入:,让scanf来处理这个冒号。

输出格式:

在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。

输入样例:

21:11
输出样例:

9:11 PM
<2>源代码如图所示:

(2)if if 几个if连着的语句共同出现在同一个源代码中,所有的并列if语句可以同时进行(if 与 if 语句属于并列关系,两者不会互相影响)
<1>例如:
高速公路超速处罚(10 分)
按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:

输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:

在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:

65 60
输出样例1:

OK
输入样例2:

110 100
输出样例2:

Exceed 10%. Ticket 200
输入样例3:

200 120
输出样例3:

Exceed 67%. License Revoked
<2>源代码如图所示:

(3)switch语句可以判断更多条件,在多条件判断时,运用switch语句更简练。
<1>例如:
成绩转换(10 分)
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:

输入在一行中给出一个整数的百分制成绩。

输出格式:

在一行中输出对应的五分制成绩。

输入样例:

90
输出样例:

A
<2>源代码如图所示:

2.对其他你认为需要进行总结的内容进行总结。
<1>在源代码中如果有用到数学函数,应该在源代码开头声明数学函数相关的东西,其他函数也应该如此;
<2>要合理运用if else switch 相关的条件语句,要分清关系,认清语句都适应什么样的题型;
<3>注意题中要求的变量类型,有时候可能还需要强行转换,一定要按照题目要求来做;
<4>在使用 switch case 语句时,一定要注意在case后要有空格。
(三)实验总结
1.比较大小
(1)题目
本题要求将输入的任意3个整数从小到大输出。
(2)流程图以及运算结果如图所示:




(3)源代码如图所示:

(4)实验分析:这道题的思路是将两个数进行比较,然后把最大的数赋给一个变量,应该选用if if的并列语句。
(5)PTA提交结果如图所示:

2.高速公路超速处罚
(1)题目
按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
(2)流程图以及运算结果如图所示:




(3)源代码如图所示:

(4)实验分析:本题注意分析题目条件,正常行驶是在10%以下,罚款是在10%-50%,吊销驾驶证是在50%以上,注意输出时“%”,应该输入“%%”,才能输出“%”。
(5)PTA提交结果如图所示:

3.计算油费
(1)题目
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
(2)流程图以及运算结果如图所示:


(3)源代码如图所示:

(4)实验分析:字符型的语句应该属于char类型。
(5)PTA提交结果如图所示:

4.12-24小时制
(1)题目
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
(2)流程图以及运算结果如图所示:


(3)源代码如图所示:

(4)实验分析:小时的借位问题,分钟不够减要向前面的小时借一位,时间是24小时制,进位制为60,尤其注意输出样例。
(5)PTA提交结果如图所示:

(四)博客互评
<1>评论刘苗苗的作业:http://www.cnblogs.com/liumiaomiao520/p/7753982.html
评价:作业的条理清晰,改错题明显指出错误所在,另外在学习过程中应该注意的问题都提的很明显,改正以及学习方法提出的很好。
<2>评价许天笑的作业:http://www.cnblogs.com/snxtx/p/7763856.html
评价:注意到他的学习总结,总结的很认真,可见在学习中注意的细节很多,最后排版希望更用心。
<3>评论李仁正的作业:http://www.cnblogs.com/lrxlrz/p/7763680.html
评价:对于错误的分析以及实验总结不够详细,对于if else switch 语句的分析总结时,缺少各个语句间的区别以及该什么时候运用该语句。