第3章 简单程序设计初步_第1页
第3章 简单程序设计初步_第2页
第3章 简单程序设计初步_第3页
第3章 简单程序设计初步_第4页
第3章 简单程序设计初步_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章程序设计初步

第3章程序设计初步3.1面向过程的程序设计和算法面向过程的程序设计:就是考虑程序要“做什么”,解决“怎么做”的问题.一个面向过程的程序应包括以下两方面内容:(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(datastructure)。(2)对操作的描述。即操作步骤,也就是算法(algorithm)。3.1面向过程的程序设计和算法面向过程的程序,可以用下面的公式表示:

程序=算法+数据结构算法:解决一个问题而采取的方法和步骤。(广义)计算机算法分两类:数值算法和非数值算法学习面向对象的语言依然要学习和掌握一些常用的算法。(C++语言也是如此)3.1面向过程的程序设计和算法算法的表示:

1、自然语言2、流程图(特点:形象直观,修改不方便,不适合复杂程序,本教材多使用流程图表示算法)3、伪代码(pseudocode)(一种介于自然语言和计算机语言之间的文字和符号)4、用计算机语言3.2C++程序的组成1.声明语句如inta,b;2.执行语句通知计算机完成一定的操作。执行语句包括:(1)控制语句,完成一定的控制功能。C++有9种控制语句,即

①if()~else~(条件语句)②for()~(循环语句)③while()~(循环语句)④do~while()(循环语句)⑤continue(结束本次循环语句)⑥break(中止执行switch或循环语句)⑦switch(多分支选择语句)⑧goto(转向语句)⑨return(从函数返回语句)C++程序的语句(2)函数和流对象调用语句。函数调用语句由一次函数调用加一个分号构成一个语句,例如sort(x,y,z);//假设已定义了sort函数,它有3个参数cout<<x<<endl;//流对象调用语句(3)表达式语句。由一个表达式加一个分号构成一个语句。x=(a+1,a+2,a+3,a+4,a+5)是表达式x=(a+1,a+2,a+3,a+4,a+5);是语句3.空语句下面是一个空语句:;有时用来做被转向点,或循环语句中的循环体。4.复合语句可以用{}把一些语句括起来成为复合语句。如下面是一个复合语句。{z=x+y;if(z>100)z=z-100;cout<<z;}3.4C++的输入与输出

在C++程序中可以方便的利用cout和cin进行输出和输入。但是cout和cin并不是C++语言中正式的输入与输出语句。

cout和cin是输入输出流库中的流对象,是在编译系统提供的I/O库中定义的。

在使用cout和cin进行输出和输入时要使用预处理命令把头文件stream包含到本文件中:#include<iostream>3.4C++的输入与输出3.4C++的输入与输出cout语句的一般格式:cout<<表达式1<<表达式2<<…….<<表达式n;

cin语句的一般格式:cin>>变量1>>变量2>>………>>变量n;一个cout语句可以分写成若干行。如cout<<″ThisisasimpleC++program.″<<endl;可以写成cout<<″Thisis″//注意行末尾无分号<<″aC++″<<″program.″<<endl;//语句最后有分号也可写成多个cout语句,即cout<<″Thisis″;//语句末尾有分号cout<<″aC++″;cout<<″program.″;cout<<endl;比较printf与cout在用cout输出时,用户不必通知计算机按何种类型输出,系统会自动判别输出数据的类型,使输出的数据按相应的类型输出。如已定义a为int型,b为float型,c为char型,则cout<<a<<′′<<b<<′′<<c<<endl;会以下面的形式输出:4345.789a用printf输出时:printf(″a=%d,b=%f,c=%c\n″,a,b,c);putchar函数作用:向终端输出一个字符格式:putchar(字符变量与常量);putchar(‘a’);//输出结果acharc=‘a’;putchar(c);//输出结果aputchar(66);//输出结果Bputchar('\101′)//输出结果A;

cin输入cin>>a>>b>>c>>d;可以写成

cin>>a//注意行末尾无分号>>b//这样写可能看起来清晰些>>c>>d;也可以写成cin>>a;cin>>b;cin>>c;cin>>d;以上3种情况均可以从键盘输入:1234↙也可以分多行输入数据:在用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节charc1,c2;inta;floatb;cin>>c1>>c2>>a>>b;cout<<c1<<""<<c2<<""<<a<<""<<b<<endl;如果输入123456.78↙(空格字符和回车换行符被跳过)输出为:123456.78getchar函数此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一般形式为getchar()函数的值就是从输入设备得到的字符.cin语句不能把空格字符、tab键、回车换行符作为字符输入给字符变量,它们将被跳过。getchar函数可将空格字符tab键、回车换行符(或任何其他键盘上的字符)输入给字符变量用scanf输入scanf(“格式控制字符串”,地址列表)变量地址为&变量名Eg.scanf(″%d%c%f″,&a,&c,&b);而cin>>a>>c>>b就可以3.4.2在输入流与输出流中使用控制符满足输入输出时有一些特殊的要求doublea=123.456789012345;对a赋初值cout<<a;输出:123.456cout<<setprecision(9)<<a;输出:123.456789cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;输出:123.45678901cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a;输出:1.2346e02intb=123456;cout<<setw(10)<<b<<′,′<<b;输出:123456,123456setw.:只对其后的第一个数据起作用程序的三种基本结构1、顺序结构AB…C#include<iostream>#include<cmath>//由于程序要用到//数学函数sqrt,故应包含头文件cmathusingnamespacestd;intmain(){ floata,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; return0;}2、选择条件?真假ABx>y?真假z=xz=y例如: if(x<y)cout<<“xissmallerthany.”; elsecout<<“xislargerthanyorequaltoy.”; if(a==b&&x==y)cout<<“xissmallerthany.”;3.6关系运算和逻辑运算关系表达式:用关系运算符将两个表达式连接起来的式子;

优先级相同(高)①< (小于)②<= (小于或等于)③> (大于)④>= (大于或等于) ⑤== (等于)⑥!=(不等于)优先级相同(低)1.前4种关系运算符(<,<=,>,>=)的优先级别相同,后两种也相同。前4种高于后两种。例如,“>”优先于“==”。而“>”与“<”优先级相同。2.关系运算符的优先级低于算术运算符。3.关系运算符的优先级高于赋值运算符。例如:c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)关系表达式的值是一个逻辑值,即“真”或“假”。例如,关系表达式“5==3”的值为“假”,“5>=0”的值为“真”。在C和C++中都用数值1代表“真”,用0代表“假”。如果有以下赋值表达式: d=a>b则d得到的值为1 f=a>b>cf得到的值为0逻辑常量和逻辑变量C语言没有提供逻辑型数据,关系表达式的值(真或假)分别用数值1和0代表。C++增加了逻辑型数据。逻辑型常量只有两个,即false(假)和true(真)。逻辑型变量要用类型标识符bool来定义,它的值只能是true和false之一。如: boolfound,flag=false;//定义逻辑变量found和flag,并使flag的初值为false found=true;//将逻辑常量true赋给逻辑变量found由于逻辑变量是用关键字bool来定义的,因此又称为布尔变量。逻辑型常量又称为布尔常量。所谓逻辑型,就是布尔型。设立逻辑类型的目的是为了看程序时直观易懂。在编译系统处理逻辑型数据时,将false处理为0,将true处理为1。因此,逻辑型数据可以与数值型数据进行算术运算。如果将一个非零的整数赋给逻辑型变量,则按“真”处理,如 flag=123;//赋值后flag的值为true cout<<flag;输出为数值1。逻辑运算和逻辑表达式将两个关系表达式用逻辑运算符连接起来就成为一个逻辑表达式。C++提供3种逻辑运算符:(1)&&逻辑与(相当于其他语言中的AND)(2)||逻辑或(相当于其他语言中的OR)(3)!逻辑非(相当于其他语言中的NOT)逻辑运算举例如下: a&&b若a,b为真,则a&&b为真。 a||b若a,b之一为真,则a||b为真。 !a若a为真,则!a为假。逻辑表达式的值是一个逻辑量“真”或“假”。在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”。但在判断一个逻辑量是否为“真”时,采取的标准是:如果其值是0就认为是“假”,如果其值是非0就认为是“真”。判断选择语句,有三种形式:if(表达式)语句语句条件真假语句2语句1条件真假2)if(表达式)语句1else语句2if(a>b)

