C语言程序设计第四次作业-选择结构(2)

(一)改错题

输出三角形的面积和周长,输入三角形的三条边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:
1243459-20171105130150123-1649756857.png
错误原因:少一个右括号。
改正方法:在( s - c )后再加一个右括号。
错误信息2:
1243459-20171105132910248-2084392756.png
1243459-20171105132923951-347317288.png
1243459-20171105132931060-808594171.png
错误原因:if后面的语句和else后面的语句没加大括号
改正方法:把if和else后面的语句分别用大括号括起来
错误信息3:样例2输出错误
1243459-20171105133742248-1390045910.png
错误原因:if里面的判断之间应该用&&连接,||代表或者。
改正方法:将||改为&&
1243459-20171105134015013-58375613.png

(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。禁止大段复制,要自己对资料进行归纳总结,并给出你参考的资料链接。
2.对其他你认为需要进行总结的内容进行总结。
答:1.只需要判断一个条件的时候,使用if语句比较好,但是当判断条件很多的时候,使用多个if语句就不是最好的选择了。
if...else if在任何一个环节满足条件的时候就将会终止判断,只处理一个满足条件的情况。当判断条件较多的情况下,使用switch case语句。
switch判断固定值的时候用,而if建议判断区间或范围的时候用,一般用switch能做的,用if都能做,但是反过来则不行。
举例:
1243459-20171105155206920-2134471137.png
当条件较少时用if语句很容易,但是条件多就不是很简单了,过程就会很复杂。
1243459-20171105155408685-2086485250.png
使用if...else if... 语句其实跟if语句差不多,只是省略了些条件,是过程简化,不再看起来那么复杂。
1243459-20171105155840248-908394704.png
1243459-20171105155716623-1131231126.png
这两个比较可看出switch语句能把if...else if... 语句比较复杂的简化,进一步是=使过程清楚易懂,运行起来也更加迅速。

(三)实验总结
1.成绩转换
(1)题目:
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图:
1243459-20171105161319279-2009213567.png
(3)源程序:

# include <stdio.h>
int main()
{
    int score,a;
    scanf("%d",&score);
    a = score / 10;
        switch(a)
    {       case 10 : printf("A");break;
        case 9 : printf("A");break;
        case 8 : printf("B");break;
        case 7 : printf("C");break;
        case 6 : printf("D");break; 
        default : printf("E");break; }   
    return 0;
 } 

(4)实验分析
想不到case后面应该用什么,没有老师提醒想不到case(score/10)。
要多练习,才能想的到简单的方法。
(5)本题PTA提交列表
1243459-20171105162725904-592753642.png
5.三角形判断
(1)题目:给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
(2)流程图:
1243459-20171105162858435-249011866.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)实验分析:
问题1:在定义某些量时,定义错了他们的类型把double型的定义成了int型,导致错误。
解决办法:判断准确量的类型。
问题2:if语句中的某些符号使用错误,跟之前的混淆。
解决办法:牢记&&和||的用法。
(5)本题PTA提交列表
1243459-20171105163822982-1839888369.png
7简单的计算器
(1)题目:本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。
输出格式:
当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。
(2)流程图:
1243459-20171105163924920-1185261387.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)实验分析:
“%c”输入时,空格会对输入造成影响。
解决办法:在前面加上空格。
1243459-20171105164522623-260243650.png
(5)本题PTA提交列表
1243459-20171105164915232-543717000.png
9.求一元二次方程的根
(1)题目
本题目要求一元二次方程的根,结果保留2位小数。
(2)流程图:
1243459-20171105165401076-1426874591.png
(3)源程序:

#include<stdio.h>
#include<math.h>
int main()
{
    double a,b,c,x,y,q,w,e;
    scanf("%lf%lf%lf",&a,&b,&c);
    if(a==0&&b!=0)
    {
        y=(0-c)/b;
        printf("%.2f",y);
    }
    else
    {
        x=((0-b)+sqrt(b*b-4*a*c))/(2*a);
        y=((0-b)-sqrt(b*b-4*a*c))/(2*a);
        if(a==0&&b==0&&c==0)
        {
            printf("Zero Equation");
        }
        else if(a==0&&b==0)
        {
            printf("Not An Equation");
        }
        else if(b*b-4*a*c==0)
        {    
            printf("%.2f",x);
        }
        else if(b*b-4*a*c<0)
        {
            q=(0-b)/(2*a);
            w=sqrt(4*a*c-b*b)/(2*a);
        printf("%.2f+%.2fi\n",q,w);
        printf("%.2f-%.2fi\n",q,w);
        }
        else if(x!=y)
        {
          if(x<y)
          {e=x;x=y;y=e;}
          else
          printf("%.2f\n%.2f",x,y);
        }
        return 0;
    
    }
}

(4)实验分析:
刚开始看这个题时,有点思路,但是写起程序来,真是麻烦,错误百出。
问题1:结果不完全正确。
原因:没有考虑纯虚根。
最后老师提醒:纯虚根的情况,即有虚根的时候,如果实部为0,则实部应该输出0.00.然后输出虚部,不能只输出虚部而没有实部的内容。
(5)本题PTA提交列表:
1243459-20171105170059623-50851770.png

(四)博客互评:
C语言程序设计第四次作业——选择结构(2) - 李仁正 - 博客园
http://www.cnblogs.com/lrxlrz/p/7763680.html
C语言程序设计第四次作业 - 范马桶 - 博客园
http://www.cnblogs.com/he111923/p/7772093.html
C语言程序设计第四次作业-选择结构 - WH吴晗 - 博客园
http://www.cnblogs.com/moying456/p/7770919.html

转载于:https://www.cnblogs.com/1702-fengyajie/p/7787381.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值