运算符及表达式+基本语句和函数使用的详细讲解

运算符及表达式

运算符及表达式

在C语言中,运算符是用于执行特定操作的符号,而表达式则是由运算符和操作数组成的式子。

1) 运算符
运算符的目数
  • 单目运算符:只需要一个操作数,如 !(逻辑非)、++(自增)、--(自减)、&(取地址)等。
  • 双目运算符:需要两个操作数,如 +(加法)、-(减法)、*(乘法)、/(除法)、%(取余)等。
  • 三目运算符(条件运算符):需要三个操作数,如 ? :
运算符的优先级与结合性

运算符的优先级决定了表达式中运算的顺序,而结合性则决定了当多个相同优先级的运算符出现时,如何确定运算顺序。例如,乘法(*)和除法(/)的优先级高于加法和减法,而乘法和除法从左到右结合。

赋值运算符与赋值表达式
  • 赋值运算符=,用于将右侧的值赋给左侧的变量。
  • 赋值表达式:如 a = b + c;,这是一个赋值表达式,其值就是赋值操作的结果(即 b + c 的值)。
算术运算符及算术表达式
  • 算术运算符+-*/%
  • 算术表达式:由算术运算符和操作数组成的表达式,如 a + b * c
自增(++)、自减(–)运算符及表达式
  • 自增运算符++,用于将变量的值加1。
  • 自减运算符--,用于将变量的值减1。
  • 前置与后置++a(先加后使用)和 a++(先使用后加)的区别。
关系运算符及关系表达式
  • 关系运算符>>=<<===!=
  • 关系表达式:用于比较两个操作数的大小或是否相等,结果是一个布尔值(真或假)。
逻辑运算符及逻辑表达式
  • 逻辑运算符!(逻辑非)、&&(逻辑与)、||(逻辑或)。
  • 逻辑表达式:用于组合多个关系表达式,并返回一个布尔值。
逗号运算符与逗号表达式
  • 逗号运算符,,用于将多个表达式组合成一个表达式。
  • 逗号表达式的操作数求值顺序:从左到右依次求值,整个逗号表达式的值是最后一个操作数的值。
2) C语言中合法的表达式,表达式的求值
  • 合法的表达式:符合C语言语法规则的表达式都是合法的。
  • 表达式的求值:根据运算符的优先级和结合性,以及操作数的值,计算表达式的值。
3) 表达式的数据类型,及表达式运算中操作数类型的自动转换与强制类型转换
  • 表达式的数据类型:取决于运算符和操作数的类型。例如,a + b 的类型通常是 ab 类型的公共类型(或更宽的类型)。
  • 自动类型转换(也称为隐式类型转换):当操作数的类型不同时,编译器会尝试将它们转换为公共类型。例如,在 int a = 3.5; 中,3.5 会被自动转换为 int 类型。
  • 强制类型转换(也称为显式类型转换):使用类型转换运算符 () 来强制将一个类型的值转换为另一个类型。例如,(float)aa 的值转换为 float 类型。在进行强制类型转换时,可能会丢失精度或发生其他不可预见的行为,因此应谨慎使用。

基本语句和函数使用的详细讲解

1. 顺序结构语句

  • 表达式语句:最简单的语句,用于执行赋值、函数调用等操作。
  • 空语句:仅包含一个分号的语句,不执行任何操作。
  • 复合语句:用花括号括起来的一组语句,可以视为一个单独的语句块。
代码案例:
#include <stdio.h>

int main() {
    int a = 5;       // 表达式语句
    printf("%d\n", a); // 表达式语句(函数调用)
    ;               // 空语句
    {               // 复合语句开始
        int b = 10;
        printf("b = %d\n", b);
    }               // 复合语句结束
    return 0;
}

2. 选择结构语句

  • if 语句:如果条件为真,则执行一段代码。
  • if…else 语句:如果条件为真,执行一段代码,否则执行另一段代码。
  • if…else…if 语句:多个条件判断,根据满足的条件执行相应的代码块。
  • switch 语句:根据表达式的值,选择执行多个代码块中的一个。
代码案例:
#include <stdio.h>

