Presentation is loading. Please wait.

Presentation is loading. Please wait.

C 程序设计 吉林大学软件教研室. 课程组成 课堂讲授 课堂讲授 – 十二章 64 学时 上机实验 上机实验 – 八个实验 32 学时 课程设计 课程设计 –C 的词法分析器 助课老师答疑 助课老师答疑.

Similar presentations


Presentation on theme: "C 程序设计 吉林大学软件教研室. 课程组成 课堂讲授 课堂讲授 – 十二章 64 学时 上机实验 上机实验 – 八个实验 32 学时 课程设计 课程设计 –C 的词法分析器 助课老师答疑 助课老师答疑."— Presentation transcript:

1 C 程序设计 吉林大学软件教研室

2 课程组成 课堂讲授 课堂讲授 – 十二章 64 学时 上机实验 上机实验 – 八个实验 32 学时 课程设计 课程设计 –C 的词法分析器 助课老师答疑 助课老师答疑

3 课程特点 不同于 “ 解释程序设计语言 ” 强调 “ 程序设计 ” , “ 编程能力 ” 的培养

4 讲授内容 基础知识 程序设计 数据组织

5 第一章 基本知识 介绍程序设计基本概念、 BNF 、 PAD 图 第二章 数据信息 介绍 C 基本符号、单词、数据及其类型 第三章 简单程序 介绍常量、变量、表达式、简单程序、赋值、 I/0 。 基础知识

6 程序设计 第四章 函数 – – 简单介绍模块化程序设计思想,引进子程序和函数概念 第五章流程控制 – – 讲述结构化程序设计的顺序、分支、循环三种程序逻辑 第八章再论函数 – – 进一步介绍函数,讲述参数、递归程序设计 第九章程序开发和结构化程序设计 – – 程序风格、自顶向下逐步求精的程序设计技术、程序的文 档,以及穷举法和试探法;

7 数据组织 第六章 数组 第七章 指针 第十章 文件及其操作 第十一章 结构体和共用体 第十二章 动态数据结构

8 第一章 基本知识 程序设计语言 C 语言简况 C 语言简况 程序设计语言形式化描述 C 程序结构 C 程序结构 算法及其描述工具 PAD 算法及其描述工具 PAD 本章小结 作业

9 程序设计语言( 1 ) 机器语言 1010 1001 0001 0110 0000 0001 0011 1100 0001 1000 0000 0001 … … … … … … … 0000 0000

10 程序设计语言( 2 ) 汇编语言 MOVAX,X CMPAX,Y JLS1 SUBAX,15 JMPS2 S1:ADDAX,15 S2:MOVY,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 。 1982 年 C 标准化工作开始 。 1989 年 ISO 公布 ISO/IEC 9899:1990 ,简称 “C89” 。 1995 年对 C89 作修改和补充,称为 “C95” 。 1999 对 C 进行更大的修订后,公布 ISO/IEC 9899:1999 , 简称 “C99” 。 我国于 1994 年 12 月 4 日公布了 “ 中华人民共和国国家标 准 GB/T 15272-94 程序设计语言 C” 。

14 C 语言的优点 1. 1. 语言简洁、紧凑,使用方便、灵活; 2. 2. C 本身是模块式,便于集体分工合作开发大 型程序 3. 3. 运算符丰富 4. 4. 数据结构丰富 5. 5. 具有结构化控制结构 6. 6. 与计算机硬件联系紧密,可以直接访问计算 机内存,具有位操作 7. 7. 生成目标代码质量高。

15 C 语言的缺点 1. 1. 语法不严格 2. 2. 类型机制不严密,比如字符类型与整数类型 没有区别、不检查下标超界 3. 3. 程序设计自由度太大,不利于保证程序的正 确性 4. 4. 若程序与计算机硬件联系太密切,则可移植 性不好 5. 5. 有些语言成分太复杂,比如运算符 6. 6. 语言本身不能保证程序设计的结构化。

16 程序设计语言形式化描述 组成 – – 语法 —— 规则   巴克斯 - 脑尔范式 (BNF) – – 语义 —— 意义 if (X<Y) Y=X+15; else Y=X-15;

17 BNF 自然语言 – – 字  单词  句子  语言 计算机语言 – – 字符  词法单位 (token)  程序  语言 BNF – – 一种形式化描述语法的工具,一种表示方法

18 the big elephant ate the peanut <冠词><形容词><名词> <动词> <冠词><名词> <主语> <谓语> <宾语> <英语句子>

19 G : <英语句子>∷ = <主语><谓语><宾语> <主 语>∷ = <冠词><形容词><名词> <冠 词>∷ =the <形容词>∷ =big <谓 语>∷ = <动词> <动 词>∷ = ate <宾 语>∷ = <冠词><名词> <名 词>∷ =peanut <名 词>∷ =elephant

20 the big elephant ate the peanut <冠词><形容词><名词> <动词> <冠词><名词> <主语> <谓语> <宾语> <英语句子>

