1 / 67

循环语句

循环语句. 循环语句控制程序流多次执行一段程序。 是结构化程序设计的 3 种基本结构之一。 C/C++ 语言提供了三种循环语句: for 语句 、 while 语句 和 do 语句 。 三种循环语句可以相互代替,但有些场合用某种循环语句在形式上更简单易懂。 循环语句在高级语言中的地位十分重要。. 循环结构 , 有两种循环结构 : ① 当型循环结构 , 见下图。当 p 条件成立 ( “ 真 ” ) 时 , 反复执行 A 操作。直到 p 为 “ 假 ” 时才停止循环。.

Download Presentation

循环语句

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 循环语句 计算机与信息工程学院

  2. 循环语句控制程序流多次执行一段程序。 • 是结构化程序设计的3种基本结构之一。 • C/C++语言提供了三种循环语句:for语句、while语句和do语句。 • 三种循环语句可以相互代替,但有些场合用某种循环语句在形式上更简单易懂。 • 循环语句在高级语言中的地位十分重要。 计算机与信息工程学院

  3. 循环结构,有两种循环结构: ① 当型循环结构,见下图。当p条件成立(“真”)时,反复执行A操作。直到p为“假”时才停止循环。 计算机与信息工程学院

  4. 直到型循环结构,见下图。先执行A操作,再判断p是否为“假”,若p为“假”,再执行A,如此反复,直到p为“真”为止。 计算机与信息工程学院

  5. 1. for循环语句 问题的提出: 在屏幕上输出一行10个星号“*”语句是? 解决方法是用如下一条输出语句显示: cout << “**********” << endl; 在屏幕上输出两行10个星号“*”语句是? 解决方法是用如下两条输出语句显示: cout << “**********” << endl; cout << “**********” << endl; 计算机与信息工程学院

  6. 在屏幕上输出三行10个星号“*”语句是? 解决方法是用如下三条输出语句显示: cout << “**********” << endl; cout << “**********” << endl; cout << “**********” << endl; …… …… 在屏幕上输出100行10个星号“*” 语句是? 上面的方法是不可取的。用循环结构解决是一个好办法! 计算机与信息工程学院

  7. for(i=1;i<=100;i++) sum=sum+i; 【例1】for 语句的引例。 求1+2+3+…+100的值,并将其结果放在变量sum中。 sum sum=0; sum=sum+1; 3 5050 不确定 0 1 6 规律是: 表示为: sum=sum+2; for(i=1;i<=100;i++) sum=sum+3; sum=sum+i; …… 是for语句 sum=sum+100; 计算机与信息工程学院

  8. for 关键字 #include <iostream> using namespace std; int main(void) { int i, sum=0; for ( i=1; i<=100; i++ ) sum=sum+i; cout<<"1+2+3+......+100=“; cout<<sum<<endl; return 0; } 循环体 运行结果:1+2+3+......+100=5050 计算机与信息工程学院

  9. for语句的格式如下: for(表达式1;表达式2;表达式3)〈语句〉 注意每个“;”必须有! 执行过程如下: ①计算表达式1 ②计算表达式2并判断,若为0→退出循环;若非0 → ③ ③〈语句〉 ④计算表达式3,返回① 执行过程演示 计算机与信息工程学院

  10. 输出100行10个星号“*” 语句是? for ( i = 1; i <= 100; i = i + 1 ) cout << “**********” <<endl; 计算机与信息工程学院

  11. cin>>score; cout<<score; sum=sum+score; 【例2】键盘输入十个学生的成绩,输出各成绩和平均成绩。 编程点拨:确定两件事情 哪些语句重复执行 输入十个,重复十次 执行多少次循环体 计算机与信息工程学院

  12. int main(void) { int i , score, sum=0; float ave; cout<<"Input score:“<<endl; for( i=1; i<=10; i++) { cin>>score; cout<<score; sum=sum+score; } 用复合语句 循环体是三条语句 cout<<endl; ave=(float)sum/10; cout<<"ave=“<<ave; } 不必放在循环体内 计算机与信息工程学院

  13. 运行结果如下: Input score: 95 100 65 45 60 89 78 80 83 70 95 100 65 45 60 89 78 80 83 70 ave=76.500000 计算机与信息工程学院

  14. 【例3】在3~100之间所有3的倍数中,找出个位数为2的数。 编程点拨: 3~100内3的倍数有3 6 9 … 99 for ( i=3; i<=100; i=i+3 ) 用 i%10 表示个位数 if( i%10==2 ) … 计算机与信息工程学院

  15. 将最小的3的倍数3赋给i 当i的值小于等于100时 i个位数是2? 假 真 输出i的值 i的值增3 流程图 计算机与信息工程学院

  16. 72 _ 用三种基本结构能写出所有复杂程序 #include “iostream.h” void main( ) { int i; for ( i=3; i<=100; i=i+3 ) if( i%10==2 ) cout<<““<<i; cout<<endl; } 循环结构 按4个字符位 输出整数 顺序结构 分支结构 输出: 12 42 计算机与信息工程学院

  17. 【例4】输出1!、2!、3!、……、n!。 其中n!= 1×2×3×……×n, n的值从键盘输入 。 编程点拨: 算法和求1+2+…+100的算法类似 但在本程序中fac的初值为1,不是0。 计算机与信息工程学院

  18. 若为int型,求8!时开始出现溢出现象 不能为0.0 #include <iostream> main () { int i,n; float fac=1.0; cout<<"Input n:"; cin>>n; for ( i=1; i<=n; ) { fac=fac*i; cout<<"d!="<<fac<<endl; i++; } } 省略了i++ 建议使用 规范形式 计算机与信息工程学院

  19. 只输出整数部分 #include “iostream.h” main () { int i,n; float fac=1.0; cout<<"Input n:"; cin>>n; for ( i=1; i<=n; ) { fac=fac*i; cout<<"d!="<<fac<<endl; i++; } } 计算机与信息工程学院

  20. 运行结果如下: Input n:20 1!=1 2!=2 …… 19!=121645096004222976 20!=2432902023163674620 (注意,只保证前6~7位是准确的) 计算机与信息工程学院

  21. 请思考 如何求2的n次方 fac=1.0; for ( i=1; i<=n; i++ ) { fac= fac * i ; cout<<fac; } 2 计算机与信息工程学院

  22. 【例5】在两行上分别按顺序和逆序输出26个英文大写字母。【例5】在两行上分别按顺序和逆序输出26个英文大写字母。 编程点拨: 在ASCII码表中,字母按A到Z的顺序排列 使用循环通过A计算 (即’A’+i,i=0,1,2,…,25) 计算机与信息工程学院

  23. cout<<endl; cout<<endl; #include “iostream.h” main ( ) { int i; } for ( i=0; i<=25; i++ ) cout<< 'A'+i; 顺序输出 注意位置 for ( i=25; i>=0; i-- ) cout<< 'A'+i; 逆序输出 不是i++ 计算机与信息工程学院

  24. 【例6】从键盘输入十个数,求其中最大值。 编程点拨: 用例三个整数中求最大数介绍的算法由于数据较多,用循环结构比较合适 计算机与信息工程学院

  25. #include “iostream.h” main( ) { int a,max,i; cout<<“max=”<<max; } 运行时试最大值在 最前最后中间某一位置的情况 cout<<"Input data:"; 思考:100个数中求最大,如何修改? cin>>a; cout<<a; 输入第一个数并输出 max=a; 第一个数存入max for ( i=1; i<=9; i++ ) { cin>>a; cout<<a; 输入后九个数并输出 if ( max<a ) max=a; } 计算机与信息工程学院

  26. 【例7】求 先思考:如何求 for(i=1; i<=100; i++) sum=sum+(float)1/i; 计算机与信息工程学院

  27. 再思考:如何解决正负相间的问题 i=1 sign=1 sum=sum+1/1 i=2 sign=-1 sum=sum-1/2 i=3 sign=1 sign=1; for ( i=1; i<=100; i++ ) sum=sum+(float) 1 / i; sum=sum+1/3 … … { } sign sign=-sign; 符号翻转 计算机与信息工程学院

  28. #include “iostream.h” main( ) { int i,sign; float sum; 运行结果 sum=0.688172 } 完整程序 sign=1; for ( i=1; i<=100; i++ ) {sum=sum+(float)sign/ i; sign=-sign; } sum=0.0; cout<<“sum=”<<sum<<endl; 计算机与信息工程学院

  29. 【例8】输出斐波纳契(Fibonacci)级数1、1、2、3、5、8、13、… 的前三十项。 规律:前两项的值各为1,从第三项起,每一项都是前两项的和。 要求:一行输出6项 计算机与信息工程学院

  30. 规律: 1 1 + a b next=a+b; a=b; b=next; 求解过程 2 next 第3项 3 a + b next 第4项 2 1 5 a + b next 第5项 2 3 8 a + b next 第6项 3 5 … … 计算机与信息工程学院

  31. main( ) { int i,n; long a,b,next; } a=b=1; cout<<a<<b; n=2; 处理前两项 for ( i=3; i<=30; i++ ) { next=a+b; a=b; b=next; } 处理后28项 cout<<setw(10)<<next; n++; if ( n%6==0 ) cout<<endl; 输出并控制换行 计算机与信息工程学院

  32. 运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 计算机与信息工程学院

  33. 说明: • 同一个问题,可能有多种算法 • 在学习过程中,勤于思考,善于发现问题,编写出更优化的程序。 • 以上循环共同点:容易确定循环次数 • 注意掌握循环的嵌套调用方法 • for语句一般用于循环次数已知的情况。 • 如果次数事先不知,则常用while 语句或do-while语句。 计算机与信息工程学院

  34. 2. while循环语句 格式如下: while(〈条件〉)〈语句〉 执行过程 表达式 循环体 非0 0 计算机与信息工程学院

  35. 【例9】从键盘输入若干个非0数据,求它们的和。用0结束循环的执行。 • 编程点拨: • 本题需要用循环结构 • 用for语句不方便 • 下面用while 语句 计算机与信息工程学院

  36. #include <iostream.h> main( ) { int a,sum=0; cout<<“Input data:”<<endl; cin>>a; while ( a!=0 ) { cout<<a; sum=sum+a; cin>>a; } cout<<"sum=“<<sum; } while 当a为非0时,执行循环体 关键字 进入循环前 先输入一个数 计算机与信息工程学院

  37. 第一次运行: Input data: 11 22 33 44 55 66 77 88 99 0 1 2 11 22 33 44 55 66 77 88 99 sum=495 Ctrl+Break强行结束执行 第二次运行: Input data: 0 (空一行) sum的初值 sum=0 计算机与信息工程学院

  38. 【例10】用while循环求1+2+3+…+100 #include <iostream.h> int main( ) { int ,sum=0; cout<<“sum=”<<sum; } i=1 while ( i<=100 ) sum=sum+i; 不同循环语句之可以相互转换 { } i++; 计算机与信息工程学院

  39. 【例11】用公式 求π的近似值,直到最后一项的绝对值小于10-4为止。 编程点拨: 先计算 的近似值,再求π的近似值 不易确定从第几项起,绝对值小于10-4 本例用while语句 计算机与信息工程学院

  40. #include <math.h> 加入一行 main ( ) { int , ; float pi, pi=sum*4 ; cout<<"pi=“<<pi<<endl; } next=1.0,sum=0.0; sign=1 i=1 while ( ) { } fabs(next) >= 1e-4 sum=sum+next; fabs是库函数 求绝对值 sign=-sign; i=i+2; next=(float)sign/i; 计算机与信息工程学院

  41. 【例12】编写加、减、乘、除运算程序。 执行效果: 请输入第1题,用3#3退出。 2*3.5 2.000000*3.500000=7.000000 请输入第2题,用3#3退出。 3/0 除数为0! 请输入第2题,用3#3退出。 5.5&4.7 &是非法字符! 请输入第2题,用3#3退出。 结束循环 3#3 计算机与信息工程学院

  42. 编程点拨: 本题用while语句较方便 加、减、乘、除、非法共五个分支 用switch语句,且带break语句 计算机与信息工程学院

  43. 用做标记 #include <stdio.h> #include <conio.h> main ( ) { int i=1,flag=0; float a,b,result; char sym; clrscr( ); cout<<"请输入第1题,用3#3退出。"; cin>>a>>sym>>b; while ( sym!='#' ) { 用清屏函数时加此行 清屏函数 ……见下一页 计算机与信息工程学院

  44. while ( sym!='#' ) { switch ( sym ) { case '+': result=a+b; break; case '-': result=a-b; break; case '*': result=a*b; break; case '/': if ( b==0 ) flag=1; else result=a/b; break; default : flag=2; } } 注意缩进格式 不能少 除数0,用1标记 非法字符,用2标记 ……见下一页 计算机与信息工程学院

  45. while ( sym!='#' ) {…………见上一页 if ( flag == 0 ) { cout<<a<<sym<<b<<result<<endl; i++; } if ( flag == 1 ) cout<<“除数为0!”<<endl; if ( flag == 2 ) cout<< sym <<"是非法运算符!“<<endl; cout<< “请输入第” <<i; cout<<“题,用3#3退出。”<<endl; cin>>a>>sym>>b; }} 是合法算式 准备下一题数 i 计算机与信息工程学院

  46. 3. do-while循环语句 格式如下: do〈语句〉 while(〈条件〉); do-while和while很相似 区别: while 先判断表达式的值,后执行循环体 do-while先执行循环体,再判断表达式 计算机与信息工程学院

  47. 执行过程 循环体 非0 表达式 0 计算机与信息工程学院

  48. 说明: do-while先执行一次循环体,后判断表达式 循环体至少被执行一次 • while先判断表达式,后执行循环体 循环体有可能一次也不被执行 • 三种循环可以互相转换 根据不同情况,选择具体循环 计算机与信息工程学院

  49. 【例14】从键盘输入的一串字符(用#结束输入)按如下规则进行转换: • 如果为大写字母,则先转换为小写字母 • 将a转换为c • b转换为d • ……… • x转换为z • y转换为a • z转换为b • 其它字符不变 a b c d … x y z 计算机与信息工程学院

  50. 编程点拨: if ( ch>='A' && ch<='Z' ) ch=ch+32; 大写转小写 • if ( ch>='a' && ch<='z' ) • ch=ch+2; 小写转其后第二个字母 • ’y’和’z’通过ch=ch+2; 后 ch>’z’ • if ( ch>'z') ch=ch-26; 计算机与信息工程学院

More Related