chapter3 2循环重复控制_第1页
chapter3 2循环重复控制_第2页
chapter3 2循环重复控制_第3页
chapter3 2循环重复控制_第4页
chapter3 2循环重复控制_第5页
已阅读5页,还剩28页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

内容回顾3.2顺序控制和3.3选择控制南京大学计算机科学与技术系Base

of

Programming1if

(...)...else

if

(...)...else

if

(...)...else...表达式语句复合语句if语句ifif

elseif语句的锯齿形式switch语句switch(<整型表达式>){ case

<1>:<语句序列1>break;case

<2>:<语句序列2>break;::case

<n>:<语句序列n>

break;[default:<语句序列n+1>[break;]]}3.4

循环(重复)控制南京大学计算机科学与技术系Base

of

Programming2南京大学计算机科学与技术系Base

of

Programming3循环结构语句程序设计中经常遇到需要对相同的操作重复执行多次,只是每一次操作的数据有所不同。循环语句为解决重复操作提供了一种途径。循环一般由四个部分组成:循环初始化循环条件循环体下一次循环准备for (

i=1,

sum=0;

i<=100;

i++

)sum

+=

i;cout

<<

sum;i=1;sum=0;while(i<=100){

sum=sum+i;i++;}cout

<<

sum;C++提供了三种实现重复操作的循环语句:while语句do-while语句for语句南京大学计算机科学与技术系Base

of

Programming41

while

语句while语句具有如下的格式:while(<表达式>)<语句>while(i<=100){

sum=sum+i;i++;}南京大学计算机科学与技术系Base

of

Programming5while语句用法南京大学计算机科学与技术系Base

of

Programming6表达式的值为真时,执行语句,再回头判断表达式的值表达式的值为假时,结束循环语句为循环体循环体中应有能结束循环的语句,否则循环永不结束当首次判断表达式的值为真时,与do-while语句效果相同,否则不同while(i<=100){

sum=sum+i;i++;}举例南京大学计算机科学与技术系Base

of

Programming7sum=0;i=1;while(i<=100){sum=sum+i;i++;}cout

<<

sum;//此句改为i=101;结果为?//没有此句,循环?2

do-while

语句do{南京大学计算机科学与技术系Base

of

Programming8sum=sum+i;i++;}while(i<=100);do-while语句的格式如下:do<语句>while(<表达式>);do-while语句用法do{南京大学计算机科学与技术系Base

of

Programming9sum=sum+i;i++;}while(i<=100);先执行语句,然后判断表达式的值表达式的值为真时,回头执行语句,再判断表达式的值表达式的值为假时,结束循环语句为循环体,其中应有能结束循环的语句,否则循环永不结束举例i=1;sum=0;do{sum=sum+i;i++;}while(i<=100);cout

<<

sum;南京大学计算机科学与技术系Base

of

Programming10//若i=101;结果?3 for

语句南京大学计算机科学与技术系Base

of

Programming11for语句的格式如下:for(<表达式1>;<表达式2>;<表达式3>)<语句>for (

i=1,

sum=0;

i<=100;

i++

)sum

+=

i;for语句用法南京大学计算机科学与技术系Base

of

Programming12一般情况下,表达式1是给循环变量赋初值;表达式2是循环条件;表达式3是循环变量增值(步长),即促使循环结束的语句表达式1、2、3都可以没有,但;必须有相当于:<表达式1>;while(<表达式2>){语句<表达式3>;}for(<表达式1>;<表达式2>;<表达式3>)<语句>for (

i=1,

sum=0;

i<=100;

i++

)sum

+=

i;南京大学计算机科学与技术系举例for (

i=1,

sum=0;

i<=100;

i++

)sum

+=

i;cout

<<

sum;i=1;sum=0;for

(;;){if(i<=100){sum

+=

i;i++;}elsebreak;}cout

<<

sum;等价于Base

of

Programming13sum=0;i=1;while(i<=100){sum=sum+i;i++;}cout

<<

sum;南京大学计算机科学与技术系4

三种循环结构控制语句小结(while、do-while和for)从表达能力上讲,上述三种循环语句是等价的,它们之间可以互相替代。对于某个具体的问题,用其中的某个循环结构来描述可能会显得比较自然和方便。使用三种循环语句的一般原则是:计数控制的循环用for语句;事件控制的循环,一般使用while或do-while语句,如果循环至少执行一次,则使用do-while语句。由于for语句的结构性比较好,循环控制均在循环顶部统一表示,更直观,即for语句可显式地表示出:循环初始化、循环结束条件以及下一次循环Base