int main() {
    int number = 2;
    
    if (number == 1) {
        printf("Number is 1\n");
    } else if (number == 2) {
        printf("Number is 2\n");
    } else {
        printf("Number is not 1 or 2\n");
    }
    
    int day = 3;
    switch (day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        default:
            printf("Other day\n");
    }
    
    return 0;
}

3. if嵌套

if语句内部可以嵌套另一个if语句,用于处理更复杂的条件逻辑。

代码案例:
#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;
    
    if (a > 2) {
        if (b > 8) {
            printf("Both conditions are true\n");
        } else {
            printf("Only first condition is true\n");
        }
    } else {
        printf("None of the conditions are true\n");
    }
    
    return 0;
}

4. 循环结构语句

  • while 循环:当条件为真时,重复执行一段代码。
  • do…while 循环:至少执行一次代码块,然后检查条件,如果条件为真,则重复执行。
  • for 循环:一种更紧凑的循环结构,通常用于已知循环次数的情况。
代码案例:
#include <stdio.h>

int main() {
    int i = 0;
    
    // while 循环
    while (i < 5) {
        printf("%d ", i);
        i++;
    }
    printf("\n");
    
    i = 0;
    // do...while 循环
    do {
        printf("%d ", i);
        i++;
    } while (i < 5);
    printf("\n");
    
    // for 循环
    for (int j = 0; j < 5; j++) {
        printf("%d ", j);
    }
    printf("\n");
    
    return 0;
}

5. 循环嵌套(二重循环)

一个循环内部包含另一个循环,通常用于处理二维数组或进行复杂的迭代。

代码案例:
#include <stdio.h>

int main() {
    for (int i = 0; i < 3; i++) { // 外层循环
        for (int j = 0; j < 3; j++) { // 内层循环
            printf("(%d, %d) ", i, j);
        }
        printf("\n");
    }
        return 0;
}

6. 辅助控制语句

continue 语句

continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环。它不会终止循环,而是重新开始下一次迭代。

break 语句

break 语句用于立即终止循环或switch语句。在循环中,break 语句会跳过当前循环的剩余部分,并继续执行循环之后的代码。

代码案例
#include <stdio.h>

int main() {
    int i;

    // 使用continue语句跳过偶数
    for (i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue;
        }
        printf("%d ", i);
    }
    printf("\n");

    // 使用break语句在找到5时终止循环
    for (i = 0; i < 10; i++) {
        if (i == 5) {
            break;
        }
        printf("%d ", i);
    }
    printf("\n");

    return 0;
}

7. 标准函数的使用

数学函数:math.h
  • fabs():计算浮点数的绝对值。
  • pow():计算一个数的幂。
  • sqrt():计算一个非负数的平方根。
输入输出函数:stdio.h
  • printf():格式化输出函数。
  • scanf():格式化输入函数。
字符串函数:string.h
  • strlen():计算字符串的长度(不包括终止字符’\0’)。
  • strcmp():比较两个字符串。
  • strcpy():复制一个字符串到另一个字符串。
  • strcat():连接两个字符串。
代码案例
#include <stdio.h>
#include <math.h>
#include <string.h>

int main() {
    // 数学函数使用
    double num = -5.5;
    double abs_num = fabs(num);
    double power = pow(2, 3);
    double sqrt_num = sqrt(9);
    printf("fabs(%f) = %f\n", num, abs_num);
    printf("pow(2, 3) = %f\n", power);
    printf("sqrt(9) = %f\n", sqrt_num);

    // 字符串函数使用
    char str1[50] = "Hello, ";
    char str2[] = "World!";
    char str3[100];
    strcpy(str3, str1);
    strcat(str3, str2);
    printf("Concatenated string: %s\n", str3);
    printf("Length of str2: %zu\n", strlen(str2));

    // 输入输出函数使用
    int a;
    printf("Enter an integer: ");
    scanf("%d", &a);
    printf("You entered: %d\n", a);

    return 0;
}

在使用 strlen() 函数时,返回的类型是 size_t(在C语言中是一个无符号整数类型),因此在 printf 中使用
%zu 格式化说明符来输出它。这是C99标准引入的,如果你的编译器不支持C99或更高版本,你可能需要将其转换为 unsigned int 并使用 %u

在这里插入图片描述
在这里插入图片描述

(✪ω✪)Fight!!(o-)
(๑>₃<)۶ 一心向学

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值