cout<<a;if(a>b)

cout<<a;else

cout<<b;3.7选择结构和if语句3)if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3…elseif(表达式m)语句melse语句n例如:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;注意:1)if后可跟复合语句。2)注意;的位置。3)注意多重ifelse的搭配。if(a>b){a=1;b=0;}else{a=0;b=1;}a=0b=1a=1b=0a>b真假if(i>j)i++;if(i>j);i++;i++i>j真假if总是与它上面最近的else配对,如要改变,用复合语句{}。注意书写格式,相互配对的语句要对齐。i>j真假i++例:输入两个实数,按代数值由小到大次序输出这两个数。voidmain(void){floata,b,t;//定义变量cout<<“Input2RealNumber:\n";//在屏幕上的提示信息

cin>>a>>b;//给变量赋值a:7,b:3if(a>b){t=a;a=b;b=t;}//交换数据,用中间变量cout<<a<<‘\t’<<b<<endl;//输出变量

}}bat73773输出结果:373.7.2if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式如下:if()if()语句1else语句2elseif()语句3else语句4 内嵌if应当注意if与else的配对关系。else总是与它上面最近的、且未配对的if配对。{}限定了内嵌if语句的范围,关系清楚,不易出错1、编写程序计算y的值:-1(x<0)y=0(x=0)1(x>0)1.#include<iostream>voidmain(){intx,y;cin>>x;if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;cout<<y<<endl;}2.#include<iostream>voidmain(){intx,y;cin>>x;if(x<0)y=-1;elseif(x==0)y=0;elsey=1;cout<<y<<endl;}3.

