5th day

 P73- 逻辑运算符的简要介绍。

    1.比较运算符和比较表达式。

        1.1 比较表达式: 1个比较表达式描述的是1个条件。那么可以根据这个比较表达式的结果来判断这个条件是否成立。

            缺点: 1个表达式只能描述1个条件。

            3 > 2   ;

    2. 判断多个条件并且指定多个条件之间的关系。

    3.逻辑运算符。

        3.1 作用:判断多个条件。使用逻辑运算符来指定多个条件之间的关系。

        3.2 逻辑运算符:

            &&         逻辑与 并且

            ||         逻辑或 或者

            !           非    取反

    4.逻辑表达式:由逻辑运算符链接起来的式子,就叫逻辑表达式。

        一般情况下:逻辑运算符链接起来两个条件(比较表达式)

        逻辑表达式的结果。

        因为逻辑表达式描述的是多个条件,也是条件,所以结果要么成立(结果为真),要么不成立(结果为假)。

        所以逻辑表达式的结果仍然是真,假。所以我们用int类型的变量来表示结果。

        0       表示假

        非0     表示真

    逻辑表达式和比较表达式的区别:

        1.比较表达式只能描述1个条件

        2.逻辑表达式可以描述多个条件。并且使用逻辑运算符来指定多个条件之间的关系。

P74 - 76 逻辑运算符

    详解逻辑表达式

        1.&& 逻辑与  并且。

         由&&连接起来的逻辑表达式,只有当两边的条件都成立的时候,整个逻辑表达式才能成立。

         只要有一边的条件不成立,整个逻辑表达式都不成立。

            1 && 1  1

            0 && 1  0

            1 && 0  0

            0 && 0  0

        断路问题:

        逻辑表达式,在执行的时候,是先计算左边的条件的结果,再计算右边的结果。

        当是&&逻辑表达式的时候。

        那么左边的表达式不成立,那么这个时候可以确定整个逻辑表达式的结果不成立。

        那么这个时候,右边的条件根本不会去判断,就不会去执行了。

                 int i = 1;

                 int res = i++ >10 && ++i <0;

                     //  i++ i=2    (如果执行的话 ++i后 i=3)

                 printf("i = %d\n",i); //i = 2

                 printf("res = %d\n",res); //res =0

        2. || 逻辑或  或者。

             由||连接起来的逻辑表达式,

             只要有一边的条件成立,整个逻辑表达式就成立。,整个逻辑表达式就能力。

            只有两边都不成立的时候,整个逻辑表达式才不成立

             1 || 1  1

             0 || 1  1

             1 || 0  1

             0 || 0  0

            断路问题:

             逻辑表达式,在执行的时候,是先计算左边的条件的结果,再计算右边的结果。

             当是||逻辑表达式的时候。

             如果左边的条件成立。那么这个时候就可以确定整个表达式的结果为 成立。

             那么这个时候,右边的条件根本就不会去判断了。所以这个时候右边的那个条件根本就不会去执行了。


                 int i = 1;

                 int res = i++ >0 || ++i <10;

                        // 左边条件成立,不再判断右边的条件,所以为 ++i 不执行。

                 printf("i = %d\n",i); //i = 2

                 printf("res = %d\n",res); //res =1

        3.  ! 非 取反

            作用:将真变为假,将假变为真。

             int res = 10 > 0;



             int res1 = !res;

             !的作用:将后面的值取反 如果后面的结果为真,结果就为假 如果后面的结果为假,那么结果就为真。

        4.取反运算符的优先级要比比较运算符的优先级高。

        5.逻辑运算符之间的优先级

            not and  or

            !   &&   ||

            ! > && > ||

            取反优先级最高,其次是逻辑与,最小的优先级是逻辑或。

            当你不确定优先级的时候,可以使用小括号来改变优先级。

        6.课堂练习:

            6.1请用户输入小明的语文成绩和数学成绩,输出以下判断的结果

                a.两门成绩都大于90分.输出 1 或 0。

                b.任意1门成绩大于90分,输出 1 或 0。

                 int shuXue = 0 ;

                 int yuWen = 0 ;

                 int res = 0 ;

                 printf("输入数学语文成绩(空格分隔):");

                 rewind(stdin);

                 scanf("%d %d",&shuXue,&yuWen);

                 res = shuXue > 90 && yuWen > 90;

                 printf("数学语文都高于90分: %d\n", res);

                 res = shuXue > 90 || yuWen >90 ;

                 printf("数学或语文高于90分:%d\n", res);

            6.2.定义1个变量year int    保存年份。

                写1个表达式 判断这个年份是不是闰年,

                满足如下两个条件之一 那么年份就是闰年,

                a.年份可以被400整除.

                b.年份可以被4整除 但是 不能被100整除.

                 int year = 0 , res = 0 ;

                 printf("输入年份:");

                 rewind(stdin);

                 scanf("%d",&year);

                 //    res = !(year % 400) || (!(year % 4) && year % 100);

                 res = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);

                 printf("年份是否是闰年:%d\n", res);

