分支结构

语法

本内容C语言实现的一般形式为:

单分支结构

if(判断)
{
语句;
}

双分支结构

if(判断)
{
语句
}
else
{
语句
}

多分支结构

if(判断)
{
语句;
}
else if(判断)
{
语句;
}
...
else
{
语句;
}
判断所用的关系用算符有 < <= > >= == !=,尤其注意后两个的使用;
与此相关的还有逻辑运算符 逻辑与(&&),逻辑或(||)

例题及代码实现

  • 例题一
    分支结构一
      #include<stdio.h>
      int main (void){
          float x, y;

          scanf("%f",&x);

          if ( x == 10 )
          {
            y = 0.1;
          }
          else {
            y = x;
          }
          printf("f(%.1f) = %.1f\n", x, y );
          return 0;
      }
  • 例题二
    分支结构二
#include<stdio.h>
int main()
{
    float sala;
    double tax;

    scanf("%f",&sala);

    if(sala<=1600)
    {
        tax=0;
    }
    else if(sala<=2500)
    {
        tax = 0.05 * (sala-1600);
    }
    else if(sala<=3500)
    {
        tax = 0.10 * (sala-1600);
    }
    else if(sala<=4500)
    {
        tax = 0.15 * (sala-1600);
    }
    else
    {
        tax = 0.20 * (sala-1600);
    }
    printf("%.2f",tax);
    return 0;
}

疑难点

一 符号错误

经常用一个关系符,例如逻辑与(&&)与相等(== ),经常在if后的判断中写一个,以后一定要谨记&&==

二 情况讨论不全

有时候对所有的范围不能全部说明,例如
情况讨论不明

#include<stdio.h>
int main()
{
    int lower,upper;
    double celsius;

    scanf("%d %d",&lower,&upper);

    if(lower<=upper&&upper<=100)
    {
        printf("fahr celsius\n");
        for(lower;lower<=upper;l+=2)
        {
            celsius=1.0*5*(l-32)/9;
            printf("%d%6.1f\n",lower,celsius);
        }
    }
        else
        {
            printf("Invalid.\n");
        }
    return 0;
}

如果先找补集,可能会漏掉,导致答案部分正确

三 难题

难题

#include<stdio.h>
#include<math.h>
int main()
{
    double a,b,c;
    scanf("%lf %lf %lf",&a,&b,&c);

    if(a==0&&b==0&&c!=0)
      {
            printf("Not An Equation");
      }
    else if(a==0&&b!=0&&c!=0)
      {
            printf("%.2f\n",-c/b);
      }
    else if(a==0&&b!=0&&c==0)
      {
            printf("%.2f\n",-c/b);
      }
    else if(a==0&&b==0&&c==0)
      {
            printf("Zero Equation");
      }
        
    else
      {
    double m=pow(b,2)-4*a*c;
            if(m>0)
            {
               printf("%.2f\n",(-b+sqrt(m))/(2*a));
               printf("%.2f\n",(-b-sqrt(m))/(2*a));
            }
            else if(m==0)
            {
               printf("%.2f\n",(-b)/(2*a));
             }
        else 
            {
            	m=(-m);
                 double real = (-b)/(2*a);
                 double image = sqrt(m)/(2*a);

                 if(real == 0) real = 0;

            	printf("%.2f+%.2fi\n",real,image);
            	printf("%.2f-%.2fi\n",real, image);
             }
       }
    return 0;
}

疑难点

1.数学知识欠缺,复数根求解;
2.讨论情况比较多,容易遗漏。
循环

posted @ 2020-10-14 23:31  w4  阅读(616)  评论(0编辑  收藏  举报