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

类型cc程序设计第3章-结构化程序设计课件.ppt

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

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

    特殊限制:

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

    关 键  词:
    cc 程序设计 结构 课件
    资源描述:

    1、C/C+程序设计 C/C+程序设计程序设计第第3章章 结构化程序设计结构化程序设计第第3章章 结构化程序设计结构化程序设计 程序程序-为了让计算机解决一个任务而编写的指令的有序集合。按顺序执行一个个动作就是人在完成一个任务的基本方式。这种方式对应程序中的语句的执行次序,就是顺序结构顺序结构。在完成一个任务的过程中,总会遇到一些选择的状况,条件成立时就可以做某事A,而不成立时则需要做另外一件事B。贯穿我们人的一生中有许许多多选择。所以选择是一种非常常见的结构,这种结构在程序设计称为选择结构选择结构。将一个事情重复做多次的方式,我们称为循环。在程序设计中称这种结构为循环结构循环结构。当然这种循环绝

    2、不是简单的重复,每循环一次自有一次的不同结果。顺序结构、选择结构和循环结构就是结构化程序设计思想中的顺序结构、选择结构和循环结构就是结构化程序设计思想中的三种基本结构三种基本结构,由这三种基本结构,几乎可以设计出解决任何复杂问题的程序。3.1 顺序结构程序设计顺序结构程序设计C语言语句分类语言语句分类 一个C程序由若干条C语句组成,每个C语句完成一个特定的操作。C C语言的语句可语言的语句可分为分为5 5类类:(1)表达式语句:如:a=1;c=a+b;(2)流程控制语句:有9种。见第1章(3)函数调用语句:如:scanf(%d,&x);(4)复合语句:如:t=a;a=b;b=t;(5)空语句:

    3、一个单独的分号“;”(注意不能随便加分号注意不能随便加分号)3.1 顺序结构程序设计顺序结构程序设计1 1顺序结构顺序结构 顺序结构表示程序中的各操作是按照它们出现的顺序结构表示程序中的各操作是按照它们出现的先后顺序执行,程序从入口处开始,按顺序执行所有先后顺序执行,程序从入口处开始,按顺序执行所有操作(下图中块操作(下图中块A和块和块B可能是一段代码,也可能是一可能是一段代码,也可能是一个语句),直到出口处,所以称为顺序结构。个语句),直到出口处,所以称为顺序结构。块块 A块块 B顺序结构流程图顺序结构流程图3.1 顺序结构程序设计顺序结构程序设计2顺序结构编程举例顺序结构编程举例【例例3-

    4、1】编程计算 。设a,b,c 为正整数,要求dit值保留2位小数。分析:1)需要调用库函数中的开平方根函数,故需增加 “#include math.h”头包含命令。2)因开平方根函数sqrt()的值为double类型,故变量dit应定义为double类型。程序:#include#include int main()int a,b,c;double dit;scanf(%d%d%d,&a,&b,&c);dit=sqrt(a*b*b+4*a*c);printf(a=%d,b=%d,c=%d n ,a,b,c);printf(dit=%.2lf n ,dit);return 0;3.1 顺序结构程序

    5、设计顺序结构程序设计【例例3-加加1】已知三角形三条边长,计算三角形的面积。已知三角形三条边长,计算三角形的面积。分析:分析:(首先假设给程序提供的三条首先假设给程序提供的三条边长能构成三角形边长能构成三角形)(1)应该提供三个边长值(考虑数据类型)(2)利用海伦公式海伦公式计算三角形面积。(3)输出面积值。注意:(1)程序用到开平方根!应程序用到开平方根!应该加该加math.h头文件。头文件。程序程序:#include#include void main()double a,b,c,s,area;scanf(%lf%lf%lf,&a,&b,&c);s=(a+b+c)/2;area=sqrt(

    6、s*(s-a)*(s-b)*(s-c);printf(%lf,area);3.1 顺序结构程序设计顺序结构程序设计【例例3-加加2】假设假设=0,求一元二次方程的实数根,求一元二次方程的实数根分析:分析:(同时假设二次项系数同时假设二次项系数a不等于不等于0)(1)应该提供三个系数值(考虑数据类型)应该提供三个系数值(考虑数据类型)(2)利用求根公式计算两个实根。)利用求根公式计算两个实根。(3)输出这两个实根值。)输出这两个实根值。按照上述次序执行即可。按照上述次序执行即可。注意:程序用到开平方根!注意:程序用到开平方根!程序:#include#include void main()doub

    7、le a,b,c,x1,x2,d;scanf(%lf%lf%lf,&a,&b,&c);d=b*b-4*a*c;x1=(-b+sqrt(d)/(2*a);x2=(-b+sqrt(d)/(2*a);printf(x1=%lf,x2=%lfn,x1,x2);3.2 选择结构程序设计选择结构程序设计1.选择结构概念选择结构概念 选择结构是指在程序执行到某处时,需要按照某个条件的真假或某表达式的值决定执行哪些操作。如,三角形面积计算以及一元二次方程求根中遇到的思考问题。选择结构体现了程序的判断能力选择结构体现了程序的判断能力。真(非0)假(0)条件表达式语句段1语句段21.关系运算符关系运算符 (1)关

    8、系运算符:=!=(2)结合方向:自左向右 (3)优先级别:=!=优先级6(高)优先级7(低)2.2.关系表达式及值关系表达式及值:由关系运算符和运算对象连接起来的式子。其值是逻辑值“真”或“假”,用1和0表示3.2.1 条件表达式【例例3-23-2】设有语句“int a=12,b=17,c=25;”,试分析下列表达式的值。1)a+1 b-)!=c 3)a b c 4)(+a b)+c 5)a+1=b 6)(a=1)=(b=2)2.逻辑运算符和表达式(1)逻辑运算符:!(逻辑非)、&(逻辑与)、|(逻辑或)(2)优先级:!&|(3)结合性:“!”是单目运算符,结合方向为自右至左,而&、|为双目运

    9、算,左结合性。(4)逻辑表达式值:逻辑值,1(真)、0(假)(3)逻辑运算真值表:3.2.1 条件表达式ab!a!ba&ba|b1或非01或非000111或非01或非0010101或非01001001100任意表达式任意表达式“真真”、“假假”的判别方法的判别方法:在进行逻辑运算时,若表达式本身具有逻辑意义自然取其真假值,若遇到表达式本身并不具有逻辑意义时(如:运算量为常量、变量或数学表达式),而其所处的位置又必须确定其真假意义,这种情况C语言规定按“非0为真,0为假”原则确定其真假。3.2.1 条件表达式【例例3-3】设有语句“int x=10,y=15;”,求下列表达式的值。1)!(x 0

    10、 3)x 10 4)c+2|x-y逻辑短路现象逻辑短路现象:在进行逻辑表达式的计算时,表达式中的所有运算并不一定都会被执行。当某个运算完成后,整个表达式已经能确定真假结果时,其后剩余的运算就不再计算。这种现象称为“逻辑短路”。【例例3-5】分析阅读下面程序,写出运行结果。程序如下:#include int main()int a=0,b=1,c=2,d=0;c=a&(b+);d=b|(-a);printf(%d,%d,%d,%d n ,a,b,c,d);return 0;3.2.1 条件表达式3.条件运算符及其表达式条件运算符及其表达式(1)条件运算符:条件运算符是C语言中唯一的一个三目运算符

    11、,由“?”和“:”构成。是右结合性,优先级比赋值高。(2)条件表达式的一般形式:表达式表达式1?表达式表达式 2:表达式表达式3 其中,表达式1、表达式2、表达式3可以是任何符合C语法规定的表达式,但不能是语句。(3)条件表达式的运算规则:【例例3-6】从键盘输入任意两个实数,使用条件表达式找出其中较小的一个数并输出。程序如下:#include int main()float a,b,min;scanf(%f%f,&a,&b);min=(a b)?a:b;printf(The min number is%f n,min);return 0;【例例3-7】从键盘输入一个字符,若为小写字母,则将其

    12、转换成大写字母输出,若为大写则转为小写,若为其它字符则直接输出。程序如下:#include int main()char ch;scanf(%c,&ch);ch=(ch=A&ch=a&ch y时要将x,y互换,两个变量值互换要借用另一个同类型的变量实现#include int main()int x,y,t;printf(n Enter x,y:);/输出提示信息 scanf(%d%d,&x,&y);/输入两个整数 if(x y)t=x;/若x y,互换 x,y 的值 x=y;y=t;printf(%d,%d n,y,x);return 0;此处必须用复合语句!2.if语句嵌套(多分支选择结构

    13、)语句嵌套(多分支选择结构)当问题中的选择分支多于两个时,就要用到if语句的嵌套,即上述if语句的两个分支中的语句又是一个单分支或双分支的if语句。如:数学上分段函数:3.2.2 if语句语句if(表达式表达式1)if(表达式表达式2)语句语句1 else 语句语句2else if(表达式表达式3)语句语句3 else 语句语句4内嵌内嵌if内嵌内嵌ifif(表达式表达式1)if(表达式表达式2)语句语句1 else 语句语句2内嵌内嵌ifif(表达式表达式1)if(表达式表达式2)语句语句1else 语句语句3 内嵌内嵌ifif(表达式表达式1)语句语句1else if(表达式表达式3)语句

    14、语句3 else 语句语句4内嵌内嵌if if 语句嵌套的一般形式如下:语句嵌套的一般形式如下:3.2.2 if语句语句强调:(1)if语句嵌套层次必须层次分明,不能出现交叉。(2)单双if 语句嵌套时,else与if的匹配原则是:else总是与它前面离它最近的、目前尚未配对的if匹配。(3)为避免混淆,建议将嵌套在内层的if语句整体用一对括起来。【例例3-9】有下列数学分段函数,编程实现对于输入的任意实数x,计算对应函数值y。Y输入输入 xx 0y=-1x=10y=0y=1输出输出 x,yNYN3.2 选择结构程序设计选择结构程序设计if语句嵌套语句嵌套#include#include vo

    15、id main()double x,y;printf(请输入自变量 x 的值:);scanf(%lf ,&x);if(x=15)y=sqrt(x*x*x 20);else y=x*x+x 1;printf(x=%.2f y=%.2f n ,x,y);说明:说明:if语句允许嵌套,但嵌套的层数不宜太多。在实际编语句允许嵌套,但嵌套的层数不宜太多。在实际编程时,应适当控制嵌套层数(程时,应适当控制嵌套层数(2-3层)。层)。3.2.2 选择构程序设计选择构程序设计if语句嵌套语句嵌套如下列程序段实现对于一个百分制输出对应的等级如下列程序段实现对于一个百分制输出对应的等级:int sc;char g

    16、rade;scanf(%d,&sc);if(sc=90&sc=80&sc=70&sc=60&sc=0&sc60)grade=E;else grade=0;printf(sc=%d,grade=%c n,sc,grade);分析:分析:该程序该程序段嵌套层次过段嵌套层次过多,程序的清多,程序的清晰度较差!晰度较差!若再不注意若再不注意缩进格式。则缩进格式。则程序阅读起来程序阅读起来更加困难!更加困难!3.2.3 switch语句语句switch语句的一般语句的一般形式及流程图:形式及流程图:switch(exp)case 常量表达式1:语句组1;case 常量表达式2:语句组2;case 常量表

    17、达式n:语句组n;default:语句组n+1;switch语句执行语句执行过程:过程:exp与与常量表达式常量表达式n的值相符吗?的值相符吗?YN语句组语句组n计算计算exp的的值值Yexp与与常量表达式常量表达式1的的值相符吗?值相符吗?语句组语句组1Nexp与与常量表达式常量表达式2的值相符吗?的值相符吗?YN语句组语句组2语句语句组n+1Switch后后的的下一条语句下一条语句3.2 选择结构程序设计选择结构程序设计switch语句语句 强调:强调:(1)exp必须是整型或字符型表达式。(2)exp按顺序与某个case后常量表达式值相等时,执行其后的语句组,若在该语句组中遇到break

    18、语句,则立即跳出switch。若无break语句,则不再做任何判断直接执行下一个 case后的语句组,直到遇到某个分支后有break语句(或者遇到switch结束标志)跳出switch。(3)多个case分支可共用一个语句组,语句组只写在最后一个分支上。(4)要求各case后常量表达式值各不相同。(4)各分支与次序无关。(5)switch可嵌套。()default分支为可选项,有default时,没有匹配分支时直接执行它。根据问题需求决定是否需要default分支。3.2.3 switch语句语句【例例3-10】有5个人在一个部门上班,每天上班时都要履行签到手续,即报上自己的工号后,大屏幕上显

    19、示“*已经报到!”,其中“*”是他们的姓名,而他们的号码分别从1到5号。编程完成某一个人的签到过程。分析:分析:因为有5个人,故就有5种可能,可以使用switch来实现程序如下:#include void main()int num;printf(Input your number(1 5):);scanf(%d,&num);switch(num)case 1:printf(王 林已经签到!n );break;case 2:printf(李小波已经签到!n );break;case 3:printf(赵天意已经签到!n );break;case 4:printf(杜成刚已经签到!n );bre

    20、ak;case 5:printf(胡国栋已经签到!n );break;default:printf(工号输入错误!n );【例例3-11】已知某超市为了奖励员工的销售积极性,实行按当月销售总额进行提成奖励制度,其提成比例计算方法如下:sales 10000 没有提成 10000=sales 20000 按10%提成20000=sales 30000 按15%提成30000=sales=50000 按20%提成 已知某个员工在某月的销售总额,试编程计算其提成比例(注意,只按总额一次性计算,在哪个范围就按哪个比例提成,且以*%形式显示结果)。分析:分析:销售总额的取值有太多种可能,几乎不可能一一列

    21、出。分析可知,上述提成都是以10000为倍数进行分段,故对销售总额除以10000取整(小数可忽略不记),则可以将无法列出的可能性化归为有限的几种情况,从而可用switch语句实现提成的计算。销售额与提成比例的对应关系,如表3-2所示。销售总额销售总额(sales)(int)(销售总额销售总额/10000)提成比例提成比例0 10000(不含(不含10000)0d=0%10000 20000(不含(不含20000)1d=10%20000 30000(不含(不含30000)2d=15%30000 50000(不含(不含50000)3,4d=18%50000及以上及以上5以及以上整数以及以上整数d=

    22、20%#include int main()float sales,d=0;int grade;printf(请输入销售额:);scanf(%f,&sales);if(sales=0)if(sales=50000)/50000及其以上时 grade 均取 5grade=5;else grade=(int)(sales/10000);switch(grade)case 0:d=0.0f;break;case 1:d=0.10f;break;case 2:d=0.15f;break;case 3:case 4:d=0.18f;break;case 5:d=0.20f;break;printf(本月

    23、提成比例:%d%n,(int)(d*100);else printf(The sales input error!n );return 0;3.3.1 循环结构循环结构概述概述2.循环结构的定义及流程图循环结构的定义及流程图 循环结构就是在给定的条件成立的条件下,反复执行一段程序,直到条件不成立为止。表表达达式式?循循环环体体语语句句 假假(0)真真(非非 0)循循环环语语句句后后的的语语句句 循环循环4要素要素,即:初始化初始化循环条件循环条件循环体语句循环体语句 循环条件的改变循环条件的改变3.3.1 循环结构循环结构概述概述3.C中中实现实现循环的循环的语句语句以及改变循环流程的语句以及

    24、改变循环流程的语句(1)while 语句(2)do while 语句(3)for 语句(4)在循环中能改变循环正常流程的语句有break语句和continue语句。3.3.1 循环结构循环结构概述概述1.while 语句语句while语句语句格式格式:while(表达式表达式)循环体语句;循环体语句;while执行执行流程流程:表达式表达式下一条语句下一条语句假(0)真(非0)初始初始化化循环体循环体3.3.2 while语句语句while语句可概括为语句可概括为“先判断,后执行先判断,后执行”。【例例3-12】编程计算s=1+2+3+100。3.3 循环循环结构结构程序设计程序设计-whil

    25、e语句语句#include void main()int s=0,i=1;while(i=100)s=s+i;i+;printf(n s=%d ,s);程序如下:程序如下:循环的初始化循环的初始化循环控制条件循环控制条件循环体循环体循环变量的改变循环变量的改变循环结束后执行的语句循环结束后执行的语句【例例3-13】计算从键盘输入的任意n个整数的和。程序如下:#include#define N 10int main()int i=1,sum=0,x;while(i=N)scanf(%d,&x);sum=sum+x;i+;printf(sum=%d n,sum);return 0;3.3 循环循环

    26、结构结构程序设计程序设计-do-while语句语句2.do-while语句语句 表达式?循环体语句 假(0)真(非 0)循环语句后的语句 循环体语句 do-While语句格式:do 循环体循环体语句;语句;while(表达式表达式);do-while执行流程:do-while语句可概括为语句可概括为“先执行,后判断先执行,后判断”。3.3 循环循环结构结构程序设计程序设计-do-while语句语句程序如下程序如下:#include void main()int s=0,i=1;do s=s+i;i+;while(i=100);printf(n s=%d ,s);分析:计算1-100的和,其第一

    27、个数1一定会被加进来的,故使用do-while语句实现这个程序是可以的。例如,用do-while语句计算1100之和的程序段为:【例例3-14】用while语句实现:s=1-2+3-4+(-1)(n+1)。程序如下:#include#define N 100int main()int i=1,t=1,s=0;while(i=N)s=s+i*t;t=-t;i+;printf(s=%d n ,s);return 0;【例例3-15】用do-while语句实现输出下列数列的前6项 1 12 123 1234 12345 123456程序如下:#include void main()int n=1,p

    28、n=0;do pn=pn*10+n;printf(%dt ,pn);n+;while(n=6);printf(n);分析:该数列的通项公式为:pn=pn10+n,输出前6项,可用循环结构实现。【例例3-16】从键盘输入若干字符,编程统计其中的数字字符个数,以回车符作为输入结束的标记。程序如下:#include int main()char ch;int num=0;ch=getchar();while(ch!=n)if(ch=0&ch=9)num+;ch=getchar();printf(数字字符个数为%dn,num);return 0;1.for语句语句格式:格式:for(表达式1;表达式2

    29、;表达式3)语句;for语句执行流程:求解表达式求解表达式1判别表达式判别表达式2循环体语句循环体语句求解表达式求解表达式3真真(非非0)假假(0)下一条语句下一条语句循环控制的条件循环控制的条件循环变量赋初值循环变量赋初值改变循环变量的值改变循环变量的值重复执行的部分重复执行的部分3.3.3 for语句语句以求以求1-100的和为例,用的和为例,用for循环实现,循环实现,省略省略三个三个表达式表达式的各种情况:的各种情况:void main()int i,s=0;for(i=1;i=100;)s=s+i;i+;3.3 循环循环结构结构程序设计程序设计-for语句语句void main()i

    30、nt i=1,s=0;for(;i=100;)s=s+i;i+;void main()int i,s=0;for(i=1;i+)if(i=100)s=s+i;else break;省略了表达式省略了表达式3:省略了表达式省略了表达式1和表达式和表达式3:省略了表达式省略了表达式2:注意:省略了表达式2后,控制循环就要借助if语句完成,同时终止循环就要用到break语句。3.3.3 for语句语句【例例3-18】从键盘输入任意10个整数,求其中的最大数并输出。程序如下:#include int main()int max,x,i;scanf(%d,&x);max=x;for(i=2;i max)

    31、max=x;printf(max=%d n,max);return 0;表达式break;假(0)真(非0)whiledobreak;.表达式假(0)真(非0)while表达式2break;.假(0)真(非0)for表达式1表达式31.break1.break语句:格式:语句:格式:break;break;BreakBreak语句在各种循环中的执行过程:语句在各种循环中的执行过程:3.3.4 break语句和语句和continue语句语句表达式continue;假(0)真(非0)whiledocontinue;.表达式假(0)真(非0)while表达式2continue;.假(0)真(非0)f

    32、or表达式1表达式32.continue语句:格式:continue;Continue语句在各种循环中的执行过程:语句在各种循环中的执行过程:3.3.4 break语句和语句和continue语句语句【例例3-19】输入任意一组(最多50个)整数求和,当第一次遇到使和值不小于200时,立即终止这个过程。输出之前所有输入的整数的和。3.3.4 break语句和语句和continue语句语句程序程序:#include void main()int i,sum=0,x;for(i=1;i=200)/如果累加和大于200 break;/使用break跳出循环 printf(nsum=%d n ,sum

    33、);【例例3-20】从键盘输入任意一个整数,判断其是否为素数,若是输出“*is a prime”,否则输出“*is not a prime”。其中*代表那个输入的整数。3.3.4 break语句和语句和continue语句语句程序如下:程序如下:#include void main()int i,n;scanf(%d,&n);for(i=2;i n;i+)if(n%i=0)break;if(i=n)printf(%d is a prime.No n ,n);else printf(%d is not a prime.n ,n);【例3-21】输入10个整数,求其中正数的和。程序2:#inclu

    34、de int main()int n,i,s=0;for(i=1;i=10;i+)scanf(%d,&n);if(n=0)continue;else s=s+n;printf(s=%5d n,s);return 0;程序1:#include int main()int n,i,s=0;for(i=1;i 0)s=s+n;printf(s=%5d n,s);return 0;3.3.4 break语句和语句和continue语句语句3.3.5 循环循环的嵌套的嵌套强调:强调:(1)C语言中循环嵌套要层次分明,不允许出现嵌套层次的交叉。(2)任意两种循环语句都可嵌套,只要能实现程序的功能都是可以的

    35、。【例例3-22】输出4行:1 2 3 4。1 2 3 41 2 3 41 2 3 41 2 3 43.3.5 循环循环的嵌套的嵌套程序程序1:#include int main()int i,j;for(i=1;i=4;i+)for(j=1;j=4;j+)printf(%4d,j);printf(n);return 0;【例例3-23】输出九九乘法表。分析:分析:九九乘法表有9行9列,因此要用到二重循环,其中内循环完成一行内容的输出,外循环控制9行的输出。由于每一行乘法式子的个数恰好等于该行的行数,故内循环的循环变量的取值范围从1到本行的行数。3.3.5 循环循环的嵌套的嵌套程序如下:#in

    36、clude int main()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%d*%d=%-4d,i,j,i*j);printf(n);return 0;【例例3-24】给定N的值,计算:1+(1+2)+(1+2+3)+(1+2+N)的值。分析分析:上述问题共有N项,第i项是计算从1到i的和,因此可以用一个循环来完成,而求整个N项的和则可以用另一个外层循环来实现。3.3.5 循环循环的嵌套的嵌套程序如下:#include#define N 10int main()int i,j,s,sum=0;for(i=1;i=N;i+)s=0;for(j=1;

    37、j=i;j+)s=s+j;sum=sum+s;printf(sum=%d n,sum);return 0;当然,上述程序并不是解决该问题最好的算法。第i项可表示为pi=pi-1+i。故用单重循环也可实现。程序如下:#include#define N 10int main()int i,sum=0,p=0;for(i=1;i=N;i+)p=p+i;sum=sum+p;printf(sum=%d n ,sum);return 0;【例3-25】判断谁在说谎:迷语博士遇到3个人,分别来自诚实族和说谎族。诚实族的人永远说真话,说谎族的人永远说假话。现在迷语博士要判断他所遇到的3个人分别来自哪个民族的。

    38、为此,博士分别问了他们3个问题,以下是他们的对话:问:“你们是什么族?”第1个人说:“我们全都来自诚实族。”第2个人说:“反正我们3个人中来自诚实族的不是1个”第3个人说:“我们3个中有2个来自诚实族。”请根据他们的回答用C语言程序判断他们分别是哪个族的。分析:假设这3个人分别为a、b、c为诚实族a,1为说谎族a,0a3.3.6循环结构应用举例循环结构应用举例对于b,c也取同样的意义。若第1个人是诚实族,则他说的话是真话,可表示为:a&a+b+c=3,若第1个人是说谎族,则他说的话就是假话,可表示为:!a&a+b+c!=3。而第1个人不是诚实族就是说谎族。故对第1个人的推理可翻译为:a&a+b

    39、+c=3|!a&a+b+c!=3 同样地,对第2个人和第3个人的推理可翻译为:b&a+b+c!=1|!b&a+b+c=1。c&a+b+c=2|!c&a+b+c!=2。但问题的解只有确定的一组,而这一组解一定能使上述三个人的推理表达式同时为真。3.3.6循环结构应用举例循环结构应用举例程序如下:#include void main()int a,b,c;for(a=0;a=1;a+)for(b=0;b=1;b+)for(c=0;c=1;c+)if(a&a+b+c=3|!a&a+b+c!=3)&(b&a+b+c!=1|!b&a+b+c=1)&(c&a+b+c=2|!c&a+b+c!=2)print

    40、f(a is%s.n,(a=1?honest:liar);printf(b is%s.n,(b=1?honest:liar);printf(c is%s.n,(c=1?honest:liar);运行程序,输出:a is liar.b is honest.c is honest.3.3.6循环结构应用举例循环结构应用举例【例例3-26】给小学生出10道1100之间的加减乘除运算测试题,测试的运算由小学生自己决定,运算的数据由计算机随机产生;显示每道题目后,由小学生马上作答,并对所输入的答案进行正确性判定。10道题目完成后即测试结束,给出本次测试共做对的题数。要求:对于除法所出的试题答案不能出现小

    41、数,减法不能出现负数答案。3.3.6循环结构应用举例循环结构应用举例【例例3-27】求两个任意整数的最大公约数。分析:分析:1)求两个整数的最大公约数,在此介绍“辗转相除法”。即让一个整数除以另一个整数,若余数为0,则除数就是这两个整数的最大公约数;若余数不为0,则以除数作新的被除数,以余数作新的除数,继续相除直到余数为0为止,此时的除数即为两数的最大公约数。#include int main()int num1,num2,r,m1,m2;printf(请输入两个整数:);scanf(%d%d,&num1,&num2);m1=num1;m2=num2;r=m1%m2;/第一次求两数相除的余数

    42、while(r!=0)/如果余数r的值为0,结束循环,m2 就是最大公约数 m1=m2;/将除数作下一次的被除数 m2=r;/将余数作下一次的除数 r=m1%m2;/求两数相除的余数 printf(%d 和%d 的最大公约数是%d n,num1,num2,m2);return 0;【例3-28】线性方程组的求解:我国古代数学家在算经中出了这样一道题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡。问鸡翁、鸡母、鸡雏各几只?”分析:分析:设鸡翁、鸡母、鸡雏各x、y、z只,数学模型为:显然,这是一个不定方程组,其方程的解有个或多个。计算机程序中对这类问题通常采用“穷举法”解决。所谓“

    43、穷举法”,就是对问题的所有可能情况一一进行测试,从中找出满足条件的所有解的一种方法。本题中x、y、z的取值范围及应满足的条件分别为:x取值范围为0 20,y取值范围为0 33,当x、y取值确定时,z的取值为100-x-y。由于总钱数应为100,即满足 5*x+3*y+z/3=100且z必须能被3整除。xyz100 5x3yz/3100#include int main()int x,y,z;printf(鸡翁 鸡母 小鸡 n);/输出表头 for(x=0;x 20;x+)/鸡翁的取值范围 for(y=0;y=10-6 。5)循环结束时,sum*4即为的一个近似值。3.3.6循环结构应用举例循环结构应用举例方法一:int t=1;float s=0,n=1,p,pi;p=1.0f/(2*n-1);while(p=1e-6)s=s+t*p;n+;t=-t;p=1.0f/(2*n-1);pi=4*s;方法二:int t=1;float s=,n=1,p=1;while(p=1e-6)s=s+t*p;n+=2;t=-t;p=1.0f/n;pi=4*s;主要程序代码:主要程序代码:3.3.6循环结构应用举例循环结构应用举例

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:cc程序设计第3章-结构化程序设计课件.ppt
    链接地址:https://www.163wenku.com/p-3514929.html

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


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


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

    163文库