P79 - 运算符的优先级和结合性。

     1.到目前为止,学习过哪些运算符:

        =   赋值运算符

        + - * / % 算术运算符

        += -= *= /= %= 复合赋值运算符

        ++ -- 自增自减运算符

        , 逗号运算符

        > >= < <= == != 比较运算符,关系运算符

        && || ! 逻辑运算符

        & 取地址运算符

    2. C语言将所有的运算符分为了15个等级。

        1级的优先级最高,15级的优先级最低。

        当表达式中有多种运算,先算优先级高的,再算优先级低的。

    3.运算符的结合性。

        当1个表达式中的运算符的优先级是一样的时候,是从左到右计算 还是从右到左来计算是根据运算符的结合方向来的。

 P80 - IF 结构的使用。

    1.比较表达式和逻辑表达式。统称为条件表达式。

        条件表达式,描述的是1个或者多个条件。

    2.IF语法结构。

        2.1 作用: 可以实现,1段代码在只有满足指定条件的时候才执行,否则不执行。

        2.2 语法:

            if (条件表达式)

             {

                执行代码;

             }

            条件表达式:比较表达式或者逻辑表达式。

        2.3 执行步骤:

            a.先判断if后面条件表达式的真假

                a.1 如果为真,条件成立,就会执行if块中的代码。执行完毕之后再继续往下执行。

                a.2 如果为假,条件不成立,就略过if块中的代码继续往下执行。

    3.使用IF结构要注意:

        3.1 关于分号。

            在1条语句的后面,我们都要写一个分号,这个分号代表这条指令的结束。

            CPU在识别指令的时候,如何判断指令结束并执行,以分号为基准。

            而绝大多数的情况下,每一条语句就代表1条指令。所以每条语句的后面要跟一个分号。

            IF结构是一个语法快,他的范围从左大括号开始到右大括号结束。

            所以一般情况下,IF结构不需要加分号。因为}就代表了结束。

        3.2 IF后面的小括号内可以写任意的表达式。

            反正在执行的时候,计算IF后面的小括号中的表达式的结果。

            0   表示假

            非0 表示真

        3.3 关于永真和永假的

            if(1) 代表条件永远成立.

            if(0) 代表永远不成立.

        3.4 IF 代码块中可以有任意行代码。只要符合你的逻辑。

        3.5 请保持正确的代码缩进。

            属于1个大括号的代码,就应该保持一个Tab的缩进。

            选中要对齐的代码: CTRL(control)+I 就会自动对齐,前提是代码没有语法错误。

 P83 - 变量的作用域。

    1. 声明1个变量就是在内存申请一块空间来存储数据。

    2. 声明在1个大括号内的变量,当这个大括号被CPU执行完毕之后,定义在这个大括号内的变量申请的内存空间就会被回收。

        定义在1个大括号中的变量只能在大括号内访问。

        变量的作用域:指的就是变量可以在哪段范围内访问。离变量最近的大括号

    3.我们可以自定义一个作用域来提前释放1个变量。

            {

                int i=1;

                printf("i=%d",i);

            }  //这个时候,i就会在这里呗释放。

    4.在不同的作用域(大括号)中,或者是不同层级的作用域中,是可以定义名称相同的变量的。

      这个时候,内层作用域中的同名变量就会将外层作用域中的同名变量屏蔽。在内层作用域当中访问的就是内层的变量。

      虽然在不同层级的作用域中可以定义名称相同的变量,但是这样的代码比较混乱,不便于阅读,所以一般情况下我们不会在不同层级的作用域中定义相同的变量。

 P84 - IF-ELSE结构。

    1.IF结构的缺点。

      只能在条件满足的时候执行1段指定的代码。条件不满足的时候就无法执行另外的代码了。

    2.IF-ELSE 结构。

        2.1 作用 :在条件满足的时候执行1段代码,在条件不满足的时候执行另外1段代码。

        2.2 语法 :

            if (条件表达式)

            {

               执行代码

            }

            else

            {

               执行代码

            }

        2.3 执行步骤:

            a.先计算if后面的条件表达式的真假。

                a.1  如果为真,就执行if块中的代码,执行完毕之后,结束if-else结构,往下执行,不会执行else中的代码.

                a.2  如果为假,就会执行else中的代码。不会执行if中的代码。执行完了之后继续往下执行。

        2.4 什么时候使用if-else 结构呢?

            如果你有2段代码,1段在条件成立的时候执行,另外一块在条件不成立的时候执行,这个时候就可以使用if-else结构。

            用法:

                 if(条件)

                 {

                    条件满足的时候执行的代码;

                 }

                 else

                 {

                    条件不满足的时候执行的代码;

                 }

 P86  使用IF-else结构注意

    1.保持正确的代码缩进,

    2.IF后的表达式任意 结果为0就是假,非0就是真。

    3.分号不要乱写。

    4.IF与ELSE是1个整体。不能在中间写代码。

    5.IF和ELSE中间的代码绝对不会同时执行。

        因为if后的表达式的结果只有两个,不会有第三个,成立就执行if,不成立就执行else,没有第三个。

    6.块中代码可以任意写。

 P88 IF-ELSE IF 结构

    1.IF-ELSE 的缺点:只能判断1个条件。

    新需求 :

        需要按照顺序判断多个条件,只要一个成立,就要执行对应的事情,后面的就不需要再判断了。

        只有前面条件不成立的时候才判断后面的条件。

    2.IF-ELSE IF - ELSE IF - ELSE 结构。

        2.1 作用

               依次的按照顺序判断多个条件,只要1个成立,就会执行对应的代码。

               只有前面的不成立,才继续判断下个。

        2.2 语法

             if (条件表达式1)

             {

                执行代码;

             }

             else if (条件表达式2)

             {

                执行代码;

             }

             else if (条件表达式3)

             {

                执行代码;

             }

             else

             {

                执行代码;

             }

  3.执行步骤

            从上到下的依次判断每一个条件表达式的结果。

            只要有1个条件表达式成立,就执行对应的快代码。

            只有当前面的条件表达式不成立的时候才会继续向下判断。

            如果所有的条件表达式都不成立,那么久会执行else中的代码。

   4.使用注意

            4.1.只要前面的条件成立,就会执行相应的代码。

                执行完毕之后 立即结束这个结构。

                哪怕后面的条件是成立的 也不会执行。

            4.2.如果判断了后面的条件

                那么就说明前面的条件是不成立的。

                所以后面的条件中不需要特别的写前面的条件不成立。

            4.3.判断的的顺序最好不要乱。

                   如果你要写乱,那么条件就要完整一些。

                   但是一般情况下,我们从上到下的,条件范围是逐步缩小的。

            4.4.else可以省略

                如果省略,那么就没有默认执行代码了。

             4.5.else if的格数可以任意。

 P90 - 三元表达式。

    1.根据参与的操作数的格数将运算符分如下几类。

        双目运算符/双元运算符: 指的是参与这个运算的操作数有2个。

            +

            -

            *

            /

            %

            >

            <

            ……

        单目运算符/一元运算符:只有1个数据参与运算

            自增自减

            ++

            --

        三目运算符/三元运算符:指的是三个数据参与运算的运算符。

            ?  :

    2.三元表达式

        2.1 语法:

            条件表达式 ? 值1 : 值2 ;

            三元表达式的结果是?

            如果三元表达式成立,那么三元表达式的结果就是值1, 否则就是值2

