C语言入门到精通3教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章控制结构与语句4.1算法与程序4.2结构化程序设计4.3顺序结构4.4选择结构4.5循环结构4.6多重循环结构4.7实际应用举例小结4.1算法与程序一、算法的概念算法+数据结构=程序算法:进行操作的方法和操作步骤二、算法的特点有穷性确定性输入和输出三、算法的组成要素操作:高级语言中提供的运算符控制结构对大部分程序来讲,都不外于3个大步骤:输入根据输入进行处理输出处理结果4.2.1程序的三种基本结构结构化程序设计基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)结构化程序:由三种基本结构反复嵌套构成的程序叫~优点:结构清晰,易读,提高程序设计质量和效率三种基本结构顺序结构:由若干块组成,按各块的排列顺序依次执行。选择结构:又称分支结构,根据给定的条件,从两条或者多条路径中选择下一步要执行的操作路径。循环结构:根据一定的条件,重复执行给定的一组操作。4.2结构化程序设计算法的描述用自然语言表示用流程图表示传统流程图描述算法处理框起止框判断框输入输出框连接点流程线AB顺序结构条件AB选择结构YN条件AYN循环结构例:求10000之内偶数之和开始0sum,1tt被2整除sum+tsumYt+1tNt10000YN输出sum结束例:求ax2+bx+c=0的根开始输入a,b,ca为0YNb2-4acdd≥0NYN解为-c/bd为0实根-b/2a两不同实根无解结束YN用N-S流程图描述算法顺序结构:先执行A操作,再执行B操作选择结构:根据条件,选择所要执行的语句循环结构:当型循环:先判别循环条件,再执行语句直到型循环:先执行语句,再判别循环条件ABp真假AB当p为真A当p为真A例:求10000之内偶数之和开始0sum,1tt被2整除sum+tsumYt+1tNt10000YN输出sum结束0sum,1tt10000t被2整除真假sum+tsumt+1t输出sum例:判别m是否素数读入mk=m的平方根i=2当i=km被i整除真假用break结束循环i=i+1ik真假输出:m是素数m不是素数开始m不是素数k=m的平方根,i=2i≤km被i整除i=i+1ikYNYNYNm是素数输入m判别闰年输入年份yy被4整除YN输出y非闰年y被100整除NY输出y是闰年y被400整除YN输出y是闰年输出y非闰年用伪代码表示算法例:求1000之内的完数(因子之和等于该数本身)开始置t的初值为1当t≤1000,执行下面操作置a的初值为1,置sum的初值为0当at,执行下面操作如果t能被a整除,则sum=sum+aa=a+1(循环到此结束)如果sum与t相同,输出t的因子t=t+1(循环到此结束)结束用计算机语言表示算法例:求1000之内的完数(因子之和等于该数本身)main(){intt,sum,a;for(t=1;t=1000;t++){a=1;sum=0;while(at){if(t%a==0)sum=sum+a;a=a+1;}if(sum==t){printf(“%d是完数,因子为:”);for(a=1;at;a++)if(t%a==0)printf(“%d,”);printf(“\b\n”);}}}4.2.2程序设计过程程序设计的过程:分析问题、设计算法、实现程序。自顶向下,逐步细化,模块化设计,结构化编程。例:三数中取大数(1)基本解题思路s1:输入三数a,b,cs2:从a,b,c中找出最大数赋给maxs3:输出max(2)算法细化s1:调用scanf()函数s2:设计一个函数max3()求三数中的最大数s3:调用printf()函数(3)设计主函数main(){floata,b,c,max;floatmax3(float,float,float);scanf(“%f%f%f”,&a,&b,&c);max=max3(a,b,c);printf(“Themaxis:%f\n”,max);}(4)设计max3的算法设3个参数为x,y,zs2.1:从x与y中取大数送m中s2.2:从m与z中取大数送m中s2.3:返回m给主调函数用C语言写出max3floatmax3(floatx,floaty,floatz){floatm;if(xy)m=x;elaem=y;if(mz)m=z;returnm;}例:百钱买百鸡(1)基本解题思路cocks:公鸡数,hens:母鸡数,chicks:小鸡数根据题意,有公式cocks+hens+chicks=100①cocks*5+hens*3+chicks/3=100②得到三个变量的取值范围cocks:1~19,hens:1~33,chicks:1~99解题思路:依次取cocks值域中的一个值,然后求其余两数,合乎题意者为解。s1:cocks=1s2:当cocks=19,则进行如下操作s2.1:找满足题意的hens、chicks,找到后输出s2.2:cocks加1(2)对s2.1细化思路:在每个给定的cocks下,面对hens的取值范围内的各个值依次测试,以找出满足公式的hens及chickss2.1.1:hens=1s2.1.2:当hens=33,则执行下列操作s2.1.2.1:找满足题意的chickss2.1.2.2:hens加1(3)对s2.1.2.1细化因此时cocks及hens已确定,根据公式①,可得出chicks=100-cocks-hens,如此三数满足公式②,则为解,将其打印出来s2.1.2.1.1:chicks=100-cocks-henss2.1.2.1.2:如果cocks*5+hens*3+chicks/3为100输出cocks、hens、chicks(4)C语言程序#includestdio.hmain(){intcocks,hens,chicks;cocks=1;printf(“cocks\thens\tchicks\n”);while(cocks=19){hens=1;while(hens=33){chicks=100-cocks-hens;if(cocks*5+hen*3+chicks/3==100)if(chicks%3==0)printf(“%d\t%d\t%d\n”,cocks,hens,chicks);hens=hens+1;}cocks=cocks+1;}}例4.2d1从键盘重输入100个整数,对其中的正整数和负整数分别进行累加,最后输出两种累加结果。算法:自然语言描述(1)输入一个数;(2)如果该数0,将它加到正累加和中,否则将它加到负累加和中;(3)如果还没有输完100个数,转步骤(1);(4)输入完100个数后,输出累加和。伪代码(类程序设计语言)描述开始置0sp,0sn置1count当count=100,执行下面操作:读入一个数xIFx为正使sp+xspELSE使sn+xsn使count+1count输出sp和sn的值结束结束初始化:0sp,0sn,0countcount+1count输入一个数到xx0x加到正累加和中sp+xspx加到负累加和中sn+xsncount100输出累加和sp和sn开始YNYN重复100次程序流程图:N-S流程图:初始化:0sp,0sn,0countcount+1count输入一个数到xx0满足不满足sp+xspsn+xsncount=100否输出累加和sp和sn用C语言程序实现:#includestdio.hvoidmain(){intx;intcount;intsp,sn;count=sp=sn=0;do{count++;scanf(“%d”,&x);if(x0)sp=sp+x;elsesn=sn+x;}while(count=100);printf(“%d%d\n”,sp,sn);}程序准备工作,工作变量定义工作变量定义初始化每输入一个数,记一下数输入一个数判断输入数0否x0,累加到正累加和中否则,累加到负累加和中未输完100个数,则重复输出结果4.3顺序结构C语句:以“;”作分隔符,编译后产生机器指令.表达式语句:表达式加分号构成。如total=total+limit;a=3;func();printf(“Hello,world!\n”);复合语句:用{…}括起来的一组语句一般形式:{[数据说明部分;]执行语句部分;}说明:“}”后不加分号语法上和单一语句相同复合语句可嵌套例4.1输入华氏温度,将其转换成摄氏温度输出。转换公式为:#includestdio.hvoidmain(){floatf,c;printf(输入一个华氏温度\n);scanf(%f,&f);c=5.0/9*(f-32);printf(c=%.2f,c);})32(95FC例4.1d1计算如下多项式:y=5x3+4x2-3x+21分析:为了便于程序的实现,把多项式改写为:y=((5x+4)x-3)x+21#includestdio.hvoidmain(){intx,y;scanf(%d,&x);y=((5*x+4)*x-3)*x+21;printf(%d,y);}例4.1d2输入两个变量的值,交换它们的值。输入两个数据存入x,y把第一个数据从x放到第三个变量temp中把第二个数据从y放到第一个变量x中把第一个数据从temp放到第二个变量y中输出x、y#includestdio.hmain(){intx,y,temp;scanf(“%d%d”,&x,&y);printf(“first=%d,second=%d”,x,y);temp=x;x=y;y=temp;printf(“\nafterchange:\n”);printf(“first=%d,second=%d”,x,y);}例4.2输入三角形的三个边长,计算并输出三角形的面积。根据三条边的边长,计算三角形面积的公式如下:#includestdio.h#includemath.hvoidmain(){floatx,y,z,s,dime;scanf(%f%f%f,&x,&y,&z);s=(x+y+z)/2;dime=sqrt(s*(s-x)*(s-y)*(s-z));printf(三角形面积为%f\n,dime);}))()((2zsysxsszyxs面积4.3选择结构if语句(条件选择语句)if语句的三种形式形式一:格式:if(表达式)语句执行过程:表达式语句非0=0例:if(xy)printf(“%d”,x);形式二:格式:if(表达式)语句1else语句2执行过程:例:if(xy)max=x;elsemax=y;表达式非0=0语句1语句2形式三:格式:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3…...[else语句n]执行过程:表达式1语句1非0=0表达式2表达式3语句n语句3语句2非0非0=0=0例:if(salary1000)index=0.4;elseif(salary800)index=0.3;elseif(salary600)index=0.2;elseif(salary400)index=0.1;elseindex=0;例4.3输入一个学生的成绩,根据成绩输出“Pass”或“Fail”。#includestdio.hvoidmain(){intscore;printf(请输入成绩\n);scanf(%d,&score);//输入成绩if(score60)printf(成绩%d:Pass\n,score);//输出elseprintf(成绩%d:Fail\n,score);}程序运行:请输入成绩98↙成绩98:Pass例4.4输入被除数和除数x,y,计算x除以y的商。#includestdio.hvoidmain(){floatx,y,z;printf(Pleaseinputx、y:\n);scanf(%f%f,&x,&y);if(y==0)

1 / 149
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功