一、人类的助手:计算机核心概念
1. 程序与指令
- 指令:计算机可直接执行、不可再分割的命令,是计算机操作的最小单位。
- 程序:一组计算机能够识别和执行的指令集合,用于完成特定任务。
- 程序设计(编程):将人类解决问题的思路转化为程序,进而转换为计算机可执行指令的过程。
二、与计算机对话:计算机语言体系
计算机语言按抽象程度分为三级,核心作用是实现“人类意图→计算机执行”的转换。
1. 机器语言(最低级)
- 本质:二进制代码(0和1)组成的机器指令集合,是计算机唯一能直接理解和执行的语言。
- 结构:每条指令包含“操作码”(指定操作类型,如存储、加法)和“操作数”(指定操作对象,如寄存器地址、数值)。
- 示例:
- 存储指令:
1 001 10(将数据存入地址为10的寄存器) - 加法指令:
2 002 10 00000010(将十进制2与寄存器10中的数相加并存储)
- 存储指令:
- 缺点:可读性极差,难以记忆和编写,依赖具体硬件。
2. 汇编语言(低级)
-
本质:用符号(如MOV、ADD)替代二进制指令的“符号语言”,仍依赖特定硬件架构。
-
优势:相比机器语言更易理解,降低编程复杂度。
-
示例:“1+2”的汇编实现
指令序号 操作码 操作数1 操作数2 指令含义 1 MOV A – 将十进制“1”存入寄存器A 2 ADD A 2 十进制“2”与寄存器A中的数相加,结果存回A -
局限性:仍需了解硬件细节,未完全脱离机器依赖。
3. 高级语言(最高级)
- 核心特点:独立于特定计算机系统,语法接近人类自然语言,可读性和通用性强。
- 执行流程:需通过“编译器”将高级语言编写的源程序(如
.c文件)转换为目标程序(如.obj文件),再经“链接程序”生成可执行程序(如.exe文件)。 - 主流语言:根据IEEE Spectrum 2023排行榜,热门语言包括Python、C++、C、Java等。
4. 重点:C语言
-
发展背景:20世纪70年代由美国贝尔实验室的D.M.Ritchie设计,用于开发UNIX系统。
-
语言结构:类比人类语言的层级关系,形成清晰的语法体系
类别 结构 人类语言 字 → 词 → 句子 → 段落 → 文章 C语言 标识符 → 表达式 → 语句 → 函数 → 程序 -
基础示例:输出“I love China!”的C程序
#include <stdio.h> // 引入标准输入输出库 int main() { // 主函数,程序入口(C程序必须有且仅有一个main函数) printf("I love China!"); // 输出语句 return 0; // 主函数返回值,标识程序正常结束 }
(1)C语言核心组成单元
-
标识符:用于命名变量、函数等的符号,规则如下:
- 由英文字母(A-Z、a-z)、数字(0-9)、下划线(_)组成;
- 不能以数字开头;
- 区分大小写(如
Word3与word3是不同标识符); - 不能与“关键字”重名。
-
关键字:C语言预定义的特殊标识符,具有固定含义,不可自定义
常用关键字 功能说明 int、char、double 数据类型声明 if、else、while、for 流程控制 return、break、continue 程序跳转 void、static、const 存储类型/修饰符 -
表达式:用运算符连接运算对象的式子,用于计算或判断
运算符类型 符号示例 功能说明 算术运算符 +、-、*、/、%、++ 加减乘除、取余、自增 关系运算符 >、<、==、!=、>=、<= 比较大小关系 逻辑运算符 !(非)、&&(与)、 赋值运算符 =、+=、-=、*= 变量赋值及扩展赋值 其他 sizeof(求字节数)、(类型)(强制转换) 数据操作辅助 -
语句:C语言的基本执行单位,一条语句对应一个或多个机器指令,如:
- 赋值语句:
sum = 1 + 2; - 输出语句:
printf("Hello"); - 分支语句:
if (sunny == 1) fly_kite = 1; else stay_home = 1;
- 赋值语句:
-
函数:C程序的基本功能单位,实现代码模块化,示例:两数交换函数
#include <stdio.h> // 自定义函数swap:通过指针交换两个整数的值 void swap(int *a, int *b) { int temp = *a; // 临时变量存储*a的值 *a = *b; // 将*b的值赋给*a *b = temp; // 将临时变量的值赋给*b } int main() { int num1 = 2, num2 = 3; swap(&num1, &num2); // 调用swap函数,传入变量地址 printf("交换后的两个数: %d %d", num1, num2); // 输出结果:3 2 return 0; }
三、从问题到程序:程序设计完整流程
程序设计需遵循标准化步骤,确保逻辑清晰、可维护性强。
1. 核心步骤
-
分析问题:明确问题需求(如“计算1到100的和”“找出三个数中的最大值”),确定输入、输出和处理逻辑。
-
设计算法:
- 算法定义:解决问题的具体方法和步骤,需满足“有穷性”“确定性”“可行性”。
- 表示方法:
- 自然语言:如“计算1+2+…+100”的步骤:
- 令sum=0(累加结果)、augend=1(累加项);
- sum = sum + augend;
- augend = augend + 1;
- 若augend ≤ 100,跳转至步骤2;否则执行步骤5;
- 输出sum的值。
- 流程图:用图形符号表示算法,常用符号包括
- 开始/结束框(椭圆形)、执行框(矩形)、选择框(菱形)、输入输出框(平行四边形)、流程线(箭头)。
- 自然语言:如“计算1+2+…+100”的步骤:
- 经典结构:顺序结构(按步骤执行)、选择结构(if-else,根据条件分支)、循环结构(while/for,重复执行)。
-
编写程序:
- 按算法逻辑,用选定的高级语言(如C语言)编写源程序;
- 注意语法规范(如语句结尾加
;、括号配对)。
-
测试程序:
- 编译:检查语法错误,生成目标程序;
- 运行:测试功能正确性(如输入边界值、异常值),修复逻辑错误。
-
编写文档:记录程序关键信息,便于维护和使用,文档内容示例
文档明细 具体内容 备注 程序文件名称 FindTallestMan.c 源文件 程序功能描述 找出三个数中最大的数及位置 – 输入数据格式 小数,小数,小数 示例:1.9,1.8,1.7 输出数据格式 身高最高的是第X人,他的身高是Y米 X、Y由程序计算输出
四、让计算机认识世界:数据表示方式
计算机仅能识别数字,需将各类信息(整数、小数、字符)转换为二进制形式存储。
1. 整数表示
-
存储单位:字节(1字节=8位二进制),字节有唯一地址(内存地址)。
-
表示方法:
- 无符号整数:仅表示非负数,1字节范围为0~255(2⁸-1)。
- 有符号整数:用最高位(符号位)表示正负(0为正,1为负),采用补码存储(解决“+0”与“-0”重复问题):
- 正整数:补码=原码(二进制本身);
- 负整数:补码=原码(除符号位外)按位取反 + 1。
-
C语言整数类型
数据类型 字节数 是否有符号 取值范围 unsigned short 2 无 0~65535(2¹⁶-1) signed short 2 有 -32768~32767(-2¹⁵~2¹⁵-1) unsigned int/long 4 无 0~4294967295(2³²-1) signed int/long 4 有 -2147483648~2147483647(-2³¹~2³¹-1) unsigned long long 8 无 0~18446744073709551615(2⁶⁴-1) signed long long 8 有 -9223372036854775808~9223372036854775807(-2⁶³~2⁶³-1)
2. 小数表示(浮点数)
-
特点:位数不固定,采用“指数形式”存储(类似科学计数法),如十进制19.625=二进制10011.101=1.0011101×2⁴。
-
存储结构(以4字节float为例):1位符号位 + 8位指数位 + 23位尾数位。
-
C语言浮点类型
数据类型 字节数 有效数位 数值范围(绝对值) float 4 6~7位 0 及 1.2×10⁻³⁸~3.4×10³⁸ double 8 15~16位 0 及 2.3×10⁻³⁰⁸~1.7×10³⁰⁸ long double 16 18~19位 0 及 3.4×10⁻⁴⁹³²~1.1×10⁴⁹³² -
注意:浮点数存在精度误差(如0.1无法用二进制精确表示),需避免直接用“==”比较。
3. 字符表示
-
编码标准:
- 英文字符/数字:采用ASCII码(1字节),如’A’=65(十进制)=1000001(二进制),‘a’=97,‘0’=48。
- 中文字符:采用GB2312编码(2字节),解决ASCII码无法表示中文的问题。
-
C语言字符类型
类型 字节数 取值范围 说明 char(有符号) 1 -128~127 存储ASCII码或窄字符 unsigned char(无符号) 1 0~255 存储扩展ASCII码 -
表示方式:字符常量需用单引号包裹,如
'A'(字符)与A(标识符)、"A"(字符串)区分。
五、思考题
- 如何区分十进制数与八进制(以0开头,如012=10十进制)、十六进制数(以0x开头,如0xA=10十进制)?
- 为什么字符需要用单引号引起来?(区分字符常量与标识符、字符串)