0. 注释

// 我是单行注释

/* 我是多行注释 */

1. bool 数据类型

bool 类型的取值是真(true)或假(false)

bool 数据类型和 char 数据类型一样,底层都是整形。true 对应整形 1,false 对应整形 0。

#include <stdio.h>

int main(void)
{
    bool bool_1 = true;
    bool bool_2 = false;

    printf("bool_1: %d , bool_2: %d\n" , bool_1 , bool_2);
    return 0;  
}

注意将一个非 bool 类型的算数值(整形,字符型)赋给 bool 类型时,初始值为 0,则结果为 false,否则结果为 true。

#include <stdio.h>

int main(void)
{
    bool bool_1 = 0;
    bool bool_2 = 6;
    printf("bool_1: %d , bool_2: %d\n" , bool_1 , bool_2);

      bool_1 = 'a';
    bool_2 = '\0';
    printf("bool_1: %d , bool_2: %d\n" , bool_1 , bool_2);
    return 0;  
}

2. 运算符

运算符包括算数运算符,关系运算符,逻辑运算符

1.1 算数运算符

基本算数运算符有:+ - * / %

#include <stdio.h>

int main(void)
{
    int num_1 = 10;
    int num_2 = 4;

    int result = 0;
    // +
    result = num_1 + num_2;
    printf("+: %d\n" , result);

    // -
    result = num_1 - num_2;
    printf("-: %d\n" , result);

    // *
    result = num_1 * num_2;
    printf("*: %d\n" , result);

    // /
    result = num_1 / num_2;
    printf("/: %d\n" , result);
  
    // %
    result = num_1 % num_2;
    printf("%%: %d\n" , result);
    return 0;  
}

注意:整数除法和浮点数除法不同。浮点数除法的结果是浮点数,整数除法的结果是整数。这使得 10 除以 4 很让人头痛,因为实际结果有小数部分。在C/C++ 中,整除除法结果的小数部分被丢弃,这一过程被称为截断。

浮点数除以整数,或整数除以浮点数,编译器会将整数转换为浮点数,所以结果是浮点数

#include <stdio.h>

int main(void)

{
    double num_1 = 2.0;
    int num_2 = 10;

    printf("%lf\n" , num_1 / num_2);
    printf("%lf\n" , num_2 / num_1);
    return 0;  
}

优先级

/ * % 的优先级比 + - 的优先级高,优先级相同根据在语句中出现的顺序来执行。可以使用括号 ()来改变优先级

#include <stdio.h>
  
int main(void)
{
    int num_1 = 5;
    int num_2 = 10;

    int num_3 = 0;
    num_3 = num_1 * num_2 % 3;
    printf("%d\n" , num_3);

    num_3 = num_1 * (num_2 % 3);
    printf("%d\n" , num_3);
    return 0;  
}
// +=、-=、*=、/=、%=

#include <stdio.h>

int main(void)
{
    int num_1 = 1;
    num_1 += 1;
    printf("Num_1: %d\n" , num_1);

    num_1 -= 1;
    printf("Num_1: %d\n" , num_1);

    num_1 *= 8;
    printf("Num_1: %d\n" , num_1);

    num_1 /= 2;
    printf("Num_1: %d\n" , num_1);

    num_1 %= 3;
    printf("Num_1: %d\n" , num_1);
    return 0;
}

1.2 关系运算符

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

#include <stdio.h>

int main(void)
{
    int num_1 = 1;
    int num_2 = 2;

    bool result = 0;
    
    result = num_1 > num_2;
    printf("Res: %d\n" , result);

    result = num_1 >= num_2;
    printf("Res: %d\n" , result);
   
      result = num_1 < num_2;
    printf("Res: %d\n" , result);

    result = num_1 <= num_2;
    printf("Res: %d\n" , result);

    result = num_1 == num_2;
    printf("Res: %d\n" , result);

    result = num_1 != num_2;
    printf("Res: %d\n" , result);
    return 0;  
}

1.3 逻辑运算符

逻辑运算符有:&&(与) ||(或) !(非)

exp1 和 exp2 都为真,exp1 && exp2 才为真

exp1 或 exp2 为真,exp1 || exp2 就为真

exp1 为真,! exp1 为假

#include <stdio.h>

int main(void)
{
    int num_1 = 1;
    int num_2 = 2;

    bool result = 0;
    result = num_1 > num_2 && num_1 < num_2;
    printf("%d\n" , result);

    result = num_1 > num_2 || num_1 < num_2;
    printf("%d\n" , result);    
 
    result = ! (num_1 > num_2);
    printf("%d\n" , result);    
    return 0;  
}

当算数运算符,关系运算符,逻辑运算符结合在一起,对优先级感到困惑时,使用括号()是一个明智的选择

递增运算符 ++

递增运算符执行简单的任务,将其运算对象递增 1。该运算符以两种方式出现。

  1. ++ 出现在其作用的变量前面,这是前缀模式
  2. ++ 出现在其作用的变量后面,这是后缀模式 两种模式的区别在于递增行为发生的时间不同
#include <stdio.h>

int main(void)
{
    int num_1 = 0;
    printf("num_1 : %d\n" , ++num_1);

    printf("num_1 : %d\n" , num_1++);

    printf("num_1 : %d\n" , num_1);
    return 0;
}

在前缀模式和后缀模式都能使用的场景,使用前缀模式,前缀模式的效率更高。

递减运算符 --

和递增运算符相似

#include <stdio.h>

int main(void)
{
    int num_1 = 7;
    printf("num_1 : %d\n" , --num_1);

    printf("num_1 : %d\n" , num_1--);

    printf("num_1 : %d\n" , num_1);
    return 0;
}

作业

1.将讲义中的程序自己敲一遍,理解程序为何会这样运行

2.要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.

例如,字母"A"后面第4个字母是"E".“E"代替"A”。因此,“China"应译为"Glmre”。

请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。

3.输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9,取位2小数。