C语言课堂笔记001

一、算数运算
运算符功能操作数个数结合方式优先级举例
+加法2左结合12 + 3 = 5
-减法2左结合15 - 2 = 3
*乘法2左结合22 * 3 = 6
/除法2左结合26 / 2 = 3
%取余2左结合25 % 2 = 1
1.操作数:
  • 一元运算符:只接受一个操作数。例如,递增运算符++可用于对一个变量进行递增操作,表达式为++a;
  •  二元运算符:接受两个操作数。例如,加法运算符+,表达式为a + b;
  •  三元运算符:接受三个操作数。例如,条件运算符?:可以根据条件的结果选择返回两个值中的一个,表达式为(condition ? value1 : value2)
2.优先级
  • 正运算:+ - 正号表示正数,优先级最高。
  • 负运算:- - 负号表示负数,优先级最高。
  • 乘法运算:* - 乘法运算符优先级次高,按照从左到右的顺序进行计算。
  • 除法运算:/ - 除法运算符优先级次高,按照从左到右的顺序进行计算。
  • 取余数运算:% - 取余数运算符优先级次高,按照从左到右的顺序进行计算。
  • 加法运算:+ - 加法运算符优先级最低,按照从左到右的顺序进行计算。
  • 减法运算:- - 减法运算符优先级最低,按照从左到右的顺序进行计算。
3.结合方式

在C语言中,如果在一个表达式中含有多个相同优先级的运算符,那么运算的先后顺序将由结合方式决定。

  1. 左结合(从左到右结合):左结合的运算符表示运算顺序是从左到右进行的。例如,加法运算符+和减法运算符-是左结合运算符。

    示例:a + b - c 在这个表达式中,先进行a + b的运算,然后再减去c。即先计算加法,再计算减法。

  2. 右结合(从右到左结合):右结合的运算符表示运算顺序是从右到左进行的。例如,赋值运算符=是右结合运算符。

    示例:a = b = c 在这个表达式中,首先将c赋值给b,然后再将b赋值给a。即先计算右边的赋值,再计算左边的赋值。

结合方式决定了相同优先级的运算符的计算先后顺序。对于左结合运算符,从左到右进行计算;对于右结合运算符,从右到左进行计算。

注意点:

  1. 优先级由高到低计算
  2. 进行除法运算时,除数不能为0
  3. 进行取模运算(%)时,参与运算的数据必须是整数

难点:

需要注意的是,取模和除法的结果可能不同,尤其是在涉及负数时。例如,-10 % 3 的结果是 -1,因为 -10 除以 3 的余数是 -1,而 -10 / 3 的结果是 -3,因为 -10 除以 3 的商是 -3。

此外,取模和除法也可以应用于浮点数。在这种情况下,取模运算将返回浮点数的余数,而除法运算将返回浮点数的商。例如,10.5 % 3 的结果是 1.5,因为 10.5 除以 3 的余数是 1.5,而 10.5 / 3 的结果是 3.5,因为 10.5 除以 3 的商是 3.5。

二、赋值运算
1、简单赋值运算

一般情况下赋值运算的情况如下:

  1. 将变量a赋值为整数10:

    int a;
    a = 10;
    
  2. 将变量b赋值为变量a的值:

    int a = 5;
    int b;
    b = a;
    
  3. 将变量c赋值为两个变量a和b的和:

    int a = 3;
    int b = 7;
    int c;
    c = a + b;
    
  4. 将变量d的值递增1:

    int d = 5;
    d++;
    
  5. 将变量e的值递减1:

    int e = 10;
    e--;
    
  6. 将变量f的值乘以2:

    int f = 5;
    f *= 2;
    
  7. 将变量g的值除以3:

    int g = 15;
    g /= 3;
    

    将变量h的值取模5:

  8. int h = 17;
    h %= 5;
    

注意:

  • 在C语言程序中,整数可以赋值给实型变量,但实型变量不可赋值给整型变量
  • C语言运行在定义变量时赋初始值
  • C语言允许同时对多个变量赋值,但是不能出现在定义变量的阶段
2、复合赋值运算

C语言中的复合赋值运算符是将基本赋值运算符和其他算术或位运算符结合起来的一种简写形式。它可以将算术或位运算符与赋值运算符结合在一起,实现对变量的同时操作和赋值。

下面是C语言中的复合赋值运算符及其对应的操作:

运算符描述示例等价表达式
+=加并赋值a += b;a = a + b;
-=减并赋值a -= b;a = a - b;
*=乘并赋值a *= b;a = a * b;
/=除并赋值a /= b;a = a / b;
%=取模并赋值a %= b;a = a % b;
<<=左移并赋值a <<= b;a = a << b;
>>=右移并赋值a >>= b;a = a >> b;
&=位与并赋值a &= b;a = a & b;
^=位异或并赋值a ^= b;a = a ^ b;
|=位或并赋值a |= b;a = a | b;