int i = 1;
printf("%d\n",i > 0 ? 100 : 200);

             输出结果为100。

            同理,三元表达式可以用if语句来表示。

             int i = 1;

             if (i>0)

             {

                 printf("100");

             }

             else

             {

                 printf("200");

             }


             int i = 1;

             i > 0 ? printf(">\n") : printf("<\n");

    3.三元表达式可以部分代替if-else.

     要得到1个数据,这个数据的大小是根据某个条件来的。

     可以使用if-else,也可以使用三元表达式。

     但是三元表达式更间接一些。

    4.注意:

        4.1.条件表达式可以是任意的表达式,只关注表达式结果,0为假,非0为真。

        4.2.值1和值2可以是1个表达式,反正是各自的结果。

 P91  - 如何产生1个随机数。

    1.先引入1个系统头文件。      

#include <stdlib.h> //(std 标准 lib 库)

    2. 调用 arc4random_uniform 函数。

        在其中传入一个整数n,就会返回一个0->(n-1)的随机数。

int num = arc4random_uniform(10);

        就会产生0-9的随机数,并赋值给num.

    3.如何产生1个指定范围的随机数。

        int num =arc4random_uniform(最大数-最小数+1)+最小数;

        产生1-33的随机数:     

  int num1 = arc4random_uniform(33)+1 ;

 P94 - 题目讲解

    5.自己写一个四舍五入的算法:

         double 小数 = 0.0;

         printf("输入一个小数:");

         scanf("%f",&小数);

         int 十倍小数 = 小数 * 10 ; //将用户数据扩大10呗。取出小数点后第一位

         int 整数部分  =  十倍小数 / 10; //取出整数部分

         int 小数点后第一位 =  十倍小数 % 10; //取出小数点后第一位

         printf("四舍五入结果:%d\n", 小数点后第一位 > 4 ? 整数部分 + 1 : 整数部分);
         double num = 0.0;

         printf("输入一个小数:");

         scanf("%lf",&num);

         int i = num ; //整数部分

         double xiaoShu = num - i; //小数部分

         if(xiaoShu >= 0.5)

         {

            i++ ;

         }

         printf("四舍五入后的数为:%d\n",i);

 P97- switch-case 结构

    1.语法:    

 switch(表达式)
     {
         case   值1:
                 执行代码;
                 break;

         case   值2:
                 执行代码;
                 break;

         case   值3:
                执行代码;
                break;

         case   值4:
                执行代码;
                break;

         default:
                执行代码;
                break;
     }

    2.switch 后的表达式没有说必须是1个条件表达式。

    3.执行步骤:

        a. 先计算switch后面的表达式的结果:

        b. 从上到下的将这个结果和每一个case块后面的值进行相等比较判断。

        c. 只要有1个相等的,那么就执行其中的代码,执行完毕后,就结束整个switch结构。

        d. 如果不相等 再判断下一个case的值。

        e. 如果所有的case后面的值和表达式的值都不相等,就执行default中的代码.

    4.例题:请用户输入一个星期数,输出相对应的英文。 1-7 其他的输出火星来的。      

   int weekDay = 0 ;

         printf("输入一个星期数:");

         scanf("%d",&weekDay);

         switch (weekDay) {

             case 1:

                 printf("Today is Monday\n");

                 break;

             case 2:

                 printf("Today is Tuesday\n");

                 break;

             case 3:

                 printf("Today is Wednesday\n");

                 break;

             case 4:

                 printf("Today is Thursday\n");

                 break;

             case 5:

                 printf("Today is Friday\n");

                 break;

             case 6:

                 printf("Today is Saturday\n");

                 break;

             case 7:

                 printf("Today is Sunday\n");

                 break;

             default:

                 printf("你是火星人吗?\n");

                 break;

         }

    5.使用注意

        5.1 switch 后面的小括号中可以写表达式、变量、常量。

        5.2 case穿透

            每一个case块后面的break在语法上是可以不写的。

            break 的意思是 立即结束整个switch结构。

            如果case块中没有break,那么就会直接穿透到下一个case中执行代码。

            知道遇到break才会结束switch结构,或者执行完。

            所以,一般情况下,我们不希望穿透下一个case中执行代码,每一个case后面都会加一个break;

            如果多个case块的处理逻辑是一样的,那么我们可以利用穿透来简写代码:

            5.2.1 穿透案例:根据月份打印季节:        

        int month = 0 ;

                 printf("请输入月份");

                 scanf("%d",&month);

                 switch (month) {

                     case 1:

                     case 2:

                     case 3:

                         printf("春天来了,万物复苏...\n");

                         break;

                     case 4:

                     case 5:

                     case 6:

                         printf("夏天夏天悄悄过去留下小秘密...\n");

                         break;

                     case 7:

                     case 8:

                     case 9:

                         printf("秋风扫落叶...\n");

                         break;

                     case 10:

                     case 11:

                     case 12:

                         printf("冬天来了,春天还会远吗?\n");

                         break;

                     default:

                        printf("火星来的吗?\n");

                     break;

                 }

        5.3 switch 后面的表达式任意类型都是可以的,除了实型(小数)。

        5.4 case块可以加大括号,没有任何影响,但是一般情况下不加。

        5.5 case块下面可以写任意行代码,只要复合你的逻辑。

            如果要声明变量,就必须要使用大括号。

        5.6 case块可以有任意个,根据你的逻辑来。

            default可以省略,如果省略就没有默认执行代码了。

        5.7 练习:

            用户输入一个年份,一个月份,显示这一年这一月有多少天。

             int year = 0 ;

             int month = 0 ;

             printf("请输入年份 月份(空格分隔)");

             scanf("%d %d",&year,&month);



             switch (month) {

                 case 1:

                 case 3:

                 case 5:

                 case 7:

                 case 9:

                 case 11:

                     printf("%d年%d月有31天\n",year,month);

                     break;

                 case 4:

                 case 6:

                 case 8:

                 case 10:

                 case 12:

                     printf("%d年%d月有30天\n",year,month);

                     break;

                 case 2:

                     if(year % 400 == 0 ||( year % 4 == 0 && year % 100 != 0))

                     {

                        printf("%d年2月有29天\n",year);

                     }

                     else

                     {

                        printf("%d年2月有28天\n",year);

                     }

                     break;

                 default:

                    printf("火星来的吗?\n");

             }

P102:switch-case 与 if 结构

    6.switch-case 与 if 结构:

        6.1 能够使用switch-case结构写出来的代码一定可以用if结构写出来。

            if结构写出来的代码用switch-case代码不一定能够写出来

        6.2 switch结构只能做等值判断,不能直接做范围判断。并且case后面的数据不能有变量。

            if结构可以做等值判断,也可以做范围判断

        6.3 如果做等值判断, 建议使用 switch

            如果做范围判断 才用 if.

P103: 程序的调试:

    在代码行号区域单击 就是在所属行下了断点。 拖动断点标志到代码区丢掉,就可以取消断点。

    1. 跟踪CPU的执行顺序。检查代码的执行逻辑。(step over 按钮)

    2. 使用调试来监视变量的值在运行的过程中的变化。(找BUG源头)      

        调试的时候把鼠标放到代码里的变量上,或者在调试区可以直接查看变量的值。

    3. 退出调试模式:(continue  program execution 按钮)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值