C语言基础语法
大约 3 分钟
C 语言基础语法
配套Demo:codes/01_基础.c
程序基本结构
#include <stdio.h> // 预处理指令,引入标准输入输出头文件
int main() // 主函数,程序入口,int 为返回值类型
{
printf("hello world\n");
return 0; // 返回值 0 表示程序正常结束
}
编译运行(以 gcc 为例):
gcc 01_基础.c -o hello # 编译
./hello # 运行
数据类型和表达式
C 语言中的二进制、八进制和十六进制的表示:
- 二进制:由 0 和 1 组成,使用时必须得用 0b 或 0B 开头,例如 0b0001
- 八进制:由 0 ~ 7 八个数字组成,使用时必须以 0 开头,例如 015(十进制为 13)
- 十六进制:由 0 ~ 9、A ~ F 或 a ~ f 组成,使用时必须以 0X 或 0x 开头,例如 0X2A(十进制 42)
基本数据类型
- 整型 int
- 字符型 char
- 浮点型
- 单精度型 float
- 双精度型 double
- 枚举类型
下列表格为详细说明(以 64 位系统常见实现为例):
| 类型 | 类型说明符 | 字节 | 数字范围 |
|---|---|---|---|
| 字符型 | char | 1 | -128 ~ 127 |
| 短整型 | short int | 2 | -32768 ~ 32767 |
| 基本整型 | int | 4 | -2147483648 ~ 2147483647 |
| 长整型 | long int | 8 | 约 ±9.2 × 10^18 |
| 无符号整型 | unsigned int | 4 | 0 ~ 4294967295 |
| 无符号长整型 | unsigned long | 8 | 0 ~ 约 1.8 × 10^19 |
| 单精度实型 | float | 4 | 约 6 ~ 7 位有效数字 |
| 双精度实型 | double | 8 | 约 15 ~ 16 位有效数字 |
各类型的实际字节数可用
sizeof(int)运算符验证,标准只规定了各类型之间的相对大小关系。
常量与变量
int age = 18; // 变量:先定义后使用
const double PI = 3.14159; // const 常量:定义后不可修改
#define MAX_SIZE 100 // 宏常量:预处理阶段直接文本替换
int octal = 015; // 八进制 13
int hex = 0X2A; // 十六进制 42
char c = 'A'; // 字符本质是 ASCII 码,'A' 即 65
float f = 3.14f; // float 字面量加 f 后缀
long l = 123456789L; // long 字面量加 L 后缀
运算符
- 算术运算符:
+ - * / %(两个整数相除结果取整,%只能用于整数) - 关系运算符:
> >= < <= == !=(结果为 1 或 0) - 逻辑运算符:
&& || !(短路求值:&&左边为假时右边不再计算) - 位运算符:
& | ^ ~ << >> - 自增自减:
++i(先加后用)、i++(先用后加) - 三目运算符:
条件 ? 表达式1 : 表达式2 - 逗号表达式:
(a = 1, b = 2, a + b),结果为最后一个表达式的值
int a = 7, b = 2;
printf("%d\n", a / b); // 3,整数除法截断小数
printf("%d\n", a % b); // 1
printf("%d\n", a >> 1); // 3,右移一位相当于除 2
printf("%d\n", 1 << 10); // 1024,左移一位相当于乘 2
输入输出
printf 输出
| 格式符 | 说明 | 格式符 | 说明 |
|---|---|---|---|
| %d | 十进制整数 | %f | 浮点数(默认6位) |
| %c | 单个字符 | %lf | double |
| %s | 字符串 | %x | 十六进制整数 |
| %o | 八进制整数 | %p | 指针地址 |
| %u | 无符号十进制 | %e | 科学计数法 |
| %ld | long 整数 | %% | 输出 % 本身 |
printf("%5d\n", 42); // 宽度5,右对齐: 42
printf("%-5d|\n", 42); // 左对齐:42 |
printf("%.2f\n", 3.14159);// 保留两位小数:3.14
scanf 输入
int a;
double d;
char s[20];
scanf("%d", &a); // 普通变量必须取地址 &
scanf("%lf", &d); // double 用 %lf,printf 输出时用 %f
scanf("%s", s); // 数组名本身就是地址,不加 &
字符输入输出
char c = getchar(); // 读取单个字符
putchar(c); // 输出单个字符
类型转换
// 自动转换:小类型向大类型提升
int i = 3;
double d = i + 1.5; // i 先提升为 double 再相加,结果 4.5
// 强制转换
int a = (int)3.99; // 3,直接截断小数,不是四舍五入
printf("%d\n", (int)'A'); // 65
Loading...
