第四次作业--选择结构(2)

一:改错
先将源程序(有错误的程序)复制到devc++中如图
1242802-20171105112900295-1627687182.png
进行第一次编译寻找错误
发现错误信息(1)如图
1242802-20171105113052045-1113735741.png
错误原因:第13行关于面积的计算式的sqrt数学函数缺少“)”,导致编译错误
改正方法:补齐缺少的“)”
进行第二次编译寻找错误
发现另有错误(2)如图
1242802-20171105113354732-59608148.png
错误原因:“if”和“else”语句后缺少对应的“{}”大括号,导致没有与“else”配对的“if”,逻辑关系出现了问题导致编译错误
改正方法:将“if”和“else”后缺少的“{}”补齐
现进行第三次编译寻找错误
编译成功
1242802-20171105114015982-1528927758.png
进行运行指令,按输入样例1进行输入,发现结果与输出样例1相同
1242802-20171105114226107-244955335.png
关闭,进行第二次运行,按输入样例2进行输入,发现与输出样例2不同,显然不符合题意存在错误信息(3)
1242802-20171105114432513-49875365.png
返回源程序寻找错误发现
错误原因:选择语句中,三边的判断语句,且“&&”错写成了,或"||"导致当输入三边构不成三角形时发生错误
改正方法:将第11行“||”改为“&&”
进行第三次运行,按输入样例2进行输入,发现结果与输出样例2相同
1242802-20171105114924826-150442284.png
所有错误改正,改正后符合题目要求的正确程序如下
1242802-20171105115138076-1337173989.png

二:学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。

总结(1):通过比较得出,在选择条件是嵌套类型的我们使用if--else 语句比较方便;当条件单一是使用switch--case 比较简单。
例如输出结果 i=2,分别用两种语句进行

include<stdio.h>

int main(void)
{
int i = 2;
if (i == 2)
{
printf(" i 等于 2");
}
else
{
printf(" i 不等于 2");
}
return 0;
}

include<stdio.h>

int main(void)
{
int i = 2;
switch (i)
{
case 1: printf(" i 等于 1"); break;
case 2: printf(" i 等于 2"); break;
case 3: printf(" i 等于 3"); break;
case 4: printf(" i 等于 4"); break;
case 5: printf(" i 等于 5"); break;
default: printf(" i 不等于1,2,3,4,5, "); break;
}
return 0;
}

总结(2):if语句更灵活,switch语句显得结构更清晰
总结(3):多个if是所有的if都会进行判断,if else if是只要有满足条件的,就不再对之后的else if进行判断
总结(3):如果所有if的条件不存在包含于被包含的关系,那么就用if就可以,如果存在或者不清楚包含与被包含的关系最好用if else
参考资料连接1:http://blog.csdn.net/u014536527/article/details/48878649
参考资料连接2:http://www.jb51.net/article/83096.htm
参考资料连接3https://zhidao.baidu.com/question/166896032.html:

2.对其他你认为需要进行总结的内容进行总结。
本人对本章其他需要总结的内容如下几点:
(1):“switch case ”语句中,“switch”后面()跟的是一个值,不能忘记添加“break”
(1):“if”,“else if ”后一定要记得加条件语句,而“else”后不能加条件语句
(3):弄清楚字符与字符串的关系,仔细区分字符与字符串,不可混淆使用

三:实验总结

  1. (1)题目:
    本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
    •大于等于90分为A;
    •小于90且大于等于80为B;
    •小于80且大于等于70为C;
    •小于70且大于等于60为D;
    •小于60为E。

(2)流程图
1242802-20171105132352138-311092881.png

