《面向对象的设计与分析课件chapter2.ppt》由会员分享,可在线阅读,更多相关《面向对象的设计与分析课件chapter2.ppt(83页珍藏版)》请在三一办公上搜索。
1、第2章 C+语言基础,本章的学习目的 面向对象技术的思想方法最早起源于面向对象编程语言。最典型和流行的面向对象编程语言C+提供了支持面向对象技术的最充分的机制。因此通过学习C+,我们能够获得对面向对象的基本概念和思想方法的深刻理解。所以在初步了解面向对象的基本概念和思想方法的基础上,有必要先学习一下C+,以加深对面向对象的基本概念和思想方法的理解,为进一步学习面向对象的系统分析和设计作好充分准备。,本章的学习内容了解C+程序基本结构了解C+数据类型、运算符及表达式 了解和掌握程序流程控制基本语句了解和掌握函数的定义和调用方法,2.1 C+程序的基本结构2.1.1 C+程序示例【例2.1】一个简
2、单的C+程序/输入一个学生的三门课成绩,计算其加权平均值#include/预处理指令/子函数的引用说明double Average(double score1,double score2,double score3);void main()/程序的主函数 double score1,score2,score3,average;coutscore1;/接受用户输入 coutscore2;coutscore3;/调用子函数,用返回值为变量赋值average=Average(score1,score2,score3);cout加权平均分为:averagen;/输出计算结果,/程序的子函数定义doub
3、le Average(double score1,double score2,double score3)double credit1,credit2,credit3,average;/定义四个双精度型变量 credit1=3.0;/给变量赋值credit2=4.0;credit3=2.0;average=(credit1*score1+credit2*score2+credit3*score3)/(credit1+credit2+credit3);/计算表达式的值,并赋给变量return average;/将变量的值作为函数的返回值,返回给调用者,2.1.2 C+程序的一般结构 一个C+程序
4、由一个或多个源代码文件构成。C+的源代码文件分为两类:头文件(.h)和源程序文件(.cpp)。C+源代码文件一般可以分成四个部分:预处理指令、全局说明(包括对象类的定义)、程序的主函数和用户自定义的子函数,如右图所示。下面分别对这几个部分进行讨论。,1.预处理命令 在C+程序中,以#开头的命令叫预处理命令。它们指示编译器在对程序正式编译前对程序进行适当处理,将必要的信息包含进来,然后再对程序进行正式的编译处理。常用的预处理命令有三类:(1)预处理包含命令#include#include指令是最为常用的预处理指令。在程序执行的过程中,我们经常要使用到某种编译系统提供的标准函数或类库提供的类或用户
5、开发的、存放在其他文件中的类、结构、变量、函数等。而这些类、结构、变量、函数等的说明和其他信息,都保存在相关的头文件(.h文件)中。为了使用这些头文件中定义的类、结构、变量和函数,必须将相应的头文件包含到要使用它们的源程序中。例如#include#include,(2)条件预处理指令 由于被预处理包含指令#include所指定的头文件中也可以使用#include指令包含别的头文件,因此就可能出现头文件嵌套包含甚至是头文件循环相互调用的情况,导致编译效率低下甚至是编译失败的情况。例如/myheadfile1.h#include myheadfile2.h/myheadfile2.h#includ
6、e myheadfile1.h,为了避免上述情况的发生,引入了条件预处理指令,用来判断是否已经包含了某个头函数或头函数的某个部分,若已经包含了某个头函数或头函数的某个部分,则在以后遇到要求再包含该头函数或头函数的该部分时,跳过包含指令#include,以避免头文件重复包含或循环调用的情况。条件预处理指令包括:#ifdef#ifndef#else#endif#define,【例2.2】条件预处理指令#ifndef的用法/myheadfile.h#ifndef MYHEADFILE_H#define MYHEADFILE_H/*加入头文件代码*/#endif/*MYHEADFILE_H*/在头文件
7、myheadfile.h中加入了上述条件预处理指令后,在任何包含该头文件的源程序中,该头文件都不会被重复包含。,例如/P1.CPP#include myheadfile.h#include myheadfile.h,条件预处理指令#ifdef与#ifndef正好相反,当其后面的标识符已被定义时,条件判断为真,#ifdef和其对应的#endif之间的语句将被执行;而当该标识符未被定义时,编译器将跳过这部分语句。我们再来看一个例子:【例2.3】条件预处理指令用法举例#ifdef u362/*此处为专门为AT&T 3B计算机指定的代码*/#endif/*u362*/#ifdef sun/*此处为专门
8、为Sun计算机指定的代码*/#endif/*sun*/,【例2.4】条件预处理指令#else的用法#ifdef _cplusplus/*专门为C+语言指定的代码*/#else/*专门为C语言指定的代码*/#endif/*_cplusplus*/,(3)宏替换命令#define 使用宏替换指令主要是为了简化代码和增强程序的可读性。C+中的宏替换主要有两种使用形式。形式1:#define 标识符 所代表的常量(如:#define PI 3.14159265#define M X+Y 或#define M Z)形式2:#define 标识符(参数)表达式(如:#define Area(r)PI*r*
9、r),全局说明 全局说明一般包括程序所要使用的数据类型的定义、类的定义或说明、全局变量的定义或说明、用户自定义函数的原型声明等。例如,#include#include typedef struct date/定义日期结构体,年、月、日 int year;int month;int day;date;date D;class person/定义person基类public:char name10;char sex10;char address100;virtual void Show();double Average(double score1,double score2,double scor
10、e3);,3.主函数 任何一个C+程序都有一个且只能有一个主函数。通常主函数的名称为main()。主函数是C+程序的总控程序。C+程序的执行从主函数开头进入,从主函数结尾返回。例如/P3.CPP#include#include void main();,4.用户自定义的函数 用户自定义的函数是程序开发人员为了实现某些特定的功能操作而编写的一段代码。当然,程序员也可以不使用任何子函数,而将全部代码放在主函数中。但是,有目的地把某些代码段独立出来,组织成子函数的形式,将能简化代码,避免同 样代码的多次重复书写,而且使得程序更加清晰易读、各部分代码功能目的明确。#include int SUM(in
11、t n)int i,s;for(i=1;i=n;i+)s=s+i;return s;main()SUM(100);SUM(200);,2.2 数据类型、运算符和表达式,2.2.1 基本数据类型,C+的基本数据类型有:整型(int);字符型(char);浮点型(float/double);布尔型(bool);定义基本类型变量时,可使用符号属性 signed,unsigned长度属性 short,long,类 型字 长表示范围char 8-128127signed char 8-128127unsigned char 8 0255int 16-3276832767unsigned int 16-3
12、276832767signed int 16 065535short int 16-3276832767,(1)表2.1 基本数据类型的字长和表示范围,unsigned short int16065535signed short int16-3276832767long int 32-21474836482147483647unsigned long int32-21474836482147483647signed long int3204294967295float 323.4e-383.4e+38double 641.7e-3081.7e+308long double 1283.4e-49
13、323.4e+4932,表2.1 基本数据类型的字长和表示范围(续),(2)常量定义:在程序运行过程中,值不能被改变的量称为常量,包括常数和代表固定不变值的符号常量。为了提高程序的可读性,C+通过给常量命名的方式定义符号常量,格式如下:const=例如,const float pi=3.1415926 C+也可以用编译预处理命令定义常量:#define pi 3.1415926,(3)变量 在程序运行过程中,取值可以被改变的量称为变量。在C+中,任何一个变量在使用之前必须先定义。与C语言不同,C+中的变量可以在程序中使用该变量之前的任何地方定义,不必集中在程序之前的某个地方。定义格式如下:例如
14、:int i,j,k;float x,y=3.9,z=0.0;char ch1=a;,2.2.2 指针和引用(1)指针 指针是专门用来存放其他数据的内存地址的变量。定义格式为:*例如:int*iptr;C+提供了一个取得变量地址的运算符,(2)引用 引用是给某个变量取的别名,因此可用作访问该变量的一种方法。定义一个引用时,要用某个变量对其初始化,使它初始时就表示该变量,即绑定在该变量上。对于引用的改动就等效于对其所绑定的变量的改动,反之亦然。定义引用的格式如下:,2.2.3 数组和结构体1.数组的定义 数组是一组具有相同类型和相同名字但不同下标的数据变量(如 A0,A1,A100)。定义数组的
15、一般格式如下:常量表达式1常量表达式2;例如:char a10;/定义10个元素的字符数组a,/包含10个字符变量 int ba;/等价于int b97;int element23;/定义一个2行3列的二维数组,2.数组使用说明(1)数组名是标识符,只能由字母、数字和下划线三种字符组成,且第一字符必须为字母或下划线。(2)数据元素的下标应小于本维的值。例如:int a23;a00=1;()a01=2;()a02=3;()a10=4;()a11=5;()a12=5;()a22=6;(X)a23=7;(X),3.结构体类型的定义格式如下:struct;例如:struct Date int year
16、;int month;int day;4.结构体变量的定义格式如下:struct 例如:struct Date today,tomorrow;,5.结构体的操作运算(1)结构体变量成员的操作运算 访问结构体变量成员有两种表示式:-例如:struct date day1=2001,12,14;struct date day2,*pd=day1;day2.year=day1.year+1;pd-year=pd-year+1;,(2)结构体变量整体的赋值运算 day2=day1;(3)不允许将两个结构体变量做整体比较,只能逐个成员比较。例如:if(day1=day2);/错误 if(day1.yea
17、r=day2.year&day1.month=day2.month&day1.day=day2.day)/正确,2.2.4 C+中的运算符和表达式 2.2.4.1 C+中的基本运算符 可以将C+中的操作符分为:算术运算符;关系运算符;逻辑运算符;赋值运算符;条件运算符;自增自减运算符;位运算符;sizeof运算符等。,1 算术运算符,表2.4 C+中的算术运算符,2.关系运算符C+中有六种关系运算符,如表2.5所示,它们都是双目运算符。关系运算符的返回值只有逻辑真和逻辑假两种。由于C+中没有提供逻辑型数据,所以关系运算的结果返回一个整型数,并用1表示逻辑真,用0表示逻辑假。,表2.5 C+中的
18、关系运算符,3.逻辑运算符C+中的逻辑运算符共有三个,如表2.6所示。逻辑运算符用来表示操作数的逻辑关系,其运算结果是整型数0或1。逻辑运算的结果也可以作为一个整型数用在算术运算中。,表2.6 C+中的逻辑运算符,4.赋值运算符 赋值运算符“=”将右边表达式的值赋给左边的变量,其结果是将一个新的数值存放在左操作数所占用的内存单元中。例如:var1=var2=var3=var4=8;,5.条件运算符 条件运算符的语法形式如下:expr1?expr2:expr3;在执行该语句时,先无条件计算表达式expr1;若表达式expr1的计算结果为真(任意非零值),则计算表达式expr2;否则计算表达式ex
19、pr3。6.自增、自减运算符自增运算符+和自减运算符-主要用在循环语句中,为循环控制变量提供格式紧缩的加1和减1运算。例如:,7.位运算符 在计算机中,数据是用二进制来进行存储的,任何一种类型的数据都可以转化为一定位数的二进制符号,即用按一定顺序排列的0和1表示。C+中提供了六个位运算符如表2.7所示。,表2.7 C+中的位运算符,sizeof运算符 sizeof运算符返回一种数据类型的字节长度时,格式为:sizeof(type-specifier)如:sizeof(double)当需要返回一个变量的字节长度时,可采用如下两种形式中的任一种:sizeof(variable)如:int var;
20、sizeof(var);sizeof variable 如:int var;sizeof var;,2.2.4.2 C+表达式 表达式是由运算符和操作数组成的式子。操作数包括常量、变量、函数和其他一些命名的标识符。表达式可以分为:算术表达式 关系表达式逻辑表达式 条件表达式赋值表达式 逗号表达式,表2-3 表达式的分类,2023/6/30,程序运行时需要占用多大的空间需要在编译时确定,便于操作系统为程序分配适当的内存空间。从静态存储区分配:程序的全局变量和静态变量都在这里分配,且在编译时已经分配好,在程序终止前被操作系统回收。在栈上创建:在函数调用时,函数的形参和局部变量都在栈上创建,函数执行
21、完毕时这些内存自动被释放掉。从堆(heap)上分配:在程序运行期间,用动态存储分配函数申请和释放的内存,程序中变量的内存分配方式,2023/6/30,由动态内存管理系统管理的这块内存区域叫做“堆(heap)”:当需要动态灵活地分配内存空间时,需要用到动态存储分配动态分配得到的内存块位于堆中,且没有名字动态存储分配由库函数malloc.h提供格式:p=(double*)malloc(n*sizeof(double)C+中动态存储分配由运算符new和delete实现new和delete完成动态存储分配时,可以很好地和构造函数、析构函数进行交互,malloc和free不能自行调用构造函数和析构函数,
22、动态存储分配,2.2.5 动态存储分配(一),1.new运算符 三种常用格式:格式1:=new 功能:分配一块与相适应的存储空间,若分配成功,将这块内存空间的首地址存入指针变量,否则置指针变量的值为NULL(空指针值,即0)。,2.2.5 动态存储分配(二),格式2:=new()功能:分配一块与相适应的存储空间,并用为分配好的存储空间置初值。若分配成功,将这块内存空间的首地址存入指针变量,否则置指针变量的值为NULL(空指针值,即0)。例如:int*p;p=new int(100);/动态存储分配一个整数单元,并给它赋初值100。,2.2.5 动态存储分配(三),格式3:=new 功能:申请大
23、小为的数组空间。但创建数组时,不能为该数组指定初始值。例如:int*p;p=new int10;/动态分配一个含 有10个整数的数组。,2.2.5 动态存储分配(四),1.delete运算符 二种常用格式:格式1:delete 功能:释放 指向的动态存储空间。例如:delete p;,2.2.5 动态存储分配(五),格式2:delete 功能:用于释放数组占用的动态存储空间。例如:int*p;p=new int10;delete p;,例2-7 用new申请数组空间#include#include void main()int*array;if(array=new int10)=NULL)co
24、ut“Cant allocate memory,terminating”;exit(1);for(int count=0;count10;count+)arraycount=count*2;coutarraycount“”;coutendl;delete array;运行结果:0 2 4 6 8 10 12 14 16 18,2023/6/30,说明以下定义的区别,2.3 C+的语句及程序流程控制 按照功能的不同,C+语句分为6种类型:(1)定义声明语句。例如,int x,y,z;double Average(double score1,double score2,double score3)
25、(2)表达式语句。例如,x=10*99;/赋值语句 y=Average(80,90,95);/函数调用语句(3)选择语句。if(xy)coutx else couty(4)循环语句。例如,for(n=1;n100;n+)s=s+n;(5)跳转语句。例如,break(6)复合语句。switch(chr)case s:cout“*您选择的是学生信息:”n;break;case t:cout“*您选择的是教师信息:”n;break;,按照程序执行流程的不同,C+程序结构可分为3类:1顺序结构按照语句排列顺序依次执行的程序结构。C+的 声明语句、表达式、复合、输出、输入和空语句等都是实现程序顺序结构的
26、语句。例如,int x1,x2;cinx1;x2=average(90,80,70)+x1;printf(“%d”,x2);2分支结构按照条件判断有选择地执行某个程序段的语句。例如,if(xy)coutx else couty 3循环结构控制某程序段重复执行的语句。例如,for(n=1;n100;n+)s=s+n;,2.3.1 if 条件分支语句 if 语句又有三种形式:单分支if语句、双分支if语句、多分支if语句。单分支if语句的格式:if()例如:if(xy)cout)else 例如:if(xy)coutxendl;else coutyendl;,多分支if语句的格式 if()else
27、if()else if()else,2.3.2 switch开关分支语句 Switch开关分支语句的语法结构如下所示:switch(variable)case const1:statement1-1;.statement1-n;case const2:statement2-1;.statement2-n;case const3:statement3-1;.statement3-n;.default:statementm-1;.statementm-n;,switch语句的另一种格式:switch(variable)case const1:statement1-1;.break;case con
28、st2:statement2-1;.break;case const3:statement3-1;.break;.default:statementm-1;.statementm-n;,2.5.3 循环控制语句C+提供了三种循环控制语句:while循环控制语句、do循环控制语句和for循环控制语句。while循环控制语句 while循环控制语句的语法结构如下所示:while(expression);2.do-while循环控制语句 do;while(expression);3.for循环控制语句 for(;);,2.3.4 跳转控制语句 跳转控制语句用于改变正常的程序执行流程,实现控制转移。常
29、用的跳转控制语句有break、continue等,下面将分别进行介绍。1.break跳转控制语句 break跳转控制语句常用于循环控制语句和开关分支语句中,用于终止当前层的while、do、for循环或switch流程的执行。当程序在循环体内或分支语句内遇到break语句时,循环或分支语句的执行立即中断,并转向本层循环体外或分支语句外的下一条语句执行。,【例2.8】break跳转控制语句用法#include/预处理包含语句void main()/程序的主函数 bool pt=true;/定义布尔型变量pt,并为其赋初值 char chr;/定义字符型变量chr while(pt)/while循
30、环 coutchr;/输入选择字符 switch(chr)/switch开关控制 case s:/当选择学生信息时 cout“*您选择的是学生信息:”n;break;case t:/当选择教师信息时 cout“*您选择的是教师信息:”n;break;case w:/当选择工人信息时 cout“*您选择的是工人信息:”n;break;default:/当选择其他时 cout*感谢您的使用,再见!n;pt=false;,运行结果:选择信息种类(S-学生;T-教师;W-工人;Q-退出):s*您选择的是学生信息:选择信息种类(S-学生;T-教师;W-工人;Q-退出):t*您选择的是教师信息:选择信息种
31、类(S-学生;T-教师;W-工人;Q-退出):w*您选择的是工人信息:选择信息种类(S-学生;T-教师;W-工人;Q-退出):q*感谢您的使用,再见!,2.continue语句 continue语句也常用于循环控制和开关分支控制内,但其作用与break语句有所不同:continue语句仅使所在层的本次循环终止执行;而break语句则终止所在层的整个循环的执行。在for循环,while循环和do循环中,continue语句的出现导致程序的执行转回对循环条件的判断。在各种循环体中,常需要根据不同的需要选择合适的break或continue语句,使程序的流程与设计意图相符。,n=1;while(n1
32、00);continue;,for(n=1;n100;n+);continue;,2.4 函数,C+源程序有如下结构特点:(1)一个C+源程序可以由一个或多个源文件组成;(2)每个源文件可由一个或多个函数组成;(3)一个源程序不论由多少个文件组成,都有且只能有一个main函数,即主函数。(4)C+程序从main函数开始执行直到main函数结束,其他函数都由main函数调用。(5)要使用库函数或用户自定义文件,需用include命令。,2.4.1 函数定义和函数原型1.函数定义 函数定义的一般格式如下:()说明:(1)函数 与return语句中的类型不一致时,以 为准。(2)函数名的命名规则应符
33、合C+标识符的命名规则:(a)所有标识符必须由一个字母或下划线开头;(b)其他部分可用字母、下划线或数字组成;(c)大小写敏感。,2.函数原型 若一个函数的调用出现在该函数定义之前,则在调用前必须先对函数进行原型说明。函数原型向编译系统提供函数返回值类型、函数名、参数的个数和类型。函数原型的一般格式如下:();例:编写函数实现求任意两个整数的 最大值。,#include int max(int,int)void main()int a,b,c;cinab;c=max(a,b);couty)return x;else return y;,2.4.2 函数调用 在调用子函数时,主函数与被调用子函数
34、之间的数据传递一般依靠子函数的参数进行。根据实参与形参之间数据传递方式的不同,可以把函数调用分为:传值调用传地址调用引用调用,1.传值调用 传值调用先计算出实参表达式的值,再将实参的值依次复制给形参。在被调用函数的执行过程中,形参值的改变不会影响实参的值,即数据的传递是单向的。形参是函数中的局部变量,具有独立的存储空间。例:int f(int x,int y)void main()int a=1,b=2,c;c=f(a,b);,#include void swap(int x,int y)int temp;temp=x;x=y;y=temp;void main()int a=1,b=2;cou
35、t“Before swap a=”a“,b=”bendl;swap(a,b);cout“After swap a=”a“,b=”bendl;运行结果:Before swap a=1,b=2 After swap a=1,b=2,2.传地址调用 在传地址调用方式中,形参用指针变量实现,实参用地址值。调用时,将实参地址赋给对应的形参指针变量,使形参指针指向实参。故在被调用函数中可通过形参指针对实参进行间接读或写。,例:void f(int*x,int*y)void main()int a=1,b=2;f(,例2-9 传地址调用举例#include void swap(int*x,int*y)int
36、 temp;temp=*x;*x=*y;*y=temp;void main()int a=1,b=2;cout“Before swap”a“,b”bendl;swap(运行结果:Before swap a=1,b=2 After swap a=2,b=1,3.引用调用 在这种调用方式中,函数的形参用引用实现。调用函数时,实参用变量名,对形参值的改变,实质上是对实参变量值的改变。因此,引用调用的效果与传地址调用相同,但比传地址调用方便、直接。,例2-10 引用调用举例#include void swap(int运行结果:Before swap a=1,b=2 After swap a=2,b=1
37、,2.4.3 内联函数 内联函数是在程序中用inline定义的函数,在编译程序时,编译系统将程序中出现内联函数调用的地方用函数体替换。虽然增加了空间开销,但节省了调用函数的时间开销,是一种空间换时间的方案。内联函数定义的一般格式如下:inline(),例2-11 用内联函数实现求两个整数中最大值。inline int max(int x,int y)return xy?x:y;void main()int a,b,c;coutab;cout“The max is:”max(a,b)endl;,2.4.4 函数重载 函数重载是指具有相似功能的不同函数使用同一函数名,但这些同名函数的参数类型、参数
38、个数、返回值类型、函数的功能可以不同。编译系统将根据函数参数类型和个数来判断调用哪个函数。这体现了C+对多态性的支持。例2-12 函数重载举例#include int abs(int x)return x0?x:-x;double abs(double x)return x0?x:-x;long abs(long x)return x0?x:-x;,void main()int x1=4;double x2=5.5;long x3=6L;cout“|x1|=”abs(x1)endl;cout“|x2|=”abs(x2)endl;cout“|x3|=”abs(x3)endl;运行结果:|x1|=
39、4|x2|=5.5|x3|=6,2.4.6 作用域 1.作用域 在一个函数体中定义的变量,在这个函数体执行完之后分配给它的内存单元就被释放了,因此离开该函数就不能再使用了该变量了,成为无效的变量了。即这个变量仅在这个函数体内有效,其有效性的范围就是这个函数体。一般地,变量有效性的范围称为变量的作用域。C+语言中的所有量都有自己的作用域。作用域分为:局部作用域(块作用域)、函数原型作用域、文件作用域和类作用域。,(1)局部作用域 一个变量在一个函数体内或复合语句块内定义时,它具有块作用域,其作用域是从定义点开始,直到该块结束为止。例如:void main()int i;for(i=1;i4;i+
40、)int j=5;/j的作用域开始 j+;coutj“”;/j的作用域结束 coutj;,(2)函数作用域 在每个函数中使用的语句标号是唯一具有函数作用域的标识符。它在本函数中有效,供本函数的goto 语句跳转使用。由于语句标号不是变量,故函数作用域不属于变量的一种作用域。int sum(int n)int i=1,s=0;Loop:s=s+i;if(i=n)goto Loop;return s;,(3)函数原型作用域 函数原型声明中的参数的作用域开始于函数原型声明的左括号,结束于函数原型声明的右括号。要在原型声明之外使用参数必须另外定义,否则出现无定义的标识符。例如:double Avera
41、ge(double x,double y,double z);/原型声明 x=90;/error x无定义 void main();double Average(double x,double y,double z)/函数定义 return x+y+z;,(4)文件作用域 在一个程序文件中,如果一个变量定义在所有函数之外,并且定义时带有关键字static,则该变量在整个文件中有效。它具有文件作用域,但在其他文件中无效。例如:/program1 static int value;int sum()value=0;void main()value=2*sum();,2.局部变量和全局变量 从变量的
42、作用域来分,可以将变量分为全局变量和局部变量。(1)全局变量在一个程序中,当一个变量定义在所有文件的函数之前,它可用于任何一个函数,则该变量称为全局变量。全局变量具有全局作用域,该变量在一个程序包括的所有文件中都有效,它可以被程序中的所有函数使用。例如:/P0.h int g;/P1.cpp#include“P0.h”/P2.cpp#include“P0.h”,(2)局部变量在一个语句块或函数内定义的变量其作用域仅限于该语句块或函数,离开该语句块或函数之后它就无效。这种变量称为局部变量。局部变量的类型修饰符是auto,习惯上都省略。若在局部变量定义前面加上关键字static,则称为静态变量,若
43、静态变量没有被初始化,则编译时会被自动初始化为0。静态变量在整个程序的运行期间都是存在的,但其作用域是局部的。,例2-13 变量的作用域和生存期#include void f1();int a=1,b=2;static int c;a+;b+;c+;cout ab c endl;void main()int a=1,b=2,c=3;f1();f1();f1();coutabcendl;,运行结果2 3 12 3 22 3 31 2 3,2.5 输入和输出流简介 输入和输出操作可由istream(输入流)和ostream(输出流)两个类来实现。即在iostream库中,已经预 先定义好了两个流类对象,供用户使用,它们分别为:cin:istream类对象,用于处理标准输入,它从标准输入终端(通常是键盘)上获得数据,并将这些数据加入到输入流中;例如:cinx;cout:ostream类对象,用于处理标准输出,它将输出流中的数据发送到标准输出设备(通常是显示器)上,并在标准输出设备上进行显示。例如:cout“输出变量的值:”x;,作业,习题:书面习题:教材中第126128面的习题3、4、9、10、13;第162163面的习题3、5、6上机习题:教材中第128面的习题10、第163面的习题5,