C 运算符、表达式、语句

在很多书籍中运算符、表达式、语句会被分为多个章节,细致地介绍;但本人记录这个系列主要是为了拾遗,所以就将觉得有必要提及的知识点记录下来。
我的理解:这种基础知识点,初学时能够脸熟就行,关键在于写代码练习;比如本文最后,能写出来个99乘法表,那这些知识点我认为就算掌握了。
运算符大概分为算术运算、逻辑运算、单目运算符、三目运算符这些;运算符和运算对象可以组成表达式;表达式加上分号又构成了语句;一组语句能够完成一项特定的工作,为了重复利用这些语句,又引出了函数。。。。。

整数相除还是整数

#include <stdio.h>

int main(void) {
    printf("5/3=%d\n", 5 / 3);
    printf("5/3.0=%f\n", 5 / 3.);
    return 0;
}

输出:

5/3=1
5/3.0=1.666667

从上面结果可以看出整数除法由于结果还是整数所以算出的结果只有商,余数被丢弃。

类型转换

理论上来讲表达式中两个数类型应该相同,但如果出现了不同类型的,那么低类型会向高类型自动转换,比如:5/3.0,最终会被自动转成5.0/3.0。
还有一种想从高类型转成低类型的、或者希望自己进行类型转换的场景,此时可以使用(类型名)数据对象 的方式进行强制类型转换。

异或运算实用小技巧

我们知道想要实现两个变量互相交换值,则需要引入一个临时变量:

#include <stdio.h>

int main(void) {
    int a = 1;
    int b = 2;
    printf("交换前,a=%d,b=%d\n", a, b);
    int tmp = a;
    a = b;
    b = tmp;
    printf("交换后,a=%d,b=%d\n", a, b);
    return 0;
}

输出:

交换前,a=1,b=2
交换后,a=2,b=1

有了异或运算符之后,无需引入临时变量,使用异或即可。

#include <stdio.h>

int main(void) {
    int a = 1;
    int b = 2;
    printf("交换前,a=%d,b=%d\n", a, b);
    a = a ^ b;
    b = b ^ a;
    a = a ^ b;
    printf("交换后,a=%d,b=%d\n", a, b);
    return 0;
}

用异或进行简单的加解密

#include <stdio.h>
#include <string.h>

int main(void) {
    char str[] = {'i', 'l', 'o', 'v', 'e', 'y', 'o', 'u', '!','\0'};
    printf("加密前:%s\n", str);
    char key = 0x22;
    for (int i = 0; i < strlen(str); ++i) {
        str[i] = str[i] ^ key;
    }
    printf("加密后:%s\n", str);
    for (int i = 0; i < strlen(str); ++i) {
        str[i] = str[i] ^ key;
    }
    printf("解密后:%s\n", str);
    return 0;
}

输出:

加密前:iloveyou!
加密后:KNMTG[MW
解密后:iloveyou!

sizeof求数据大小

语法: sizeof(运算对象)
圆括号中可以是 类型名 ;也可以是具体的数据对象如 变量名;当圆括号中的对象是类型名时 圆括号不可省略

#include <stdio.h>

int main(void) {
    size_t size_char = sizeof(char);
    printf("char 类型占据:%zu 字节\n", size_char);
    size_t size_int = sizeof 1;
    printf("整数1占据:%zu 字节\n", size_int);
    const float pi = 3.14159;
    size_t size_float = sizeof(pi);
    printf("变量pi占据:%zu 字节\n", size_float);
    return 0;
}

输出

char 类型占据:1 字节
整数1占据:4 字节
变量pi占据:4 字节

表达式和语句

一个值 一个变量都算是一个表达式;但是表达式不是c程序的基本模块,语句才是;所以表达式一般不能单独出现。语句常见的形式为表达式+分号

#include <stdio.h>

int main(void) {
    int a;
    a;
    1;
    1+1;
    
    return 0;
}

上面展示的这些都可以称作是语句。

条件、循环、跳转语句

多条语句能够实现特定的功能;根据语句块的形式又可以将语句分为:具有顺序结构的一般语句、具有分支结构的条件语句、具有循环结构的循环语句、具有跳转能力的跳转语句。

  • 顺序结构:代码从上到下一行一行地执行语句,这种格式太过简单与常见,不再赘述
  • 分支结构:最常用的if else 的组合;或者 switch case组成的多分支结构
  • 循环结构:最常见的是 for ([只会在循环开始时执行一次的初始表达式];[循环是否能够继续的条件表达式];[促进循环表达式];) 或 do{循环体} while(循环是否继续的表达式) 及 while(循环是否继续的表达式) do
  • 跳转语句:
    break语句 结束当前层循环,继续后续代码;(注意:由于程序中可能存在多层循环嵌套,break;只是跳出离他最近的那层循环,再外层的循环不受影响);
    continue语句 立刻跳出此次迭代,开始执行下一趟迭代;尽管continue后面跟的可能还有一些语句没有执行,这一趟也不再执行了。
    简单打印一个99乘法表
#include <stdio.h>

int main(void) {
    int a;
    for (a = 1; a <= 9; a++) {
        int b;
        for (b = 1; b <= 9; b++) {
            if (b < a) {
                printf("\t\t");
                continue;
            }
            printf("%d*%d=%d\t", a, b, a * b);
        }
        printf("\n");
    }
    return 0;
}

输出:
9*9乘法表
以上便是对C语言运算符、表达式、语句、控制语句知识点的记录。

posted @ 2025-11-02 19:21  BigBosscyb  阅读(6)  评论(0)    收藏  举报