第一章 C语言概述
C 语言概述 1.1 计算机与程序、程序设计语言 1.2 语言出现的历史背景 1.3 C语言的特点 1.4 简单的C语言程序 1.1 计算机与程序、程序设计语言 1.2 语言出现的历史背景 1.3 C语言的特点 1.4 简单的C语言程序 1.5 运行C程序的步骤与方法
C 语言概述 程序设计语言概述 【重点】程序及程序设计语言的实现 数据及数据存取 C语言的特点
C 语言概述 三种计算工具 数值数据的存储,人工运算 数值数据的存储,非程序化运算 数据的存储、加工、处理、传递,程序化运算
C 语言概述 计算机 与计算器 三个要回答的问题: 程序是什么 程序设计语言是什么 程序如何得以实现(程序如何在计算机中运行) 程序控制 根本区别是什么? 程序控制 人工操作
C 语言概述 一个基本概念: 计算的本质(什么叫计算) 计算就是映射或基于规则的符号串的变换过程 从一个已知的符号串开始,按照一定的规则,一步一步地改变符号串,经过有限步骤,最后得到一个满足预先规定的符号串,这种变换过程就是计算 完全可以把计算看作是基于规则的物理状态的变换,所谓的符号就是特定的物理状态,映射或符号变换就是从一种物理状态变换到另外一种物理状态的过程 算术运算、定理证明、文字翻译等都是计算
C 语言概述 更具体的概念:算法与程序 计算过程所依赖的规则就是算法 一个问题是不是可计算的,与该问题是不是具有 相应的算法是完全一致的 特定的自然规律实际上就是特定的“算法”,特 定的自然过程实际上就是执行特定的自然“算法” 的一种“计算” 算法的计算机语言描述就是程序 程序是计算机解决问题的规则的表示形式,这种 表示形式能够被计算机转化为计算机的实际动作
C 语言概述 程序及程序设计语言 程序(Program) 指示计算机按解决问题的步骤,实现预期目的而进行操作的一系列语句或指令 程序设计语言(Programming Language) 用来定义计算机程序的符号系统(具有语法规则) 定义计算机所需要使用的数据 定义计算机对数据进行的操作
C 语言概述 计算机只能识别0和1,用0和1表示一切信息和操作 程序设计语言的分类 0,1 a,b,c,… 机器语言 自然语言 低级语言 0,1 a,b,c,… 高级语言 不依赖于机器,远离对硬件的直接操作 汇编语言 依赖于机器的符号系统,利用计算机所有硬件特性并能直接控制硬件 计算机只能识别0和1,用0和1表示一切信息和操作 机器语言 用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码 自然语言 e.g.:汉语、English、조선어、…
C 语言概述 程序及程序设计语言的实现【重点】 口译——解释(Interpretation) 态度决定一切 1 态度决定一切 2 #@%$^&*... 1 态度决定一切 #@%$^&*... 2 #@%$^&*... 态度决定一切 3
C 语言概述 程序及程序设计语言的实现【重点】 笔译——编译(Compilation) 要说翻译官能听明白的话! 态度决定一切 编译程序 #@%$^&*... 1 编译程序 目标程序 要说翻译官能听明白的话! 我们的程序 计算机
? C 语言概述 程序及程序设计语言的实现【重点】 编译方式下程序设计语言的实现过程 ②编译 出错 ④运行 ①编辑 ③链接 可执行程序 最终机器语言程序 编辑 程序 编译 程序 链接 程序 人编写的程序 机器语言程序 源程序 目标程序 出错 ②编译 已有的可利用机器语言程序 ④运行 ①编辑 ③链接 库函数 运行结果
C 语言概述 利用计算机解决问题的过程 每个环节的主体、输入、输出是什么 领域知识 Step 1:input S Step 2:calculate t Step 3: output t 分析 算法设计 问题 符号表达 算法 编程 编译并运行 main() { float S; scanf(“%f”, &S); … } t=2.34(sec) 结果 源程序
C 语言概述 数据和数据的存取 【重点】内存的组织方式 【难点】变量与内存单元 【难点】数据类型 C 语言的特点
数据及数据存取 存储器 内存(主存, main memory):存放计算机运行期间程序和数据 外存(辅助存储器, auxiliary memory):不依赖于电能而长期保存信息 外存中的程序和数据在使用时必须调入内存,内存中的数据为了在断电情况下长期保存,必须保存到外存中
数据及数据存取 存储器 使用 保存
数据及数据存取 内存的组织方式【重点】 内存单元(Unit):内存中数据存储和读取的基本单位,一般容量为1byte=8bits 笔记本某页的某一行 每个内存单元具有唯一的地址(Address) 笔记本某页某一行的行序号 地址是标识内存单元的编号,是确定内存单元、读写数据的依据 内存单元地址是连续编号的 C语言中以指针(Pointer)形式表示内存单元的地址——C的特色之一
数据及数据存取 内存的组织方式【重点】 1bit 1位16进制数=4位二进制数 4位16进制数=16位二进制数 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 1bit 1位16进制数=4位二进制数 4位16进制数=16位二进制数 16位二进制数可表示216=65536个不同单元=65536B =64KB 为管理1MB内存,需要用几位二进制数表示内存单元地址? uint: 1byte address
数据及数据存取 变量(Variable)与内存单元【难点】 变量对应于某一确定的内存单元 单元是物理设备(物理的),变量是程序设计语言的语法成份(逻辑的),二者之间的对应关系由编译程序确定 变量名(Name)是内存单元的符号标识,是内存单元的命名 变量的值(Value)就是对应内存单元中存取着的数据(程序中以变量名表示变量的值)
数据及数据存取 变量与内存单元【难点】 变量的值 变量名 系办公室 IIP研究室 主任室 计算机系 崔 旭 武松林 姜 浩 程 娜 李明 崔 旭 武松林 姜 浩 程 娜 李明 相 林 王 伟 。。。 。。。 单元 变量 内存 315 317 319 地址
存储器中的二进制串的语义由数据类型所规定 数据及数据存取 数据类型(Data Type) 【难点】 具有相同性质(属性)的数据集合 规定了数据存取方法、意义、可实施操作 未指定数据类型就无法解释单元内二进制码的意义 0100 0001表示什么(65?,A?地址?) 存储器中的二进制串的语义由数据类型所规定
数据及数据存取 数据类型(Data Type) 【难点】 C中确定数据类型的途径:类型定义 e.g. : int x; 表示x是整型 该单元内容(二进制)应解释为整数(的补码) x可参与算术运算
C 语言的特点 特点-1 C是中级语言≈汇编语言 把高级语言的基本结构和语句与低级语言的实用性结合起来,对位、字节和地址(计算机最基本的工作单元)进行操作
C 语言的特点 特点-2 C是结构式语言——代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立 以函数作为程序单位,具有多种循环、条件语句控制程序流向,从而使程序完全结构化 可使程序层次清晰,便于使用、维护以及调试
C 语言的特点 特点-3 C语言具有丰富的数据类型 提供了用基本数据类型构造出多种复杂的数据结构的功能 用户可根据需要定义特殊的数据类型
C 语言的特点 特点-4 C语言简洁易读,运算符和库函数丰富
C 语言的特点 特点-5 C语言可移植性好 程序本身独立于机器硬件,可从一种环境到另一种环境运行
C 语言的特点 缺点 语法限制不严格 程序设计自由度大 换取高效率的代价
简单的C程序 C语言程序结构的典型形态【重点】 最简单的C程序:基本结构和简单功能的实现 注释 主函数,程序由此开始执行 /* The simplest C program */ #include <stdio.h> main( ) { printf(”Hello, world\n” ); } 包含头文件,以便调用I/O库函数 调用库函数显示信息 函数开始与结束标志
简单的C程序 /* 求任意数的和 */ #include <stdio.h> main( ) { int x, y, z; z=x+y; printf(”%d”, z); } ? 10 x 定义x,y,z是整型变量 y ? 20 把10和20分别存放到x,y对应的内存单元中 ? 30 z 计算x与y的和,并存放到z对应的单元中 内存 按指定格式显示z的值: 30
简单的C程序 x是变量名,表示变量的值 &x是x对应内存单元的地址 /* 选择两个数中较大的 */ #include <stdio.h> main( ) { int x, y, z; scanf(”%d, %d”, &x, &y); if (x>y) z=x; else z=y; printf(”%d”, z); } ? 10 x 按指定格式输入x, y的值并存放到对应单元中(输入: 10, 20) y ? 20 20 ? z 选择x, y中较大者, 并存放到z对应单元中 内存 显示结果:20
简单的C程序 C语言程序结构的典型形态【重点】 函数是C程序的基本单位 函数是具有一定独立功能的程序单位,不同函数有不同名字 主函数(main)必须有且仅有一个,是程序的入口 C程序由若干函数并列而成 系统库函数: 已编译好且可以直接使用的函数,但必须包含相应头文件
C 程序的结构 模块化 C语言程序结构的典型形态【重点】 以函数为基本单位的优点 生产手枪程序—— 主函数:调用函数A-H生产各部件、组装、测试 函数A:生产套筒 函数B:生产枪管 函数C:生产枪口帽 函数D:生产复进簧及导杆 函数E:生产连接座 函数F:生产击发机构及 函数G:生产弹匣 函数H:生产挂机扳把 库函数:生产原材料 每个函数都简单:函数的功能相对独立单一,任一个函数不必考虑另一函数的处理过程 函数之间需要少量的通信 降低复杂度:全体子系统的复杂度之和<系统的复杂度 库函数:减少了重复劳动 准备晚餐不必先种田、种菜、栽树、开矿… C语言程序结构的典型形态【重点】 以函数为基本单位的优点 92式9mm手枪(驻澳门部队装备) 模块化
简单的C程序 值得! 释放内存 缺点:效率(时间或空间)下降 10 x /* 选择两个整数中较大的数 */ #include <stdio.h> main( ) { int x, y, z; int max(int, int); /*函数原型声明*/ scanf(”%d, %d”, &x, &y); z=max(x, y); printf(”%d”, z); } int max(int a, int b) if (a>b) return a; else return b; y 20 ? 20 z 内存 值得! 释放内存 返回值 a ? 10 参数传递 ? 20 b 缺点:效率(时间或空间)下降
C 语言概述 C语言程序结构的典型形态【重点】 输入输出操作的实现:使用(调用)库函数实现 注释及其作用:提高程序的易读性,被编译程序过滤掉