书签 分享 收藏 举报 版权申诉 / 63
上传文档赚钱

类型C语言第4章.ppt

  • 上传人(卖家):hwpkd79526
  • 文档编号:5657092
  • 上传时间:2023-04-29
  • 格式:PPT
  • 页数:63
  • 大小:486KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C语言第4章.ppt》由用户(hwpkd79526)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    语言
    资源描述:

    1、第4章 程序的控制结构2内容提要n算法的描述方法n基本控制结构n基本控制语句n常用算法,如累加、累乘、统计、递推、迭代、穷举等n程序的基本版式n结构化程序设计的基本思想3算法的概念 n数据结构+算法=程序n算法:为解决一个具体问题而采取的确定的有限的操作步骤,这里仅指计算机能执行的算法n算法特性:n有穷性n确定性 n有效性 n没有输入或有多个输入 n有一个或多个输出 4算法的分类 n数值运算算法:n解决的是求数值解的问题,例如用辗转相除法求两个数的最大公约数等n非数值运算算法:n主要用于解决需要用分析推理、逻辑推理才能解决的问题,例如人工智能中的许多问题,查找、分类等问题5算法的表示方法n自然

    2、语言表示n传统的流程图表示nN-S结构化流程图表示 n伪代码表示6C程序结构C程序源程序文件1源程序文件2源程序文件3编译预处理命令全局变量声明函数1函数n函数首部函数体局部变量声明执行语句7构成程序的三种基本结构构成程序的三种基本结构n顺序结构n选择结构n循环结构n已经证明,任何程序均可只用这三种结构综合描述n只用这三种结构编制的程序,叫结构化程序n程序必须符合结构化规则8结构化程序设计的核心思想结构化程序设计的核心思想 n采用顺序、选择和循环三种基本结构作为程序设计的基本单元 n只有一个入口;n只有一个出口;n无死语句,即不存在永远都执行不到的语句;n无死循环,即不存在永远都执行不完的循环

    3、。n采用“自顶向下、逐步求精”和模块化的方法进行结构化程序设计 9NS图传统流程图顺序结构顺序结构10N 成绩成绩6060 通知补考通知补考 告知你考试成绩告知你考试成绩YAB分支结构(选择结构)分支结构(选择结构)11真假假假真循环结构循环结构12真假假循环结构循环结构当当P为真为真当当P为真为真A13假真循环结构循环结构直到直到P为假为假直到直到P为假为假A14复合语句n括住的若干条语句构成一个复合语句n语句块内可以定义变量n变量仅在定义它的复合语句内有效n变量必须在复合语句的开头定义n复合语句可以用在任何可以使用语句的地方15if-elsen选择结构的一种最常用形式 if(表达式)语句1

    4、;else语句2;语句3n表达式值非0时,执行语句1,然后语句3;表达式值为0时,执行语句2,然后语句3nelse部分可以没有。if(表达式)语句1;语句3n当表达式值为0时,直接执行语句3nif-else嵌套使用时,注意else和谁配对的问题16else-ifnif的一种扩展形式nif(表达式)语句1;else if(表达式)语句2;else if(表达式)语句3;else语句4;语句5;nelse部分可以没有17编程完成例4.5 n体型判断。按“体指数”对肥胖程度进行划分:体指数t=体重w/(身高h)2 (w 单位为公斤,h单位为米)n当t=27时,为肥胖。n编程从键盘输入你的身高h和体重

    5、w,根据给定公式计算体指数t,然后判断你的体重属于何种类型。n用3种方法编程:n算法1:用不带else子句的if语句编程 n算法2:用在if子句中嵌入if 语句的形式编程 n算法3:用在else子句中嵌入if 语句的形式编程 18switchn多路选择nswitch(表达式)case 常数1:语句序列1;case 常数2:语句序列2;default:语句序列3;ndefault可以没有,但最好不省略n不要忘记break19编程完成计算器程序例4.8 n编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2 然后,计算表达式的值,指定的运算符为加(+)、减(

    6、-)、乘(*)、除(/)20循环while,fornwhile(表达式)语句;nfor(表达式1;表达式2;表达式3)语句;21whilenwhile(表达式)语句;n只要表达式的值为非0,就重复执行语句,直到表达式值为0时止22fornfor(表达式1;表达式2;表达式3)语句;n首先执行表达式1。如果表达式2的值为非0,就重复执行语句和表达式3,直到表达式2的值为0时止n相当于:表达式1;while(表达式2)语句;表达式3;n表达式1和表达式3可以没有或者是用逗号分隔的多个表达式的组合。但最好不要有太多的表达式组合23注意n在for和while语句之后一般没有分号n有分号表示循环体就是分

    7、号之前的内容(空循环体)nwhile(i 100);i+;nfor(i=0;i 100;i+);printf(%d,i);nfor通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量24do-whilendo 语句;while(表达式);n首先执行语句,然后判断表达式的值。如果表达式为0,继续向下执行,否则,再次执行语句,再次判断表达式的值n语句会被至少执行一次25真假假假真假假当循环条件第一次就为假时当循环条件第一次就为假时26选择三种循环的一般原则n如果循环次数已知,用forn如果循环次数未知,用whilen如果循环体至少要执行一次,用do-whilen这只是“一般”原则,不是“原

    8、则”27编程完成例4.6,例4.9 n例4.6:猜数游戏:先由计算机“想”一个数请人猜,如果人猜对了,则计算机给出提示:“Right!”,否则提示:“Wrong!”,并告诉人所猜的数是大还是小。n例4.9:先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。计算机记录人猜的次数,以此来反映猜数者“猜”的水平。28猜数游戏用到的库函数n随机函数rand()n#include nRAND_MAX在stdlib.h中定义,不大于双字节整数的最大值32767 n产生0,RAND_MAX 之间的随机数nmagic=ra

    9、nd();n产生0,b-1 之间的随机数nmagic=rand()%b;n产生a,a+b-1 之间的随机数nmagic=rand()%b+a;n现场编程完成例4.6,发现问题29猜数游戏用到的库函数n随机函数srandn为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的“随机化”n通过键入随机数种子,产生1,100之间的随机数scanf(%u,&seed);srand(seed);magic=rand()%100+1;30猜数游戏用到的库函数n随机函数srandn为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的“随机化”n使用计算机读取其时钟值并把该值

    10、自动设置为随机数种子,产生1,100之间的随机数n函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子#include srand(time(NULL);magic=rand()%100+1;31死循环n永远不会退出的循环为死循环nfor(;)nwhile(1)ndo while(1)n一般情况下,要极力避免死循环n绝大多数程序不需要死循环。如果出现,往往都是bugn时间过长的循环会造成“假死”效果,也要考虑解决32编程完成例4.11 n国王的许诺。相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。n位聪明的宰相指

    11、着88共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。n舍罕王让人扛来一袋麦子,他要兑现他的许诺。n国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米?n(已知1立方米麦子约1.42e8粒)n总粒数为:sum=1+2+22+23+263 33方法1#define CONST 1.42e8#include#include main()int n;double term,sum=0;/*累加求和变量赋初值*/for(n=1;n=64

    12、;n+)term=pow(2,n-1);/*根据累加项的规律计算累加项*/sum=sum+term;/*作累加运算*/printf(sum=%en,sum);/*打印总麦粒数*/printf(volum=%en,sum/CONST);/*打印折合的总麦粒体积数*/34方法2#define CONST 1.42e8 /*定义符号常量CONST值为1.42e8*/#include main()int n;double term=1,sum=1;/*累乘求积、累加求和变量赋初值*/for(n=2;n=64;n+)term=term*2;/*根据后项总是前项的2倍计算累加项*/sum=sum+term

    13、;/*作累加运算*/printf(sum=%en,sum);/*打印总麦粒数*/printf(volum=%en,sum/CONST);/*打印折合的总麦粒体积数*/35使用嵌套的循环体时,应注意以下问题 n在嵌套的各层循环体中,使用复合语句(即用一对大花括号将循环体语句括起来)保证逻辑上的正确性 n内层和外层循环控制变量不应同名,以免造成混乱 n嵌套的循环最好采用右缩进格式书写,以保证层次的清晰性 n循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环 36合法的嵌套循环 外层循环 内层循环 内层循环 内层循环 合法的嵌套循环 37现场编程完成例4.14 n编程输出如下形式的乘法九九

    14、表 817263544536271897264564840322416863564942352821147544842363024181264540353025201510536322824201612842724211815129631816141210864298765432198765432138#include main()int m,n;for(m=1;m10;m+)printf(%4d,m);/*打印表头*/printf(n);for(m=1;m10;m+)printf(-);printf(n);for(m=1;m10;m+)for(n=1;n10;n+)printf(%4d,m*

    15、n);printf(n);39现场编程完成例4.15n将上例输出格式改成如下的下三角格式打印 8172635445362718964564840322416849423528211473630241812625201510516128496342198765432140#include main()int m,n;for(m=1;m10;m+)printf(%4d,m);/*打印表头*/printf(n);for(m=1;m10;m+)printf(-);printf(n);for(m=1;m10;m+)for(n=1;n=m;n+)printf(%4d,m*n);printf(n);41现场

    16、编程完成例4.16n马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?n 解方程组n穷举法)2(5023)1(30zyxzyx42方法1:采用三重循环穷举x,y,z的全部可能的组合#include main()int x,y,z;printf(Man t Women t Childernn);for(x=0;x=30;x+)for(y=0;y=30;y+)for(z=0;z=30;z+)if(x+y+z=30&3*x+2*y+z=50)p r i n t f(

    17、%3 d t%5 d t%8dn,x,y,z);43方法2:改进算法#include main()int x,y,z;printf(Man t Women t Childernn);for(x=0;x=16;x+)for(y=0;y=25;y+)z=30 x-y;if(3*x+2*y+z=50)p r i n t f(%3 d t%5 d t%8dn,x,y,z);44流程的转移控制 nbreak语句ncontinue语句ngoto语句nreturn语句 n标准库函数exit()45break和continuen对for、while、do-while循环进行内部手术nbreak,退出循环nco

    18、ntinue,中断此次循环体的执行,开始下一次nbreak和continue少用为妙46break和continue假假真真break表达式1表达式2循环语句的下一条语句循环语句的下一条语句假假真真 contiue表达式1表达式2continue47n标号举例error:ngoto举例goto error;n一般形式 goto 语句标号;语句标号:或 语句标号:goto 语句标号;goto与标号(label)48exit()函数nexit(0)n作用是终止整个程序的执行,强制返回操作系统 n调用该函数需要嵌入头文件49输入一个整数,判断它是否是素数 假 真 假 真 开 始 输入 m mk i=

    19、2 i=k m 被 i 整出 输出 m 不是素数 输出 m 是素数 结 束 i=i+1 50方法1#include main()int m,i,k;printf(Please enter a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i=k;i+)if(m%i=0)printf(No!n);goto end;printf(Yes!n);end:printf(Program is over!n);Please enter a number:6Program is over!No!51方法1#include main()int m,i,k;printf(Ple

    20、ase enter a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i=k;i+)if(m%i=0)printf(No!n);goto end;printf(Yes!n);end:printf(Program is over!n);Please enter a number:5Program is over!Yes!52方法2#include main()int m,i,k;printf(Please enter a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i k)printf(Yes!n);else printf(N

    21、o!n);printf(Program is over!n);Please enter a number:6Program is over!No!53方法3#include main()int m,i,k,flag=1;/*标志变量flag初值置为1*/printf(Please enter a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i=k&flag;i+)if(m%i=0)flag=0;if(flag)printf(Yes!n);else printf(No!n);printf(Program is over!n);54这个程序是做什么的?#incl

    22、ude main()int m,i,k,flag=1;/*标志变量flag初值置为1*/printf(Please enter a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i=m-1;i+)if(m%i=0)flag=0;printf(%dn,i);if(flag)printf(No divisor!It is a prime number.n);printf(Program is over!n);55糟糕的gotoSTART_LOOP:if(fStatusOk)if(fDataAvaiable)i=10;goto MID_LOOP;else goto

    23、END_LOOP;else for(i=0;i 100;i+)MID_LOOP:/lots of code here goto START_LOOP;END_LOOP:56糟糕的gotoSTART_LOOP:if(fStatusOk)if(fDataAvaiable)i=10;goto MID_LOOP;else goto END_LOOP;else for(i=0;i 100;i+)MID_LOOP:/lots of code here goto START_LOOP;END_LOOP:57n现代观点认为:n混乱根源不在goto,而在标号n任何程序都可以不用goto就实现其功能n但在某些情况

    24、下,使用goto可以让程序更清晰58使用goto的原则n使用之后,程序仍然是单入口,单出口n不要使用一个以上的标号n不要用goto往回跳,要向下跳n不要让goto制造出永远不会被执行的代码59n编程的艺术就是处理复杂性的艺术n优秀的程序员很清楚自己的能力是有限的,所以他对待编程任务的态度是完全谦卑的,特别是,他们会象逃避瘟疫那样逃避“聪明的技巧”。1972年图灵奖演讲n简单是可靠的先决条件 n我们所使用的工具深刻地影响我们的思考习惯,从而也影响了我们的思考能力60这一章我们学习了n算法的描述方法n流程图n与基本控制结构相应的结构化的控制语句nif-elsenswitchnfornwhilend

    25、o-whilenbreakncontinuen常用算法,如累加、累乘、统计、递推、迭代、穷举等61这一章我们学习了n常用算法n求阶乘:n数据类型的定义,long或doublen求累加和:longn统计:n统计正数、平均分以上、n个成绩中10090、8980、7970、6960、60的人数;输入字符串中字母d的个数n设置一个计数变量k:初始化为1,每遇到一次将其加1:k+;62这一章我们学习了n累加和n存放累加和的变量:n初始化为0或第一项,再循环加每一项;n循环控制:n前n项之和已知循环次数,可设置一个循环变量如i来控制;n加到某一项或累加和满足一定条件。例:1+2+.+n 与 1+3+5+7+.和 2+4+6+8+.及12+32+52+72+.输入n或累加和大于2000的最小的n63这一章我们学习了n累加的项较复杂时,得专门求,例:n前后项之间无关n1m+3m+5m+7m+.n/4=1-1/3+1/5-1/7+.直到最后一项的绝对值小于10-6为止n前后项之间有关n1!+2!+.+n!nx0+x1+x2+x3+.n1+1+2+3+5+8+13+21+.n2/1+3/2+5/3+8/5+13/8+21/13+.na+aa+aaa+aaaa+aaaaa+.a是一个数字,例a=2,2+22+222+2222+.

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C语言第4章.ppt
    链接地址:https://www.163wenku.com/p-5657092.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库