第一章 程序的基本结构
教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题
教学目标 了解程序的基本知识和上机环境,学习 1)了解主函数和一般函数的概念,了解结构化程序设计与面向对象程序设计的程序框架特征和程序设计技术的应用及发展趋势; 2)掌握源程序的书写格式,包括标识符和关键(保留)字的使用; 3)了解编译预处理、编译和链接过程和从编辑源程序到程序运行的操作方法; 4)掌握数据的输入输出(包括输入输出格式)方法。
基本内容 1.1 几个简单的程序 1.2 程序的基本结构和要素
程序设计语言 通用应用软件 当前流行的程序设计语言工具 C与C++ –文字处理: Word –表格处理: EXCEL –科学计算 MATLAB …... 当前流行的程序设计语言工具 Microsoft: Visual C++、Visual Basic Borland: Delphi、C++Builder Sun: Java C与C++
1.1 几个简单的程序 //例1-1:在屏幕上显示:This is my first program! #include <iostream> //包含基本输入输出库文件 using namespace std; // 使用名字空间std int main( ) //主函数名 { cout << "This is my first program! "; //屏幕显示语句 return 0; //表示程序顺利结束 } C++的程序由函数组成。该程序只由一个主函数main()构成 一对花括号“{ }”是主函数的定界符 程序语句全部采用小写字母。区分大小写,书写采用自由格式 语句用分号结束;一行可以写多个语句 注释行: 以两个“//”起头的任何文字
例1-2:加法计算器程序 // 例1-2:加法计算器程序 #include <iostream> //包含基本输入输出库文件 using namespace std; //使用名字空间std int main() //主函数名 { int x, y, sum; //定义三个变量 cout<<"Please input two numbers: "; //屏幕显示提示信息 cin>>x>>y; //输入两个变量的值 sum = x + y; //加法计算 cout << x << " + " << y << " = " << sum << endl; //输出运算结果 return 0; //表示程序顺利结束 }
例1-3:根据三角形的三个边长求三角形面积 // 例1-3:求三角形面积 #include <iostream> #include <cmath> //包含标准数学函数库 using namespace std; // 定义area()函数,其函数的返回值和形式参数a, b, c都是双精度类型 double area(double a, double b, double c) { double s, t; //定义本函数中用到的变量s和t为可描述实数的双精度类型变量 s = (a+b+c)/2; //计算中间变量s t = sqrt(s*(s-a)*(s-b)*(s-c)); //调用标准数学开平方函数 return t; //将运算结果t的值返回,通过函数名area带回函数调用处 } // 主函数 int main() { double x, y, z; //变量说明,定义三个可对实数进行操作的双精度类型变量 //调用area函数(参数使用几个确定的值)并将计算得到的结果直接输出 cout << "边长分别为3、4、5的三角形面积为:" << area(3, 4, 5) << endl; cout<<"请分别输入其他任意三角形三条边长: "; cin>>x>>y>>z; //调用area函数(参数为用户任意输入的值)并将计算得到的结果直接输出 cout << "三角形面积为:" << area(x, y, z) << endl; return 0; 按这种方法设计程序就称为模块化程序设计。
1.2 程序的基本结构和要素 1.2.1 程序的基本结构 1.2.2 输入与输出 1.2.3 注释 1.2.4 标识符和关键字
1.2.1 程序的基本结构 C++程序由函数组成;至少包括主函数main()和(或)若干个子函数。唯一的主函数main()是整个程序的入口点。 一个函数又由变量及参数说明语句和语句序列构成。 每个语句必须用分号结尾。一个语句行可以写多个语句,一个语句可以写在多行上。 C++语言允许在程序中插入注释行。 C++语言提供了包括I/O功能在内的大量标准库函数,但调用这些函数时,必须在程序头部包含头文件。 [全局变量说明] [#include <头文件>] using namespace std; [子函数1 [(形式参数)] { [子函数局部变量说明] [语句序列] } [。。。。] int main( ) [局部变量说明] return 0; 函数体
1.2.2 输入与输出 cin表示输入流对象,其基本用法为: cout表示输出流对象,其基本用法是: cin>>V1>>V2>>…>>Vn; 在输入时,应注意用空格或tab键将所输入的数据分隔开。 必须注意所输入数据的类型应与接受该数据之变量的类型相匹配,否则输入操作将会失败或者得到的将是一个错误的数据。 cout表示输出流对象,其基本用法是: cout << E1 << E2 <<…<< Em; 在输出时,要注意恰当使用字符串和换行符endl,提高输出信息的可读性。 cout << x << " + " << y << " = " << sum << endl;
输入输出图示 cin>>x>>y; cout << "This is my first program! ";
1.2.2 注释 C++的注释有两种形式: // 用于单行注释 /* … */ 用于多行注释 注释可以出现在空白符允许出现的任何地方,但习惯上将注释和其所描述的代码相邻,一般可以放在代码的上方或右方,不放在下方。 恰当使用注释可以使程序容易阅读。
1.2.2 标识符和关键字 是程序中变量、类型、函数和标号的名称。 由字母、数字和下划线“_”组成,第一个字符不能是数字。 “大小写敏感”。 各种C++编译器对在标识符中最多可以使用多少个字符的规定各不相同,ANSI标准规定编译器应识别标识符的前6个字符。 在标识符中恰当运用下划线,大、小写字母混用以及使用较长的名字都有助于提高程序的可读性。
标识符、关键词和标点符号 C++关键词 asm,auto,bad_cast,bad_typed,bool,break,case,catch,char,class,const,const_cast,continue,default,delete,do,double,dynamic_cast,else,enum,except,extern,explicit,false,finally,float,for,friend,goto,if,inline,int,long,mutable,namespace,new,operator,private,protected,public,register,reinterpret_cast,return,short,signed,sizeof,static,static_cast,struct,switch,template,this,throw,try,type_info,typedef,typeid,union,unsigned,using,virtual,void,volatile,while C++还有12个标识符作为编译预处理 define,elif,else,endif,error,if,ifdef,ifndef, include,line,progma,undef C++的标点和特殊字符有 ! % ^ & * ( ) – + = { } | ~ [ ] \ ; ' : " < > ? , . / #
扩展阅读 1.3 C/C++背景 1.3.1 程序设计语言的发展 1.3.2 从C到C++
上机指导 1.4 Visual C++集成开发环境 其他调试环境 Visual C++ 6.0
应用举例 例1-4 计算下式的结果,其中x= -3 .5°,y= 6.7° #include <iostream> #include <cmath> //包含标准数学函数库 using namespace std; int main() { double x, y; //将角度单位由度转换为库函数所要求的弧度值 x=-3.5/180*3.14159; y=6.7/180*3.14159; //计算三角函数并输出 cout << sin(fabs(x)+fabs(y))/sqrt(cos(fabs(x+y))) << endl; return 0; }
应用举例 例1-5 计算保险经纪人月薪 假定每一名保险经纪人的月工资都由三部分组成:底薪+奖金+业务提成。 例1-5 计算保险经纪人月薪 假定每一名保险经纪人的月工资都由三部分组成:底薪+奖金+业务提成。 奖金的颁发方法为:奖金为经纪人在公司的工作年数*10,即每年10元; 业务提成的颁发方法为:当月销售额的3%提成。 编程要求:当用户按照屏幕提示分别输入经纪人的底薪、工龄以及当月销售额后,程序计算并输出经纪人的月薪。
算 法 分 析 输入底薪baseSalary 输入经纪人在公司的工作年数serviceYears 计算奖金bonus = 10 * serviceYears 输入经纪人当月销售额totalSale 计算提成additionalBonus = 0.03 * totalSale 计算经纪人的月薪Salary = baseSalary+bonus+additionalBonus 输出结果
#include <iostream> using namespace std; int main() { //声明部分,定义程序中将用到的变量 double baseSalary, bonus, totalSale, additionalBonus, Salary; int serviceYears; cout<<"请输入底薪:"; cin>>baseSalary; cout<<"请输入经纪人在公司的工作年数:"; cin>>serviceYears; //计算奖金bonus bonus=10*serviceYears; cout<<"请输入经纪人当月销售额:"; cin>>totalSale; //计算提成additionalBonus additionalBonus=0.03*totalSale; //计算经纪人的月薪Salary Salary = baseSalary+ bonus+ additionalBonus; cout<<"该经纪人的月薪为:"<<Salary<<endl; return 0; }
案例:重量单位换算 编写一个重量单位换算程序,输入用公斤表示的重量,然后程序能够转换并输出用镑和盎司表示的等效重量。 教学设问 请输入重量(公斤):23 转换为用磅表示的重量(磅):50.7055 转换为用盎司表示的重量(盎司):811.287 教学设问 如何设计变量及选择相应的数据类型? 公斤、磅和盎司的转换公式是什么? *更多案例见本书配套教材《C/C++语言程序设计案例教程 》罗建军等编著,清华大学出版社
问题分析 为保证程序能够处理带小数点的数值,变量的数据类型需选用可以对实数进行操作的双精度类型double。故变量列表为: double kilogram, pound, ounce; //公斤、镑、盎司 公斤、磅和盎司的转换公式: 1磅=16盎司=0.4536千克(公斤) 算法如下: 1. 得到用公斤表示的重量 2. 将重量转化为磅:pound=kilogram/0.4536; 3. 将磅转化为盎司:ounce=pound*16; 4. 输出转换后的重量
// 重量单位换算 #include <iostream> using namespace std; int main() { double kilogram, pound, ounce; //公斤、镑、盎司 cout<<"请输入重量(公斤):"; cin >> kilogram; pound=kilogram/0.4536; ounce=pound*16; cout<<"转换为用磅表示的重量(磅):"<<pound<<endl; cout<<"转换为用盎司表示的重量(盎司):"<<ounce<<endl; return 0; }
进一步思考 如果要想从磅和盎司转换成公斤,应该怎么修改程序? 如果要想将本案例程序的输出改成**磅**盎司(磅和盎司都省略小数点后的位数),应该怎么修改程序?
习题 在计算机上调试运行本章的所有例题,熟悉实验环境和方法。 修改例1-1程序,使其能够在计算机屏幕上显示: ******************* * Hello World! * 仿照例1-2的加法计算器程序,编写一个通用计算器程序,当用户输入两个数以后,可以计算并输出这两个数的和、差、积、商。 仿照例1-3,编写一个计算直角三角形斜边边长的程序,要求当输入直角三角形的两个直角边边长后,能够计算出第三边(即斜边)的边长。 仿照例1-4,编写程序,计算 在x=3时的值。 仿照例1-5,编写一个程序,当输入某学生“英语”课程的平时成绩、期中考试和期末考试成绩及各项占总成绩的比例后,可以计算出该生“英语”课程的最终成绩。
结 束 语 学好程序设计语言的唯一途径是 你的编程能力与你在计算机上投入的时间成 上机练习 正比