C语言基础全解:细说每个知识点

简介: C语言详解

 目录

1. 进制转换方法

1.1 二进制转十进制

1.2 十进制转二进制

1.3 二进制转八进制

1.4 二进制转十六进制

1.5 八进制转二进制

1.6 十六进制转二进制

2. 进制简介

特别注意

C语言基础元素概览

1. 关键字分类

1.1 存储类型关键字

1.2 数据类型关键字

1.3 构造类型关键字

1.4 控制结构关键字

1.5 其他关键字

2. 运算符

2.1 算术运算符

2.2 逻辑运算符

2.3 位运算符

2.4 条件运算符

2.5 赋值运算符

练习:水仙花

变量与常量

3. 变量格式与分类

3.1 变量声明格式

3.2 数据类型分类

3.3 全局变量与局部变量

输入与输出

4. 输出格式说明

4.2 垃圾字符处理

4.3 输入操作

特别注意:垃圾字符处理

控制流程结构

5. 分支语句

5.1 if...else

5.2 if...else if...else

5.3 switch

6. 循环语句

6.1 for 循环

6.2 while 循环

6.3 do...while 循环

6.4 死循环

7. 循环控制语句

7.1 break

7.2 continue


进制转换详解

1. 进制转换方法

1.1 二进制转十进制
  • 例子: 110101 = 2^0 + 2^2 + 2^4 + 2^5 = 53
  • 方法: 对于每一位,如果该位是1,则计算2的该位置次方的值并累加。
1.2 十进制转二进制
  • 例子: 53 = 32 + 16 + 4 + 1 = 0011 0101
  • 方法: 将数字拆分为2的幂次方的组合。
1.3 二进制转八进制
  • 例子: 110101 = 065
  • 方法: 每三位二进制数转换为一位八进制数(使用421规则)。
1.4 二进制转十六进制
  • 例子: 00110101 = 0x35
  • 方法: 每四位二进制数转换为一位十六进制数(使用8421规则)。
1.5 八进制转二进制
  • 例子: 065 = 110101
  • 方法: 同二进制转八进制的逆过程。
1.6 十六进制转二进制
  • 例子: 0x65 = 0011 0101
  • 方法: 同二进制转十六进制的逆过程。

2. 进制简介

  • 二进制: 使用10表示的数制。
  • 八进制: 前面通常加0,用以区分其他进制。
  • 十进制: 日常生活中常用的阿拉伯数字系统。
  • 十六进制: 前缀通常是0x,用于表示计算机系统中的数据。

特别注意

  • 十六进制和八进制直接转换: 直接在两者之间转换没有简单的一对一映射方法,通常需要先转换为二进制作为中介。

C语言基础元素概览

1. 关键字分类

1.1 存储类型关键字
  • static
  • auto
  • extern
  • register
1.2 数据类型关键字
  • int
  • char
  • float
  • short
  • long
  • double
  • signed
  • unsigned
1.3 构造类型关键字
  • struct
  • union
  • enum
1.4 控制结构关键字
  • 选择结构:
  • if
  • if else
  • if else if
  • 循环结构:
  • for
  • while
  • do...while
1.5 其他关键字
  • void
  • typedef
  • const
  • volatile (防止编译器优化)
  • return
  • sizeof

2. 运算符

2.1 算术运算符
  • 加法: +
  • 减法: -
  • 乘法: *
  • 除法: /
  • 取模: %
  • 自增: ++
  • 自减: --
2.2 逻辑运算符
  • 与运算: &&
  • 或运算: ||
  • 非运算: !
2.3 位运算符
  • 位与: &
  • 所有位全为1才为1,否则为0
  • 位或: |
  • 只要有一个位为1,则结果为1
  • 异或: ^
  • 相同位为0,不同位为1
  • 按位取反: ~
  • ~(-14) 结果为 -15
  • 右移: >>
  • 右移几位,在左边补0
  • 左移: <<
  • 左移几位,在右边补0
2.4 条件运算符
  • (条件式 ? 表达式1 : 表达式2)
  • 示例:(a < b) ? a : b
2.5 赋值运算符
  • +=
  • -=
  • *=
  • /=
  • %=

特别注意:

  • % 用于取余,仅适用于整数。
  • ++a 先自增后使用,a++ 先使用后自增。
  • 示例:int a = 5; int b = ++a; // b=6
  • int a = 5; int b = a++; // b=5

%的例子:

判断个十百千位
      int a = 2345;
      int b = a/1000;
      printf("千位是:%d\n",b);
      int c = a/100%10;
      printf("百位是:%d\n",c);
      int d = a/10%10;
      printf("十位是:%d\n",d);
      int e = a%10;
      printf("个位是:%d\n",e);

image.gif

练习:水仙花
int n, a, b, c;
    for(n=100;n<1000;n++)
    {
        a = n / 100;
        b = n % 100 /10;
        c = n % 100 %10;
        if(pow(a,3)+pow(b,3)+pow(c,3) == n)
        {
            printf("%d\n",n);
        }
    }

image.gif

变量与常量

3. 变量格式与分类

3.1 变量声明格式
  • 格式: 存储类型 数据类型 变量名
  • 示例: int a;
3.2 数据类型分类
  • 整型: int, short, long
  • 字符型: char
  • 浮点型: float, double
3.3 全局变量与局部变量
  • 区别:
  • 作用域: 全局变量在所有函数中都可访问;局部变量只在其定义的函数或代码块中可见。
  • 生命周期: 全局变量在整个程序运行期间存在;局部变量在其所在函数调用结束后销毁。
  • 存储地址: 全局变量存储在静态区;局部变量存储在栈中。
  • 初值: 全局变量默认初始化为0;局部变量不自动初始化,除非明确指定。
  • 定义位置: 全局变量定义在所有函数外部;局部变量定义在函数内部或代码块内。

