• 1. 第二章 程序设计语言
  • 2. 2.1程序设计环境与基本特征1 计算机语言发展历史 2 C/C++编译环境 3 高级程序设计语言的基本特征
  • 3. 1.计算机语言发展历史机器语言:机器可识别的二进制、八进 制、十六进制机器约定指令 码; 汇编语言:助记符、英文单词代替约定 指令; 高级语言:面向计算过程的解题方法与 思路(数据的表示与计算)
  • 4. 2. C/C++编译环境编译器的工作原理:通过编辑环境输入程序。编译时逐行扫描源程序进行词法分析(识别符号分类等待处理),语法分析,语义分析,生成中间代码,代码优化,生成可执行代码。 编译环境:Turbo C,Visual C++6,Microsoft Visual Studio 6.0/2003,Microsoft Visual Studio .net等等。 高级语言 机器语言编译/ 解释
  • 5. 3.高级程序设计语言的基本特征面向过程:用线性、针对过程的方法解决问题,以问题驱动、程序为模块;相应的程序设计方法称之为结构化的程序设计方法。 面向对象:用非线性、以事件驱动(计算机每个操 作动作如保存文件、打印文件等为事件)驱动、数据的角度分析解决问题,从数据的性质及其属性、数据的工作方式,以及怎样用函数描述数据处理。相应的程序设计方法称之为面向对象的程序设计方法。
  • 6. 2.2结构化程序设计方法结构化程序设计方法出现在70年代中期,其主要技术是自顶向下、逐步求精,采用单入口、单出口的控制结构 自顶向下是一种分解问题的技术,逐步求精指结构化程序的连续分解,最终成为三种基本控制结构的组合
  • 7. 三种基本控制结构顺序结构 条件分支 循环结构If —else casefor while do先后次序
  • 8. 程序基本结构图示
  • 9. 先看一个简单的C程序。 // Sample.c #include //预编译命令,将标准输入输出 函数作为头文件包括到用户源文件中 #include //预编译命令,将系统提供的数 学函数作为头文件包括到用户源文件中 void main( ) //主函数(无返回值) { //函数体.开始 float a,b; //声明部分.定义变量类型 b=30.0; //执行部分.赋值语句 a=sin(b*3.14159/180); //执行部分.赋值语句 printf("%f\n",a); //执行部分.输出语句 } //函数体.结束
  • 10. 主函数 main( ) { 声明部分 执行部分 }
  • 11. 有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。 A说:不是我。 B说:是C。 C说:是D。 D说:他胡说。 已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。例1???
  • 12. 如何找到做好事人?一定是“先假设该人是做好事者,然后到每句话中去测试看有几句是真话”。“有三句是真话就确定是该人,否则换下一人再试”。 下面,我们把四个人说的四句话写成关系表达式。在声明变量时,让thisman表示要找的人,定义它是字符变量char thisman。 A说:不是我。 写成关系表达式为(thisman!=‘A’) B说:是C。 写成关系表达式为(thisman==‘C’) C说:是D。 写成关系表达式为(thisman==‘D’) D说:他胡说。 年写成关系表达式为(thisman!=‘D’)分析与设计思路
  • 13. 先假定是A同学即thisman=‘A’; 代入到四句话中。 A说:thisman!='A'; 'A'!='A’ 假,值为0。 B说:thisman=='C'; 'A'=='C’ 假,值为0。C说:thisman=='D'; 'A'=='D‘ 假,值为0。D说:thisman!='D'; 'A'!='D‘ 真,值为1。 显然,不是'A'做的好事(四个关系表达式值的和为1) 不是我四个关系表达式值的和为1
  • 14. 让thisman=‘B’; 代入到四句话中。 A说:thisman!=''B'!='A‘ 真,值为1 B说:thisman=='C';'B'=='C‘ 假,值为0 C说:thisman=='D';'B'=='D‘ 假,值为0 D说:thisman!='D';'B'!='D‘ 真,值为1四个关系表达式值的和为2 也不是我再试B同学
  • 15. 嘿!是我四个关系表达式值的和为3 再试C同学让thisman=‘C’; 代入到四句话中 A说:thisman!='A'; 'C'!='A‘ 真,值为1 B说:thisman=='C'; 'C'=='C‘ 真,值为1 C说:thisman=='D'; 'C'=='D‘ 假,值为0 D说:thisman!='D'; 'C'!='D‘ 真,值为1
  • 16. 算法设计
  • 17. #include void main() // 主函数 { int k,sum,g; // 声明变量为整数类型 for(k=1;k<=4;k=k+1) // 循环从k为1到4,// k取1,2,3,4分别代表A,B,C,D { // 循环,开始 sum=0; // 初始化,置0 if (k!=1) sum=sum+1; // A说的话,如为真,则令sum加1; if (k==3) sum=sum+1; // B说的话,如为真,则令sum加1; if (k==4) sum=sum+1; // C说的话,如为真,则令sum加1; if (k!=4) sum=sum+1; // D说的话,如为真,则令sum加1; if (sum==3) // 若有三句话为真话,则做下列两件事 { printf(“This man is %c\n”,64+k); // 输出 g=1; // 有解标志置1 } } if (g!=1) printf(“Can’t found!”);// 如g不为1,则输出无解信息 }编程实现
  • 18. 结构化程序设计方法的特点结构化程序设计方法是从程序要实现的功能的角度出发的,将程序要完成的功能逐级划分成许多小的功能模块,象搭积木一样搭起来。这些小的功能模块最终都可以转化成三种基本控制结构的组合。 所谓的功能可以理解为对数据的操作。在程序实现中,特定的功能或功能模块一般用函数来实现,它们要对特定的数据进行操作。
  • 19. 例2从键盘输入一个学生的信息(包括姓名、年龄、性别、学号等)和一个老师的信息(包括姓名、年龄、性别、是否授课等),然后将信息输出到屏幕。
  • 20. 分析 根据需求(题目要求),我们可以把问题划分为两个功能模块,一个是输入模块,一个是输出模块,做完了输入模块,再做输出模块。再具体考虑每个模块如何实现(逐步求精)。
  • 21. void main() // 主函数开始 { // 声明用于存储学生信息的变量 char strStudentName[20]; // 学生姓名 int nStudentAge; // 学生年龄 char cStudentSex; // 学生性别 int nStudentNumber; // 学生学号 // 声明用于存储老师信息的变量 char strTeacherName[20]; // 老师姓名 int nTeacherAge; // 老师年龄 char cTeacherSex; // 老师性别 int nIsTeaching; // 是否授课 // 输入模块 GetStudentInfo(…); // 输入学生信息 GetTeacherInfo(…); // 输入老师信息 // 输出模块 PrintStudentInfo(…); // 输出学生信息 PrintTeacherInfo(…); // 输出老师信息 } 描述学生的数据描述老师的数据函数函数
  • 22. 数据的封装// 声明学生结构Student struct Student { char strStudentName[20]; // 学生姓名 int nStudentAge; // 学生年龄 char cStudentSex; // 学生性别 int nStudentNumber; // 学生学号 }; // 声明老师结构Teacher struct Teacher { char strTeacherName[20]; // 老师姓名 int nTeacherAge; // 老师年龄 char cTeacherSex; // 老师性别 int nIsTeaching; // 是否教书 };
  • 23. 2.3 面向对象程序设计方法面向对象程序设计出现在80年代中后期。 面向对象程序设计是建立在结构化程序设计基础上的,但它不再是从功能入手,而是从对象(人、地方、事情等)入手。 面向对象程序设计以类作为构造程序的基本单位,它具有封装、数据抽象、继承、多态等特点。
  • 24. 什么是对象?简单地说,对象就是现实世界中的各种实体,包括人、地点和事物等。例如,汽车、桌子、椅子、教室、学生、老师、电话、汽车等等。一般都要从属性和行为两个方面来对它们加以描述。
  • 25. 什么是类?类描述了一组具有相同属性(数据元素)和相同行为(函数)的对象。 类的数据成员是对对象属性的抽象,类的函数成员是对对象行为的抽象,而类本身就是对对象的抽象。
  • 26. 例:C++中类的声明——Student类class Student // Student类的声明 { public: // 公有成员 Student(); // 构造函数 ~Student(); // 析构函数 char* GetName(); // 查询姓名 int GetAge(); // 查询年龄 char GetSex(); // 查询性别 int GetNumber(); // 查询学号 bool SetName(char* n); // 设置姓名 bool SetAge(int age); // 设置年龄 bool SetSex(char* s); // 设置性别 bool SetNumber(int num); // 设置学号 protected: // 保护成员 char m_strName[20]; // 姓名,字符串数组 int m_nAge; // 年龄,整型 char m_cSex; // 性别,字符型 int m_nNumber; // 学号,整型 };函数成员函数成员数据成员
  • 27. 例:C++中类的声明——Teacher类class Teacher // Student类的声明 { public: // 公有成员 Teacher(); // 构造函数 ~Teacher(); // 析构函数 char* GetName(); // 查询姓名 int GetAge(); // 查询年龄 char GetSex(); // 查询性别 int GetIsTeaching (); //查询是否授课 bool SetName(char* n); // 设置姓名 bool SetAge(int age); // 设置年龄 bool SetSex(char* s); // 设置性别 bool IsTeaching (); // 设置是否授课 protected: // 保护成员 char strTeacherName[20]; // 老师姓名 int nTeacherAge; // 老师年龄 char cTeacherSex; // 老师性别 bool m_bIsTeaching // 是否授课 };函数成员函数成员数据成员
  • 28. 例3计算圆形游泳池的池壁边上的环形过道和周围栅栏的造价。通过计算周长及面积求出造价。如图所示。其中,过道宽度为0.9m,泳池半径R由键盘输入。栅栏1.25美元/m,过道造价0.3美元/㎡。如图所示。 R0.9
  • 29. 设Pool 为游泳池,半径为R,PoolRim 为游泳池周围的过道,半径为R+0.9。 栅栏造价:FenceCost=过道周长*1.25 过道面积造价: ConcreteCost=(过道面积–游泳池面积)*0.3 题目分析
  • 30. Class Circle { private: float radius; //定义圆的半径 public: Circle(float r); //构造函数 float Circumference() const; //计算圆的周长 float Area(void) const; //计算圆的面积 }; 声明类
  • 31. //构造函数用初始化数据成员radius Circle::Circle(float r):radius(r) { } float Circle::Circunference() const //计算周长 { return 2*PI*radius; } float Circle::Area(void) const //计算面积 { return PI*radius*radius; }
  • 32. void main() { float r; float FenceCost,ConcreteCost; cout<<" Enter the radius of the pool:" cin>>r;//输入半径radius Circle Pool(r); Circle PoolRim(r+0.9);//定义Circle对象 FenceCost= PoolRim.Circumference()*1.25; //计算栅栏造价并输出 cout<<”Fencing Cost is $”<
  • 33. 小结结构化程序设计方法是一种模块化程序设计方法,它在解决问题时是以功能为中心的,一定的功能模块虽然也作用于特定的数据,但它们并没有被封装在一起。 面向对象程序设计方法则是以对象为中心来解决问题的。属于同种对象的属性(数据)和服务(功能)被抽象出来封装到一起。
  • 34. 习题p60 : 1,2,3,4,5,6,7,8,9