资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,前一页,休息,1,第二章,编程基础,西南交通大学软件学院,计算机基础教研室,计算机程序设计基础与,Visual C+,2,教学目标,1,了解,C+,程序的基本框架;,2,掌握,C+,的基本数据类型;,3,掌握常量、变量的定义及使用方法;,4,掌握,C+,提供的基本运算符及表达式;,5,掌握数据类型的转换;,6,掌握标准输入输出流;,7,能够使用,Visual C+6.0,集成开发环境编辑、编译、运行程序。,3,教学内容,1,C+,程序的基本框架,2,C+,程序的开发过程,3,变量与常量,4,运算符与表达式,5,类型转换,4,编写程序:在计算机屏幕上显示:,Hello,C+!,源程序清单:,/,屏幕输出,Hello,C+!,#include /,预编译命令,using namespace std;/using,命令,void main()/,主函数名,/,表示函数的开头,coutHello,C+!endl;/,函数体,/,表示函数的结束,程序基本框架,5,编程技巧,1,程序中“,/”,符号表明本行后续字符为注释信息,该信息与程序的运行无关,在编译时被忽略。,另一种注释方法:,/*/,夹在“,/*”,与“*,/”,之间的所有字符为注释信息。,2.#include ,是一条预编译命令,它告诉编译系统在编译本程序时把系统提供的头文件,iostream.h,的内容插入到该行的位置。所谓头文件是系统提供的能实现某些特定功能的文件,如本例中用到系统提供的输出功能,该功能在,iostream.h,文件中实现,本程序的预编译命令也可以写成:,#include,多条,#include,命令必须分行书写。,程序基本框架,6,编程技巧,3.C+,程序由一个或多个函数组成,其中,主函数,main,必须有且只有一个。函数名之后必须有一对小圆括号(),括号中可以有参数。,main,函数在程序中位置可以任意,但主函数,main,代表了程序执行的起始点和终止点,即程序由多个函组成时,不管,main,函数放在什么位置,程序总是从主函数,main,的第一条语句开始执行,并结束于主函数的最后一条语句。,在基本程序设计中,源程序只由一个主函数,main,构成,程序的框架结构均为:,程序基本框架,7,编程技巧,#include,using namespace std;,void main(),函数体,(,1,)“,”,与“,”,必须配对使用,“,”,之间的内容为函数体,函数体内可以包含任意多行语句。,(,2,),C+,规定每个语句的最后以“;”结束。,(,3,),C+,程序的书写很灵活,一行可书写多个语句,一个语句可以写成多行,但书写时首先应该考虑程序的可读性。,程序基本框架,8,编程技巧,(,4,)主函数的书写也可以是如下形式:,int main(void),函数体,return 0;,4.cout,是一个标准输出文件名,表示标准输出设备,计算机屏幕。符号“,”,是插入运算符,它指示计算机把其右端用双引号括起来的字符串输送到屏幕。,注意:,C+,是区分大小写的,所有标点也必须使用西文标点,只有双引号、注释里可以使用中文。,程序基本框架,9,开发过程中涉及到的程序,源程序:,用源语言写的,有待翻译的程序,目标程序:,也称为,结果程序,,是源程序通过翻译程序加工以后所生成的程序。,翻译程序:,是指一个把源程序翻译成等价的目标程序的程序。,程序开发过程,10,三种不同类型的翻译程序,汇编程序:,其任务是把用汇编语言写成的源程序,翻译成机器语言形式的目标程序。,编译程序:,若源程序是用高级程序设计语言所写,经翻译程序加工生成目标程序,那么,该翻译程序就称为,编译程序,。,程序开发过程,11,三种不同类型的翻译程序,解释程序:,这也是一种翻译程序,同样是将高级语言源程序翻译成机器指令。它与编译程序不同点就在于:它是边翻译边执行的,即输入一句、翻译一句、执行一句,直至将整个源程序翻译并执行完毕。,程序开发过程,12,程序开发步骤,编辑,将源程序输入到计算机中,生成后缀为,cpp,的磁盘文件。,编译,将程序的源代码转换为机器语言代码。,链接,将多个源程序文件以及库中的某些文件连在一起,生成一个后缀为,exe,的可执行文件。,运行调试,程序开发过程,13,例,编程输出下列文本,*,2008,北京欢迎你!,*,源程序清单:,#include,using namespace std;,void main(),cout*endl;,cout 2008,北京欢迎你!,endl;,cout*endl;,变量与常量,14,编程技巧,1.,程序处理的对象是数据,数据有数值数据、文字数据、图像数据、声音数据等多种形式,最基本、最常用的数据是数值数据和文字数据。,2.C+,中数据有常量和变量之分,在程序运行过程中,值可以改变的量称为变量,值不能被改变的量称为常量。常量有字面值常量和符号常量两种,字面常量又称为常数或直接常量,是可以从其字面形式直接判别的常量。,C+,中的字面常量有整型、实型、字符型、布尔型、字符串型五类,变量与常量,15,整型常量,整型常量包括正整数、负整数和零。,C+,中的整型常量可以用十进制、八进制和十六进制表示:,十进制:如,15,-235,0,八进制:以,0,打头,如,07,0327,-02,十六进制:以,0X,或,0 x,打头,如,-0 x7,OX5bf,了解:长整型常量的表示方法是加后缀字母,l,或,L,如,712l,0 x5fL,变量与常量,16,实型常量,变量与常量,17,字符型,常量,变量与常量,18,附录,ASC,代码表,变量与常量,19,字符串型,常量,变量与常量,20,布尔型,常量,布尔型数据的取值:只有,false,和,true,两种,布尔型数据也可以和数值型数据参与运算,此时:,true,相当于,1,false,相当于,0,这种情况下,,vc+6.0,编译系统会给出,警告信息,建议不要这样使用布尔型数据,变量与常量,21,例,计算,2,与,3,的和并显示在屏幕上,算法描述:,定义三个整型变量,a,、,b,、,sum,将,2,存入,a,变量中,将,3,存入,b,变量中,计算,a,与,b,的和存入,sum,变量中,将,sum,的值输出到屏幕,变量与常量,22,源程序清单,#include,using namespace std;,void main(),int a,b,sum=0;,a=2;,b=3;,sum=a+b;,couta“+”b“=”sumendl;,变量与常量,23,编程技巧,1.,无论什么数据,计算机在处理时都要先将其存放在内存中,数据在内存中存放的格式称为数据类型,不同数据类型的数据存储格式不同。程序中所有用到的数据都必须指明其数据类型。,C+,的数据类型分为基本数据类型和非基本数据类型两大类。基本数据类型是,C+,内部预定义的类型,包括整型、实型、双精度型、字符型、布尔型。非基本数据类型是指根据,C+,语法规则由基本数据类型构造出来的类型,如数组、指针、引用、类、结构、联合、枚举等,。,变量与常量,24,编程技巧,2.,变量是用于临时存放数据的内存单元,所谓变量是指在程序运行的过程中该内存单元的内容可以改变,3.,变量在使用前必须先定义,即给变量命名、指定数据类型、赋初值。,(,1,)变量的命名,不同语言系统可使用的字符有所不同,,C+,中可使用的字符集:,大小写的英文字母:,A,Z,,,a,z,数字字符:,0,9,特殊字符:空格,!#%&*_(,下划线,)+=-,/;.,(),变量与常量,25,编程技巧,变量的命名必须遵循,C+,的标识符命名规则,所谓标识符就是指在程序中声明变量、数组、函数和标号等的名称,分为系统保留字和用户自定义标识符。系统保留字又叫关键字,(,参见附录,),,有预定的含义,不允许用户重新定义,也不允许用户定义的标识符与其同名。,用户自定义标识符的规则,标识符只能包含字母、数字和下划线;,必须以字母或下划线开头;,不能使用关键字;,大小写敏感;,变量命名应符合自定义标识符的规则,见名识意,变量与常量,26,(,2,)变量的基本数据类型,内存单元,可存储的数据,数据类型,占用内存,字节数,取值范围,整型,短整型,short,2,-32768,32767,整型,int,4,-2147483648,2147483647,长整型,long,4,-2147483648,2147483647,浮点型,实型,float,4,3.4e-38,3.4e38,双精度型,double,8,1.7e-308,1.7e308,长双精度型,long double,10,3.4e-4932,1.1e4932,字符型,char,1,一个字符,布尔型,bool,1,true,false,编程技巧,27,编程技巧,C+,的数据类型分为有符号型和无符号型(加前缀,unsigned,),默认为有符号型,无符号型数据将符号位用于表示数值,扩大了变量的表数范围,指定变量的类型时,尽可能使用占用内存空间少的数据类型,但也要考虑机器的运算速度。如用,long,型可以得到大范围的整数但同时会降低运算速度。用,short,型内存占用空间比,int,型少,但计算机处理,short,型数据时必须先将其转换成基本整型,int,型,导致计算机耗时多,因此常使用,int,型变量存储整数,选择数据类型时还必须考虑溢出问题,即存放的数据超出了存储范围,使得结果出错,变量与常量,28,(,3,),变量的定义,变量必须,“,先定义,后使用,”,。,程序运行时,系统为定义的变量分配内存空间,用于存放对应类型的数据,因而变量名就是对应内存空间的命名。,定义变量时可以赋初值,称为变量初始化。在,C+,中,如果不给变量提供初值,变量会包含一个无意义的值,程序员称之为,“,垃圾数据,”,,因此建议养成给变量初始化的好习惯。,注意:,初值的类型必须与变量的类型相同。,变量与常量,编程技巧,29,变量定义格式,语 法,示 例,初值,1,、数据类型 变量名初值,;,2,、数据类型 变量名,(,初值,);,3,、数据类型 变量名,1,,变量名,2,,,变量名,n;,变量名,1,初值,;,变量名,2,初值,;,.,变量名,n,初值,;,int age=0;,0,float rate=0.0;,float rate,(,0.0,),;,double cost=0.0;,0.0,char grade=,;,空格,int a,b,c;,a=1;b=3;c=4;,变量与常量,编程技巧,30,例,求键盘输入的两个数的和,思路分析:,c+,中的标准输入流,cin,可以接收从键盘输入的数据。本题未指定数据类型,为避免数据溢出,数据类型最好定义为,double,型。,算法描述:,定义三个,double,型变量,a,、,b,、,sum,提示输入两个数,从键盘输入一个数到,a,变量,从键盘输入第二个数到,b,变量,计算,a,与,b,的和放到,sum,变量中,将,sum,的值输出到屏幕,变量与常量,31,#include,using namespace std;,void main(),double a,b,sum;/,定义了三个,double,型变量,coutab;/,由键盘输入数据分别存入变量,a,、,b,中,sum=a+b;/a,与,b,相加的和赋给变量,sum,couta+b=sum ab;,中“,”,称为提取运算符,该语句的作用是等待从键盘输入数据,接收后依次存入变量,a,、,b,中。输入数据的个数、类型必须与接收变量依次一致,输入数据之间可以用空格、回车或,Tab,键分隔开,输入完所有数据后,使用回车键表示输入结束。,Page,32,变量与常量,33,注意:,cin,流的“,”,后必须是变量名。,通常在输入语句的前面应增加一条输出语句,用于提示操作者输入几个什么数据类型的数据。,.couta“+”b“=”sumendl;,中“,”,称为插入运算符,该语句的作用是将变量,a,的值、字符串,+,、变量,b,的值、字符串,=,、变量,sum,的值依次显示在计算机屏幕上,,endl,起换行输出的作用。,Page,33,编程技巧,变量与常量,34,例,从键盘输入一个圆的半径,计算并输出圆的面积和周长,定义三个,double,型变量,r,、,area,、,circum,提示输入半径,从键盘输入半径值到,r,变量,计算,3.14,r,r,的结果存入,area,变量中,计算,2,3.14,r,的结果存入,circum,变量中,将,area,的值输出到屏幕,将,circum,的值输出到屏幕,算法描述:,变量与常量,35,源程序清单,#include,using namespace std;,void main(),double r=0.0;,double area=0.0;,double circum=0.0;,cout,请输入半径,:r;,area=3.14*r*r;,circum=2*3.14*r;,cout,面积为,:area endl;,cout,周长为,:circum endl;,变量与常量,36,编程技巧,1.,当程序中需要多次使用某个数值时,可以使用符号常量来代替。所谓符号常量,就是用标识符代表一个常量。如程序中多处用到圆周率,3.14,,我们可以定义,const double PI=3.14;,后面的程序中就可使用,PI,代替,3.14,当需要修改,PI,的精度时只要修改定义语句为,const double PI=3.14159;,即可。,2.,符号常量的特点是先定义后使用,而且定义时一定要赋初值,在程序中间不能改变其值。定义符号常量时习惯使用大写字母。,变量与常量,37,编程技巧,语 法,示 例,1,、,const,数据类型 常量名值,;,2,、数据类型,const,常量名值,;,const int AGE=30;,const double MAXPAY=15.75;,const char YES=,Y,;,3.,符号常量的定义格式:,变量与常量,38,例,求键盘输入的两个非,0,整数的和、差、积以及平均数,算法描述:,Page,38,算术运算符与,算术,表达式,定义两个,int,型变量,a,、,b,定义一个,double,型变量,avg,提示输入两个整数,从键盘输入变量,a,、,b,的值,计算平均数放入,avg,变量中,输出,a,、,b,的和,输出,a,、,b,的差,输出,a,、,b,的积,输出,avg,的值,39,源程序清单,算术运算符与,算术,表达式,#include,using namespace std;,void main(),int a,b;,double avg=0;,coutab;,avg=(a+b)/2.0;,couta+b=a+bendl;,couta-b=a-bendl;,couta*b=a*bendl;,cout,平均数,=avgendl;,40,编程技巧,算术运算符与,算术,表达式,1.,对数据进行处理和计算可以通过表达式来实现。表达式可以理解为用于计算的公式,它由运算符、运算量(也称操作数)和括号组成。执行表达式所规定的运算得到的结果值便是表达式的值,2.,运算符分为单目运算符、双目运算符以及三目运算符,负号为单目运算符,又称为一元运算符,+,、,-,均为双目运算符,又称为二元运算符,极个别的运算符为三目运算符,比如条件运算符,我们将在以后为大家做以介绍,41,3.,数学中的加减乘除有,“,有括号先算括号、先乘除后加减,,”,、,“,同级先左后右,”,的运算规则,其实就是运算符的优先级和结合性。,C+,中的运算符也具有优先级和结合性,结合性是指当表达式中的多个运算符优先级相同时,是按照从左至右的顺序执行,还是从右至左的顺序执行,从左至右称为左结合,从右至左称为右结合。如,加减乘除是按照左结合规则执行,大多数运算符都是左结合方式。,编程技巧,算术运算符与,算术,表达式,42,编程技巧,4.,基本算术运算符的功能、优先级别,Page,42,算术运算符与算术表达式,运算符,运算,优先级别,(),改变正常优先级,1,-,负号,2,*,/,%,乘法、除法、求余运算,3,+,-,加、减法,4,(,1,)为求余运算符,用于计算两个整数相除的余数,(,2,),/,为除法运算符,当两个整型数相除时,结果是取整数舍小数,43,例,写出程序的运行结果,#include,using namespace std;,void main(),int i=5,j=5;,int m=10,n=10;,i+;,+j;,couti jendl;,couti+jendl;,m-;,-n;,coutm nendl;,coutm-“”-nendl;,算术运算符与算术表达式,44,解题技巧,1.C+,提供了自增(,+,)、自减(,-,)运算符,作用是使变量的值增加,1,或减少,1,。,2.,自增(,+,)、自减(,-,)运算符只能用于变量,不能用于常量。,+,、,-,在变量的前后位置不同导致运算过程不同:若变量在前,系统会先使用变量中原有的值参与运算、输出或赋值,然后变量再自增或自减,1,;若变量在后,变量先自增或自减,1,,然后系统再使用变量的新值参与运算、输出或赋值。,.+,、,-,结合方向自右向左。如,-i+,表示,-,(,i+,),算术运算符与算术表达式,45,例,编程计算奖金数额,奖金按销售额的,5%,计算,赋值运算符与赋值表达式,定义两个,double,型变量,sales,、,bonus,输出提示信息,从键盘输入变量,sales,的值,计算,sales*0.05,,将结果赋给变量,bonus,输出,sales,、,bonus,的值,算法描述:,46,源程序清单,#include,using namespace std;,void main(),double sales=0.0;,double bonus=0.0;,cout,请输入销售额,:sales;,bonus=0.05*sales;,cout,销售额为,:salesendl;,cout,奖金为,:bonusendl;,赋值运算符与赋值表达式,47,编程技巧,1.,在程序运行中要改变变量的值,可以使用赋值语句。“,=”,为赋值运算符,当程序运行时,先求出赋值号右边表达式的值,然后再将结果存入赋值运算符左边的变量。,(,1,)不能用赋值语句给常量赋值。,(,2,)表达式的数据类型必须和要赋值变量的数据类型匹配,否则系统将进行隐式类型转换,编译时出现警告信息。,(,3,)变量每次只能存储一个值,当另一个值赋给该变量后,新值会取代原有的值。,赋值运算符与赋值表达式,48,编程技巧,(,5,)为了简化程序、提高编译效率,在赋值符“,=”,之前可以加上其它运算符,构成复合赋值运算符,如:,+=,-=,*=,/=,%=,等,a=b=c=5,表达式值为,5,,,a,b,c,均为,5,a=5+(c=6),表达式值为,11,,,a,为,11,,,c,为,6,a=(b=4)+(c=6),表达式值为,10,,,a,为,10,,,b,为,4,,,c,为,6,a=(b=10)/(c=2),表达式值为,5,,,a,为,5,,,b,为,10,,,c,为,2,a+=a-=a*a,相当于,:,a=a+(a=a-a*a),Page,48,赋值运算符与赋值表达式,49,例,写出程序运行结果,逗号运算符与逗号表达式,#include,using namespace std;,void main(),int x=0,y=2;,int a=5,i=0,j=0;,x=(a=3*5,a*4);,y=(i=2,j=2,i+,-j);,coutxendly,赋值运算符,逗号运算符。,逗号运算符与逗号表达式,51,自动类型转换,例,写出程序运行结果:,#include,using namespace std;,void main(),int a1=10,a2=5,k;,double b,c,s;,b=38.425,c=12.0;,char c1=A,c2=B;,s=b+a1-c;,k=c1+c2+a1+b;,coutk“,”sendl;,数据类型转换,52,解题技巧,1.,如果不同类型的数据参与运算或者表达式值的数据类型与要赋值变量的数据类型不一致,大多数程序设计语言使用隐含类型转换来使数据类型一致。隐含类型转换由系统自动进行,但有可能影响程序结果的准确率,所以系统会出现警告信息,编程时要避免出现此类情况。,2.,隐含类型转换原则:,(,1,)赋值号右边类型转换为赋值号左边变量的类型。,数据类型转换,53,解题技巧,(,2,)多种类型数据混合运算时,低类型转换为高类型,数据类型转换,54,解题技巧,横向箭头表明必须的转换,即,char,和,short int,型在参加运算时必须先转换成,int,型。,float,型在参加运算时必须先转换成,double,型。,纵向箭头表明数据类型级别的高低,即运算对象为不同类型时转换的方向,如整型变量,a,与,double,型变量,b,求和运算时,整型变量,a,将转换为,double,型参加运算。,(,3,)浮点型转换为整型时,去掉小数部分。,(,4,)双精度转换为单精度时,四舍五入。,数据类型转换,55,强制类型转换,例,2.5.3,写出程序运行结果:,#include,using namespace std;,void main(),double x=0.0;,int i=0;,char c1=A,c2=b;,x=3.6;,i=(int)x;,couti xendl;,c1=c1+32;,coutint(c1);coutc1;,coutc2-32;,coutchar(c2-32)endl;,数据类型转换,56,解题技巧,1.,强制类型转换,即将数据显式地从一种类型转换成另一种类型,又称显示类型转换。如,i=(int)x;,就是将,float,型的,x,强制类型转换为整型,再赋给变量,i,。,2.,强制类型转换的一般形式为:,数据类型(表达式)或 (数据类型)表达式,如本题中,i=(int)x;,也可以写为,i=int(x);,注意:,i=(int)x/y,与,i=int(x/y),的区别,数据类型转换,57,解题技巧,3.float,型数据强制类型转换为整型时直接取整数部分,,double,型数据强制类型转换为,float,型时直接去除多余位数。,4.,强制转换变量的类型使用时,只得到中间结果,原变量的类型不发生变化。比如,i=(int)x;,语句执行后,x,的类型仍为原来类型,只是,i,中得到了,(int)x,的结果。,5.,当,float,型变量的初始化值不为,0.0,时,需要使用强制类型转换。比如:,float PI=float(3.14),;或,float PI=(float)3.14,;,数据类型转换,58,
展开阅读全文