输入与输出

4. 输出格式说明

  • %d: 整型
  • %c: 字符
  • %f: 浮点型
  • %s: 字符串
  • %p: 地址
  • %#0: 八进制
  • %#0x: 十六进制
  • %-m.n: 格式化输出
  • %e: 指数形式

4.2 垃圾字符处理

  • getchar(): 读取并丢弃一个字符,常用于清除输入缓冲区中的多余字符,如空格、换行等。
  • 用途: 在读取数值后,清除输入流中的空白字符,避免影响后续输入。

4.3 输入操作

  • scanf(): 格式化输入函数,用于读取用户从键盘输入的数据。
  • 格式: scanf("%类型", &变量名); 或者直接使用数组名。
  • getchar(): 读取并返回一个字符的ASCII码值。
  • 功能: 从标准输入设备(如键盘)读取一个字符。
  • 参数: 无。
  • 返回值: 输入字符的ASCII码值。

特别注意:垃圾字符处理

  • 在进行多次输入时,前一次输入的结束符(如换行符)可能残留在输入缓冲区中,影响下一次输入。使用getchar()scanf()的特定方式可以清除这些“垃圾”字符。
// while (1)
  // {
  //     int i = 0;
  //     int j;
  //     int num1 = 0;
  //     int age = 18;
  //     char a;
  //     for (i = 1; i <= 3; i++)
  //     {
  //         printf("请猜一个数�?:\n");
  //         scanf("%d", &j);
  //         if (j == age)
  //         {
  //             printf("猜对�?");
  //             break;
  //         }
  //         else
  //         {
  //             printf("�?%d次输入错误\n", i);
  //             num1++;
  //         }
  //     }
  //     if (num1 == 3)
  //     {
  //         printf("请问你是否还像继�??(继续请按Y或y,退出请按N或n)\n");
  //         getchar();//  注意垃圾字符!
  //         scanf("%c", &a);
  //         if (a == 'Y' || a == 'y')
  //         {
  //             continue;
  //         }
  //         else if (a == 'N' || a == 'n')
  //         {
  //             break;
  //         }
  //     }
  //     return 0;
  // }

image.gif

控制流程结构

5. 分支语句

5.1 if...else
  • 语法:
    C
1if (条件表达式) {
2    // 条件为真时执行的代码
3} else {
4    // 条件为假时执行的代码
5}
  • image.gif
5.2 if...else if...else
  • 语法:
    C
1if (条件表达式1) {
2    // 条件1为真时执行的代码
3} else if (条件表达式2) {
4    // 条件2为真时执行的代码
5} else {
6    // 上述条件都不满足时执行的代码
7}
  • image.gif
5.3 switch
  • 语法:
    C
1switch (表达式) {
2    case 常量表达式1:
3        // 当表达式的值等于常量表达式1时执行的代码
4        break;
5    case 常量表达式2:
6        // 当表达式的值等于常量表达式2时执行的代码
7        break;
8    default:
9        // 当上述case都不匹配时执行的代码
10}
  • image.gif

6. 循环语句

6.1 for 循环
  • 语法:
    C
1for (初始化表达式; 条件表达式; 更新表达式) {
2    // 循环体
3}
  • image.gif
6.2 while 循环
  • 语法: C
1while (条件表达式) {
2    // 循环体
3}
  • image.gif
  • 注意: 条件表达式为非零值时,循环将继续。
6.3 do...while 循环
  • 语法:
    C
1do {
2    // 循环体
3} while (条件表达式);
  • image.gif
6.4 死循环
  • 示例:
    C
1while (true) {
2    // 无限循环体
3}
  • image.gif

C

1for (;;) {
2    // 无限循环体
3}

image.gif

7. 循环控制语句

7.1 break
  • 功能: 立即终止当前循环,跳转至循环之后的代码。
7.2 continue
  • 功能: 跳过本次循环剩余的部分,立即开始下一次迭代。
相关文章
|
2月前
|
C语言
C语言初阶⑧(结构体)知识点和笔试题
C语言初阶⑧(结构体)知识点和笔试题
26 0
|
2月前
|
编译器 C语言
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。(下)
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。
25 0
|
2月前
|
存储 编译器 C语言
C语言初阶⑦(指针初阶)知识点+笔试题(上)
C语言初阶⑦(指针初阶)知识点+笔试题
25 0
|
2月前
|
算法 程序员 编译器
C语言初阶③(函数)知识点+编程作业(递归模拟strlen,pow)
C语言初阶③(函数)知识点+编程作业(递归模拟strlen,pow)
27 0
|
4天前
|
前端开发 C语言
C语言08----注释扩展知识点,注释快捷键:ctrl+k,ctrl + C,取消快捷键 ctrl + K,ctrl + U
C语言08----注释扩展知识点,注释快捷键:ctrl+k,ctrl + C,取消快捷键 ctrl + K,ctrl + U
|
1月前
|
编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
29 3
|
1月前
|
存储 编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
22 1
|
16天前
|
C语言
C语言----关于二维数组传参的本质相关的知识点(数组指针、指针数组)
C语言----关于二维数组传参的本质相关的知识点(数组指针、指针数组)
|
2月前
|
存储 C语言
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(下)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
25 1
|
2月前
|
C语言 数据安全/隐私保护
C语言初阶①(分支语句和循环语句)知识点(下)
C语言初阶①(分支语句和循环语句)知识点
27 1

热门文章

最新文章