of

Programming14准备,很多情况下都采用for语句。南京大学计算机科学与技术系Base

of

Programming15计算从键盘输入的一系列整数的和,要求首先输入整数的个数。(计数控制的循环)#include

<iostream>using

namespacestd;int

main(){ intn;cout<<"请输入整数的个数:";cin>>n;cout<<"请输入"<<n<<"个整数:";int

a,sum=0;for

(int

i=1;

i<=n;

i++){ cin

>>

a;sum

+=

a;}cout<<"输入的"<<n<<"个整数的和是:"<<sum<<endl;return

0;}Ex1计算从键盘输入的一系列整数的和,要求输入以-1结束。(事件控制的循环)Ex2南京大学计算机科学与技术系Base

of

Programming16#include

<iostream>using

namespacestd;int

main(){int

a,sum=0;cout<<"请输入若干个整数(以-1结束):";cin>>a;while

(a

!=

-1){ sum

+=

a;cin

>>

a;}cout<<"输入的整数的和是:"<<sum<<endl;return

0;}从键盘接收字符,一直到输入了字符y(Y)或n(N)为止。(事件控制的循环)Ex3南京大学计算机科学与技术系Base

of

Programming17#include

<iostream>#include

<cstdlib>using

namespacestd;int

main(){ char

ch;do{ cout<<"请输入Y或N(y或n):";cin>>ch;ch

=

tolower(ch);}

while

(ch

!=

'y'

&&

ch

!=

'n');if

(ch

=='y')......else......return

0;}南京大学计算机科学与技术系Base

of

Programming185

循环结构控制语句注意事项(while、do-while和for)注意循环条件表达式的设计,避免出错(循环不能正确执行或死循环)。可以嵌套for

(int

i=1;

i<10;

i++){for

(int

j=1;

j<10;

j++)cout

<<

i*j

<<

'\t';cout

<<

endl;}int

i=1;while(i<10){ int

j=1;while(j<10){ cout

<<

i*j

<<

'\t';j++;}i++;cout

<<

endl;}int

i=1;do{ int

j=1;do{ cout

<<

i*j

<<

'\t';j++;}

while(j<10);i++;cout

<<

endl;}

while(i<10);实验中常见的问题编程规范方面的问题具体实验方面的问题编程规范方面的问题南京大学计算机科学与技术系Base

of

Programming20命名规则问题1.建立工程,文件和变量时,很多同学喜欢随意的命名,如:

a(简单的字母),11(简单的数字),yky(姓名缩写)等。工程,文件和变量的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。更详细的编程规范可到课程网上的公告下载阅读。编程规范方面的问题代码风格问题1.程序各部分放置的顺序很乱,没有整体规律性,哪里需要变量就在哪里定义,这是不好的习惯。正确的组织顺序:南京大学计算机科学与技术系Base

of

Programming21南京大学计算机科学与技术系Base

of

Programming22编程规范方面的问题func(){inta=1;…}2.代码排版很乱,如:没有层次性,一行写多条语句等。对齐缩进:if

(

){…if

(

){}…}具体实验方面的问题总体方面的错误:有同学建错工程类型(Win32

Application),我们建Win32控制台应用程序(Win32 Console

Application);有同学一个工程出现多个main函数,main函数是程序的入口,为了保证程序运行的安全性,一个工程里

只能有一个main函数。南京大学计算机科学与技术系Base

of

Programming23具体实验方面的问题南京大学计算机科学与技术系Base

of

Programming24习题四出现的问题有同学根据数字的范围来判断数据的位数如:if(n<10) cout<<"1位";else

if(n<100)cout<<"2位";这种现象主要是考虑问题不太全面,对编程的思想不理解。核心代码:count=0;cin>>number;while(number>0){number=number/10;count++;}cout<<count;习题七出现的问题}南京大学计算机科学与技术系Base

of

Programming25错误1:多个if

,else排版很乱;错误2:if下有多条语句时不加大括号;很多同学错误A,B两条语句都是属于if的范围,默认情况下只有第一句是if条件的范围,其按顺序执行;错误3:在处理60以上的输入数据时,没有考虑距离,题目要求是每满1000加2元。有的除以1000不取整的,有的忘记乘以2的。这种多分类的题建议用switch语句来写,让人一目了然。核心代码:具体实验方面的问题if(condition)statement