注意:上述操作中的"a"和"b"都是变量名,可以替换为任意合法的变量。

复合赋值运算符实际上是将右边的表达式与左边的变量进行指定的运算,并将结果赋给左边的变量。它可以简化代码,并提高效率。

举例:

当涉及到双目运算符的复杂运算形式时,每一步计算过程是根据运算符和操作数的类型来确定的。下面是一些示例,展示了几个双目运算的复杂运算形式的每一步计算过程:

  • 加法运算:
int a = 5;
int b = 7;
int c = 3;
int result = a + b * c; // 加法运算的复杂形式

// 计算过程:
// 1. 先计算 b * c,得到 7 * 3 = 21
// 2. 然后将 a 和上一步的结果相加,得到 5 + 21 = 26
// 3. 最后将结果赋给 result,result 的值为 26
  • 除法运算:
int a = 10;
int b = 3;
int c = 2;
int result = a / b + c; // 除法运算的复杂形式

// 计算过程:
// 1. 先计算 a / b,得到 10 / 3 = 3(整数除法,舍去小数部分)
// 2. 然后将上一步的结果与 c 相加,得到 3 + 2 = 5
// 3. 最后将结果赋给 result,result 的值为 5
  • 逻辑与运算:
int a = 5;
int b = 7;
int c = 0;
int result = a > b && b > c; // 逻辑与运算的复杂形式

// 计算过程:
// 1. 先计算 a > b,得到 5 > 7 = 0(假)
// 2. 然后根据短路规则,由于第一个操作数为假,整个表达式的结果必定为假,不再计算第二个操作数
// 3. 最后将结果赋给 result,result 的值为 0(假)
三、逗号运算

以下是几个C语言中逗号运算的案例:

1、在for循环中使用逗号运算符,例如:
for (int i = 0, j = 0; i < 10; i++, j++) {
    printf("%d ", i);
}

这里的逗号运算符用于给循环中的变量赋初值,并且在每次循环迭代时使两个变量同时递增。

2、在函数调用中使用逗号运算符,例如:
int a = 1, b = 2, c = 3;
int sum = add(a, b), subtract(b, c), multiply(c, a);

这里的逗号运算符用于依次调用多个函数,并将每个函数的返回值赋给变量sum。

3、在if语句中使用逗号运算符,例如:
int a = 5, b = 10;
if (a++, a < b) {
    printf("a is less than b");
}

这里的逗号运算符用于在if条件语句中执行多个表达式,其中a++用于递增a的值,然后判断a是否小于b。

注意:

  1. 逗号运算符可以用于在一个语句中执行多个表达式,并返回最后一个表达式的值。
  2. 逗号运算符的计算顺序是从左到右。
  3. 逗号运算符并不会影响其他运算符的优先级或结合性

例如,在以下代码中:

int a = 1, b = 2, c = 3;
int sum = (a++, b++, c++);

逗号运算符连接了3个表达式,从左到右依次计算,先执行a++,然后执行b++,最后执行c++。整个逗号表达式的值是c++的值。这个值会被赋给sum。

逗号运算符只是用于按照指定的顺序执行多个表达式,并返回最后一个表达式的值。

四、自增、自减运算

在C语言中,自增(++)和自减(--)是一种特殊的运算符,用于递增或递减变量的值。

1、自增运算符

自增运算符(++)会将变量的值增加1。它有两种使用方式:前缀形式和后缀形式。前缀形式是将运算符写在变量前面,后缀形式是将运算符写在变量后面。例如:

int x = 5;
int y = ++x;   // 前缀形式:先将x的值增加1,然后将x的值赋给y
printf("y = %d\n", y);   // 输出: 6

int a = 5;
int b = a++;   // 后缀形式:先将a的值赋给b,然后将a的值增加1
printf("b = %d\n", b);   // 输出: 5
printf("a = %d\n", a);   // 输出: 6
2、自减运算符

自减运算符(--)与自增运算符类似,只是它将变量的值减少1。同样,自减运算符也有前缀形式和后缀形式。例如:

int x = 5;
int y = --x;   // 前缀形式:先将x的值减少1,然后将x的值赋给y
printf("y = %d\n", y);   // 输出: 4

int a = 5;
int b = a--;   // 后缀形式:先将a的值赋给b,然后将a的值减少1
printf("b = %d\n", b);   // 输出: 5
printf("a = %d\n", a);   // 输出: 4

注意:

一般情况下,使用前缀或后缀形式没有太大的区别。但在某些特殊情况下,它们可能会产生不同的结果,主要区别来自于自增运算符的高优先级这一特点。例如:

