zoukankan      html  css  js  c++  java
  • 简单学C——第二天

                           控制结构(-)

     

     

    相信大家对流程图肯定很熟悉。下面我将介绍的正是关于此方面的,c语言中,控制结构大体分为选择结构和循环结构。

    一.选择结构:

        先贴出一般用于选择结构的语法知识:

         1:

      

    #include<stdio.h>
    //第一种
    int main()
    {
       if()
       {
           
       }
    }

       2:

    #include<stdio.h>
    //第二种
    int main()
    {
       if()  //如果括号内的条件满足,则进行if下面的操作
       {
           
       }
       else//否则,则进行else下面的操作
       {
           
       }
    }

    3:

    #include<stdio.h>
    //第三种
    int main()
    {
       if()  //如果if括号内的条件满足,则进行if下面的操作,如不满足则跳过这一语句
       {
           
       }
       else if()//如果else if括号内的条件满足,则进行else if下的操作
       {
           
       }
       else//如果上面两个语句都不满足,则进行else 内的操作
       {
           
       }
    }

        或许这样看有些虚幻。

        还是例题说着方便,下面就用例题来解释吧。

        从键盘上输入三个数,找出其中最大的一个数。

        画一个流程图出来,很容易就能得出,可是如何用C语言程序来表示这个流程图??

       

    #include<stdio.h>
    int main()
    {
        int a,b,c;//定义了三个整数类型的变量
        scanf("%d%d%d",&a,&b,&c);//从键盘输入三个数
        /*现在假设a是最大值,分别与b,c比较,如果a<b,吧b的值赋值
        给a,现在a就是a与b中的最大值,同理,与c比较,可得三个数的最值。
        */
        //需要注意的是:c语言中的等号不是”=“,而是”==“
        //”=“,在c中是赋值的意思,即把右边的值,赋值给左边
         if(a<b)
            a=b;
         if(a<c)
            a=c;
         printf("%d",a);
    }

    运行结果:

     此程序虽然比较简单,但是它是有缺点的,如过a不是最大的,b或者c都可能会把它们的值给a,那么a以前的值是什么呢?

    此时,电脑已经不知道了,因为你用了赋值语句把a以前的值覆盖了,不信可以试试。

    #include<stdio.h>
    int main()
    {
        int a,b,c;//定义了三个整数类型的变量
        scanf("%d%d%d",&a,&b,&c);//从键盘输入三个数
        /*现在假设a是最大值,分别与b,c比较,如果a<b,吧b的值赋值
        给a,现在a就是a与b中的最大值,同理,与c比较,可得三个数的最值。
        */
        //需要注意的是:c语言中的等号不是”=“,而是”==“
        //”=“,在c中是赋值的意思,即把右边的值,赋值给左边
         if(a<b)
            a=b;
         if(a<c)
            a=c;
         printf("%d
    ",a);
         printf("%d    %d   %d
    ",a,b,c);//输出现在a,b,c的值
    }

    运行结果:

    那么,还有没有其他的方法呢?当然有。现在就列举出如下几种方法,不改变a,b,c的值,但是同时又能找到a,b,c中的最值。

    方法一:

     

    #include<stdio.h>
    int main()
    {
        int a,b,c,d;//增加了一个d变量
        scanf("%d%d%d",&a,&b,&c);//从键盘输入三个数
        /*现在假设d是最大值,分别与a,b,c比较较,可得三个数的最值。
        先要让d等于a,b,c三个数当中的某一个值,因为在定义时,a,b,c,d
        都会被随机的赋予一个随机值,然后我们又从键盘里输入值,给了a,b,c;
        但是d还是一个随机数。这个随机数可能比a,b,c都要大。
        */
           d=a;
         if(d<b)
            d=b;
         if(d<c)
            d=c;
         printf("%d
    ",d);
         printf("%d    %d   %d
    ",a,b,c);//输出现在a,b,c的值
         return 0;
    }

    运行结果:

     方法二:

     

    #include<stdio.h>
    int main()
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);   //从键盘输入三个数
        if(a>b&&a>c)   //如果a既比b大,又比c大,输出a
        {
            printf("%d
    ",a);
        }
         if(b>a&&b>c)  //如果b既比a大,又比c大,输出b
        {
            printf("%d
    ",b);
        }
         if(c>a&&c>b)  //如果c既比a大,又比b大,输出c
        {
            printf("%d
    ",c);
        }
        printf("%d   %d   %d
    ",a,b,c); //输出a,b,c
        return 0;
    }

    运行结果,可以试一下与上面的运行结果是一样的

    从上面的代码中,可以看到一个陌生又并不陌生的符号“&&”。  或许一个“&”,看到会很熟悉,它是取地址符,可以在scanf中用到。但是两个“&”,是什么意思呢? 它是数学中的且,即“&&”符号两边的式子都要同时满足,然后整体才满足。与“&&”对应的符号是“||”,即数学中的或,它表示在“||”两边的式子有一个满足就可以。

    方法三:

    #include<stdio.h>
    int main()
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);//从键盘输入三个数
        if(a>b)   //如果a比b大
        { //如果a比c大,输出a
            if(a>c)
            printf("%d
    ",a);
        }
         if(b>a)  //如果b比a大
        { //如果b比c大,输出b
            if(b>c)
            printf("%d
    ",b);
        }
         if(c>a)  //如果c比a大
        {    //如果c比b大,输出c
            if(c>b)
            printf("%d
    ",c);
        }
        printf("%d   %d   %d
    ",a,b,c); //输出a,b,c
        return 0;
    }

    同样,运行结果是一样的,但是我们能从上面学到什么呢?从上面可以看到,if语句里面还有一个if,用来补充上面的条件.由此可知if语句是可以嵌套使用的。

    看了上面的,应该会对判断语句有一个更深入的理解。可以做其他的一些例题了。

    上机练习:1.从键盘上输入a,b,c。对a,b,c,进行从大到小排序。运行结果如下。

                 2.从键盘上输入五个数,找到其中的最大值和最小值,并输出.

  • 相关阅读:
    CodeForces Gym 100500A A. Poetry Challenge DFS
    CDOJ 486 Good Morning 傻逼题
    CDOJ 483 Data Structure Problem DFS
    CDOJ 482 Charitable Exchange bfs
    CDOJ 481 Apparent Magnitude 水题
    Codeforces Gym 100637G G. #TheDress 暴力
    Gym 100637F F. The Pool for Lucky Ones 暴力
    Codeforces Gym 100637B B. Lunch 找规律
    Codeforces Gym 100637A A. Nano alarm-clocks 前缀和
    TC SRM 663 div2 B AABB 逆推
  • 原文地址:https://www.cnblogs.com/stffer/p/4851676.html
Copyright © 2011-2022 走看看