一、变量与常量
(一)变量
- 定义:存储数值可改变的量,需指定数据类型,占用固定内存空间(如int型占4字节)。
- 一般形式:
数据类型 变量名称1, 变量名称2, ..., 变量名称n; - 示例:
int count;(定义存储常服数量的整型变量count)
- 一般形式:
- 初始化:定义时为变量赋予初始值,避免使用未初始化变量(会导致运行错误)。
- 一般形式:
数据类型 变量名称 = 初始值; - 示例:
float cj = 90;(定义浮点型变量cj,初始值90.0)int x = 1, y, z;(x初始值1,y、z未初始化,值为随机数)
- 一般形式:
(二)常量
- 分类及定义
类型 说明 示例 注意事项 整型常量 整数,默认int型存储 sum = sum + 357可指定类型/进制:<br>- 92LL(long long型)、92U(无符号整型)<br>-07(八进制)、0X1F(十六进制)浮点型常量 小数或指数形式,默认double型 十进制小数: 0.123、123.0<br>指数形式:1.2e-2、7E0可指定类型:<br>- 3.14F(float型)、3.14L(long double型)<br>- 十进制小数必须含小数点,指数形式e前后需有数字符常量 单撇号括起的1个字符,值为ASCII码 普通字符: 'a'(97)、'0'(48)<br>转义字符:'\n'(换行,10)、'\x62'(‘b’)不可用 'ab'表示2个字符,需分开写'a'、'b'字符串常量 双撇号括起的字符序列,末尾自动加 '\0'作为结束标志"China"(内存存储:C h i n a \0)、"中国"与字符常量区别: 'a'占1字节,"a"占2字节(含'\0')符号常量 用标识符表示常量,需用 #define定义#define PI 3.14(PI代表3.14)定义后不可修改,通常大写,增强代码可读性
二、指针变量
(一)核心概念
指针变量存储的是其他变量的内存地址,通过地址可间接访问目标变量,类比“通过房间号找房间内物品”。
(二)定义与初始化
- 定义:需指定基类型(与目标变量类型一致),
*表示指针类型。- 一般形式:
数据类型 *变量名称; - 示例:
float *p3;(定义指向float型变量的指针p3)double *p4, *p5;(定义2个指向double型变量的指针)- 注意:
double *p1, p2;中p2是普通double变量,非指针
- 一般形式:
- 初始化:初始值为已定义变量的地址(
&取地址运算符)或空指针(0)。- 一般形式:
数据类型 *变量名称 = 初始值; - 示例:
char a, *p1 = &a;(p1存储变量a的地址,指向a)int *p2 = 0;(p2为空指针,不指向任何变量)
- 一般形式:
(三)变量访问方式
| 访问方式 | 说明 | 示例 |
|---|---|---|
| 直接访问 | 通过变量名访问 | short cj = 92;(直接给cj赋值92) |
| 间接访问 | 通过指针变量访问(*指针运算符,表“指向的变量”) |
*p1 = 90;(通过p1修改其指向的变量a的值为90) |
三、运算符和表达式
(一)运算符分类及规则
-
核心运算符汇总
类别 运算符 含义 优先级 结合性 示例 结果 算术运算符 +(单目)正号 高 右结合 +55 -(单目)负号 高 右结合 -5-5 ++自增 高 右结合 i=5; ++i6 --自减 高 右结合 i=5; --i4 *乘法 中 左结合 5*315 /除法 中 左结合 5/3(整型)、5/3.0(浮点型)1、1.666… %取余 中 左结合 5%32 +(双目)加法 中低 左结合 5+38 -(双目)减法 中低 左结合 5-32 关系运算符 <、<=、>、>=比较大小 中 左结合 5>21(真) ==等于 中 左结合 5==20(假) !=不等于 中 左结合 5!=21(真) 逻辑运算符 !逻辑非 高 右结合 !01(真) &&逻辑与 低 左结合 1&&00(假) ` ` 逻辑或 低 左结合 赋值运算符 =赋值 最低 右结合 a = 5将5赋给a -
表达式计算规则
- 先按优先级执行(如先乘除后加减,先逻辑非后逻辑与/或);
- 优先级相同时,按结合性执行(如算术运算符左结合,单目运算符右结合);
- 不可省略乘号(如
a*b不可写ab),可加小括号强制改变顺序(如(a+b)*c)。
(二)特殊情形
- 短路运算:逻辑表达式确定最终值后,后续分量不再计算。
- 示例:
a=0, b=10时,c=(a>=1 && (b=5))中,a>=1为假,直接确定结果为假,b=5不执行,最终b=10。
- 示例:
- 数据类型转换
- 自动转换:赋值时低精度→高精度(如char→short→int→long long),可能丢失数据(如
char a=127; a=a+1;后a=-128,溢出); - 强制转换:用
(目标类型)强制转换,优先级最高。 - 示例:
(char)12.5(将12.5转为char型12)、(int)x + y(先转x为int型,再与y相加)。
- 自动转换:赋值时低精度→高精度(如char→short→int→long long),可能丢失数据(如
四、处理简单问题(程序编写)
(一)基本步骤
- 编写
main()函数(程序入口); - 定义与初始化变量;
- 输入数据(如
scanf); - 编写算法语句(核心逻辑);
- 输出结果(如
printf)。
(二)示例
- 华氏温度转摄氏温度
- 公式:
c = 5.0/9 * (f - 32)(用5.0避免整型除法); - 代码:
#include <stdio.h> int main() { float c, f = 64; // 初始化华氏温度f=64 c = 5.0/9 * (f - 32); // 计算摄氏温度 printf("摄氏温度: %.1f\n", c); // 输出结果(如17.8) return 0; } - 公式:
- 三角形面积计算(海伦公式)
- 公式:
p=(a+b+c)/2,s=sqrt(p*(p-a)*(p-b)*(p-c))(需包含math.h); - 代码:
#include <stdio.h> #include <math.h> // 调用sqrt函数需包含 int main() { float a=6, b=7, c=8, p, s; // 初始化三边长 p = (a + b + c) / 2; // 计算半周长 s = sqrt(p * (p - a) * (p - b) * (p - c)); // 计算面积 printf("三角形面积: %.2f\n", s); // 输出结果(如20.33) return 0; } - 公式:
- 大写字母转小写字母
- 原理:小写字母ASCII码 = 大写字母ASCII码 + 32;
- 代码:
#include <stdio.h> int main() { char u_l = 'B'; // 定义大写字母变量 u_l = u_l + 32; // 转为小写('B'+32='b') printf("小写字母: %c\n", u_l); // 输出'b' return 0; }
五、重点与难点
- 重点
- 变量的定义、初始化与使用;
- 常量(尤其是符号常量、转义字符)的定义与使用;
- 算术、关系、逻辑运算符的优先级与表达式计算。
- 难点
- 指针变量的定义、初始化及间接访问;
- 数据类型自动转换的溢出问题与强制转换的正确使用。
六、思考题
- 符号常量与其他常量(整型、浮点型等)的区别:符号常量用标识符表示,无类型;其他常量有明确类型。符号常量与变量的区别:符号常量定义后不可修改,变量值可改变。
- 程序运行结果错误的排查方法:检查变量是否初始化、数据类型是否匹配、运算符优先级是否正确、公式逻辑是否有误、是否存在数据溢出等。