21 the big elephant ate the elephant <冠词><形容词><名词> <动词> <冠词><名词> <主语> <谓语> <宾语> <英语句子>

22 the big peanut ate the peanut <冠词><形容词><名词> <动词> <冠词><名词> <主语> <谓语> <宾语> <英语句子>

23 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)={ 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 : <英语句子>∷ = <主语><谓语><宾语> <主 语>∷ = <冠词><形容词><名词> <冠 词>∷ =the <形容词>∷ =big <谓 语>∷ = <动词> <动 词>∷ = ate <宾 语>∷ = <冠词><名词> <名 词>∷ =peanut <名 词>∷ =elephant 文法的组成 文法开始符规则 / 产生式 非终极符终极符

27 例 1.1— 无符号整数集合 G : N ∷ = D N ∷ = ND D ∷ = 0 D ∷ = 5 D ∷ = 1 D ∷ = 6 D ∷ = 2 D ∷ = 7 D ∷ = 3 D ∷ = 8 D ∷ = 4 D ∷ = 9 符号 “│” 表示 “ 或者 ” 文法可简写成: G : N ∷ = D│ND D ∷ = 0│1│2│3│4│5│6│7│8│9

28 例 1.2 集合 {0 n 1 n | n>0} 对应的文法 G1 G1 : S ∷ = 01│0S1 将符号∷ = 用 → 代替 G1 : S → 01│0S1

29 例 1.3— 标识符 标识符 由字母或开头, 后跟任意多个字母或数 字组成的字符串 <标识符> → <字母> |<标识符><字母> |<标识符><数字>

30 例 1.4— 标识符表 标识符表 – – 一个标识符是标识符表 – – 标识符表后边跟一个逗号 “,” 和一个标识 符还是标识符表 <标识符表> → <标识符> │ <标识符表>, <标识符>

31 C 程序结构 < 程 序 > → <编译单元表> <编译单元表> → <编译单元> ▌ <编译单元><编译单元表> <编译单元> → <顶层声明表> <顶层声明表> → <顶层声明> ▌ <顶层声明表> <顶层声明> <顶层声明> → <声明> ▌ <函数定义> <函数定义> → <函数定义说明符><复合语句>

32 C 程序实例 文件 hello.c #include 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 操作 n-1 操作 2 表达式表达式... 条件 1 条件...

39 循环控制结构 先判断条件循环 先判断条件循环 操作 重复条件 F 结束 重复条件要重复执行的操作

40 后判断条件 操作 重复条件 T 结束 重复条件要重复执行的操作

41 函数 函数定义 函数体 函数名 ( 形参表 ) RETURN def

42 函数调用 名 ( 实参表 )

43 PAD 的例子 将 A 、 B 两瓶分别盛放的米醋和酱油互换 将 A 、 B 两瓶分别盛放的米醋和酱油互换 – 将 A 中的米醋放到 C 中 – 将 B 中的酱油放到 A 中 – 将 C 中的米醋放到 B 中 ABC C←A A←BA←B B←CB←C

44 X<Y Y=X+15 Y=X-15

45 i = 1 开始 i <= 2 i=i+1 KA[i] = 0 ; NO[i] = 0 read(IMA) ; MAE=3-IMA NO[IMA]=NO[IMA+1] IMA≠MAE F T read(IMA) IMA='9' printf(KA) 停 T KA[IMA]=KA[IMA]+1 ; IMA=IMA+1 IMA<MAE IMA=IMA+1 F PAD 实例 1 2 3 4 5

46 第 1 部分 第 2 部分 第 3 部分 第 4 部分 第 5 部分 i=1; read(IMA); printf(KA) 前循环非 i<=2 循环体 KA[i] = 0; MAE=3-IMA; NO[i] = 0; i=i+1; 后循环非 IMA==’9’ 循环体 NO[IMA]=NO[IMA+1]; 单分支 IMA≠MAE 前循环 IMA=IMA+1 IMA<MAE KA[IMA]=KA[IMA]+1 IMA=IMA+1 read(IMA)

47 i <= 2 i=i+1 KA[i] = 0 ; NO[i] = 0 T

48 NO[IMA]=NO[IMA+1] IMA≠MAE F read(IMA) IMA='9' T KA[IMA]=KA[IMA]+1 ; IMA=IMA+1 IMA<MAE IMA=IMA+1 F

49 本章小结 程序设计语言 C 语言简况 程序设计语言形式化描述 C 程序结构 算法及其描述工具 PAD 图

50 作业  1.1  1.2  1.4  1.5  1.12  1.26(1)(2) 选作 (4)


Download ppt "C 程序设计 吉林大学软件教研室. 课程组成 课堂讲授 课堂讲授 – 十二章 64 学时 上机实验 上机实验 – 八个实验 32 学时 课程设计 课程设计 –C 的词法分析器 助课老师答疑 助课老师答疑."

Similar presentations


Ads by Google