#include<iostream>voidmain(){intx,y;cin>>x;if(x<=0)if(x==0)y=0;elsey=-1;elsey=1;cout<<y<<endl;}4.#include<iostream>voidmain(){intx,y;y=1;cin>>x;if(x<=0)if(x==0)y=0;elsey=-1;cout<<y<<endl;}3.8条件运算符和条件表达式条件表达式的一般形式为表达式1?表达式2∶表达式3优先级高于赋值运算符,低于逻辑运算符用if语句表示则为:if(表达式1)表达式2;else表达式3;eg.x?′a′∶′b′若x=0,则条件表达式的值为字符′b′的ASCII码。例3.7#include<iostream>usingnamespacestd;intmain(){ charch; cin>>ch; ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch; cout<<ch<<endl; return0;}b=(a<0?1:a>0?2:0);1.#include<iostream>voidmain(){ inta,b; cin>>a; if(a<0)b=1; elseif(a>0)b=2; elseb=0; cout<<b<<endl;}2.#include<iostream>voidmain(){ inta,b; cin>>a; if(a) if(a<0)b=1; elseif(a>0)b=2; elseb=0; cout<<b<<endl;}3.#include<iostream>voidmain(){ inta,b; cin>>a; b=2; if(a) if(a<0)b=1; elseif(a==0)b=0; elseb=2; cout<<b<<endl;}4.#include<iostream>voidmain(){ inta,b; cin>>a; b=0; if(a<=0) if(a<0)b=1; elseb=2; cout<<b<<endl;}格式如下:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2...case常量表达式n:语句ndefault:语句n+1//可无}语义为:根据对表达式的计算得到的值,从第一个case常量开始从上到下逐个进行匹配,若相等,则以此为入口,顺序向下执行各条语句序列。3.9多分支选择结构和switch语句格式如下:Switch(<整型表达式>){case<整常型表达式1>:<语句序列1>;break;case<整常型表达式2>:<语句序列2>;break;……case<整常型表达式n>:<语句序列n>;break;default:<语句序列n+1>//可无}通过加break强行跳转语句,在执行完第一个语句序列后,就强行跳出switch结构P86第11题:将百分制成绩转换成5级switch(int(score/10)){case10:case9:grade='A';break;case8:grade='B';break;case7:grade='C';break;case6:grade='D';break;default:grade='E';}3.11循环结构和循环语句while语句的一般形式如下:while(表达式)语句例3.10求1+2+3+…+100。#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}cout<<″sum=″<<sum<<endl;}do-while语句构成循环do-while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为do语句while(表达式);例3.11用do-while语句求1+2+3+…+100。#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);cout<<″sum=″<<sum<<endl;return0;}对同一个问题用while语句处理和用dowhile语句处理是否等价?#include<iostream>usingnamespacestd;intmain(){inti,sum=0;cin>>i;while(i<=100){sum=sum+i;i++;}cout<<"sum="<<sum<<endl;return0;}#include<iostream>usingnamespacestd;intmain(){inti,sum=0;cin>>i;do{sum=sum+i;i++;}while(i<=100);cout<<"sum="<<sum<<endl;return0;}格式:for(e1;e2;e3)<语句体>计算e2执行<语句>非00退出循环计算e1计算e3e1;while(e2){<语句>;e3;}

