• 前七章主要知识点


    一,数据类型

    1) 整数型:int( %d ),char (单个字符%c,字符串%s)

    浮点型:double( %lf ),float( %f )

    常用基本数据类型占用空间(64位机器为例)
    -  char : 1个字节
    -  int :4个字节
    -  float:4个字节
    -  double:8个字
    
    字符型常量
    
    用英文单引号括起来,只保存一个字符'a'、'b' 、'*' ,还有转义字符 '
    ' 、'	'。
    
    字符串常量
    
    用英文的双引号引起来 可以保存多个字符:"abc"。
    
    1、数据类型转换:C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型;在 C 语言中也可以对数据类型进行强制转换;
    
    2、自动转换规则:
    
     a)浮点数赋给整型,该浮点数小数被舍去;
     b)整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;
    3、强制类型转换形式: (类型说明符)(表达式)
    
    实例程序:
    
    #include<stdio.h>
    
    int main()
    {
        float f,x=3.6,y=5.2;
        int i=4,a,b;
        a=x+y;
        b=(int)(x+y);
        f=10/i;
        printf("a=%d,b=%d,f=%f,x=%f
    ",a,b,f,x);
    }
    例中先计算 x+y 值为 8.8,然后赋值给 a,因为a为整型,所以自取整数部分8,a=8;
    
    接下来 b 把 x+y 强制转换为整型;
    
    最后 10/i 是两个整数相除,结果仍为整数 2,把 2 赋给浮点数 f;
    
    x 为浮点型直接输出。
    

    二,运算符

    1)算术运算符

    + 把两个操作数相加 A + B 将得到 30
    - 从第一个操作数中减去第二个操作数 A - B 将得到 -10
    * 把两个操作数相乘 A * B 将得到 200
    / 分子除以分母 B / A 将得到 2
    % 取模运算符,整除后的余数 B % A 将得到 0
    ++ 自增运算符,整数值增加 1 A++ 将得到 11
    -- 自减运算符,整数值减少 1 A-- 将得到 9

    2)关系运算符

    == 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 为假。
    != 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。
    > 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 为假。
    < 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。
    >= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 为假。
    <= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真

    3)逻辑运算符

    && 称为逻辑"且"运算符。如果两个操作数都非零,则条件为真 (A && B) 假
    || 称为逻"辑或"运算符。如果两个操作数中有任意一个非零,则条件为真 (A || B) 为真
    ! 称为逻辑"非"运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假 !(A && B) 为真

    4)赋值运算符

    = 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C
    += 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A
    -= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A
    *= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A
    /= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A
    %= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A

    三,判断

    1) if 语句

    if(boolean_expression)
    {
       /* 如果布尔表达式为真将执行的语句 */
    }
    

    如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。

    C 语言把任何非零非空的值假定为 true,把null 假定为 false

    2) if...else 语句

    if(boolean_expression)
    {
       /* 如果布尔表达式为真将执行的语句 */
    }
    else
    {
       /* 如果布尔表达式为假将执行的语句 */
    }
    

    如果布尔表达式为 true,则执行 if 块内的代码。如果布尔表达式为 false,则执行 else 块内的代码。

    C 语言把任何非零非空的值假定为 true,把null 假定为 false

    2.1.if...else if...else 语句

    一个 if 语句后可跟一个可选的 else if...else 语句,这可用于测试多种条件。

    当使用 if...else if...else 语句时,以下几点需要注意:

    • 一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。
    • 一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
    • 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。
    if(boolean_expression 1)
    {
       /* 当布尔表达式 1 为真时执行 */
    }
    else if( boolean_expression 2)
    {
       /* 当布尔表达式 2 为真时执行 */
    }
    else if( boolean_expression 3)
    {
       /* 当布尔表达式 3 为真时执行 */
    }
    else 
    {
       /* 当上面条件都不为真时执行 */
    }
    

    3) 嵌套 if 语句

    if( boolean_expression 1)
    {
       /* 当布尔表达式 1 为真时执行 */
       if(boolean_expression 2)
       {
          /* 当布尔表达式 2 为真时执行 */
       }
    }
    

    4) switch 语句

    一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

    switch(expression){
        case constant-expression  :
           statement(s);
           break; /* 可选的 */
        case constant-expression  :
           statement(s);
           break; /* 可选的 */
      
        /* 您可以有任意数量的 case 语句 */
        default : /* 可选的 */
           statement(s);
    }
    

    switch 语句必须遵循下面的规则:

    • switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。

    • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。

    • case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。

    • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。

    • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。

    • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。

    • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。

      5) 嵌套 switch 语句

      您可以把一个 switch 作为一个外部 switch 的语句序列的一部分,即可以在一个 switch 语句内使用另一个 switch 语句。即使内部和外部 switch 的 case 常量包含共同的值,也没有矛盾。

      switch(ch1) {
         case 'A': 
            printf("这个 A 是外部 switch 的一部分" );
            switch(ch2) {
               case 'A':
                  printf("这个 A 是内部 switch 的一部分" );
                  break;
               case 'B': /* 内部 B case 代码 */
            }
            break;
         case 'B': /* 外部 B case 代码 */
      }
      

    四,循环

    1) while 循环

    只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句。

    while(condition)
    {
       statement(s);
    }
    

    在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。

    condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。

    while 循环的关键点是循环可能一次都不会执行。当条件为 false 时,会跳过循环主体,直接执行紧接着 while 循环的下一条语句。

    2) for 循环

    for 循环允许您编写一个执行指定次数的循环控制结构。

    for ( init; condition; increment )
    {
       statement(s);
    }
    

    下面是 for 循环的控制流:

    1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
    2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
    3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
    4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止

    3) do...while 循环

    不像 forwhile 循环,它们是在循环头部测试循环条件。在 C 语言中,do...while 循环是在循环的尾部检查它的条件。

    do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。

    do
    {
       statement(s);
    
    }while( condition );
    

    请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。

    如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止。

    3) 嵌套循环 ( C 语言允许在一个循环内使用另一个循环 )

    for (initialization; condition; increment/decrement)
    {
        statement(s);
        for (initialization; condition; increment/decrement)
        {
            statement(s);
            ... ... ...
        }
        ... ... ...
    }
    
    while (condition1)
    {
        statement(s);
        while (condition2)
        {
            statement(s);
            ... ... ...
        }
        ... ... ...
    }
    
    do
    {
        statement(s);
        do
        {
            statement(s);
            ... ... ...
        }while (condition2);
        ... ... ...
    }while (condition1);
    

    4)循环控制语句

    break 语句 终止循环switch 语句,程序流将继续执行紧接着循环或 switch 的下一条语句。

    5)无限循环

    如果条件永远不为假,则循环将变成无限循环

    #include <stdio.h>
     
    int main ()
    {
       for( ; ; )
       {
          printf("该循环会永远执行下去!
    ");
       }
       return 0;
    }
    

    五, 函数

    函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

    函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

    定义函数

    return_type function_name( parameter list )
    {
       body of the function
    }
    

    在 C 语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

    • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
    • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
    • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
    • 函数主体:函数主体包含一组定义函数执行任务的语句。

    六,数组

    数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

    声明数组

    在 C 中要声明一个数组,需要指定元素的类型和元素的数量

    type arrayName [ arraySize ];
    

    这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C 数据类型。例如,要声明一个类型为 double 的包含 10 个元素的数组 balance,声明语句如下:

    double balance[10];
    

    现在 balance 是一个可用的数组,可以容纳 10 个类型为 double 的数字。

    初始化数组

    在 C 中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示:

    double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
    

    大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。

    如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:

    double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
    

    您将创建一个数组,它与前一个实例中所创建的数组是完全相同的。下面是一个为数组中某个元素赋值的实例:

    balance[4] = 50.0;
    

    上述的语句把数组中第五个元素的值赋为 50.0。所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。

    访问数组元素

    数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。例如:

    double salary = balance[9];
    
  • 相关阅读:
    磁盘挂载自动分区脚本
    docker的私有仓库的搭建
    centos6上安装docker
    docker的本地仓库换成阿里云的镜像仓库
    python中的coding的格式书写形式
    mysql5.6的二进制包安装
    mysql忘记root密码
    Verilog利用$fdisplay命令往文件中写入数据
    Quartus和ISE调用Synplify进行综合的问题
    TMS320C6455 SRIO 实现方案
  • 原文地址:https://www.cnblogs.com/love0017/p/14106969.html
Copyright © 2020-2023  润新知