int x = 5;
int y = 10;

int result1 = ++x + y;   // 前缀形式: x先递增,然后与y相加
int result2 = x++ + y;   // 后缀形式: x与y相加,然后x递增

printf("result1 = %d\n", result1);   // 输出: 16
printf("result2 = %d\n", result2);   // 输出: 15

在前缀形式中,x的值先递增到6,然后与y相加得到结果16;而在后缀形式中,x与y相加得到结果15,然后x再递增到6。

因此,在使用自增和自减运算符时,根据实际需求选择适合的形式。

五、强制类型转换运算符

C语言中的强制类型转换运算符是用来改变变量的数据类型。它的语法形式是将要转换的数据类型放在待转换的表达式前面,用一对圆括号括起来。

下面是一个示例:

int a = 10;
float b;

b = (float) a;

在上面的例子中,我们将整型变量a强制转换为浮点型,并将结果赋给浮点型变量b。这样做是为了将整型的值赋给浮点型变量,从而进行浮点运算。

需要注意的是,在进行强制类型转换时,可能会发生数据丢失或精度损失。因此,需要慎重使用强制类型转换,确保转换后的数据类型能够正确保存转换前的数据。

六、关系运算
运算符功能操作数个数结合方式优先级示例
==比较两个操作数是否相等2个从左到右x == y
!=比较两个操作数是否不相等2个从左到右x != y
>比较左操作数是否大于右操作数2个从左到右x > y
<比较左操作数是否小于右操作数2个从左到右x < y
>=比较左操作数是否大于或等于右操作数2个从左到右x >= y
<=比较左操作数是否小于或等于右操作数2个从左到右x <= y

在C语言中,关系运算符用于比较两个值之间的关系,结果为真(非零)或假(0)。以下是C语言中常见的关系运算符及其功能:

  1. 相等运算符(==):用于判断两个值是否相等。例如:

    int a = 5;
    int b = 10;
    if(a == b) {
        printf("a和b相等\n");
    } else {
        printf("a和b不相等\n");
    }
    
  2. 不等运算符(!=):用于判断两个值是否不相等。例如:

    int a = 5;
    int b = 10;
    if(a != b) {
        printf("a和b不相等\n");
    } else {
        printf("a和b相等\n");
    }
    
  3. 大于运算符(>):用于判断左侧的值是否大于右侧的值。例如:

    int a = 5;
    int b = 10;
    if(a > b) {
        printf("a大于b\n");
    } else {
        printf("a不大于b\n");
    }
    
  4. 大于等于运算符(>=):用于判断左侧的值是否大于或等于右侧的值。例如:

    int a = 5;
    int b = 10;
    if(a >= b) {
        printf("a大于或等于b\n");
    } else {
        printf("a小于b\n");
    }
    
  5. 小于运算符(<):用于判断左侧的值是否小于右侧的值。例如:

    int a = 5;
    int b = 10;
    if(a < b) {
        printf("a小于b\n");
    } else {
        printf("a不小于b\n");
    }
    
  6. 小于等于运算符(<=):用于判断左侧的值是否小于或等于右侧的值。例如:

    int a = 5;
    int b = 10;
    if(a <= b) {
        printf("a小于或等于b\n");
    } else {
        printf("a大于b\n");
    }
    

需要注意的是,关系运算符返回的结果为真(非零)或假(0),可以用于条件语句(如if语句)的判断。

七、逻辑运算

在C语言中,逻辑运算符用于执行逻辑操作,结果为真(非零)或假(零)。

C语言中的逻辑运算符有三个:逻辑与(&&)、逻辑或(||)、逻辑非(!)。

  1. 逻辑与(&&):当左右两个操作数都为真时,返回真;否则返回假。 优先级高于逻辑或,低于关系运算符和算术运算符。 示例:

    int a = 3;
    int b = 5;
    if(a > 0 && b > 0) {
        printf("a和b都大于0\n");
    }
    
  2. 逻辑或(||):当左右两个操作数中有一个为真时,返回真;否则返回假。 优先级低于逻辑与,低于关系运算符和算术运算符。 示例:

    int a = 3;
    int b = -2;
    if(a > 0 || b > 0) {
        printf("a或者b大于0\n");
    }
    
  3. 逻辑非(!):用于反转操作数的逻辑值,如果操作数为真,则返回假;如果操作数为假,则返回真。 优先级高于关系运算符和算术运算符。 示例:

    int a = 3;
    if(!(a > 0)) {
        printf("a小于等于0\n");
    }
    

注意:

逻辑运算两侧的操作数不限制字符类型,可以是0和非0整数,也可以是任何其他类型的数据。

  • 37
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长风望野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值