第二章 【C语言篇:入门】 C 语言基础入门

目录

[一. 常量](#一. 常量)

整型常量

实型常量(浮点型常量)

字符常量

字符串常量

符号常量

[二. 变量](#二. 变量)

定义与概念

[变量定义格式数据类型 变量名1, 变量名2, ...;](#变量定义格式数据类型 变量名1, 变量名2, ...;)

变量的初始化

常变量

[三. 数据类型](#三. 数据类型)

[四. 运算符](#四. 运算符)

算术运算符

关系运算符

逻辑运算符

赋值运算符

条件运算符(三目运算符)

运算符优先级与结合性

[五. 输入与输出语句](#五. 输入与输出语句)

格式化输出函数:printf()

格式化输入函数:scanf()

字符输入输出函数

[六. 本章小结](#六. 本章小结)


前言:本文介绍了C语言基础概念,包括常量(整型、实型、字符、字符串、符号常量)、变量(定义、初始化、常变量)和数据类型体系(整型、浮点型、枚举等)。详细讲解了运算符(算术、关系、逻辑、赋值等)的用法和优先级,以及输入输出函数(printf、scanf、getchar、putchar)的使用方法。重点阐述了常量和变量的区别、数据类型的分类、运算符的特殊规则(如整数相除舍去小数)和输入输出格式控制。这些基础知识为后续深入学习C语言编程奠定了基础。

此章节主要讲解C语言的运算符、认识变量、认识常量、输入语句、输出语句、数据类型。

一. 常量

常量是指在程序运行过程中其值不可改变的量。C语言中的常量主要分为以下几类:

整型常量

  • 即数学中的整数,如 0-25100075(八进制)、0x3A(十六进制)。

  • 默认类型为 int,对于较大的数,可使用后缀 LLL 表示 longlong long 类型,如 100L

实型常量(浮点型常量)

  • 即数学中的小数,有两种表示形式:

    • 十进制小数形式:3.14-0.001.510.

    • 指数形式:1.23e-4(表示1.23×10⁻⁴)、5E6(表示5.0×10⁶)。

  • 默认类型为 double。使用后缀 fF 可指定为 float 类型,如 3.14f

字符常量

  • 由一对英文单引号 括起来的单个字符,如 'A''#''5'

  • 本质是存储该字符对应的ASCII码值(一个整数)。

  • 特殊字符常量(转义字符) :以反斜杠 \ 开头,表示具有特殊功能的字符,如:

    • \n:换行

    • \t:水平制表符

    • \\:反斜杠本身

    • \':单引号

    • \":双引号

    • \0:空字符(字符串结束标志)

字符串常量

  • 由一对英文双引号 括起来的字符序列,如 "Hello, World!""A""123\n"

  • 系统在存储字符串时,会自动在末尾添加一个空字符 '\0' 作为结束标志。

  • 注意 :字符常量 'A'(占1字节)与字符串常量 "A"(占2字节,包含 'A''\0')完全不同。

符号常量

  • 使用一个标识符(符号)来代表一个常量。

  • 通常使用 #define 预处理指令 定义,格式为:#define 标识符 常量值

  • 例如:#define PI 3.14159

  • 特点

    1. 在编译前进行文本替换,不占用运行时的内存。

    2. 习惯上用大写字母命名,以区分变量。

    3. 因其仅是文本替换,故没有数据类型的概念,也无法进行类型检查。


二. 变量

定义与概念

  • 变量是在程序运行过程中,其值可以改变的量。

  • 变量代表内存中一个具有名称的存储单元,用于存放数据。

  • C语言遵循 "先定义,后使用" 的原则。定义变量时需要指定其数据类型变量名

变量定义格式

数据类型 变量名1, 变量名2, ...;

  • 示例

    cpp 复制代码
    int age;          // 定义一个名为age的整型变量
    float salary;     // 定义一个名为salary的单精度浮点型变量
    char grade;       // 定义一个名为grade的字符型变量
    int a, b, sum;    // 同时定义多个同类型变量

变量的初始化

  • 在定义变量的同时为其赋予一个初始值。

  • 格式数据类型 变量名 = 初始值;

  • 示例int count = 0; char first_char = 'Y';

常变量

  • 使用 const 关键字修饰的变量。

  • 格式const 数据类型 变量名 = 值;

  • 示例const int DAYS_OF_WEEK = 7;

  • 特点与与符号常量的区别

    • 常变量具有变量的所有属性(有数据类型,占用存储空间),只是其值在初始化后不能再被修改。

    • 符号常量#define)是编译前的文本替换,不分配存储空间,无数据类型。

    • 常变量提供了更好的类型安全性和作用域控制。


三. 数据类型

C语言的数据类型体系如下:

cpp 复制代码
C语言数据类型
├── 基本类型
│   ├── 整型类型
│   │   ├── 基本整型 (int)
│   │   ├── 短整型 (short [int])
│   │   ├── 长整型 (long [int])
│   │   ├── 双长整型 (long long [int])
│   │   ├── 字符型 (char)       // 本质是存储ASCII码的整型
│   │   └── 布尔型 (_Bool, C99引入,需包含<stdbool.h>以使用bool, true, false)
│   │
│   └── 浮点类型(实型)
│       ├── 单精度浮点型 (float)
│       ├── 双精度浮点型 (double)
│       └── 长双精度浮点型 (long double)
│
├── 枚举类型 (enum)      // 用户自定义的有限整数值集合
├── 空类型 (void)        // 主要用于函数无返回值或通用指针
│
└── 派生类型(构造类型)
    ├── 指针类型 (*)
    ├── 数组类型 ([])
    ├── 结构体类型 (struct)
    ├── 共用体类型 (union)
    └── 函数类型          // 函数返回值的类型

补充说明:

  • 字符型为什么是整型? char 类型在内存中存储的是字符对应的ASCII码(一个0~255的整数),因此它可以参与整数运算(如 'A' + 1 得到 'B'),也可以使用整型格式符 %d 输出其码值。

  • 类型修饰符signed(有符号,默认)、unsigned(无符号)可与整型结合使用,改变其表示范围。例如 unsigned int 表示无符号整型。

  • 类型大小与取值范围 :不同类型占用的内存字节数及其取值范围与编译器和系统平台相关,可通过 sizeof 运算符查询,如 sizeof(int)


四. 运算符

运算符是告诉编译器执行特定数学或逻辑操作的符号。

算术运算符

  • + (加), - (减), * (乘), / (除), % (取模/求余)

  • 注意

    • 整数相除 (/) 结果为整数,舍去小数部分。如 5 / 2 结果为 2

    • 取模运算符 (%) 要求两侧操作数必须为整数 。如 7 % 3 结果为 1

    • ++ (自增) 和 -- (自减) 是单目运算符,分前缀(如 ++i)和后缀(如 i++)两种形式,两者对变量自身的最终影响相同,但在表达式中的值不同

关系运算符

  • 用于比较两个操作数:== (等于), != (不等于), > (大于), < (小于), >= (大于等于), <= (小于等于)。

  • 运算结果为逻辑值:真 (1)假 (0) ,在C语言中通常用 int 类型的 10 表示。

逻辑运算符

  • 用于组合或修改逻辑条件:&& (逻辑与), || (逻辑或), ! (逻辑非)。

  • 操作数通常为关系表达式或逻辑值。

  • 短路求值 :对于 &&,若左边为假,则右边不再计算;对于 ||,若左边为真,则右边不再计算。

赋值运算符

  • 基本赋值运算符:=。将右边表达式的值赋给左边的变量。

  • 复合赋值运算符:+=, -=, *=, /=, %= 等。例如 a += 5; 等价于 a = a + 5;

条件运算符(三目运算符)

  • 格式:表达式1 ? 表达式2 : 表达式3

  • 执行过程:先计算表达式1,若其值为真(非0),则整个表达式的值为表达式2的值;否则为表达式3的值。

  • 示例max = (a > b) ? a : b; // 求a和b中的较大值。

  1. 逗号运算符

    • 格式:表达式1, 表达式2, ..., 表达式n

    • 执行过程:从左到右依次计算各个表达式,整个逗号表达式的值等于最后一个表达式 (表达式n) 的值

    • 示例x = (a=3, b=5, a+b); // 执行后,a为3,b为5,x为8。

运算符优先级与结合性

  • 当表达式中出现多种运算符时,优先级高的先运算。

  • 优先级相同时,根据结合性(从左到右或从右到左)决定计算顺序。

  • 通用原则 :单目 > 算术 > 关系 > 逻辑 > 条件 > 赋值 > 逗号。建议使用圆括号 () 明确指定运算顺序,增强可读性。


五. 输入与输出语句

C语言本身没有输入输出语句,通过调用标准库函数实现,使用时需包含头文件 #include <stdio.h>

格式化输出函数:printf()

  • 函数原型int printf(const char *format, ...);

  • 功能:将数据按照指定格式输出到标准输出设备(通常是屏幕)。

  • 格式控制字符串 (format) 组成

    • 普通字符:原样输出。

    • 格式说明符 :以 % 开头,指定后续输出项的数据类型和格式。

      • %d%i:输出有符号十进制整数 (int)。

      • %u:输出无符号十进制整数。

      • %f:输出十进制单/双精度浮点数 (默认保留6位小数)。

      • %c:输出单个字符 (char)。

      • %s:输出字符串。

      • %p:输出指针地址。

      • %x%X:输出十六进制整数。

      • %o:输出八进制整数。

      • %%:输出一个百分号 %

    • 可在 % 和格式字母间插入宽度、精度等修饰符 ,如 %5d(输出宽度至少5位)、%.2f(保留2位小数)、%-10s(左对齐,宽度10)。

格式化输入函数:scanf()

  • 函数原型int scanf(const char *format, ...);

  • 功能:从标准输入设备(通常是键盘)读取数据,并存储到指定的变量地址中。

  • 关键点

    • 格式控制字符串中的格式说明符必须与后续变量地址列表的类型严格匹配

    • 变量前必须加上取地址运算符 &(除非变量本身是指针,如数组名)。

    • 输入时,数据之间默认以空白字符(空格、Tab、回车)作为分隔。

  • 示例

    cpp 复制代码
    int age;
    float score;
    char name[20];
    scanf("%d %f %s", &age, &score, name); // 输入:25 89.5 Zhangsan

字符输入输出函数

  • int getchar(void); // 从标准输入读取一个字符(通常为键盘),返回该字符的ASCII码。

  • int putchar(int c); // 向标准输出写入一个字符。

  • 示例

    cpp 复制代码
    char ch;
    ch = getchar(); // 等待用户输入一个字符
    putchar(ch);    // 输出该字符
    putchar('\n');  // 输出换行

六. 本章小结

本章系统构建了C语言的基础知识框架:

  1. 常量与变量:理解了不可变与可变数据的存储与表示,明确了符号常量与常变量的本质区别。

  2. 数据类型 :掌握了从基本整型、浮点型到派生类型的完整体系,理解了char的整型本质及各种类型的基本用途。

  3. 运算符 :熟悉了各类运算符的功能、优先级与结合性,特别是 /%++--&&|| 等的使用细节。

  4. 输入输出 :掌握了 printfscanf 的核心用法,理解了格式控制字符串的作用及变量地址在输入中的必要性。

相关推荐
jiang_changsheng1 小时前
环境管理工具全景图与深度对比
java·c语言·开发语言·c++·python·r语言
yong99902 小时前
MATLAB面波频散曲线反演程序
开发语言·算法·matlab
JicasdC123asd2 小时前
【工业检测】基于YOLO13-C3k2-EIEM的铸造缺陷检测与分类系统_1
人工智能·算法·分类
Not Dr.Wang4222 小时前
自动控制系统稳定性研究及判据分析
算法
VT.馒头2 小时前
【力扣】2722. 根据 ID 合并两个数组
javascript·算法·leetcode·职场和发展·typescript
ffqws_3 小时前
A*算法:P5507 机关 题解
算法
执着2593 小时前
力扣hot100 - 108、将有序数组转换为二叉搜索树
算法·leetcode·职场和发展
2501_901147833 小时前
学习笔记:单调递增数字求解的迭代优化与工程实践
linux·服务器·笔记·学习·算法
AI科技星3 小时前
张祥前统一场论核心场方程的经典验证-基于电子与质子的求导溯源及力的精确计算
线性代数·算法·机器学习·矩阵·概率论