(3)源代码
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a>=90)
{
printf("A");
}
else if(a<=90 && a>=80)
{
printf("B");
}
else if(a<=80 && a>=70)
{
printf("C");
}
else if(a<=70 && a>=60)
{
printf("D");
}
else
{
printf("E");
}
return 0;
}
(4)实验分析
问题:最后的“else”后加了条件语句
原因:刚开始学没有搞清楚
解决办法:实验课上询问同学已解决
(5)本题PTA提交列表
1242802-20171105132511576-844709313.png

  1. (1)题目:给定平面上任意三个点的坐标(x​1​​,y​1​​)、(x​2​​,y​2​​)、(x​3​​,y​3​​),检验它们能否构成三角形。
    (2)流程图
    1242802-20171105133605529-1815277566.png
    1242802-20171105133616591-1198458150.png
    (3)源代码

    include<stdio.h>

    include<math.h>

    int main()
    {
    double x1,y1,x2,y2,x3,y3,a,b,c,s,L,A;
    scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
    a=sqrt(pow(x1-x2,2)+pow(y2-y1,2));
    b=sqrt(pow(x2-x3,2)+pow(y2-y3,2));
    c=sqrt(pow(x1-x3,2)+pow(y3-y1,2));
    if(a+b>c&&a+c>b&&b+c>a)
    {
    L=a+b+c;
    s=(a+b+c)/2;
    A=sqrt(s(s-a)(s-b)*(s-c));
    printf("L = %.2f, A = %.2f",L,A);
    }
    else
    {printf("Impossible");}

return 0;
}
(4)实验分析
问题:编译发生错误
1242802-20171105133917388-238220166.png
原因:忘记加头文件#include<math.h>
解决办法:因为用了“sqrt”和“pow”函数所以不填加头文件不能进行编译,仔细查找错误发现原因并改正
(5)本题PTA提交列表
1242802-20171105134338107-557295346.png
1242802-20171105134349623-77213355.png

  1. (1)题目:本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围
    (2)流程图:
    1242802-20171105135048701-961187640.png
    (3)源代码:

    include<stdio.h>

    include<stdlib.h>

    int main()
    {
    int a,b,c;
    char d;
    scanf("%d %c%d",&a,&d,&b);
    switch(d)
    {
    case '+':
    c = a + b;
    break;
    case '-':
    c = a - b;
    break;
    case '':
    c = a
    b;
    break;
    case '/':
    c = a / b;
    break;
    case '%':
    c = a % b;
    break;
    default :
    printf("ERROR");
    exit(0);
    }
    printf("%d",c);

    return 0;
    }
    (4)实验分析
    问题:1242802-20171105140440982-1223846864.png
    原因:“%c”输入时误将空格字符和转义字符作为有效字符输入
    解决方法:在“%c”前再加一个“ ”以保证正常运行
    (5)本题PTA提交列表:
    1242802-20171105135716091-296757332.png
  2. (1)题目:本题目要求一元二次方程的根,结果保留2位小数。
    (2)流程图
    (3)源代码:

    include<stdio.h>

    include<math.h>

    int main(void)
    {
    double a,b,c,d,e,f;
    scanf("%lf %lf %lf",&a,&b,&c);
    if(a==0&&b==0)
    {
    if(c==0)
    {
    printf("Zero Equation");
    }
    else
    {
    printf("Not An Equation");
    }
    }
    else
    {
    d=bb-4ac;
    if(d>0)
    {
    if(a!=0)
    {
    e=(-b+sqrt(d))/(2
    a);
    f=(-b-sqrt(d))/(2a);
    printf("%.2f\n%.2f",e,f);
    }
    else
    {
    e=-c/b;
    printf("%.2f",e);
    }
    }
    else if(d==0)
    {
    e=-b/(2
    a);
    printf("%.2f",e);
    }
    else
    {
    e=-b/(2a);
    f=sqrt(-d)/(2
    a);
    if(b==0)
    {
    printf("%.2fi\n-%.2fi",f,f);
    }
    else
    {
    printf("%.2f+%.2fi\n%.2f-%.2fi",e,f,e,f);
    }
    }
    }
    return 0;
    }
    (4)实验分析:
    问题:没有考虑纯虚根的情况
    原因:考虑到不周全,想的不够全面
    解决:交完作业之前一直没有想到,交作业后与同学进行交流,得到解决
    (5)本题PTA提交列表:
    1242802-20171105141615388-1610586239.png

四:博客互评
李仁正:http://www.cnblogs.com/lrxlrz/p/7763680.html
范凯华:http://www.cnblogs.com/fkh1/p/7774050.html
何强:http://www.cnblogs.com/jjjj1234/p/7772739.html

本次作业如上

转载于:https://www.cnblogs.com/yangruofei/p/7787382.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值