A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

C语言代码编写规范
  第一个:注意缩进
                 用tab键缩进对齐
  第二个:适当的空行
  第三个:注释,简明扼要
                C语言注释只有两种写法:
                          第一种:单行注释    //注释文字
                          第二种:块注释  /*  注释的内容  */,块注释不能嵌套
               尤其是重要的核心代码必须写注释
  第四个:命名,通俗易懂,英文,千万不要用拼音

C语言中的运算符
    算术运算符   +   -   *    /    % (取余)
    关系运算符    >    <    ==   !=   >=    <=
     逻辑运算符    ||逻辑或     &&逻辑与    !逻辑非
    指针运算   *    &
    三目运算符    ?:
    求数据类型大小,变量大小    sizeof
    位运算           &   |    ~   ^
    组合运算       +=   -=   *=   \=      &=   |=  
    移位运算        >>   <<
    自增自减       ++    --
(1) 除法
        情况一:
           两个整数相除,结果取整,而且不会四舍五入
        情况二:
           除法运算中有一个是小数
           1/2  --》结果不是0.5  是0
           16/3 --》5
            2/3 --》
[url=][/url]
#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\n",a);    printf("%f\n",b);    printf("%f\n",c);    printf("%d\n",d);}[url=][/url]


结果如下:
00.0000000.6666670

(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(有房&&有车&&帅)
                    逻辑非     真--》假
                                    假--》真
[url=][/url]
#include<stdio.h>int main(){    int a=78;    int b=8;    if(!(a<b))        printf("a>b\n");}[url=][/url]


结果如下:
a>b

(4) 三目运算符
  表达式1?表达式2:表达式3
    判断表达式1是否为真
      为真 --》执行表达式2
      为假 --》执行表达式3
[url=][/url]
#include <stdio.h>int main(){    int a,b;    printf("请输入两个整数!\n");    //scanf("%d",&a); //获取键盘输入整数保存到变量a的地址中    //scanf("%d",&b);    scanf("%d%d",&a,&b);        //用三目运算符比较他们的大小    int ret=(a>b)?a:b;        printf("%d和%d中较大的一个数是:%d\n",a,b,ret);}[url=][/url]


结果如下:
请输入两个整数!152015和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

[url=][/url]
#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\n",b,a,c);}[url=][/url]


结果如下:
b is:79  a  :80   c:79


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


结果如下:
b==1.5a!==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\n",a,b);
                if((a<12)&&(a>b)&&(a=96))
                        printf("a ,s:%d    b  is:%d\n",a,b);
[url=][/url]
#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\n",a,b);                if((a<12)&&(a>b)&&(a=96))        printf("a ,s:%d    b  is:%d\n",a,b);}[url=][/url]


结果如下:
a is:10    b  is:18

        3.     用三目运算符实现三个整数求最大值
[url=][/url]
#include <stdio.h>int main(){    int a,b,c;    printf("请输入三个整数!\n");    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\n",max);}[url=][/url]


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


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

2 个回复

倒序浏览
有问题联系小优
回复 使用道具 举报
DKA-2018
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马