for循环语句for(循环变量赋初值;循环条件;循环变量增值)语句例如for(i=1;i<=100;i++)sum=sum+i;它的执行过程与图3.10完全一样。它相当于以下语句:i=1;while(i<=100){sum=sum+i;i++;}for语句for(;;)表示无限循环,相当于while(1)语句包含逗号表达式的其它形式的for语句,如:for(sum=0,i=1;i<100;i++)for(i=1,j=100;i<=j;i++,j++)k=k+i+j;for(i=1;i<=100;i++,i++);例当结束条件为和大于2000时,如何表示?while(sum<=2000){……}当输入的数字为-1作为结束条件时,如何表示?小红今年内12岁,父亲比她大20岁,问多少年之后,父亲的年龄是小红的二倍?cin>>n;while(n!=-1){sum=sum+n;cin>>n;}inth=12,f=32;intcount=0;while(2*h!=f){h++;f++;count++;}例输入若干字母,将它们变成其后的第四个字母,A—>E,W—>A,非字母字符忽略。思路:1.建立循环,循环结束以输入回车符为准while((c=getchar())!=‘\n’)2.判断输入的是否是字符,否则忽略{if((c>=′a′&&c<=′z′)||(c>=′A′&&c<=′Z′))3.变成其后的第四个字母c=c+4;4.若变换后超出Z时,要进行模运算。if(c>′Z′&&c<=′Z′+4||c>′z′)c=c-26……A……Z……a……z……多重循环--九九乘法表(1)for(i=1;i<=1;i++)cout<<“1”<<“*”<<i<<“=”<<setw(2)<<1*i<<“”;cout<<endl;for(i=1;i<=2;i++)cout<<“2”<<“*”<<i<<“=”<<setw(2)<<2*i<<“”;cout<<endl;for(i=1;i<=n;i++)cout<<“n”<<“*”<<i<<“=”<<setw(2)<<n*i<<“”;cout<<endl;for(n=1;n<=9;n++) {for(i=1;i<=n;i++) cout<<n<<"*"<<i<<"="<<setw(2)<<n*i<<""; cout<<endl; }举一反三for(i=1;i<=9;i++)cout<<“1”<<“*”<<i<<“=”<<setw(2)<<1*i<<“”;cout<<endl;for(i=1;i<=8;i++)cout<<“2”<<“*”<<i<<“=”<<setw(2)<<2*i<<“”;cout<<endl;for(i=1;i<=10-n;i++)cout<<“n”<<“*”<<i<<“=”<<setw(2)<<n*i<<“”;cout<<endl;for(n=1;n<=9;n++) {for(i=1;i<=10-n;i++) cout<<n<<"*"<<i<<"="<<setw(2)<<n*i<<""; cout<<endl; }*********************第1行一个*第2行二个*。。。。。第N行N个*inti,j,n;cout<<"请输入要打印的行数:";cin>>n;for(inti=1;i<=n;i++){

for(j=1;j<=i;j++)cout<<"*";//打印若干个*

cout<<endl;//换行}*********************for(j=1;j<=n-i+1;j++)@@@@*@@@***@@*****@****************第1行:4个@,接着1个*,换行第2行:3个@,接着3个*,换行第3行:2个@,接着5个*,换行第4行:1个@,接着7个*,换行第5行:0个@,接着9个*,换行每行@的个数:5-i每行*的个数:2*i-1每次循环要做三件事:先打印(5-i)个@后,接着打印(2*i-1)个*,再换行for(inti=1;i<=5;i++){for(j=1;j<=5-i;j++)cout<<"@";//打印若干个@

for(k=1;k<=2*i-1;k++)cout<<"*";//打印若干个*cout<<endl;//换行}练习分析程序运行结果。

inti(1),a(0);for(;i<=5;i++)

{

do{i++; a++;}while(i<3);

i++;

}cout<<a<<","<<i<<endl;

ia1021i<3成立32i<3不成立45for(;I<=5;I++)6378for(;I<=5;I++)格式:break;该语句在程序中只用于下列两种情况:1、在开关语句中,其功能是退出开关语句,执行其后的语句;2、在循环体中,其功能是用来退出该重循环break语句格式:continue;功能:只用在循环体中,用来结束该次循环。在循环体中遇到continue语句时,本次循环结束,回到循环条件判断是否执行下一次循环。continue语句#defineM10voidmain(){ intnum,sum(0); cout<<"inputnumber:"; for(inti=0;i<M;i++) { cin>>num; if(num<0)break; sum+=num; }cout<<"sum="<<sum<<endl;}#defineM10voidmain(){ intnum,sum(0); cout<<"inputnumber:"; for(inti=0;i<M;i++) { cin>>num; if(num<0)continue; sum+=num; }cout<<"sum="<<sum<<endl;}求10个数之和,遇负数终止求10个中的正数之和m是素数的条件是不能被2,3,…,m-1整除。

intm;cout<<"pleaseinputanumber:\n";cin>>m;//输入for(intI=2;I<m;I++) if(m%I==0)break;//处理if(I>=m)cout<<m<<"isprime.\n";elsecout<<m<<"isn'tprime.\n";//输出

判断整数

m其是否为素数快速算法:判断它能否被2到sqrt(m)之间的数整除,若不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论