版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、n循环程序循环程序sum=0;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 开始开始k = n结束结束FT输出输出 sum / n这就是循环程序这就是循环程序循环程序有:循环程序有:先判断条件的循环先判断条件的循环后判断条件的循环后判断条件的循环本程序是后判断条件的循环本程序是后判断条件的循环同样问题还可以描述成先判断条件的循环同样问题还可以描述成先判断条件的循环sum=0;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 开始开始k = n结束结束FT输出输出 sum / nn两种循环结构,分别用三种不同的重复性语句描述两种循环结构
2、,分别用三种不同的重复性语句描述 先判断条件的循环先判断条件的循环 while 语句语句 for 语句语句 后判断条件的循环后判断条件的循环 do 语句语句n需要弄清楚的需要弄清楚的 循环控制方式是什么?循环控制方式是什么? 控制条件是什么?控制条件是什么? 重复执行部分(称为重复执行部分(称为循环体循环体)是什么?)是什么?SeTdo-while eS其中:其中: e是条件;是条件; S是语句是语句,是要重复执行的操作。是要重复执行的操作。其含义是:其含义是:n1) 执行语句列执行语句列Sn2) 计算条件表达式计算条件表达式e,n3) 若若e的值为的值为true,转向步骤,转向步骤1)再次执
3、行语句)再次执行语句S; 否则转向步骤否则转向步骤4)结束循环。)结束循环。n4)循环结束,向后执行其后继操作。)循环结束,向后执行其后继操作。do-while k=nsum=0;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 输出输出 sum / n开始开始结束结束sum=0;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 开始开始k = n结束结束FT输出输出 sum / nn一般形式一般形式do Swhile ( e ); do 和和 while 是两个保留字,起引导和分是两个保留字,起引导和分 隔作用,指明此语句是隔作用,指明
4、此语句是 do 循环语句。循环语句。 e 、S的意义,同的意义,同PAD。例例4.2 计算数列的计算数列的ak=1/(k*(k+1) 的前的前 n 项和项和 sum = 0 ; k = 1 ; do-while k= n结束结束开始开始输出输出 sumsum +=1/(k*(k+1);k = k+1#include stdio.hvoid main ( ) int n,k ; float sum ; printf (please input n :); scanf(%d,&n); sum = 0 ; k = 1 ; do sum + = 1.0/(k*(k+1); k+ ; while
5、 ( k 0yy = yy+4开始开始结束结束求求 yy 后第一个可能闰年后第一个可能闰年yy 是闰年是闰年输出输出yyn= n-1/*PROGRAM find leap year*/#include stdio.hvoid main() int yy,n; printf(please input begin year:); scanf(%d,&yy); printf(please input the number of the leap year:); scanf(%d,&n); yy=(yy/4+1)*4; doif( (yy%4=0)&(yy%100!=0)|(y
6、y%400=0) )printf(year %dt,yy);n-; yy=yy+4; while(n0);g (x) = 0 x = f (x)等价变换等价变换n采用迭代法方法求解采用迭代法方法求解x=f(x)方程的根方程的根 选定一个选定一个 x的初值的初值 x0 ; 以以 x0 代入右端计算出一个值代入右端计算出一个值 x1=f(x0) 若若 x1 等于等于x0 ,显然,显然 x0 为根,转向为根,转向 否则若否则若 x1x0 则令则令 x0=x1 ,转向,转向 结束,停止计算结束,停止计算 在实际工作中,决大部分计算都是近似计算,只要求在实际工作中,决大部分计算都是近似计算,只要求 X1
7、X0 即使用条件:即使用条件:X1 - X0X0 = X1X1 = f(X0)开始开始结束结束#include stdio.h#include math.h#define eps 1e-6void main() float x0,x1; x0=0.0; x1=0.0; do x0=x1; x1=2*x0*x0*x0 +0.5*x0*x0 +0.093; while(fabs(x1-x0)eps); printf(x=%fn,x0);运行结果演示运行结果演示n简单迭代方法使用条件简单迭代方法使用条件 在根附近,在根附近, | f (x) | 1 并且并且 x0 估计到范围内估计到范围内sum=0
8、;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 开始开始k = n结束结束FT输出输出 sum / nsum=0;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 开始开始k = n结束结束FT输出输出 sum / n#include #define n 40void main(void) float sum ; int k , m; k1; sum0; while ( k=n ) printf(pleace input a achievement :); scanf(%d,&m ); sum = sum + m; k = k
9、+1 ; printf(average achievement : %5.2fn , sum/n );sum=0;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 开始开始k = n结束结束FT输出输出 sum / nSeFwhile eS其中:其中: e是条件;是条件; S是语句是语句,是要重复执行的操作。是要重复执行的操作。其含义是:其含义是:n1) 计算条件表达式计算条件表达式e,n2) 若若e的值为的值为true,转向步骤,转向步骤3)继续循环;)继续循环; 否则转向步骤否则转向步骤5)结束循环。)结束循环。n3) 执行语句执行语句Sn4)转向步骤)转向步骤
10、1)n5)循环结束,向后执行其后继操作。)循环结束,向后执行其后继操作。 while k=nsum=0;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 输出输出 sum / n开始开始结束结束#include #define n 40void main(void) float sum ; int k , m; k1; sum0; while ( k=n ) printf(pleace input a achievement :); scanf(%d,&m ); sum = sum + m; k = k+1 ; printf(average achievem
11、ent : %5.2fn , sum/n );n一般形式一般形式while ( e ) S while 是保留字,起引导和分隔作用,是保留字,起引导和分隔作用, 指明此语句是指明此语句是while循环语句。循环语句。 e 、S的意义,如上述的意义,如上述PAD。SeFwhile eSSeTdo-while eS#define n 1 sum0;k2;while ( k=n ) printf(“ ”); scanf(“%d”,&m ); sum = sum + m; k = k+1 ;printf(“ ” , sum/n );#define n 1 sum0;k2;do printf(“
12、 ”); scanf(“%d”,&m ); sum = sum + m; k = k+1 ; while ( k=n ) ;printf(“ ” , sum/n ); 左侧程序至少执行一次循环体,将输入一科成绩,左侧程序至少执行一次循环体,将输入一科成绩,然后输出平均成绩(就是刚输入的一科成绩);然后输出平均成绩(就是刚输入的一科成绩); 而右侧程序不执行循环体,直接退出循环。执行而右侧程序不执行循环体,直接退出循环。执行结果是输出的平均成绩为结果是输出的平均成绩为0。原因:原因: 右侧是先判断条件的循环(右侧是先判断条件的循环(while),在进入循环之前先),在进入循环之前先判断循
13、环条件,条件成立才会执行循环体。由于循环控制条判断循环条件,条件成立才会执行循环体。由于循环控制条件件k=n为为false,不执行循环体,直接退出循环。不执行循环体,直接退出循环。 而左侧是后判断条件的循环(而左侧是后判断条件的循环(do-while),在进入循环),在进入循环体之前不判断循环条件是否成立,直接进入循环体,先执行体之前不判断循环条件是否成立,直接进入循环体,先执行一次循环体,然后才判断循环条件一次循环体,然后才判断循环条件 k epse=e+r ; 开始开始结束结束r=r*1/n ;n=n+1;#include stdio.h#define eps 1e-5void main(
14、 ) int n ; float e,r ; e=1.0; n=1; r=1.0; while ( reps ) e=e+r; n=n+1; r=r/n; printf ( e=%fn,e) ; e=1.0; n=1; r=1.0;e=2.0; n=2; r=0.5;e=2.5; n=3; r=0.1667;e=2.6667; n=4; r=0.0417;.运行结果演示运行结果演示 while num != 100i=0; j=0; k=0;输出输出 i,j,k开始开始结束结束输入一个数输入一个数 numi+j+k+num-101输入一个数输入一个数 num运行结果演示运行结果演示sum =
15、0 ;k = 1 ;while( k=n ) sum = sum + 1.0/(k*(k+1) ; k+ ;sum = 0 ;for ( k=1 ; k=n; k+ ) sum = sum + 1.0/(k*(k+1) ;n一般形式一般形式 for ( e1; e2 ; e3) Se1初值表达式初值表达式 用于设置该循环开始的一些初值用于设置该循环开始的一些初值e2终值表达式终值表达式 用于控制循环结束用于控制循环结束e3增量表达式增量表达式 用于每次循环体执行后对控制条件的修正用于每次循环体执行后对控制条件的修正 语句语句e1e2Se3F结束结束for ( e1 ; e2 ;e3 )S例例4
16、.8 编程序求向量内积。由终端输入两个编程序求向量内积。由终端输入两个n维向量维向量X,Y. 计算其内积计算其内积XY 。xy = 0 for( i=1;i=n ;i+) scanf(%f%f, &xi, &yi )开始开始结束结束输出输出 xy xy = xy + xi*yi运行结果演示运行结果演示本章已经编写过多个求和的程序,总结本章已经编写过多个求和的程序,总结“求和求和”程序:程序: 如图,所有计算和的程序都使用一个如图,所有计算和的程序都使用一个“和单元和单元”其中:其中:n S是是“和单元和单元”;n 进入循环前进入循环前“和单元和单元”S必须置初值,必须置初值,
17、通常为清通常为清“0”,即,即“S=0”;n 在循环体内,每循环一次给在循环体内,每循环一次给“和单元和单元”加上一项;加上一项;n 循环结束,循环结束,“和单元和单元”值即为和。值即为和。结束?结束?S=0S=S+Tk 【例【例4.9】某评估单位要对学生的学习情况进行评估,需要】某评估单位要对学生的学习情况进行评估,需要计算全班计算全班50名学生每个学生的平均学习成绩。编程序,从终端名学生每个学生的平均学习成绩。编程序,从终端逐次输入各个学生逐次输入各个学生n门课程的成绩,计算并输出他们的平均成门课程的成绩,计算并输出他们的平均成绩。绩。 do-while k=n全班全班50名学生每人的平均
18、成绩名学生每人的平均成绩sum=0;k=1;读入一科成绩读入一科成绩 msum =sum+m;k = k+1 ; 输出输出 i: sum / n开始开始结束结束i=1;i=50;i+#include #define n 40/n门课程门课程#define p 50main( ) float sum ; int k , m , i ; for (i=1;i=p;i+) sum0; k1; do printf(“please input No%2d%2d achievement :”,i,k);scanf(“%d”,&m );sum = sum + m;k = k+1 ; while (
19、k = n ) ; printf(“No%2d : average achievement : %5.2fn” , i , sum/n ); 该程序,该程序,forfor循环的循环体内部还含有一个循环的循环体内部还含有一个do_whiledo_while循环,形循环,形成循环套循环,成循环套循环, 在程序设计中是允许的,可以任意的嵌套任意层循环。在程序设计中是允许的,可以任意的嵌套任意层循环。1 12 2 43 3 6 94 4 8 12 165 5 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56
20、649 9 18 27 36 45 54 63 72 81* 1 2 3 4 5 6 7 8 9 打印前打印前 9 行行打印底行打印底行开始开始结束结束* 1 2 3 4 5 6 7 8 9打印底行打印底行打印底行打印底行结束结束 for (i=1;i=9;i+)印印 i印印 *1 12 2 43 3 6 94 4 8 12 165 5 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 81打印前打印前9行行打印前打印前9行行结束结束打印第打印第
21、i 行行(i=1;i=9;i+)打印第打印第i行行6 6 12 18 24 30 369 9 18 27 36 45 54 63 72 81行号行号本行数值本行数值打印第打印第i行行结束结束打印行标打印行标 i for(j=1;j=i;j+)打印打印 i*j9 9 18 27 36 45 54 63 72 816 6 12 18 24 30 36打印前打印前 9 行行打印底行打印底行开始开始结束结束 for (i=1;i=9;i+)印印 i印印 *打印第打印第 i 行行 for (i=1;i=9;i+)打印行标打印行标 i for(j=1;j=i;j+)打印打印 i*j#include std
22、io.hvoid main() int i,j; for(i=1;i10;i+) printf(%4d,i); for(j=1;j=i;j+) printf(%4d,i*j); printf(n); printf(%4c,*); for(i=1;i10;i+) printf(%4d,i);运行结果演示运行结果演示 for (i=2;i=2;j-)flag = true i%j = 0 for (i=2; i=2; j-)flag = true i % j = 0运行结果演示运行结果演示开始开始结束结束 for ( x=1; x=20; x+)输出输出x,y,zx ,y ,z满足方程满足方程 f
23、or ( y=1; y=33; y+) for ( z=3; z=99; z=z+3)运行结果演示运行结果演示运行结果演示运行结果演示k=50开始开始u=0v=1k=3k=k+1wv-uk为偶数为偶数wv+u输出输出wu=vv=w结束结束输出输出u ,v运行结果演示运行结果演示k=50开始开始u=0v=1k=3k=k+1wv+flag*uflag=-flag输出输出wu=vv=w结束结束输出输出u ,vflag=1运行结果演示运行结果演示开始开始结束结束r=vr!=0r=u%vu=vv=r输出输出u输入输入u、v#include stdio.hvoid main( ) int u,v,r ;
24、printf(pleace input u 、v:); scanf(%d%d,&u,&v); r=v ; while ( r!=0 ) r = u%v ; u = v ; v = r ; printf ( gcd(u,v) = %5dnu );运行结果演示运行结果演示开始开始结束结束输入输入NN!=0r=N%10N=N/10S=S+r!输出输出SS=0r!PP=1u=rP=P*uu=u+1u=1开始开始结束结束输入输入NN!=0r=N%10N=N/10输出输出SS=0P=1u=rP=P*uu=u+1u=1S=S+P 所有计算连乘积的程序都使用一个积单元,有所有计算连乘积的程序都
25、使用一个积单元,有类似本题目的程序模式。其中:类似本题目的程序模式。其中:P P是积单元;是积单元;开始进入循环之前积单元开始进入循环之前积单元P P必须置必须置“1”1”;在循环体内,每循环一次向积单元乘入一项;在循环体内,每循环一次向积单元乘入一项;最后循环结束,积单元中的值即为所求之积。最后循环结束,积单元中的值即为所求之积。运行结果演示运行结果演示 【例【例4.164.16】 正整数翻译。编程序,以字符形式从正整数翻译。编程序,以字符形式从终端读入一个正整数,把它翻译成计算机内部表示的数。终端读入一个正整数,把它翻译成计算机内部表示的数。 不能使用不能使用scanfscanf函数直接读
26、入数,所以只能一个字函数直接读入数,所以只能一个字符一个字符的读入,然后再把它们拼起来,并翻译成计符一个字符的读入,然后再把它们拼起来,并翻译成计算机内部表示的数。算机内部表示的数。 . 0121nnnnnrrr 10*10*.10*10*10* 00112211nnnnnrrrrrr解:一个正整数具有如下形式:解:一个正整数具有如下形式: 它的含义是它的含义是: : 考虑输入数之前可能有空格之类的空白符号,所以在正式翻译考虑输入数之前可能有空格之类的空白符号,所以在正式翻译数之前应该先滤掉前导空白,得数之前应该先滤掉前导空白,得PAD图。图。开始开始滤掉前导空白滤掉前导空白 翻译整数翻译整数
27、结束结束结束结束滤掉前导空白滤掉前导空白读读(ch)读读(ch) ch= 把正整数的表达式改写成把正整数的表达式改写成:012110*).10*)10*)10*)10*0 (.(nnnnnrrr 翻译整数翻译整数n = 0结束结束n = n*10+”ch”读读(ch) ch=数字数字/* convert decimal number*/#include stdio.h#define radix 10void main() char ch; int n;/ 保存整数部分数值保存整数部分数值 /*滤掉前导空白字符滤掉前导空白字符*/ ch=getchar(); while( (ch9) )ch=g
28、etchar(); /*翻译整数部分翻译整数部分*/ n=0; while( (ch=0)&(ch=9) )n=n*radix + ( (int)ch - 0 ); /把把ch转换成数字值,再相加转换成数字值,再相加ch=getchar(); printf(“ 该整数为:该整数为:%dn”,n);运行结果演示运行结果演示打印前打印前 6 行行 打印后打印后5行行xfor(x=A;x=A;x-) A A B B B B B B C C C C C C C C C C D D D D D D D D D D D D D D E E E E E E E E E E E E E E E E E E F F F F F F F F F F F F F F F F F F F F F F E E E E E E E E E E E E E E E E E E D D D D D D D D D D D D D D C C C C C C C C C C B B B B B B A AA BBB CCCCCDD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年标准借款合同:正式版规范借贷行为3篇
- 2025年酒吧场地短期租赁及设施维护合同3篇
- 2025年度智能安防系统整体承包施工合同范本2篇
- 2024年门窗安装工程劳务分包合同修订版范本6篇
- 2024年精定制:加工合同标准文本
- 二零二五年度二手车买卖合同附车辆改装及升级条款3篇
- 二零二五年度E管材国际环保法规遵循合同3篇
- 2024年物联网技术应用与推广合同标的、市场布局及运营策略
- 2025年度办公楼租赁合同附员工福利协议3篇
- 2025版高科技房产最高额抵押融资合同3篇
- 法律意见书(适用于股权投资)
- JJF(苏) 276-2024 接触(触针)式表面轮廓测量仪校准规范
- 2024-2025学年五年级科学上册第二单元《地球表面的变化》测试卷(教科版)
- 污泥(废水)运输服务方案(技术方案)
- 2024-2030年中国降压药行业市场规模分析及发展趋势与投资研究报告
- 二十届三中全会精神应知应会知识测试30题(附答案)
- 一例下肢静脉血栓疑难病例护理讨论
- 2024年信息系统项目管理师题库及答案
- 输血相关法律法规临床输血安全管理课件
- DL∕T 5161.6-2018 电气装置安装工程质量检验及评定规程 第6部分:接地装置施工质量检验
- DL∕T 1502-2016 厂用电继电保护整定计算导则
评论
0/150
提交评论