C语言基础

来源:互联网 发布:ubuntu配置keras环境 编辑:程序博客网 时间:2024/05/22 17:32

首先先来区分编译和链接;

编译:只会检测语法,并不会检测有没有主函数或者其他函数。

链接:链接的时候会严格检测有木有函数的定义。

编译报错描述:Undefined symbols for architecture x86_64:

                         "_main", referenced from:

                        因为没有主函数。

类型:

        整型(int)                     :10、367、0、-23、6                       4个字节

        字符型(char)              :‘a’、‘A’、‘3’                                         1个字节

        字符串                        :  "dsafefef"、“拉拉啦”、“34223”

        浮点型(小数)              :1.2、0.0、0.23232、.2424

        单精度浮点型(float)    :1.4f

        双精度浮点型(double):3.4                                                      8个字节

进制转换

十进制
1.由0~9组成,逢十进一
基数:10
167 = 100 + 6*10 + 7
        = 7 * 10的0次方  + 6 * 10 的1次方  + 1 * 10的2次方

二进制
1.由0和1组成,逢二进一
2.二进制数值以0b或者0B开头
基数:2
0b1101 = 1 * 2^0 + 0 * 2^1 + 1 * 2^2  + 1 * 2^3
              =   1  +  0 + 4 + 8 = 13

八进制
1.由0~7组成,逢八进一
2.数值都以0开头
基数:8
0123 =  3 * 8^0  + 2 * 8 ^ 1 + 1 * 8^2
          =  3  + 16 + 64
          =  83

十六进制
1.由0~9、A、B、C、D、E、F,逢十六进一
2.数值都以0x开头
基数:16
0x12D  =   D * 16^0  + 2 * 16^1  + 1 * 16^2
              =   13  +  32 + 256
             =     301

六十五
十进制:65 = 16^1 * 4 + 16^0 * 1
二进制:0b100 0001
八进制:0101
十六进制:0x41

0b1 + 0b1 = 0b10 = 2 ^ 1
0b11 + 0b1 = 0b100 = 2 ^ 2
0b11111  + 0b1 = 0b100000 = 2 ^ 5
如果有n个二进制位,所能表示的最大值0b1111...111,   2^n - 1

二进制和八进制的转换
一个八进制位能表示的最大值:7
三个二进制位所能表示的最大值:0x111 = 7
0574 = 0b101 111 100
0b  001   111   000   110  101 =   017065

二进制和十六进制的转换
一个十六进制位所能表示的最大值:F = 15

// 第一个字节的地址就是变量的地址
int a; // 4个字节
char c; // 1个字节


ASCII码表:有128个单字节字符(ASCII码取值范围0—127)

A65      B66      a97       b98


三目运算符的格式:条件?数值1:数值2(如果条件成立返回1,不成立返回2)


逻辑运算符

逻辑与&&  (条件A && 条件B):如果条件A与B同时成立,返回1,其他情况都返回0;

逻辑或||       (条件A || 条件B)      :只要两个条件中一个条件成立,就返回1,都不成立才返回0;

逻辑非!                                       :如果条件成立返回0,不成立返回1;


++a:直接将a的值+1;

a++:先将a的值拷贝一份,然后对a进行+1操作,最后返回的是拷贝出来的值。

取余运算:取余运算符两边都是整数,结果正负由左边的数据来决定。


if语句

     格式:

      if (条件) {

    

                } else if(条件) {


                } else if(条件) {


                } else {

    

                }


   特点:

       *在同一时间,只有一个大括号的代码会被执行

       *如果已经判断到某个elseif的条件了,说明前面的所有条件都不成立


   使用建议:

       *不要省略大括号


switch语句

      格 式:

          switch (数值)

          {

             case数值1:

    

             break;

    

             case数值2:

    

             break;

    

             default:

             break;

          }

    特点:

        *如果每一个case后面都有break,那么同一时间,只有一个case后面的语句被执行

        *如果某一个case后面没有break,那么就会按顺序执行后面所有case的语句,直到遇到break为止

        *如果要在case后面定义新的变量,必须加上大括号{}


if switch的异同

        1> switch能实现的功能,if都能实现

        2> if能实现的功能,switch不一定很方便的实现,比如 if (a>0)

        3>if的灵活性和实用性更大


循环结构

   1.while循环

      格式:

          while(条件)

          {

              循环体;

          }


      特点:

          *如果条件一开始就不成立,循环体永远不会被执行


   2.do while循环

       格式:

           do {

                循环体;

              } while(条件);


       特点:

           *不管条件一开始成不成立,都会先执行一次循环体


    3.for循环

        格式:

            for (初始化语句;条件; 执行完一次循环体后的语句)

            {

               循环体;

            }

 

       特点(注意点):

             *如果在循环体里面定义了新的变量,不能省略大括号,而且这个变量的作用域,仅限于这个大括号{}以内

             *初始化语句只会执行一次

             *初始化语句、条件、执行完一次循环体后的语句  都可以省略


     4.三种循环结构的异同:

        1>三种循环结构的作用基本相同,基本上可以互相转换。也就是一种需求,至少有3种实现方案

        2> do while比较少用,while循环和for循环比较常用

        3>性能相对最好的是for循环,因为它管理变量的作用域比较精细,for循环结束后就会释放变量。比如:

        for (int i = 0; i<10; i++)


三、break continue

    1.break

        1>使用场合:switch语句、循环结构(whiledo whilefor

        2>作用:直接退出整个switch语句\循环结构


    2.continue

        1>使用场合:循环结构(whiledo whilefor) 

        2>作用:直接结束\跳过这一次循环体,进入下一次循环体



0 0
原创粉丝点击