第 1章 预备知识北京科技大学 计算机系
C 语言程序设计
2009-7-26
2说明:
本课件的配套教材为:
–,C语言程序设计教程》
–,C语言程序设计教程习题解答与实验指导》
北京人民邮电出版社 李玲等编著
如果选用本套教材,并需要完整的各章课件,请与作者联系。
– 电话,010- 62755063
– E-mail,liling@ies.ustb.edu.cn
– 通信地址,北京科技大学信息工程学院李玲 100817
2009-7-26
3本章主要内容
程序设计与算法概述
C语言概述
C程序的符号系统
2009-7-26
41.1 程序设计与算法概述
主要内容:
– 计算机语言与程序设计
– 算法
– 结构化程序设计
2009-7-26
51.1.1 计算机语言与程序设计
1,计算机语言
– 是人与计算机进行交流的工具
– 计算机语言分为:
机器语言 机器指令(由 0 和 1组成),可直接执行 难学、难记依赖机器的类型汇编语言用助记符代替机器指令,用变量代替各类地址。
克服记忆的难点其他与机器语言类似高级语言类似数学语言、接近自然语言、具有通用性和可移植性,不依赖具体的计算机类型。
2009-7-26
6例如:
0 0 1 0 0 0 1 1
1 1 1 0 1 1 0 1
0 1 1 0 0 0 0 1
0 1 1 1 0 1 1 0
机器语言程序
MOV AX,300H
ADD BX,AX
MOV [2100H],BX
HLT
汇编语言源程序
main( )
{ int a,b,c;
a=300; b=18;
c=a+b;
printf(,a+b= %d \n”,c);
}
高级语言源程序 (C)
源程序需要翻译
2009-7-26
7汇编源程序的翻译:
将汇编源程序翻译为目标程序的过程称为 汇编
汇编过程:
图 1.1 汇编过程汇编程序 连接程序汇编连接汇编语言源程序机器语言目标程序可执行程序
(.ASM) (.OBJ) (.EXE)
运行运行结果
2009-7-26
8高级语言的翻译:
编译方法图 1,2 编译过程
(.C或,PAS等 )
编译程序 连接程序编译连接高级语言源程序机器语言目标程序可执行程序
(.OBJ) (.EXE)
运行运行结果解释程序高级语言源程序解释执行运行结果图 1.3 解释过程
(.BAS)
解释方法
2009-7-26
92.程序设计
用计算机解决一个实际应用问题时的整个处理过程称为程序设计提出问题确定数据结构确定算法编写程序调试和运行程序输入程序翻译
(编译或解释 )
得到运行结果
2009-7-26
101.1.2 算法
什么是算法
– 为解决某一应用问题而采用的 解题步骤
算法的描述方式
– 用自然语言描述算法
– 用流程图描述算法
– 用 N-S结构图描述算法例如:输出两个数中的最大数
2009-7-26
11用自然语言描述算法第一步:输入 x和 y的值第二步:比较 x和 y的值,如果 x大于 y,则输出 x的值,否则输出 y的值。
易于理解,但冗长,不够精确,难于描述复杂算法。
例如当描述,输出 10个数中最大数,的算法时,
会冗长、难于理解
2009-7-26
12
图 1.5 用流程图描述算法用流程图描述算法
NY
z= yz= x
x >y?
开始输入 x和 y
结束输出 z
起止框输入 /输出框判断框处理框流程线
2009-7-26
13用 N-S结构图描述算法输入 x,y的值
x>y
T F
z = x z = y
输出 z的值图 1.7 用 N-S结构图描述的算法已经证明,任何复杂的问题都可以三种基本算法结构来描述,顺序、选择、循环。 因此用计算机语句描述的 程序也包含三种基本结构。
2009-7-26
141.1.3 结构化程序设计
程序的三种基本结构
– 顺序结构程序,按照书写顺序依次执行语句
– 选择结构程序,按照条件判断选择执行语句
– 循环结构程序,通过条件控制循环执行语句三种基本结构的共同点:
都是只有一个入口和一个出口;
结构内的每一个框都有机会被执行;
结构内没有死循环。
2009-7-26
15结构化程序设计的基本原则:
如果一个程序仅包含这三种基本结构(由这些基本结构顺序组成),则称为结构化程序。
结构化程序设计的基本原则:
– 采用 自顶向下、逐步细化 的方法进行设计;
– 采用 模块化原则和方法 进行设计。即将大型任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写;
– 每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。
2009-7-26
161.2 C语言概述
主要内容:
– C语言的发展
– C语言的特点
– C程序的基本结构
– C程序的执行过程
2009-7-26
171.2.1 C语言的发展
发展过程
B语言,Bell实验室,1970年在 PDP机器上用其编写 UNIX系统
CPL语言,剑桥大学,1963年
BCPL语言,剑桥大学,1967年
C语言,Bell实验室,1972~ 1973年用其改写 UNIX系统经简化进一步简化保持精练,接近硬件的优点,克服数据类型过少的不足
2009-7-26
181.2.2 C语言的特点
语言简洁,表达能力强,易于理解
– 只有 32个关键字,9种控制语句
– 数据构造能力强
– 运算符丰富
– 程序书写格式自由
可直接访问物理地址,实现对硬件和低层系统软件的访问
语言生成的代码质量高
可移植性好增加学习难度
2009-7-26
191.2.3 C程序的基本结构
【例 1.1】计算并输出一个数 a的平方。
main( )
{
float a,b;
a=5.2;
b=a*a;
printf("b=%f\n",b);
}
main 为 函数名程序从这里开始运行函数体开始函数体结束函数体内定义 a,b
为 a 赋值计算并输出平方值 b
执行程序的输出结果为:
b=27.039997
2009-7-26
201.2.3 C程序的基本结构
【例 1.2】输入两个数,输出其中的大数。
int max(int x,int y) /* max函数 */
{ int z ;
if (x>y) z = x; else z = y;
return(z);
}
main( ) /* 主函数 */
{ int a,b,c;
scanf("%d,%d",&a,&b);
c = max(a,b); /* 调用 max函数,求 a和 b中大数 */
printf("max = %d\n",c);
}
2009-7-26
21C程序结构
C程序
– 由 函数 构成
– 必须有,且只能有一个 main( 主函数)
– 总是从 main函数开始执行
函数
– 由 函数首部 和 函数体 组成
– 函数首部指定 函数名、函数参数、类型
– 函数体从 { 开始,到 } 结束
– 函数内有 语句
2009-7-26
22C程序结构(续)
语句
– 包括 说明性语句,可执行语句
– 以 ; 表示语句结束
注释
– 可以出现在程序的任何位置
– 用 /* 和 */ 括起来,必须成对出现
书写格式
– C语言没有行的概念,书写格式自由。
– 习惯小写字母,缩进格式。
2009-7-26
231.2.4 C程序的执行过程
1.源程序文件的建立和编辑
– 编写源程序,形成,C文件
– 需用 编辑工具,tc.exe、记事本
2.编译
– 编译源程序,形成目标程序,Obj文件
– 需用 编译工具,tcc.exe
3.连接
– 连接 OBJ文件和调用的库函数,形成运行程序,exe 文件
– 需用 连接工具,tlink.exe
4.运行,exe 文件 运行 jc1_2
Turbo C提供集成化开发环境
2009-7-26
241.3 C程序的符号系统
主要内容:
– 基本字符
– 标识符
2009-7-26
251.3.1 基本字符
大写英文字母,A B C …… X Y Z
小写英文字母,a b c …… x y z
数字,0 1 2 …… 9
空白符,空格符、换行符、制表符
特殊字符,+ - * / < > ( ) [ ] { } _ = !
# %,,;,‘,| &? $ ^ \ ~
2009-7-26
261.3.2 标识符
由 字母,下划线 和 数字 组成的字符序列
用于程序中的变量、符号常量、数组、函数、数据类型等操作对象的 名字
1.系统定义标识符
– 具有固定名字和特定含义的标识符
– 分为 关键字 和 预定义标识符
2.用户定义标识符
– 用于对用户使用的变量、数组、函数等操作对象进行命名
2009-7-26
27关键字
数据类型:
int,char,float,double,short,long、
void,signed,unsigned,enum,struct、
union,const,typedef,volatile
存储类别:
auto,static,register,extern
语句命令字:
break,case,continue,default,do、
else,for,goto,if,return,switch、
while
运算符:
sizeof
2009-7-26
28预定义标识符
系统标准库函数
scanf,printf,putchar,getchar、
strcpy,strcmp,sqrt等
编译预备处理命令
include,define等
2009-7-26
29对标识符的规定
用户定义标识符
– 必须以 字母 或 下划线,_” 开头
– 不能含有除字母、数字和下划线,_”
外的其他字符
– 标识符中大小写字母含义不同
关键字 必须用小写字母。不允许使用关键字为变量、数组、函数等操作对象命名
预定义标识符 允许用户对它们重新定义,
当重新定义后将改变它们原来的含义
2009-7-26
30正确区分标识符
正确区分哪些是合法标识符,哪些是不合法标识符 。 其中合法标识符中哪些是关键字,哪些是预定义标识符,哪些是用户定义标识符 。
Abc define 2x double student
m+y a# b-4 _1 While
int let x%y name do
π w?tm Ctrl swicth include