高级语言程序设计 张长海 软件自动化研究室 Tel:85166267 Email:changhai@jlu.edu.cn
教材 《程序设计基础》 《程序设计基础习题集》 参 考 文 献 Niklaus Wirth , 《Algorithms+Data structures=Programs》 , Eng lewood cliffs, Prentice-Hall, Inc. 裘宗燕《从问题到程序,程序设计与C语言引论》 北京 机械工业出版社 石峰 《程序设计基础》 北京 清华大学出版社 谭浩强《C程序设计 》北京 清华大学出版社 Samuel P.Harbison III,Guy L.steele Jr. , 《C:A Reference Manual,Fifth Edition》 , Prentice-Hall,Inc. February ISO/IEC 9899:1999/Cor.1:2001(E)《Information technology - Programming languages-C》 GB/T 15272-94 中华人民共和国国家标准 《程序设计语言C》1994-12-7
第一章 绪论 求玉米产量—计算 作业 算法 1.3 1.6 PAD图 程序 熟悉开发环境 运行 练习 C 语言 1.1 1.2 Visual C++集成开发环境 本章小结 作业 1.3 1.6 熟悉开发环境 练习 1.1 1.2 1.4 1.5 1.7 1.8
§1.1 求玉米产量—计算 【例1.1】已知玉米每亩产量650公斤。如图1.1所示,现有一个近似四边形的地块位于南北方向路东侧,东西方向路北侧。其一个顶点距离南北方向路547米,距离东西方向路411米;另一个顶点距离南北方向路804米,距离东西方向路77米;第三个顶点距离南北方向路39米,距离东西方向路208米;第四个顶点距离南北方向路116米,距离东西方向路332米。若该地块种植玉米,求该地块玉米产量。
Y↑ 北 东 547 A D 116 411 39 C 332 208 804 B 77 → X 数学化 总产量=总面积*单位产量 计算步骤如下 计算该地块面积 折合成亩(每亩1000平方米) 求总产量 计算总面积:建坐标系
→ Y↑ X 第二步分析:计算总面积 北 547 东 A D 116 411 39 C 332 208 804 B 77 计算三角形ABD的面积,设为S1; 计算三角形BCD的面积,设为S2; S1+S2
→ Y↑ X 北 547 东 A D 116 411 39 C 332 208 804 B 77 第三步——选择计算三角形面积公式 S是三角形面积,a、 b、 c 三角形三边边长 s=(a+b+c)/2
→ Y↑ X 第五步——求三角形边长 北 547 东 A D 116 411 39 C 332 208 804 B 77 第四步—— 计算△ABD(△ BCD)面积 求边AB长度,记为ab; 求边BD长度,记为bd; 求边AD长度,记为ad; 计算s 计算S 第五步——求三角形边长
这就是程序 这个过程就是程序设计 计算过程 按公式求出AB边长度 ab 用同样公式计算边BD长度bd 用同样公式计算边AD长度ad 按公式计算出s 按公式计算出△ABD的面积S1 重复上述1、2、3、4、5步计算△BCD的面积S2 计算总面积S=S1+S2 把面积S折合成亩SS=S/1000 计算总产量M=SS×950 这就是程序 这个过程就是程序设计
程序设计过程 建立数学模型—把实际问题转化为数学问题 找出计算方法—为数学问题的求解找出方法 进行算法分析—为实现计算方法给出具体算法 选择程序设计语言,编出计算机程序—写程序 调试程序—保证程序的正确性 运行,测试程序的正确性—组装测试、确认测试 交付使用并维护
§1.2 算法 什么是算法 有效算法的特点 一个计算过程,包含具体明确的操作 描述了解决问题的方法和途径 是程序设计的基础和精髓 有穷性 §1.2 算法 什么是算法 一个计算过程,包含具体明确的操作 描述了解决问题的方法和途径 是程序设计的基础和精髓 有效算法的特点 有穷性 确定性 有效性
算法的组成 基本操作 基本控制结构 表达式以及给变量赋值 读(输入) 写(输出) 顺序控制结构 分支控制结构 循环控制结构 函数调用 函数返回
§1.3 PAD (Problem Analysis Diagram) 操作1 操作2 操作n … 操 作 图1.2 基本操作 图1.3 顺序控制结构
按公式 计算边AB边长度ab; 用同样公式计算边BD长度bd; 用同样公式计算边AD长度ad; 按公式 计算s 图1.4 例1.1算法的PAD描述 求总面积S=S1+S2 折合成亩 计算总产量 打印输出 按公式 计算边AB边长度ab; 用同样公式计算边BD长度bd; 按公式 计算△ABD的面积S1 按公式 计算s 用同样公式计算边AD长度ad; 计算另一个△BCD面积S2
§1.4 程序 什么是程序 程序语言 按公式求出AB边长度 ab 用同样公式计算边BD长度bd 用同样公式计算边AD长度ad 指令序列 §1.4 程序 按公式求出AB边长度 ab 用同样公式计算边BD长度bd 用同样公式计算边AD长度ad 按公式计算出s 按公式计算出△ABD的面积S1 重复上述1、2、3、4、5步 计算△BCD的面积S2 计算总面积S=S1+S2 把面积S折合成亩 SS=S/1000 计算总产量M=SS×950 什么是程序 指令序列 程序语言 与计算机交流 下达指令
具体程序 #include <stdio.h> #include <math.h> #define xa 547 #define ya 411 #define xb 804 #define yb 77 #define xc 39 #define yc 208 #define xd 116 #define yd 332 float ab, bd, ad, bc, cd ; float s, s1 ,s2,ss,m;
void main(void) { // 主函数 // 计算一个三角形面积 ab=sqrt( (xa-xb)* (xa-xb)+(ya-yb)* (ya-yb) );//边ab长 bd=sqrt( (xb-xd)* (xb-xd)+(yb-yd)* (yb-yd) );//边bd长 ad=sqrt( (xa-xd)* (xa-xd)+(ya-yd)* (ya-yd) );//边ad长 s=(ab+bd+ad)/2; //s s1=sqrt( s*(s-ab)*(s-bd)*(s-ad) ); //面积 // 计算另一个三角形面积 bc=sqrt( (xb-xc)* (xb-xc)+(yb-yc)* (yb-yc) );//边BC长 cd=sqrt( (xc-xd)* (xc-xd)+(yc-yd)* (yc-yd) );//边CD长 s=(bc+bd+cd)/2; //边BD长bd前边已经计算 s2=sqrt( s*(s-bc)*(s-bd)*(s-cd) ); ss=s1+s2; // 总面积S=S1+S2 ss=ss/1000; // 折合成亩 m=ss*950; // 计算总产量 printf(“m=%10.3f\n”,m); // 打印输出 }
具体程序 #include <stdio.h> 头文件 #include <math.h> #define xa 547 #define ya 411 #define xb 804 #define yb 77 #define xc 39 #define yc 208 #define xd 116 #define yd 332 float ab, bd, ad, bc, cd ; float s, s1 ,s2,ss,m; 常量定义 变量声明
一般C程序 文件hello.c #include <stdio.h> void hello(void){ printf(“Hello!\n”); } 文件startup.c extern void hello(void); int main(void) { hello(); return 0 }
概括:C程序结构 一个C程序由一个或若干个编译单元组成,每个编译单元是一个源程序文件; 一个编译单元由若干顶层声明组成,每个顶层声明是一个声明或函数定义,其中主要为函数定义; 声明包括类型定义、变量声明、外部声明、宏、… 等; 任何C程序必须包含且仅包含一个主函数main。
§1.5 运行 机器语言 1010 1001 0001 0110 0000 0001 0011 1100 0001 1000 0000 0001 … … … … … … … 0000 0000 0000 0000 高级语言 if (X<Y) Y=X+15; else Y=X-15;
程序执行 用汇编语言或高级语言编出程序 编辑、录入源程序 由翻译器(编译程序) 将源程序翻译成机器语言程序 由连接程序将机器语言程序连接 将可执行程序送入计算机 并启动计算机执行 得到最后结果 用汇编语言或高级语言编出程序 编辑、录入源程序 由翻译器(编译程序) 将源程序翻译成机器语言程序 由连接程序将机器语言程序连接 生成计算机可执行的程序
将可执行程序送入计算机 并启动计算机执行 得到最后结果 用汇编语言或高级语言编出程序 编辑、录入源程序 由翻译器(编译程序) 将源程序翻译成机器语言程序 由连接程序将机器语言程序连接 生成计算机可执行的程序 出错 数据出错 程序出错
一般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
§1.6 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 15272-94 程序设计语言 C”。
C语言的优点 语言简洁、紧凑,使用方便、灵活; C本身是模块式,便于集体分工合作开发大型程序 运算符丰富 数据结构丰富 具有结构化控制结构 与计算机硬件联系紧密,可以直接访问计算机内存,具有位操作 生成目标代码质量高。
C语言的缺点 语法不严格 类型机制不严密,比如字符类型与整数类型没有区别、不检查下标超界 程序设计自由度太大,不利于保证程序的正确性 若程序与计算机硬件联系太密切,则可移植性不好 有些语言成分太复杂,比如运算符 语言本身不能保证程序设计的结构化。
§1.7 Visual C++集成开发环境 Hello 程序 求玉米产量的具体程序 启动VC++ 建立环境 录入、编辑源程序 编译 连接 运行 求玉米产量的具体程序
本章小结 求玉米产量 算法 PAD图 程序 程序设计语言种类 程序的执行 程序结构 C 语言 VC开发环境