460 likes | 574 Views
第3章 程序结构和简单的输入输出. 教学内容 C++ 的标准输入 /输出 流对象 cin /cout C++ 程序的构成 顺序结构的实现. 第3章 程序结构和简单的输入输出. 重点、难点 cin,cout 顺序结构的实现. 第3章 程序结构和简单的输入输出. 教学目标 熟练掌握 C++ 的标准输入输出流对象 熟练掌握 C++ 程序的构成 熟练掌握 C++ 的3种基本结构. 第3章 程序结构和简单的输入输出. 3. 1 C++ 的输出 3. 2 C++ 的输入 3. 3 C++ 语句概述 3. 4 程序的三种基本结构
E N D
第3章 程序结构和简单的输入输出 教学内容 • C++的标准输入/输出流对象cin/cout • C++程序的构成 • 顺序结构的实现
第3章程序结构和简单的输入输出 重点、难点 • cin,cout • 顺序结构的实现
第3章程序结构和简单的输入输出 教学目标 • 熟练掌握C++的标准输入输出流对象 • 熟练掌握C++程序的构成 • 熟练掌握C++的3种基本结构
第3章程序结构和简单的输入输出 3.1 C++的输出 3.2 C++的输入 3.3 C++语句概述 3.4 程序的三种基本结构 3.5 顺序结构的实现
C++的输入与输出 C++的输出和输入是用“流”(stream)的方式实现的。 流是指来自设备或传送给设备的数据流。 C++的输入输出流库中提供了标准输入cin和标准输出cout流对象。 iostream
3.1 标准输出流cout cout是标准输出流对象,用于向标准输出设备---显示器输出数据。 数据的输出是通过插入运算符<<将字符插入到输出流中的。
标准输出流cout 【格式】cout<<表达式1<<表达式2…; 【说明】 (1)在一个cout中,可以连续使用多个插入运算符<<输出多个数据。 (2)输出多个表达式时,各表达式之间无空格输出。 (3)cout可以输出任何基本类型的数据。
【例3-1-1】标准输出流cout示例 #include <iostream> using namespace std; void main() {char ch1,ch2; int x,y; cout<<"input ch1,ch2="; cin>>ch1>>ch2; x=ch2-ch1; y=ch1+ch2; cout<<"x="<<x<<endl; cout<<"y="<<y<<endl;} 结果: input ch1,ch2=h t x=12 y=220
【例3-1-2】标准输出流cout示例 #include <iostream> using namespace std; void main() { int i=3; float r=2.0,p; cout<<"2*-i="<<2*-i<<endl; i=r/i; cout<<"i=r/i="<<i<< '\n'; r/=(i+3); cout<<"r=r/(i+3)="<<r<<endl; i=2%3; cout<<"i=2%3="<<i<<endl; r=6/3; cout<<"r="<<r<<ends;p=6.0/3; cout<<"p="<<p<<endl; } 结果: 2*-i=-6 i=r/i=0 r=r/(i+3)=0.666667 i=2%3=2 r=2 p=2
标准输出流cout 【说明】 (1)操纵符ends作用于输出流时,输出一个空字符'\0'。 (2)操纵符endl作用于输出流时,输出一个回车换行符'\n',并刷新流。 (3)输出浮点型数据时,插入运算符试图输出占最小空间的值,所以输出6.0/3的值是2,而不是2.0。
【例3-1-3】标准输出流cout(oct,hex)示例 #include <iostream> using namespace std; void main() { int a=3,m,k; m=(a=3*5,4*6,a*5 ); int i=5; k=(i++,i==2); cout<<"i="<<i<<endl; cout<<"k="<<k<<endl; cout<<"a="<<a<<endl; cout<<"m="<<m<<endl; cout<<oct; cout<<"i="<<i<<endl; cout<<"k="<<k<<endl; cout<<"a="<<a<<endl; cout<<"m="<<m<<endl; cout<<hex; cout<<"i="<<i<<endl; cout<<"k="<<k<<endl; cout<<"a="<<a<<endl; cout<<"m="<<m<<endl;} dec: i=6 k=0 a=15 m=75 oct: i=6 k=0 a=17 m=113 hex: i=6 k=0 a=f m=4b
iomanip库中常用的操纵符及其功能 在C++的iomanip库中定义了一些输出流操纵符(manipulator),用于控制提取字符的行为。这些操纵符可以作为右操作对象出现在提取运算符>>的右边。当程序中使用这些操纵符时,要包含iomanip.h头函数。
iomanip库中常用的操纵符及其功能 表中的操纵符具有持续性,即对于所输出的数据都按其指定方式显示,直到指定了另外的显示方式为止。
【例3-1-4】 iomanip库中常用的操纵符示例 #include <iostream.h> #include <iomanip> void main() {float x,y; float fx; cout<<"input x,y="; cin>>x>>y; fx=x/y; cout<<123622569.32564<<" "<<-65980000.32<<" "<<0.0000001235647<<endl; cout<<"auto:fx="<<fx<<' '<<"y="<<y<<endl; cout<<"scientific:"<<setiosflags(ios::scientific); cout<<"fx="<<fx<<' '<<"y="<<y<<endl; cout<<"fixed:"<<setiosflags(ios::fixed); cout<<"fx="<<fx<<' '<<"y="<<y<<endl;}
【例3-1-4】示例结果 结果: input x,y=31 6 1.23623e+008 -6.598e+007 1.23565e-007 auto:fx=5.16667 y=6 scientific:fx=5.166667e+000 y=6.000000e+000 fixed:fx=5.16667 y=6
标准输出流cout 【说明】 (1)浮点数默认的输出方式是自动方式,即输出6位有效位数字,超过6位的按四舍五入截断。 (2)自动方式下,如果输出比较大、比较小或接近于0的数时,系统会自动按科学法表示。 (3)对于浮点数,操纵符setiosflags(ios::scientific)和setiosflags(ios::fixed)分别设置其输出方式为科学表示法或定点表示法。
3.2 标准输入流对象cin cin是标准输入流对象,用于从标准输入设备-键盘上读取数据。 当用户在键盘上输入字符时,输入的字符顺序形成了输入流。 数据的输入是通过提取运算符>>从输入流中提取的。
标准输入流对象cin 【格式】cin>>表达式1>>表达式2…; 【说明】 (1)在一个cin中,可以连续使用多个提取符>>输入多个数据。 (2)提取符>>后面的表达式可以是获得数据的变量或对象。 (3)cin可以输入任何基本类型的数据。
【例3-2-1】标准输入流对象cin 示例 输入: 5 8 5.0 8.0 结果: t=-4 z=-4.33333 #include <iostream> using namespace std; void main() {int m,n,t; float x,y,z; cin>>m>>n; cin>>dec>>x>>y; t=(m+n)/(m-n); z=(x+y)/(x-y); cout<<"t="<<t<<endl; cout<<"z="<<z<<endl; }
标准输入流对象cin 【说明】 (1)输入多个数据时,每两个数据之间用空格、制表符或换行符隔开。 (2)提取符>>从流中提取字符时,只提取除空格、制表符或换行符之外的字符,而空格、制表符或换行符被跳过。 (3)提取字符时,整数的首字符可以是符号字符(+或-)或整数字符;浮点数的首字符可以是小数点或整数字符。 (4)输入字符型数据时,不要用单引号''括起来。
【例3-2-2】标准输入流对象cin示例 输入: b a 3 结果: ch1=b ch2=a fvar=5.1 #include <iostream> using namespace std; void main() {char ch1,ch2; int ivar; float fvar; cin>>ch1>>ch2>>ivar; fvar=(ch1-ch2)*2.1f+ivar; cout<<"ch1="<<ch1<<endl; cout<<"ch2="<<ch2<<endl; cout<<"fvar="<<fvar<<endl; }
【例3-2-3】标准输入流对象cin示例 输入: 12 12 12 结果: x=12 ox=10 hx=18 s=22 m=28 void main() {int x,ox,hx,s,m; cin>>dec>>x; cin>>oct>>ox; cin>>hex>>hx; cout<<"x="<<x<<endl; cout<<"ox="<<ox<<endl; cout<<"hx="<<hx<<endl; s=x+ox; m=ox+hx; cout<<"s="<<s<<endl; cout<<"m="<<m<<endl;}
iostream库中常用的操纵符及其功能 iostream库中定义了一些输入输出流操纵符(manipulator),用于控制流的格式。这些操纵符可以作为右操作对象出现在提取运算符>>和插入运算符<<的右边。
控制符 描述 dec 设置基数为10 oct 设置基数为8 hex 设置基数为16 endl 输出换行符'\n',并刷新流 ends 输出'\0' flush 刷新流 iostream库中常用的操纵符及其功能
iostream库中常用的操纵符及其功能 【说明】 (1)从键盘输入十六进制或八进制数据时,不需要加前缀0x或0。 (2)操纵符dec、hex和oct具有持续性,即对于所输入的数据都按其指定的基数表示,直到指定了另外的基数为止。 例如: cin>>oct>>x>>y; //输入两个八进制数 cin>>hex>>a>>b; //输入两个十六进制数
getchar和putchar 函数(c) 1. putchar函数 putchar函数的作用是向终端输出一个字符。 例如: putchar(ch1); 它输出字符变量ch1的值。
【例3-2-4】putchar 函数示例 #include <iostream> using namespace std; int main( ) {char a,b,c; a=‘B’;b=‘O’;c=‘Y’; putchar(a);putchar(b); putchar(c);putchar(‘\n’); putchar(66);putchar(79); putchar(89);putchar(10); return 0;} 运行结果为: BOY BOY
2. getchar 函数 getchar函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。 getchar函数没有参数,其一般形式为: getchar( ),函数的值就是从输入设备得到的字符。
【例3-2-5】getchar 函数示例 #include <iostream> using namespace std; int main( ) {char c; c=getchar( ); putchar(c+32); putchar(′\n′); return 0; }
scanf和printf函数 在C语言中是用printf函数进行输出,用scanf函数进行输入的。C++保留了C语言的这一用法。scanf函数一般格式是: scanf(格式控制,输出表列) printf函数的一般格式是: printf(格式控制,输出表列)
【例3-2-6】scanf和printf函数示例 #include <iostream> using namespace std; int main( ) {int a; float b; char c; //注意在变量名前要加地址运算符& scanf(″%d %c %f″,&a,&c,&b); printf(″a=%d,b=%f,c=%c\n″,a,b,c); return 0; }
3.3 C++语句概述 【例3-3-1】下面是一个完整的C++程序。 #include <iostream> //预处理命令 using namespace std; //在函数之外的声明部分 int a=3; //在函数之外的声明部分 int main( ) //函数首部 { float b; //函数内的声明部分 b=4.5; //执行语句 cout<<a<<b; //执行语句 return 0; //执行语句 }
C++语句 C++语句可以分为以下4种: 1. 声明语句 2. 执行语句 通知计算机完成一定的操作。 3. 空语句 ;
C++语句 【注意】复合语句中最后一个语句中最后的分号不能省略。 4. 复合语句 复合语句也称为块语句,是由一对{}括起来的零个或多个语句组成。在语法上,复合语句被视为一条语句。 例如: { z=x+y; if(z>100) z=z-100; cout<<z; }
C++语句 复合语句可以嵌套使用。复合语句一般用于下列两种情况: (1)当语句上要求一条语句,但又难于用一条简单语句表达时,用复合语句。 (2)当声明的名字仅在某一范围内使用时,使用块语句使其形成局部化的块结构。
P条件 A P条件 A B B A 3.4 程序 三种基本结构 3.4.1 程序的三种基本结构 图3-1 三种基本结构
三种基本结构共同的特点 (1)只有一个入口点,一个出口点。 (2)对于每个操作都有一条路径,即从入口到出口要通过每个操作。
3.4.2 程序的组成 程序一般由3部分组成: 输入 //已知 处理 //求解 输出(必须的) //答
A B 3.5 顺序结构的实现 【功能】顺序执行 A、B操作。
3.5.1 赋值语句 【注意】=是一个赋值运算符,而不是等号 赋值语句是由赋值表达式加上一个分号构成。 例如: a=b; a=b=c=d;
【例3-5-1】 已知圆半径r,求圆的面积。 #include <iostream> using namespace std; #define PI 3.1415926 //constant define void main() { float r,area; //variable define cout<<“input r:”; //interface:prompt user input cin>>r; //input r area=PI*r*r; //calculate area cout<<“area=”<<area<<endl; } //output area
【例3-5-2】求一元二次方程式ax2+bx+c=0的根。a,b,c的值在运行时由键盘输入,它们的值满足b2-4ac≥0。【例3-5-2】求一元二次方程式ax2+bx+c=0的根。a,b,c的值在运行时由键盘输入,它们的值满足b2-4ac≥0。 • 算法: • 输入a,b,c的值 • 求b2-4ac • 求x的值 • 输出
【例3-5-2】程序 #include <iostream> #include <cmath> using namespace std; void main( ) {float a,b,c,x1,x2; cin>>a>>b>>c; x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); cout<<"x1="<<x1<<endl; cout<<"x2="<<x2<<endl; }
【例3-5-3】已知三角形的3边长,求三角形的面积【例3-5-3】已知三角形的3边长,求三角形的面积 #include <iostream> #include <cmath> using namespace std; int main() { float a,b,c,l,area; //variable define cout<<“input a,b,c:”; //interface:prompt user input cin>>a>>b>>c; //input a,b,c l=(a+b+c)/2; area=sqr(l*(l-a)*(l-b-)*(l-c)); //calculate area cout<<“area=”<<area<<endl; return 0; }
问题 a,b,c不能构成三角形,怎么办?