谭浩强《C程序设计》课件第3章.ppt

上传人:max****ui 文档编号:12555051 上传时间:2020-05-11 格式:PPT 页数:113 大小:680KB
返回 下载 相关 举报
谭浩强《C程序设计》课件第3章.ppt_第1页
第1页 / 共113页
谭浩强《C程序设计》课件第3章.ppt_第2页
第2页 / 共113页
谭浩强《C程序设计》课件第3章.ppt_第3页
第3页 / 共113页
点击查看更多>>
资源描述
第3章程序设计初步第4章函数与预处理第5章数组第6章指针第7章自定义数据类型,第2篇面向过程的程序设计,第3章程序设计初步,3.1面向过程的程序设计和算法3.2+程序和语句3.3赋值语句3.4C+的输入与输出3.5编写顺序结构的程序3.6关系运算和逻辑运算3.7选择结构和语句3.8条件运算符和条件表达式3.9多分支选择结构和switch语句3.10编写选择结构的程序3.11循环结构和循环语句3.12循环的嵌套3.13break语句和continue语句3.14编写循环结构的程序,在面向过程的程序设计中,程序设计者必须指定计算机执行的具体步骤,程序设计者不仅要考虑程序要“做什么”,还要解决“怎么做”的问题,根据程序要“做什么”的要求,写出一个个语句,安排好它们的执行顺序。怎样设计这些步骤,怎样保证它的正确性和具有较高的效率,这就是算法需要解决的问题。,3.1面向过程的程序设计和算法,一个面向过程的程序应包括以下两方面内容:(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(datastructure)。(2)对操作的描述。即操作步骤,也就是算法(algorithm)。对于面向过程的程序,可以用下面的公式表示:程序=算法+数据结构作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。算法是处理问题的一系列的步骤。算法必须具体地指出在执行时每一步应当怎样做。,3.1.1算法的概念,不要认为只有“计算”的问题才有算法。广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。计算机算法可分为两大类别:数值算法和非数值算法。数值算法的目的是求数值解。非数值算法包括的面十分广泛,最常见的是用于事务管理领域。目前,计算机在非数值方面的应用远远超过了在数值方面的应用。C+既支持面向过程的程序设计,又支持面向对象的程序设计。无论面向过程的程序设计还是面向对象的程序设计,都离不开算法设计。,1.自然语言用中文或英文等自然语言描述算法。但容易产生歧义性,在程序设计中一般不用自然语言表示算法。2.流程图可以用传统的流程图或结构化流程图。用图的形式表示算法,比较形象直观,但修改算法时显得不大方便。3.伪代码(pseudocode)伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。如,3.1.2算法的表示,ifxispositivethenprintxelseprint-x用伪代码写算法并无固定的、严格的语法规则,只需把意思表达清楚,并且书写的格式要写成清晰易读的形式。它不用图形符号,因此书写方便、格式紧凑,容易修改,便于向计算机语言算法(即程序)过渡。4.用计算机语言表示算法用一种计算机语言去描述算法,这就是计算机程序。,由第1章已知,一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件)。每一个程序单位由以下几个部分组成:(1)预处理命令。如#include命令和#define命令。(2)声明部分。例如对数据类型和函数的声明,以及对变量的定义。(3)函数。包括函数首部和函数体,在函数体中可以包含若干声明语句和执行语句。如下面是一个完整的C+程序:,3.2C+程序和语句,#include/预处理命令usingnamespacestd;/在函数之外的声明部分inta=3;/在函数之外的声明部分intmain()/函数首部floatb;/函数内的声明部分b=4.5;/执行语句coutab;/执行语句return0;/执行语句如果一个变量在函数之外进行声明,此变量是全局变量,它的有效范围是从该行开始到本程序单位结束。如果一个变量在函数内声明,此变量是局部变量,它的有效范围是从该行开始到本函数结束。C+程序结构可以用图31表示。,图3.1,程序应该包括数据描述(由声明语句来实现)和数据操作(由执行语句来实现)。数据描述主要包括数据类型的声明、函数和变量的定义、变量的初始化等。数据操作的任务是对已提供的数据进行加工。C+程序中最小的独立单位是语句(statement)。它相当于一篇文章中的一个句子。句子是用句号结束的。语句一般是用分号结束的(复合语句是以右花括号结束的)。C+语句可以分为以下4种:,1.声明语句如inta,b;在C语言中,只有产生实际操作的才称为语句,对变量的定义不作为语句,而且要求对变量的定义必须出现在本块中所有程序语句之前。因此C程序员已经养成了一个习惯:在函数或块的开头位置定义全部变量。在C+中,对变量(以及其他对象)的定义被认为是一条语句,并且可以出现在函数中的任何行,即可以放在其他程序语句可以出现的地方,也可以放在函数之外。这样更加灵活,可以很方便地实现变量的局部化(变量的作用范围从声明语句开始到本函数或本块结束)。,2.执行语句通知计算机完成一定的操作。执行语句包括:(1)控制语句,完成一定的控制功能。C+有9种控制语句,即if()else(条件语句)for()(循环语句)while()(循环语句)dowhile()(循环语句)continue(结束本次循环语句)break(中止执行或循环语句)switch(多分支选择语句)goto(转向语句)return(从函数返回语句),(2)函数和流对象调用语句。函数调用语句由一次函数调用加一个分号构成一个语句,例如sort(x,y,z);/假设已定义了sort函数,它有3个参数coutx100)z=z-100;cout0)cout000)cout0”实现输入的语句称为输入语句或cin语句,把由cout和流插入运算符“变量2变量n;在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或n,ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。,*3.4.1输入流与输出流的基本操作,一个cout语句可以分写成若干行。如coutThisisasimpleC+program.endl;可以写成coutThisis/注意行末尾无分号aC+program.endl;/语句最后有分号也可写成多个cout语句,即coutThisis;/语句末尾有分号coutaC+;coutprogram.;coutbcd;,可以写成cina/注意行末尾无分号b/这样写可能看起来清晰些cd;也可以写成cina;cinb;cinc;cind;以上3种情况均可以从键盘输入:1234也可以分多行输入数据:,1234在用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节。如有charc1,c2;inta;floatb;cinc1c2ab;如果输入123456.78,注意:34后面应该有空格以便和56.78分隔开。也可以按下面格式输入:123456.78(在1和2之间有空格)不能用cin语句把空格字符和回车换行符作为字符输入给字符变量,它们将被跳过。如果想将空格字符或回车换行符(或任何其他键盘上的字符)输入给字符变量,可以用3.4.3节介绍的getchar函数。在组织输入流数据时,要仔细分析cin语句中变量的类型,按照相应的格式输入,否则容易出错。,上面介绍的是使用cout和cin时的默认格式。但有时人们在输入输出时有一些特殊的要求,如在输出实数时规定字段宽度,只保留两位小数,数据向左或向右对齐等。C+提供了在输入输出流中使用的控制符(有的书中称为操纵符),见书中表3.1。需要注意的是:如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。举例:输出双精度数。,*3.4.2在输入流与输出流中使用控制符,doublea=123.456789012345;对a赋初值(1)couta;输出:123.456(2)coutsetprecision(9)a;输出:123.456789(3)coutsetprecision(6);恢复默认格式(精度为6)(4)coutsetiosflags(iosfixed);输出:123.456789(5)coutsetiosflags(iosfixed)setprecision(8)a;输出:123.45678901(6)coutsetiosflags(iosscientific)a;输出:1.234568e+02(7)coutsetiosflags(iosscientific)setprecision(4)a;输出:1.2346e02下面是整数输出的例子:intb=123456;对b赋初值(1)coutb;输出:123456(2)couthexb;输出:1e240(3)coutsetiosflags(iosuppercase)b;输出:1E240(4)coutsetw(10)b,b;输出:123456,123456(5)coutsetfill(*)setw(10)b;输出:*123456(6)coutsetiosflags(iosshowpos)b;输出:+123456,如果在多个cout语句中使用相同的setw(n),并使用setiosflags(iosright),可以实现各行数据右对齐,如果指定相同的精度,可以实现上下小数点对齐。例3.1各行小数点对齐。#include#includeusingnamespacestd;intmain()doublea=123.456,b=3.14159,c=-3214.67;coutsetiosflags(iosfixed)setiosflags(iosright)setprecision(2);coutsetw(10)aendl;coutsetw(10)bendl;coutsetw(10)cendl;return0;,输出如下:123.46(字段宽度为10,右对齐,取两位小数)3.14-3214.67先统一设置定点形式输出、取两位小数、右对齐。这些设置对其后的输出均有效(除非重新设置),而setw只对其后一个输出项有效,因此必须在输出a,b,c之前都要写setw(10)。,C+还保留了C语言中用于输入和输出单个字符的函数,使用很方便。其中最常用的有getchar函数和putchar函数。1.putchar函数(字符输出函数)putchar函数的作用是向终端输出一个字符。例如putchar(c);它输出字符变量的值。,3.4.3用getchar和putchar函数进行字符的输入和输出,例3.2输出单个字符。#include/或者包含头文件stdio.h:#includeusingnamespacestd;intmain()chara,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);putchar(n);putchar(66);putchar(79);putchar(89);putchar(10);return0;运行结果为BOYBOY,可以看到:用putchar可以输出转义字符,putchar(n)的作用是输出一个换行符,使输出的当前位置移到下一行的开头。putchar(66)的作用是将66作为ASCII码转换为字符输出,66是字母B的ASCII码,因此putchar(66)输出字母B。其余类似。putchar(10)中的10是换行符的ASCII码,putchar(10)输出一个换行符,作用与putchar(n)相同。也可以输出其他转义字符,如putchar(101)(输出字符A,八进制的101是A的ASCII码)putchar()(输出单引号字符)putchar(015)(输出回车,不换行,使输出的当前位置移到本行开头),2.getchar函数(字符输入函数)此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一般形式为getchar()函数的值就是从输入设备得到的字符。例3.3输入单个字符。#includeusingnamespacestd;intmain()charc;c=getchar();putchar(c+32);putchar(n);return0;在运行时,如果从键盘输入大写字母A并按回车键,就会在屏幕上输出小写字母a。,请注意,getchar()只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。例如,例3.3第5行可以用下面一行代替:putchar(getchar()+32);putchar(n);因为getchar()读入的值为A,A+32是小写字母a的ASCII码,因此putchar函数输出a。此时不必定义变量c。也可用cout输出getchar函数得到字符的ASCII的值:coutgetchar();这时输出的是整数97,因为用getchar()读入的实际上是字符的ASCII码,现在并未把它赋给一个字符变量,cout就按整数形式输出。如果改成,cout(c=getchar();/设c已定义为字符变量则输出为字母a,因为要求输出字符变量c的值。可以看到用putchar和getchar函数输出和输入字符十分灵活方便,由于它们是函数所以可以出现在表达式中,例如coutabc;x1=(-b+sqrt(b*b-4*a*c)/(2*a);x2=(-b-sqrt(b*b-4*a*c)/(2*a);coutx1=x1endl;coutx2=x2endl;return0;,3.5编写顺序结构的程序,运行情况如下:4.58.82.4x1=-0.327612x2=-1.17794如果程序中要用到数学函数,都要包含头文件cmath(也可以用老形式的头文件math.h,但提倡使用C+新形式的头文件,请参阅第14章14.3节)。在写程序时,一定要注意将数学表达式正确地转换成合法的C+表达式。可以看到:顺序结构的程序中的各执行语句是顺序执行的。这种程序最简单,最容易理解。,往往要求根据某个指定的条件是否满足来决定执行的内容。例如,购物在1000元以下的打九五折,1000元及以上的打九折。C+提供if语句来实现这种条件选择。如ifamount)的优先级别相同,后两种也相同。前4种高于后两种。例如,“”优先于“”。而“”与“a+b等效于c(a+b)ab=c等效于(ab)=ca=bc等效于a=(bc)用关系运算符将两个表达式连接起来的式子,称为关系表达式。关系表达式的一般形式可以表示为,表达式关系运算符表达式其中的“表达式”可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式。例如,下面都是合法的关系表达式:ab,a+bb+c,(a=3)(b=5),ab)(b=0”的值为“真”。在C和C+中都用数值1代表“真”,用0代表“假”。如果有以下赋值表达式:d=ab则d得到的值为1f=abcf得到的值为0,C语言没有提供逻辑型数据,关系表达式的值(真或假)分别用数值1和0代表。C+增加了逻辑型数据。逻辑型常量只有两个,即false(假)和true(真)。逻辑型变量要用类型标识符bool来定义,它的值只能是true和false之一。如boolfound,flag=false;/定义逻辑变量found和flag,并使flag的初值为falsefound=true;/将逻辑常量true赋给逻辑变量found由于逻辑变量是用关键字bool来定义的,因此又称为布尔变量。逻辑型常量又称为布尔常量。所谓逻辑型,就是布尔型。设立逻辑类型的目的是为了看程序时直观易懂。,3.6.2逻辑常量和逻辑变量,在编译系统处理逻辑型数据时,将false处理为0,将true处理为1。因此,逻辑型数据可以与数值型数据进行算术运算。如果将一个非零的整数赋给逻辑型变量,则按“真”处理,如flag=123;/赋值后flag的值为truecout300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;,图3.,说明:(1)从图3.5和图3.6可以看到:3种形式的if语句都是由一个入口进来,经过对“表达式”的判断,分别执行相应的语句,最后归到一个共同的出口。这种形式的程序结构称为选择结构。在C+中if语句是实现选择结构主要的语句。(2)3种形式的if语句中在if后面都有一个用括号括起来的表达式,它是程序编写者要求程序判断的“条件”,一般是逻辑表达式或关系表达式。(3)第2、第3种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。(4)在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。,例3.6求三角形的面积。#include#include/使用数学函数时要包含头文件cmath#include/使用I/O流控制符要包含头文件iomanipusingnamespacestd;intmain()doublea,b,c;coutabc;if(a+bc,运行情况如下:pleaseentera,b,c:2.453.674.89area=4.3565变量s和area只在复合语句内用得到,因此在复合语句内定义,它的作用范围为从定义变量开始到复合语句结束。如果在复合语句外使用s和area,则会在编译时出错,系统认为这两个变量未经定义。将某些变量局限在某一范围内,与外界隔离,可以避免在其他地方被误调用。,在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式如下:if()if()语句1else语句2内嵌ifelseif()语句3else语句4内嵌if应当注意if与else的配对关系。else总是与它上面最近的、且未配对的if配对。假如写成,3.7.2语句的嵌套,if()if()语句1elseif()语句2else语句3内嵌if编程序者把第一个else写在与第一个if(外层if)同一列上,希望else与第一个if对应,但实际上else是与第二个if配对,因为它们相距最近,而且第二个if并未与任何else配对。为了避免误用,最好使每一层内嵌的if语句都包含else子句(如本节开头列出的形式),这样if的数目和else的数目相同,从内层到外层一一对应,不致出错。,如果if与else的数目不一样,为实现程序设计者的企图,可以加花括号来确定配对关系。例如:if()if()语句1/这个语句是上一行if语句的内嵌ifelse语句2/本行与第一个if配对这时限定了内嵌if语句的范围,外的else不会与内的if配对。关系清楚,不易出错。,若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且给同一个变量赋值时,可以用简单的条件运算符来处理。例如,若有以下if语句:if(ab)max=a;elsemax=b;可以用条件运算符(?:)来处理:max=(ab)?a:b;其中“(ab)?a:b”是一个“条件表达式”。它是这样执行的:如果(ab)条件为真,则条件表达式的值就取“?”后面的值,即条件表达式的值为,否则条件表达式的值为“:”后面的值,即b。,3.8条件运算符和条件表达式,条件运算符要求有3个操作对象,称三目(元)运算符,它是C+中惟一的一个三目运算符。条件表达式的一般形式为表达式1?表达式2表达式3条件运算符的执行顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。“max=(ab)?a:b”的执行结果是将条件表达式的值赋给max。也就是将a和b二者中的大者赋给max。条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。,条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。如x?ab如果已定义x为整型变量,若x=0,则条件表达式的值为字符b的ASCII码。表达式2和表达式3的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型。如有条件表达式xy?1:1.5,如果xy,则条件表达式的值为1.5,若xy,值应为1,由于C+把1.5按双精度数处理,双精度的类型比整型高,因此,将1转换成双精度数,以此作为表达式的值。,例3.7输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#includeusingnamespacestd;intmain()charch;cinch;ch=(ch=A,switch语句是多分支选择语句,用来实现多分支选择结构。它的一般形式如下:switch(表达式)case常量表达式1:语句1case常量表达式2:语句2.case常量表达式n:语句ndefault:语句n+1,3.9多分支选择结构和switch语句,例如,要求按照考试成绩的等级打印出百分制分数段,可以用switch语句实现:switch(grade)caseA:cout85100n;caseB:cout7084n;caseC:cout6069n;caseD:cout60n;default:couterrorn;说明:(1)switch后面括号内的“表达式”,允许为任何类型。(2)当switch表达式的值与某一个case子句中的常量表达式的值相匹配时,就执行此case子句中的内嵌语句,若所有的case子句中的常量表达式的值都不能与switch表达式的值匹配,就执行default子句的内嵌语句。,(3)每一个case表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。(4)各个case和default的出现次序不影响执行结果。例如,可以先出现“default:”,再出现“caseD:”,然后是“caseA:”。(5)执行完一个case子句后,流程控制转移到下一个case子句继续执行。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch表达式的值找到与之匹配的case子句,就从此case子句开始执行下去,不再进行判断。例如,上面的例子中,若grade的值等于A,则将连续输出:,851007084606960error因此,应该在执行一个case子句后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。将上面的switch结构改写如下:switch(grade)caseA:cout85100n;break;caseB:cout7084n;break;caseC:cout6069n;break;caseD:cout60n;break;default:coutyear;/输入年份if(year%4=0)/年份能被4整除if(year%100=0)/年份能被4整除又能被100整除if(year%400=0)/年份能被4整除又能被400整除leap=true;/闰年,令leap=true(真)elseleap=false;/非闰年,令leap=false(假)else/年份能被4整除但不能被100整除肯定是闰年leap=true;/是闰年,令leap=true,3.10编写选择结构的程序,else/年份不能被4整除肯定不是闰年leap=false;/若为非闰年,令leap=falseif(leap)coutyearis;/若leap为真,就输出年份和“是”elsecoutyearisnot;/若leap为真,就输出年份和“不是”coutaleapyear.ws;if(s=3000)c=12;elsec=s/250;switch(c)case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:,case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;f=p*w*s*(1-d/100.0);coutfreight=fendl;return0;运行情况如下:pleaseenterp,w,s:10020300freight=588000,在人们所要处理的问题中常常遇到需要反复执行某一操作的情况。这就需要用到循环控制。许多应用程序都包含循环。顺序结构、选择结构和循环结构是结构化程序设计的3种基本结构,是各种复杂程序的基本构造单元。因此程序设计者必须熟练掌握选择结构和循环结构的概念及使用方法。,3.11循环结构和循环语句,while语句的一般形式如下:while(表达式)语句其作用是:当指定的条件为真(表达式为非0)时,执行while语句中的内嵌语句。其流程图见图3.9。其特点是:先判断表达式,后执行语句。while循环称为当型循环。图3.9,3.11.1用while语句构成循环,例3.10求1+2+3+100。用流程图表示算法,见图3.10。根据流程图写出程序:#includeusingnamespacestd;intmain()inti=1,sum=0;while(i=100)sum=sum+i;i+;coutsum=sumendl;运行结果为sum=5050,图3.10需要注意:(1)循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。如果不加花括号,则while语句的范围只到while后面第一个分号处。(2)在循环体中应有使循环趋向于结束的语句。,do-while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为do语句while(表达式);它是这样执行的:先执行一次指定的语句(即循环体),然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。可以用图3.11表示其流程。,3.11.2用do-while语句构成循环,图3.11图3.12,例3.11用do-while语句求1+2+3+100。先画出流程图,见图3.12。可编写出下面的程序:#includeusingnamespacestd;intmain()inti=1,sum=0;dosum=sum+i;i+;while(i=100);coutsum=sumendl;return0;,运行结果与例3.10相同。可以看到:对同一个问题可以用while语句处理,也可以用dowhile语句处理。dowhile语句结构可以转换成while结构。图3.11可以改画成图3.13的形式,二者完全等价。而图3.13中虚线框部分就是一个while结构。图3.13,C+中的for语句使用最为广泛和灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。for语句的一般格式为for(表达式1;表达式2;表达式3)语句它的执行过程如下:(1)先求解表达式1。(2)求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。,3.11.3用for语句构成循环,(3)求解表达式3。(4)转回上面第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句。可以用图3.14来表示for语句的执行过程。图3.14,for语句最简单的形式也是最容易理解的格式如下:for(循环变量赋初值;循环条件;循环变量增值)语句例如for(i=1;i=100;i+)sum=sum+i;它的执行过程与图3.10完全一样。它相当于以下语句:i=1;while(i=100)sum=sum+i;i+;显然,用for语句简单、方便。for语句的使用有许多技巧,如果熟练地掌握和运用for语句,可以使程序精炼简洁。,说明:(1)for语句的一般格式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。(2)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真。(3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。(5)3个表达式都可省略。(6)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。,(7)表达式一般是关系表达式(如i=100)或逻辑表达式(如abn=n+2;,3.14编写循环结构的程序,s=-s;t=s/n;pi=pi*4;coutpi=setiosflags(iosfixed)setprecision(6)piendl;return0;运行结果为pi=3.141592注意:不要把n定义为整型变量,否则在执行“t=s/n;”时,得到t的值为0(原因是两个整数相除)。,例3.13求Fibonacci数列前40个数。这个数列有如下特点:第1、2个数为1、1。从第3个数开始,每个数是其前面两个数之和。即F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n3)这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?可以从书中表3.4看出兔子数的规律。根据给出的每月兔子总数的关系,可编写程序如下:,#include#includeusingnamespacestd;intmain()longf1,f2;inti;f1=f2=1;for(i=1;i=20;i+)coutsetw(12)f1setw(12)f2;/设备输出字段宽度为12,每次输出两个数if(i%2=0)coutendl;/每输出完4个数后换行,使每行输出4个数f1=f1+f2;/左边的f1代表第3个数,是第1、2个数之和f2=f2+f1;/左边的f2代表第4个数,是第2、3个数之和return0;,例3.14找出100200间的全部素数。编写程序如下:#include#include#includeusingnamespacestd;intmain()intm,k,i,n=0;boolprime;/定义布尔变量primefor(m=101;m=200;m=m+2)/判别m是否为素数,m由101变化到200,增量为2prime=true;/循环开始时设prime为真,即先认为m为素数k=int(sqrt(m);/用k代表根号m的整数部分for(i=2;i=k;i+)/此循环作用是将m被2根号m除,检查是否能整除if(m%i=0)/如果能整除,表示m不是素数,prime=false;/使prime变为假break;/终止执行本循环if(prime)/如果m为素数coutsetw(5)m;/输出素数m,字段宽度为5n=n+1;/n用来累计输出素数的个数if(n%10=0)coutendl;/输出10个数后换行coutZ|cz)c=c-26;,因为所有小写字母都满足“cZ”条件,从而也执行“c=c-26;”语句,这就会出错。因此必须限制其范围为“cZ&cz&cz”即可。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!