A

;statement

B

;d=(weight-1)/15;cout<<“theprice

is:”switch(d){case

0:

cout<<5;

break;case

1:

cout<<9;break;case

2:

cout<<12;break;case

3:cout<<14+(int)distance/1000;

break;default:

cout<<15+((int)distance/1000)*2;习题八出现的问题错误1:忘记C++中整数除法的结果是整数,导致结果出错;南京大学计算机科学与技术系Base

of

Programming26错误2:循环条件写错,导致死循环,如:条件写反了;错误3:有一种方法会有小问题:方法虽然很好但是如果最后一次循环出现1/i<1e-8

&&

1/(i+2)<1e-8就会多计算一项。具体实验方面的问题int

n;如:1/n,当n>1时,系统就会将结果取为0;循环条件:i>1e8;i=i+4每次循环:pi=pi+1/i-1/(i+2)6

循环程序设计实例例:判断键盘输入的一个整数是否为素数#include

<iostream>using

namespace

std;int

main(){int

m,

i=2;cin

>>

m;dl;while

(i<m

&&

m%i

!=0)

//计数控制和循环控制i++;if(i==m)//所有小于m的数都不能整除mcout<<“您输入的整数”<<m<<“是素数”<<endl;elsecout<<“您输入的整数”<<m<<“不是素数”<<enreturn

0;for

(i

=

2;

i

<

m;

i++){if

(m%i

==

0){南京大学计算机科学与技术系Base

of

Programming27cout

<<“您输入的整数”

<<m

<<“不是素数”

<<endl;return

0;

}}cout<<“您输入的整数”<<m<<“是素数”<<endl;}

return

1;所有小于m的整数都要检查吗?例:判断键盘输入的一个整数是否为素数-更高效的执行}南京大学计算机科学与技术系Base

of

Programming28#include

<iostream>using

namespace

std;int

main(){int

m,

i=2;cin

>>

m;while(i<=sqrt(m)

&&

m%i

!=0)

//计数控制和循环控制i++;if

(i

>sqrt(m))cout<<“您输入的整数”<<m<<“是素数”<<endl;elsecout<<“您输入的整数”<<m<<“不是素数”<<endl;return

0;通过分析、改进提高代码效率很重要!南京大学计算机科学与技术系Base

of

Programming{}cout

<<

endl;

return

0;29}对小于n的整数m(循环)遍历,每判断每一个m是否素数的过程又是循环,因此:双重循环!例:编程求出小于n的所有素数(质数),要求每行6个。整体思路:for(m=2;

m<n;

m++)if((通过判断)m

是素数)cout<<m<<“是素数”;int

main(){ int

n,count

0;//count计量找到的素数的个数

cout<<“请输入一个自然数:”cin>>

n;for

(int

m

=2;

m<

n;

m

++)int

i=2;while

(i<m

&&

m%i

!=0)

//计数控制和循环控i

++;if

(i==m)

//所有小于m的数都不能整除m{cout<<“您输入的整数”<<m<<“是素数”<<endl;count++;if

(count

%6==0)

count<<endl;//控制每行输入6个}例:求第n个Fibonacci数南京大学计算机科学与技术系Base

of

Programming30{ int

n;cin

>>

n;int

fib_1

=

1,

fib_2

=

1;for

(int

i=3;

i

<=n;

i++){

int

temp

=

fib_1

+

fib_2;fib_1

=

fib_2;fib_2

=

temp;}cout<<“第”<<n<<“个Fibonacci数是:”<<fib_2<<endl;return

0;}fib(n)

=1=

fib(n-2)

+fib

(n-1)#include

<iostream>using

namespace

std;int

main

()(n=1,

2)(n

>=3)fib_2

=

fib_1

+

fib_2;fib_1

=

fib_2

–fib_1;例:用牛顿迭代法计算sqrt3(a)}南京大学计算机科学与技术系Base

of

Programming31#include

<iostream>using

namespace

std;int

main

(){const

doubleeps=1e-6;double

a,x1,x2;

cout<<“请输入一个数a:”;cin>>a;x2

=

a;d

温馨提示

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

最新文档

评论

0/150

提交评论