Transcript Document

高级语言程序设计
张长海
软件自动化研究室
Tel:85166267
Email:[email protected]
教材
《程序设计基础》
《程序设计基础习题集》
参 考 文 献

Niklaus Wirth , 《Algorithms+Data
structures=Programs》 , Eng lewood cliffs, PrenticeHall, 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
第一章 绪论
求玉米产量—计算
 算法
 PAD图
 程序
 运行
 C 语言
 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
116 D
411
39 C 332
208
804
数学化
计算步骤如下
总产量=总面积*单位产量
– 计算该地块面积
– 折合成亩(每亩1000平方米)
计算总面积:建坐标系
– 求总产量


东
A
B
77
→
X
↑
北
Y
547
116 D
411
39 C 332
208

东
A
804
第二步分析:计算总面积
– 计算三角形ABD的面积,设为S1;
– 计算三角形BCD的面积,设为S2;
– S1+S2
B
77
→
X
↑
北
Y
547
116 D
411
39 C 332
208

804
第三步——选择计算三角形面积公式
S 
东
A
s (s  a)(s  b)(s  c)
S是三角形面积,a、 b、 c 三角形三边边长
s=(a+b+c)/2
B
77
→
X
↑
北
Y
547
116 D
411
39 C 332
208


东
A
B
77
804
第四步—— 计算△ABD(△ BCD)面积
– 求边AB长度,记为ab;
– 求边BD长度,记为bd;
2
– 求边AD长度,记为ad;
1
2
– 计算s
– 计算S
→
X
第五步——求三角形边长
L=
x
x

 y 1  y 2 
2
计算过程
1.
2.
3.
4.
5.
6.
7.
8.
9.
按公式求出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.
3.
4.
5.
6.
7.
建立数学模型—把实际问题转化为数学问题
找出计算方法—为数学问题的求解找出方法
进行算法分析—为实现计算方法给出具体算法
选择程序设计语言,编出计算机程序—写程序
调试程序—保证程序的正确性
运行,测试程序的正确性—组装测试、确认测试
交付使用并维护
§1.2 算法

什么是算法
– 一个计算过程,包含具体明确的操作
– 描述了解决问题的方法和途径
– 是程序设计的基础和精髓

有效算法的特点
– 有穷性
– 确定性
– 有效性
算法的组成

基本操作
– 表达式以及给变量赋值
– 读(输入)
– 写(输出)

基本控制结构
– 顺序控制结构
– 分支控制结构
– 循环控制结构
– 函数调用
– 函数返回
§1.3 PAD (Problem Analysis
Diagram)
操作1
操作2
操 作
…
操作n
图1.2 基本操作
图1.3 顺序控制结构
按公式 计算边AB边长度ab;
用同样公式计算边BD长度bd;
用同样公式计算边AD长度ad;
按公式 计算s
按公式 计算△ABD的面积S1
计算另一个△BCD面积S2
求总面积S=S1+S2
折合成亩
计算总产量
打印输出
图1.4
例1.1算法的PAD描述
§1.4 程序
1.


什么是程序
2.
– 指令序列
3.
程序语言
4.
– 与计算机交流 5.
6.
– 下达指令
7.
8.
9.
按公式求出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
#define
#define
#define
#define
#define
#define
#define
xa 547
ya 411
xb 804
yb 77
xc 39
yc 208
xd 116
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
#define
#define
#define
#define
#define
#define
#define
头文件
xa 547
ya 411
xb 804
yb 77
xc 39
yc 208
xd 116
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 运行
 X+15
Y 
 X-15
 机器语言
若 X<Y
若 X  Y
1010 1001 0001 0110 0000 0001
0011 1100 0001 1000 0000 0001
… … … … … … …
0000 0000 0000 0000
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”);
}
hello.c

文件startup.c
extern void hello(void)
int main(void) {
hello();
return 0
}
hello.obj
startup.exe
startup.c 
startup.obj
§1.6 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”。
C语言的优点
1.
2.
3.
4.
5.
6.
7.
语言简洁、紧凑,使用方便、灵活;
C本身是模块式,便于集体分工合作开发大
型程序
运算符丰富
数据结构丰富
具有结构化控制结构
与计算机硬件联系紧密,可以直接访问计算
机内存,具有位操作
生成目标代码质量高。
C语言的缺点
1.
2.
3.
4.
5.
6.
语法不严格
类型机制不严密,比如字符类型与整数类型
没有区别、不检查下标超界
程序设计自由度太大,不利于保证程序的正
确性
若程序与计算机硬件联系太密切,则可移植
性不好
有些语言成分太复杂,比如运算符
语言本身不能保证程序设计的结构化。
§1.7 Visual C++集成开发环境

Hello 程序
– 启动VC++
– 建立环境
– 录入、编辑源程序
– 编译
– 连接
– 运行

求玉米产量的具体程序
本章小结

求玉米产量
– 算法
– PAD图
– 程序
程序设计语言种类
 程序的执行
 程序结构
 C 语言
 VC开发环境
