zoukankan      html  css  js  c++  java
  • C语言学习(2)

    C语言代码编写规范

      第一个:注意缩进

                     用tab键缩进对齐

      第二个:适当的空行

      第三个:注释,简明扼要

                    C语言注释只有两种写法:

                              第一种:单行注释    //注释文字

                              第二种:块注释  /*  注释的内容  */,块注释不能嵌套

                   尤其是重要的核心代码必须写注释

      第四个:命名,通俗易懂,英文,千万不要用拼音

    C语言中的运算符

        算术运算符   +   -   *    /    % (取余) 

        关系运算符    >    <    ==   !=   >=    <=

         逻辑运算符    ||逻辑或     &&逻辑与    !逻辑非

        指针运算   *    &

        三目运算符    ?:

        求数据类型大小,变量大小    sizeof

        位运算           &   |    ~   ^

        组合运算       +=   -=   *=   =      &=   |=  

        移位运算        >>   <<

        自增自减       ++    --

    (1) 除法

            情况一:

               两个整数相除,结果取整,而且不会四舍五入

            情况二:

               除法运算中有一个是小数

               1/2  --》结果不是0.5  是0

               16/3 --》5

                2/3 --》

    #include <stdio.h>
    
    int main()
    {
        //int a=1/3;
        int a=2/3;
        float b=2/3;
        float c=2.0/3;  //  2/3.0    2.0/3.0
        int d=2.0/3;
        printf("%d
    ",a);
        printf("%f
    ",b);
        printf("%f
    ",c);
        printf("%d
    ",d);
    }

    结果如下:

    0
    0.000000
    0.666667
    0

    (2)取余,计算余数

              只能用于整数运算     15%2  余数1

                                                15.0%2  不对的,小数不能参与取余运算

    实际开发作用:

             除法和取余配合实现获取一个数的各个位

             任意输入一个整数,编程得到这个整数总共多少位,各个位分别是多少

                          7545

    (3)逻辑运算,跟条件判断配合在一起使用

              if(a>b)

              数学中:   10<x<100

              C语言中: if(x>10 && x<100)

                                if(姓名==zhang || 姓名==王)  //或者

                                if(姓名==zhang && 富二代)  //并且

              重点:区分==和= 

                        ==用来判断变量是否相同   if(a==b)

                        = 赋值运算符号

      C语言规定的真和假

                        非零就是真  1   18   -9

                        零就是假

                        表达式一 || 表达式二 ||  表达式三   //从左到右,有一个条件为真,后面的都不用运算了,整个表达式都为真

                        表达式一 && 表达式二 &&  表达式三  //从左到右,有一个条件为假,后面的都不用运算了,整个表达式都为假

                        if(有房&&有车&&帅)

                        逻辑非     真--》假

                                        假--》真

    #include<stdio.h>
    
    int main()
    {
        int a=78;
        int b=8;
        if(!(a<b))
            printf("a>b
    ");
    }

    结果如下:

    a>b

    (4) 三目运算符

      表达式1?表达式2:表达式3

        判断表达式1是否为真

          为真 --》执行表达式2

          为假 --》执行表达式3

    #include <stdio.h>
    
    int main()
    {
        int a,b;
        printf("请输入两个整数!
    ");
        //scanf("%d",&a); //获取键盘输入整数保存到变量a的地址中
        //scanf("%d",&b);
        scanf("%d%d",&a,&b);
        
        //用三目运算符比较他们的大小
        int ret=(a>b)?a:b;
        
        printf("%d和%d中较大的一个数是:%d
    ",a,b,ret);
    }

    结果如下:

    请输入两个整数!
    15
    20
    15和20中较大的一个数是:20

    (5)位运算(重点)

      对整数的二进制进行运算

        按位与 &     只要有一个是0结果就是0,全部都是1,结果就是1

        比如:  18&16结果是多少?    int  a=89; int b=96;   a&=b;  //等价于 a=a&b;

              18 --》二进制  10010

              16 --》二进制  10000

                                                                10000

          特点:  任意一个整数要求把它的第三位二进制置0,其它位不允许改变

            125--》二进制1111101 --》最终希望的结果1111001

                1111101  --》125

                1111011  &

                1111001

                                               任何二进制位跟1进行按位与运算结果保持不变

                                               任何二进制位跟0进行按位与运算结果一定是0

        按位或 |      只要有一个是1,结果就是1,全部都是0,结果就是0

        比如:  18|16结果是多少?

              18 --》二进制  10010

              16 --》二进制  10000

                      10010

          特点:实际开发中,用位或运算去设置某一位二进制为1

                int a=785;

                                           785

                                                 00000.....100  或

                任何二进制位跟0进行按位或运算结果保持不变

                任何二进制位跟1进行按位或运算结果一定是1

        按位异或 ^   相同为0,相异为1

        比如:  18^16结果是多少?

              18 --》二进制  10010

              16 --》二进制  10000

                       00010

          特点:实际开发中我想把某个数的二进制取反

            比如:  int  a=785  第三位二进制取反

                                                        785

                                        0000........100      异或 

              一个数跟自己异或,结果为0       a^a结果为0

              异或满足交换律                           a^b^a等价于  a^a^b

              一个数跟0异或,结果保持不变    a^0结果为a

                                                                       

        按位取反 ~   0变成1    1变成0

        比如: ~18结果是多少?

            18 --》二进制  10010

             ~18 --》          01101

      (6)组合运算(复合运算)

        +=      a+=10; //等价于   a=a+10;

      (7)移位

        左移  <<  把一个整数的二进制整体向左移动若干位,低位补0

            18<<2;  //18左移2位

            0000000000.........10010<<2

            特点:一个数左移n位,相当于乘以2的n次方

        右移  >>   把一个整数的二进制整体向右移动若干位,高位补什么??

            算术右移:  高位补符号位

            逻辑右移:  高位补0 

            特点:一个数右移n位,相当于除以2的n次方

      (8)自增和自减

          a++   后置++    先使用a原本的值,然后再把a加1赋值给自己

          ++a   前置++    先把a加1,然后再使用加一之后的a 

          a--     后置--    先使用a原本的值,然后再把a减1赋值给自己

          --a     前置--    先把a减1,然后再使用减一之后的a

    #include <stdio.h>
    
    int main()
    {
        int a=78;
        //int b=a++; //后置++
        int b=++a; //前置++
        int c=a++;
        printf("b is:%d  a  :%d   c:%d
    ",b,a,c);
    }

    结果如下:

    b is:79  a  :80   c:79

    练习:

             1.      float  a=1.6;

                      if(a==1.6)   //请问这个条件是否成立,为什么

    #include <stdio.h>
    
    int main()
    {
        float a=1.6;  //不能精准表示,整数部分和小数部分
        float b=1.5;  //可以精准表示
        if(b==1.5)
            printf("b==1.5
    ");
        else
            printf("b!==1.5
    ");
        
        
        if(a==1.6)  //某些小数在计算机中是无法精准表示的
        //左边的a是个变量,它里面存放的是1.6的二进制的近似值
        //右边的1.6是个常量,精度高一些
            printf("a==1.6
    ");
        else
            printf("a!==1.6  a is:%f
    ",a);
    }

    结果如下:

    b==1.5
    a!==1.6  a is:1.600000

             2.      int  a=10;

                      int  b=6;

                      if((a<2)||(b=18))

                            printf("a ,s:%d    b  is:%d ",a,b);

                    if((a<12)&&(a>b)&&(a=96))

                            printf("a ,s:%d    b  is:%d ",a,b);

    #include <stdio.h>
    
    int main()
    {
        int  a=10;
        int  b=6;
        if((a<2)||(b=18)) //判断a<2或者18赋值给b
            printf("a is:%d    b  is:%d
    ",a,b); 
               
        if((a<12)&&(a>b)&&(a=96))
            printf("a ,s:%d    b  is:%d
    ",a,b);
    }

    结果如下:

    a is:10    b  is:18

            3.     用三目运算符实现三个整数求最大值

    #include <stdio.h>
    
    int main()
    {
        int a,b,c;
        printf("请输入三个整数!
    ");
        scanf("%d%d%d",&a,&b,&c); //scanf("%f",&m);
        //分步骤写
        int firstmax=(a>b)?a:b;
        int max=(firstmax>c)?firstmax:c;
        //合并写
        //int result=((a>b)?a:b)>c?((a>b)?a:b):c;
        
        printf("最大值result is:%d
    ",max);
    }

    结果如下:

    请输入三个整数!
    5 
    9 
    4 
    最大值result is:9

    总结按位或,按位异或的特点

       完成任意一个整数m,要求把它的第三位二进制置零,置一,取反,其它二进制位不允许改变

    将这个数&0xfffb,将第三位置0;

    将这个数|0x0004,将第三位置1;

    将这个数^0x0004,将第三位取反;

     

  • 相关阅读:
    [luogu5665]划分
    [luogu5666]树的重心
    [bzoj1854]游戏
    [bzoj1853]幸运数字
    [bzoj2245]工作安排
    [bzoj1426]收集邮票
    [bzoj2396]神奇的矩阵
    [bzoj1858]序列操作
    [bzoj1863]皇帝的烦恼
    [bzoj1432]Function
  • 原文地址:https://www.cnblogs.com/xiaojian98/p/12408125.html
Copyright © 2011-2022 走看看