Download presentation
Presentation is loading. Please wait.
1
C 程序设计 吉林大学软件教研室
2
课程组成 课堂讲授 十二章 64学时 上机实验 八个实验 32学时 课程设计 C的词法分析器 助课老师答疑
3
课程特点 不同于“解释程序设计语言” 强调“程序设计”,“编程能力”的培养
4
讲授内容 基础知识 程序设计 数据组织
5
基础知识 第一章 基本知识 第二章 数据信息 第三章 简单程序 介绍程序设计基本概念、BNF、PAD 图
介绍C 基本符号、单词、数据及其类型 第三章 简单程序 介绍常量、变量、表达式、简单程序、赋值、I/0 。
6
程序设计 第四章 函数 第五章流程控制 第八章再论函数 第九章程序开发和结构化程序设计 简单介绍模块化程序设计思想,引进子程序和函数概念
讲述结构化程序设计的顺序、分支、循环三种程序逻辑 第八章再论函数 进一步介绍函数,讲述参数、递归程序设计 第九章程序开发和结构化程序设计 程序风格、自顶向下逐步求精的程序设计技术、程序的文档,以及穷举法和试探法;
7
数据组织 第六章 数组 第七章 指针 第十章 文件及其操作 第十一章 结构体和共用体 第十二章 动态数据结构
8
第一章 基本知识 程序设计语言 C语言简况 程序设计语言形式化描述 C程序结构 算法及其描述工具PAD 本章小结 作业
9
程序设计语言(1) 机器语言 … … … … … … …
10
程序设计语言(2) 汇编语言 MOV AX ,X CMP AX ,Y JL S1 SUB AX ,15 JMP S2
S1: ADD AX ,15 S2: MOV Y ,AX … … … … … … X DW ? Y DW ?
11
程序设计语言(3) 高级语言 注意 if (X<Y) Y=X+15; else Y=X-15;
高级语言并不单单指C语言,如VC,BASIC 等语言也属于高级语言范畴。
12
程序设计语言(4)— 程序的执行 用汇编语言或高级语言编出程序 将源程序录入计算机 由翻译器(汇编程序或编译程序)
将源程序翻译成机器语言程序 由连接程序将机器语言程序连接 生成计算机可执行的程序 将可执行程序送入计算机 并启动计算机执行 得到最后结果
13
C语言的历史背景 70年代初,C 语言在美国贝尔实验室诞生。它的前身可以追朔到ALGOL60 、CPL 、BCPL 、B 。
1989年ISO公布ISO/IEC 9899:1990 ,简称“C89”。 1995年对C89作修改和补充,称为“C95”。 1999对C进行更大的修订后,公布 ISO/IEC 9899:1999,简称“C99”。 我国于1994年12月4日公布了“中华人民共和国国家标准 GB/T 程序设计语言 C”。
14
C语言的优点 语言简洁、紧凑,使用方便、灵活; C本身是模块式,便于集体分工合作开发大型程序 运算符丰富 数据结构丰富 具有结构化控制结构
与计算机硬件联系紧密,可以直接访问计算机内存,具有位操作 生成目标代码质量高。
15
C语言的缺点 语法不严格 类型机制不严密,比如字符类型与整数类型没有区别、不检查下标超界 程序设计自由度太大,不利于保证程序的正确性
若程序与计算机硬件联系太密切,则可移植性不好 有些语言成分太复杂,比如运算符 语言本身不能保证程序设计的结构化。
16
程序设计语言形式化描述 组成 Y=X+15; else Y=X-15; 语法——规则 语义——意义 if (X<Y)
巴克斯-脑尔范式(BNF) 语义——意义 if (X<Y) Y=X+15; else Y=X-15;
17
BNF 自然语言 计算机语言 BNF 字单词句子语言 字符词法单位(token) 程序语言
一种形式化描述语法的工具,一种表示方法
18
the big elephant ate the peanut
<英语句子> <主语> <谓语> <宾语> <冠词><形容词><名词> <动词> <冠词><名词> the big elephant ate the peanut
19
G: <英语句子> ∷= <主语><谓语><宾语>
<主 语> ∷= <冠词><形容词><名词> <冠 词> ∷= the <形容词> ∷= big <谓 语> ∷= <动词> <动 词> ∷= ate <宾 语> ∷= <冠词><名词> <名 词> ∷= peanut <名 词> ∷= elephant
20
the big elephant ate the peanut
<英语句子> <主语> <谓语> <宾语> <冠词><形容词><名词> <动词> <冠词><名词> the big elephant ate the peanut
21
the big elephant ate the elephant
<英语句子> <主语> <谓语> <宾语> <冠词><形容词><名词> <动词> <冠词><名词> the big elephant ate the elephant
22
the big peanut ate the peanut
<英语句子> <主语> <谓语> <宾语> <冠词><形容词><名词> <动词> <冠词><名词> the big peanut ate the peanut
23
the big peanut ate the elephant
<英语句子> <主语> <谓语> <宾语> <冠词><形容词><名词> <动词> <冠词><名词> the big peanut ate the elephant
24
文法G对应的句子有: The big elephant ate the peanut The big peanut ate the elephant The big peanut ate the peanut The big elephant ate the elephant
25
L(G)={ The big elephant ate the peanut
The big peanut ate the elephant The big peanut ate the peanut The big elephant ate the elephant }
26
文法的组成 文法开始符 规则 / 产生式 非终极符 终极符 G: <英语句子> ∷= <主语><谓语><宾语>
G: <英语句子> ∷= <主语><谓语><宾语> <主 语> ∷= <冠词><形容词><名词> <冠 词> ∷= the <形容词> ∷= big <谓 语> ∷= <动词> <动 词> ∷= ate <宾 语> ∷= <冠词><名词> <名 词> ∷= peanut <名 词> ∷= elephant 文法的组成 文法开始符 规则 / 产生式 非终极符 终极符
27
例1.1—无符号整数集合 G: N ∷= D N ∷= ND D ∷= 0 D ∷= 5 D ∷= 1 D ∷= 6
符号“│” 表示 “或者”文法可简写成: G: N ∷= D│ND D ∷= 0│1│2│3│4│5│6│7│8│9
28
例1.2 集合 {0n1n | n>0} 对应的文法G1 G1:S ∷= 01│0S1 将符号∷= 用→代替
29
例1.3—标识符 标识符 由字母或开头,后跟任意多个字母或数字组成的字符串 <标识符> → <字母> |<标识符><字母>
|<标识符><数字>
30
例1.4—标识符表 标识符表 一个标识符是标识符表 标识符表后边跟一个逗号“ ,” 和一个标识符还是标识符表 <标识符表> → <标识符>
│<标识符表> , <标识符>
31
C程序结构 < 程 序 > → <编译单元表> <编译单元表> → <编译单元> ▌<编译单元><编译单元表>
< 程 序 > → <编译单元表> <编译单元表> → <编译单元> ▌<编译单元><编译单元表> <编译单元> → <顶层声明表> <顶层声明表> → <顶层声明> ▌<顶层声明表> <顶层声明> <顶层声明> → <声明> ▌<函数定义> <函数定义> → <函数定义说明符><复合语句>
32
C程序实例 文件hello.c #include <stdio.h> void hello(void){
printf(“Hello!\n”); } 程序执行过程 文件startup.c extern void hello(void) int main(void) { hello(); return 0 } hello.c hello.obj startup.exe startup.c startup.obj
33
软件开发一般过程 实现 可行性研究 需求分析 设计 测试 使用 维护 写出程序 调试程序 概要设计 组装测试 详细设计 确认测试
建立数学模型 找出计算方法 进行算法分析
34
算法 算法是一个计算过程,具体指明应该进行的操作,描述解决问题的方法和途径,它是程序设计的基础和精髓。 一个有效的算法具有如下特点: 有穷性
确定性 有效性
35
PAD ( Problem Analysis Diagram)
基本操作 控制结构 顺序结构 分支结构 循环控制结构 函数 操作
36
顺序控制结构 操作1 操作2 操作3 操作1 操作2 操作3
37
分支控制结构 单分支 如果XX条件为真,执行操作 如果XX条件为真,执行操作1;否则执行操作2 条件 操作 条件 操作1 操作2
38
多分支 如果表达式e 满足条件1,执行操作1 满足条件2, 执行操作2 ………… 满足条件n,执行操作n 条件2 条件n 操作1 操作n
... 条件1 条件
39
循环控制结构 先判断条件循环 重复条件 要重复执行的操作 操作 重复条件 F 结束
40
后判断条件 重复条件 要重复执行的操作 操作 重复条件 T 结束
41
函数 函数定义 函数体 函数名 (形参表) RETURN def
42
函数调用 名 ( 实参表 )
43
PAD的例子 将A、B两瓶分别盛放的米醋和酱油互换 将A中的米醋放到C中 将B中的酱油放到A中 将C中的米醋放到B中 C←A A←B B←C
44
X<Y Y=X+15 Y=X-15
45
KA[IMA]=KA[IMA]+1;IMA=IMA+1
开始 PAD实例 1 2 3 4 5 i = 1 T i <= 2 i=i+1 KA[i] = 0;NO[i] = 0 read(IMA);MAE=3-IMA NO[IMA]=NO[IMA+1] F IMA≠MAE F IMA<MAE KA[IMA]=KA[IMA]+1;IMA=IMA+1 IMA=IMA+1 read(IMA) IMA='9' T printf(KA) 停
46
i=1; 第1部分 KA[i] = 0; 第2部分 前循环 非i<=2 循环体 NO[i] = 0; i=i+1; read(IMA); 第3部分 MAE=3-IMA; NO[IMA]=NO[IMA+1]; KA[IMA]=KA[IMA]+1 IMA<MAE 前循环 IMA=IMA+1 后循环 第4部分 非IMA==’9’ 循环体 IMA≠MAE 单分支 IMA=IMA+1 read(IMA) printf(KA) 第5部分
47
i <= 2 i=i+1 KA[i] = 0;NO[i] = 0 T
48
KA[IMA]=KA[IMA]+1;IMA=IMA+1
NO[IMA]=NO[IMA+1] F IMA≠MAE IMA<MAE F KA[IMA]=KA[IMA]+1;IMA=IMA+1 IMA=IMA+1 read(IMA) IMA='9' T
49
本章小结 程序设计语言 C语言简况 程序设计语言形式化描述 C程序结构 算法及其描述工具PAD图
50
作业 1.1 1.2 1.4 1.5 1.12 1.26(1)(2)选作(4)
Similar presentations