欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序设计C语言程序设计PPT (5).pdf

    • 资源ID:57971820       资源大小:797.21KB        全文页数:27页
    • 资源格式: PDF        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计C语言程序设计PPT (5).pdf

    5 5循 环 结 构 程 序 设 计第第章章为什么需要循环控制i=1;/设整型变量i初值为1 while(i=50)/当i的值小于或等于50时执行花括号内的语句scanf(%f,%f,%f,%f,%f,&score1,&score2,&score3,&score4,&score5);aver=(score1+score2+score3+score4+score5)/5;printf(aver=%7.2f,aver);i+;/每执行完一次循环使i的值加1 重复写49个同样的程序段scanf(%f,%f,%f,%f,%f,&score1,&score2,&score3,&score4,&score5);/输入一个学生5门课的成绩aver=(score1+score2+score3+score4+score5)/5;/求该学生平均成绩printf(aver=%7.2f,aver);/输出该学生平均成绩要向计算机输入全班50个学生的成绩;(重复50次相同的输入操作)分别统计全班50个学生的平均成绩;(重复50次相同的计算操作)解决方法用while语句实现循环while(表达式)语句while语句可简单地记为:只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。“语句”就是循环体。循环体可以是一个简单的语句,可以是复合语句(用花括号括起来的若干语句)。执行循环体的次数是由循环条件控制的,这个循环条件就是上面一般形式中的“表达式”,它也称为循环条件表达式。当此表达式的值为“真”(以非0值表示)时,就执行循环体语句;为“假”(以0表示)时,就不执行循环体语句。注意while循环的特点是先判断条件表达式,后执行循环体语句。表达式语句YNwhile语句实现循环【例5.1】求1+2+3+100,即=1100#includeint main()int i=1,sum=0;/定义变量i的初值为1,sum的初值为0 while(i100,条件表达式i=100的值为假,不执行循环体/循环体开始sum=sum+i;/第1次累加后,sum的值为1i+;/加完后,i的值加1,为下次累加做准备/循环体结束printf(sum=%dn,sum);/输出1+2+3+100的累加和return 0;i100sum=sum+ii=i+1真假sum=0i=1(1)循环体如果包含一个以上的语句,应该用花括号括起来,作为复合语句出现。(2)不要忽略给i和sum赋初值,否则它们的值是不可预测的,结果显然不正确。(3)在循环体中应有使循环趋向于结束的语句。如本例中的“i+;”语句。如果无此语句,则i的值始终不改变,循环永远不结束。用dowhile语句实现循环do语句while(表达式);注意dowhile语句的特点是,先无条件地执行循环体,然后判断循环条件是否成立。表达式语句YN用dowhile语句实现循环【例5.2】用dowhile语句求1+2+3+100,即=1100#include int main()int i=1,sum=0;dosum=sum+i;i+;while(i=100);printf(sum=%dn,sum);return 0;在一般情况下,用while语句和用dowhile语句处理同一问题时,若二者的循环体部分是一样的,那么结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。i100sum=sum+ii=i+1真假sum=0i=1用dowhile语句实现循环【例5.3】while和dowhile循环的比较。#include int main()int i,sum=0;printf(please enter i,i=?);scanf(%d,&i);while(i=10)sum=sum+i;i+;printf(sum=%dn,sum);return 0;#include int main()int i,sum=0;printf(please enter i,i=?);scanf(%d,&i);do sum=sum+i;i+;while(i=10);printf(sum=%dn,sum);return 0;用for语句实现循环for(表达式1;表达式2;表达式3)语句for语句更为灵活,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。表达式1:设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值。表达式2:是循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环。表达式3:作为循环的调整,例如使循环变量增值,它是在执行完循环体后才进行的。for(循环变量赋值;表达式2;表达式3)语句用for语句实现循环for(表达式1;表达式2;表达式3)语句for语句的执行过程如下:(1)求解表达式1。(2)求解表达式2,若此条件表达式的值为真(非0),则执行for语句中的循环体,然后执行第(3)步。若为假(0),则结束循环,转到第(5)步。(3)求解表达式3。(4)转回步骤(2)继续执行。注意:在执行完循环体后,循环变量的值“超过”循环终值,循环结束。(5)循环结束,执行for语句下面的一个语句。求解表达式1表达式2语句求解表达式3真假for语句的下一语句表达式1;while 表达式2语句表达式3用for语句实现循环for(表达式1;表达式2;表达式3)语句注意“表达式1”可以省略,即不设置初值,但表达式1后的分号不能省略。例如:for(;i=100;i+)。应当注意:由于省略了表达式1,没有对循环变量赋初值,因此,为了能正常执行循环,应在for语句之前给循环变量赋以初值。表达式2也可以省略,即不用表达式2来作为循环条件表达式,不设置和检查循环的条件。此时循环无终止地进行下去,也就是认为表达式2始终为真。表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。甚至可以将3个表达式都可省略,即不设初值,不判断条件(认为表达式2为真值),循环变量也不增值,无终止地执行循环体语句,显然这是没有实用价值的。表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。表达式3也可以是与循环控制无关的任意表达式。但不论怎样写for语句,都必须使循环能正常执行。表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。for语句的循环体可为空语句,把本来要在循环体内处理的内容放在表达式3中,作用是一样的。可见for语句功能强,可以在表达式中完成本来应在循环体内完成的操作。C 99允许在for语句的“表达式1”中定义变量并赋初值。循环的嵌套while()while()01内层循环dodowhile();while();02内层循环for(;)for(;)03内层循环while()dowhile();04内层循环for(;)while()05内层循环dofor(;)while();06内层循环几种循环的比较(1)3种循环都可以用来处理同一问题,一般情况下它们可以互相代替。(2)在while循环和dowhile循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i+,或i=i+1等)。for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。(3)用while和dowhile循环时,循环变量初始化的操作应在while和dowhile语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。(4)while循环、dowhile循环和for循环都可以用break语句跳出循环,用continue语句结束本次循环。改变循环执行的状态continuebreak用break语句提前终止循环【例5.4】在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数以及平均每人捐款的数目。#include#define SUM 100000/指定符号常量SUM代表10万int main()float amount,aver,total;int i;for(i=1,total=0;i=SUM)break;aver=total/i;printf(num=%dnaver=%10.2fn,i,aver);return 0;for语句指定执行循环体1000次。每次循环中,输入一个捐款人的捐款数,并累加到total中。设置了if语句,在每一次累加捐款数amount后,立即检查累加和total是否达到或超过SUM(即100 000),若超过就执行break语句,流程跳转到循环体的花括号外,提前结束循环。用break语句提前终止循环break;作用:使流程跳到循环体之外,接着执行循环体下面的语句。注意:break语句只能用于循环语句和switch语句之中,而不能单独使用。用continue语句提前结束本次循环【例5.5】要求输出100200之间的不能被3整除的数。#include int main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);printf(n);return 0;当n能被3整除时,执行continue语句,流程跳转到表示循环体结束的右花括号的前面(注意不是右花括号的后面),从而跳过printf函数语句,结束本次循环,然后进行循环变量的增值(n+),只要n=200,就会接着执行下一次循环。n=100n200n=n+1YNn能被3整除输出nYN结束用continue语句提前结束本次循环continue;作用:结束本次循环,即跳过循环体中下面尚未执行的语句,转到循环体结束点之前,接着执行for语句中的“表达式3”,然后进行下一次是否执行循环的判定。break语句和continue语句的区别break;continue;while(表达式1)语句1if(表达式2)break;语句2while(表达式1)语句1if(表达式2)continue;语句2continue语句只结束本次循环,而非终止整个循环。break语句结束整个循环,不再判断执行循环的条件是否成立。break表达式1语句1表达式2语句2while循环的下一语句假真真假continue表达式1语句1表达式2语句2while循环的下一语句假真真假#include int main()int i,j,n=0;for(i=1;i=4;i+)for(j=1;j=5;j+,n+)/n用来累计输出数据的个数if(n%5=0)printf(n);/控制在输出5个数据后换行printf(%dt,i*j);printf(n);return 0;break语句和continue语句的区别【例5.6】输出以下45的矩阵。本程序包括一个双重循环,是for循环的嵌套。外循环变量i由1变到4,用来控制输出4行数据;内循环变量j由1变到5,用来控制输出每行中的5个数据。12345246810369121548121620if(i=3&j=1)break;if(i=3&j=1)continue;循环程序举例【例5.7】用公式4 1 13+1517+求的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。#include#include/程序中用到数学函数fabs,应包含头文件math.hint main()int sign=1;/sign用来表示数值的符号double pi=0.0,n=1.0,term=1.0;/pi开始代表多项式的值,最后代表的值,n代表分母,term代表当前项的值while(fabs(term)=1e-6)/检查当前项term的绝对值是否大于或等于10-6pi=pi+term;/把当前项term累加到pi中n=n+2;/n+2是下一项的分母sign=-sign;/sign代表符号,下一项的符号与上一项符号相反term=sign/n;/求出下一项的值termpi=pi*4;/多项式的和pi乘以4,才是的近似值printf(pi=%10.8fn,pi);/输出的近似值return 0;解题思路:找规律:(1)每项的分子都是1。(2)后一项的分母是前一项的分母加2。(3)第1项的符号为正,从第2项起,每一项的符号与前一项的符号相反。在每求出一项后,检查它的绝对值是否大于或等于10-6。sign=1,pi=0,n=1,term=1当|term|10-6pi=pi+termn=n+2sign=-signterm=sign/npi=pi*4输出pi循环程序举例【例5.8】求Fibonacci(斐波那契)数列的前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即该数列为1,1,2,3,5,8,13,用数学方式表示为:1=12=1=1+2(=1)(=2)(3)这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?兔子繁殖的规律月数小兔子对数中兔子对数老兔子对数兔子总对数110012010131012411135212563238753513注:假设不满1个月的为小兔子,满1个月不满2个月的为中兔子,满2个月以上的为老兔子。循环程序举例【例5.8】求Fibonacci(斐波那契)数列的前40个数。f1=1,f2=1输出f1,f2for i=1 to 38f3=f1+f2输出f3f1=f2f2=f3#include int main()int f1=1,f2=1,f3;int i;printf(%12dn%12dn,f1,f2);for(i=1;i=38;i+)f3=f1+f2;printf(%12dn,f3);f1=f2;f2=f3;return 0;f1=1,f2=1for i=1 to 20输出f1,f2f1=f1+f2f2=f2+f1#include int main()int f1=1,f2=1;int i;for(i=1;i=20;i+)/每个循环输出2个月的数据,故只需循环20次printf(%12d%12d,f1,f2);/输出已知的两个月的兔子数if(i%2=0)printf(n);f1=f1+f2;/计算出下一个月的兔子数,并存放在f1中f2=f2+f1;/计算出下两个月的兔子数,并存放在f2中return 0;循环程序举例【例5.9】输入一个大于3的整数n,判定它是否为素数(prime,又称质数)。#include int main()int n,i;printf(please enter a integer number,n=?);scanf(%d,&n);for(i=2;in;i+)if(n%i=0)break;if(in)printf(%d is not a prime number.n,n);else printf(%d is a prime number.n,n);return 0;输入ni=2for i=2 to n-1是否执行break结束循环i=i+1是否输出n不是素数输出n是素数n被i整除in若n能被2(n-1)之间的一个整数整除,则执行break语句,提前结束循环,流程跳转到循环体之外。此时in。如果n不能被2(n-1)之间任何的一个整数整除,则不会执行break语句,循环变量i一直变化到等于n,然后由第1个判断框判定“in”条件不成立,从而结束循环。这种正常结束的循环,其循环变量的值必然大于事先指定的循环变量终值(本例中循环变量终值为n-1)。因此,只要在循环结束后检查循环变量i的值,就能判定循环是提前结束还是正常结束的。从而判定n是否为素数。希望读者理解和掌握这一方法,以后会常用到。循环程序举例【例5.9】输入一个大于3的整数n,判定它是否为素数(prime,又称质数)。#include int main()int n,i;printf(please enter a integer number,n=?);scanf(%d,&n);for(i=2;in;i+)if(n%i=0)break;if(in)printf(%d is not a prime number.n,n);else printf(%d is a prime number.n,n);return 0;程序改进:其实n不必被2(n-1)范围内的各整数去除,只须将n被2 n之间的整数除即可。因为n的每一对因子,必然有一个小于n,另一个大于n。#include#include int main()int n,i,k;printf(please enter a integer number,n=?);scanf(%d,&n);k=sqrt(n);for(i=2;i=k;i+)if(n%i=0)break;if(i=k)printf(%d is not a prime number.n,n);else printf(%d is a prime number.n,n);return 0;循环程序举例【例5.9】输入一个大于3的整数n,判定它是否为素数(prime,又称质数)。for(t=1,i=2;i=(int)sqrt(n);i+)/先定义t为int型,t作为标志变量if(n%i=0)t=0;/t=0表示n能被i整除,n不是素数if(t)/如果t=1表示n是素数printf(%d is prime.n,n);其他求素数方法for(t=1,i=2;i=(int)sqrt(n);i+)if(n%i=0)t=0;break;if(t)printf(%d is prime.n,n);for(t=1,i=2;i=sqrt(n)&t;i+)if(n%i=0)t=0;if(t)printf(%d is prime.n,n);循环程序举例【例5.10】求100200间的全部素数。#include#includeint main()int n,k,i,m=0;for(n=101;n=200;n=n+2)/n从100变化到200,对每个奇数n进行判定k=sqrt(n);for(i=2;i=k;i+)if(n%i=0)break;/如果n被i整除,终止内循环,此时i=k+1)/若i=k+1,表示n未曾被整除printf(%d,n);/应确定n是素数m=m+1;/m用来控制换行,一行内输出10个素数if(m%10=0)printf(n);/m累计到10的倍数,换行printf(n);return 0;循环程序举例【例5.11】译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。#include int main()char c;c=getchar();/输入一个字符给字符变量cwhile(c!=n)/检查c的值是否为换行符n if(c=a&c=A&c=W&c=w&cZ&cz&c=z+4)c=c-26;while(c=getchar()!=n)

    注意事项

    本文(C语言程序设计C语言程序设计PPT (5).pdf)为本站会员(刘静)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开