(中职)C语言程序设计模块五课件.pptx
《(中职)C语言程序设计模块五课件.pptx》由会员分享,可在线阅读,更多相关《(中职)C语言程序设计模块五课件.pptx(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、(中中职职)C语语言程序言程序设计设计模模块块五五课课件件LOGOC语言程序的三种结构模块55.1算 法 简 述算法是指对整个问题解决过程的描述。这个描述可以是自然语言,也可以是流程图等,其中流程图是算法描述中使用最为普遍的一种。例如:的士计费规则:起步价5元,含2公里范围,210公里(含)以内每公里以1.5元计,10公里以外(超出10公里的部分)每公里以2元计。程序图如图5-1所示。图5-1的士计费规则程序图1有穷性:算法必须能在执行有限个步骤之后终止。2确切性:算法的每一步骤必须有确切的定义。3输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条
2、件。4输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。5可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称为有效性)。一般来说,算法具备五个明显的特征:5.1算 法 简 述5.2顺序结构程序设计5.2.1顺序结构程序设计示例1.#include stdio.h2.int main()3.4.char a,b,c;/*定义a,b,c三个字符变量*/5.char ch10;/*定义一个名为ch的一维字符数组,数组长度10*/6.printf(Please input T,o,m:n);/*提示输
3、入T,o,m这3个字符*/7.a=getchar();/*从键盘获取一个字符,赋给字符变量a*/8.b=getchar();/*从键盘获取一个字符,赋给字符变量b*/9.scanf(%c,&c);/*从键盘给字符变量c输入值*/10.putchar(a);/*输出字符变量a的值*/5.2顺序结构程序设计5.2.1顺序结构程序设计示例11.putchar(b);/*输出字符变量b的值*/12.printf(%c,c);/*输出字符变量c的值*/13.putchar(!);/*输出一个“!”号*/14.putchar(n);/*输出一个换行符,即换一行*/15.printf(Tom s ASCII
4、 is:%dn,a+b+c);/*输出3个字符变量所存放字符的ASCII码之和*/16.printf(Please input Lucy:n);/*提示输入“Lucy”*/17.scanf(%s,ch);/*输入Lucy这个字符串*/18.printf(%sn,ch);/*输出Lucy这个字符串*/19.printf(Lucy s ASCII is:%dn,L+u+c+y);/*输出“Lucy”每个字符的ASCII码之和*/20.字符变量只能用来存放单个字符,在内存中占1个字节的内存空间。5.2顺序结构程序设计5.2.2程序详解1.char a,b,c;字符变量5.2顺序结构程序设计5.2.2
5、程序详解字符变量只能存放单个字符,那字符串怎么办呢?当然得用字符数组了。这里声明了一个名为ch的一维字符数组,长度为10,即字符个数(包括空格及结尾符0。C语言中空格也是字符)不能超过10个。这里要区分两个概念,一个是字符数组实际长度,另一个是字符数组内存长度。例如:char a10=good;字符数组a的实际长度为4(4个字符),内存长度为10。char b=good;字符数组b的实际长度为4,内存长度为5。上列表明,在给字符数组初始化赋字符串时,系统会自动在串后面加上结尾符0,但是不会计入数组的长度,即数组实际长度仍为4。如果没有定义数组长度而初始化了字符串,计算内存长度时要加上这个结尾符
6、(占1 B),如“char b=good;”,则sizeof(b)的结果就是5。2.char ch10;一维字符数组5.2顺序结构程序设计5.2.2程序详解(1)输入字符串:scanf(%s,ch)。(2)输出字符串:printf(%s,ch)。要注意的是:在用scanf输入字符串时,因为scanf以空格、回车和Tab键作为分隔符,因此,若输入了空格,系统将其默认为结尾符,表示输入到此结束,这点要特别注意。而且,数组名代表了数组首元素首地址,不用加地址与&运算符。数组名代表了数组首元素首地址,只需数组名,便可输出整个串。关于数组,我们以后再进行详述,这里略微提及一下。字符数组因为存放的是字符串
7、,因而可以用%s这个字符串格式声明进行输入和输出。举例说明:5.2顺序结构程序设计5.2.2程序详解a=getchar();C语言的getchar()函数。从键盘获取一个字符给字符变量a。getchar()函数是C语言中用于从键盘获取单个字符的函数,不能用于获取字符串。括号中不能有任何参数。给字符变量从键盘输入值,除了用getchar()这个函数外,还可用scanf()函数。例如:a=getchar();/*等同于“scanf(%c,&a);”,第9行就是如此*/3.getchar()函数5.2顺序结构程序设计5.2.2程序详解putchar(a);C语言的putchar()函数。输出变量a的
8、值(字符)。putchar()函数是C语言中用于输出单个字符的函数。其括号中的参数可以是变量,也可以是字符常量,输出字符常量时,要加单引号。例如,第13行的“!”输出“putchar(!);”和第14行的换行符输出“putchar(n);”。除了用putchar()外,单个字符输出当然也可以用printf()函数,如第12行的“printf(%c,c);”。由此可见,若变量a中存放字符g,则输出g的方式:putchar(a);/*等同于“putchar(g);”,等同于“printf(%c,a);”*/4.putchar()函数5.2顺序结构程序设计5.2.2程序详解printf(Toms A
9、SCII is:%dn,a+b+c);输出存放在a、b、c这3个变量里的字符的ASCII码值之和。要注意a、b、c是变量而不是常量字符,因而不能加单引号。第19行的“printf(Lucys ASCII is:%dn,L+u+c+y);”中,L、u、c、y是常量字符,因而需加单引号。5.字符变量与字符常量5.2顺序结构程序设计5.2.3顺序结构程序设计举例【例5-1】求直角三角形的斜边hypot()函数。输入两直角边的值,如果输入了负数,就取其绝对值,求第三边的长。#include#include int main()float x,y,z;printf(Input 2 sides:n);sc
10、anf(%f,%f,&x,&y);z=hypot(fabs(x),fabs(y);/*调用数学库函数hypot()求第三边*/printf(The NO.3 side is:%.2fn,z);printf(The NO.3 integer is:%fn,sqrt(abs(z);/*输出整数部分绝对值的开平方值*/5.2顺序结构程序设计5.2.3顺序结构程序设计举例输入输出效果:Input 2 sides:-1,2The NO.3 side is:2.24The NO.3 integer is:1.414214(1)hypot()函数是求直角三角形斜边的长度,包含于数学头文件math.h中。用法
11、是:double hypot(double x,double y)。(2)函数fabs()是取浮点数的绝对值,这里是防止输入了负数,因为边长不能为负。用法是:fabs(double x)。(3)abs()是取整型数的绝对值。用法是:abs(int x)。(4)sqrt()是求算术平方根函数。sqrt(abs(z)意为:先取浮点数z的整数部分的绝对值,再对该绝对值开平方。5.3选择结构程序设计5.3.1程序示例if()简单的单分支选择结构使用方法:if(表达式)语句序列;如果if()括号里的表达式为真,就执行里的语句序列,否则不执行。如果只有一条语句,则可以省略,如本例中就是如此。5.3选择结构
12、程序设计5.3.2程序示例 if()简单的双分支选择结构使用方法:if(表达式)语句序列1;else 语句序列2;如果if()括号里的表达式值为真,执行语句序列1,否则执行语句序列2。5.3选择结构程序设计5.3.2程序示例 if()简单的双分支选择结构【例5-3】输入一个年份,判断是否为闰年。闰年的断定方法是:能被4整除但不能被100整除或能被400整除的年份为闰年。#include int main()int year;scanf(%d,&year);if(year%4=0&year%100=0)|year%400=0)printf(%d 是闰年n,year);elseprintf(%d
13、不是闰年,year);5.3选择结构程序设计5.3.3程序示例 if()多分支选择结构使用方法:if(表达式1)语句序列1;else if(表达式2)语句序列2;else if(表达式3)语句序列3;else语句序列;哪个if表达式的值为真,就执行它的语句序列,如果都不为真,就执行最后一个else的语句序列。5.3选择结构程序设计5.3.3程序示例 if()多分支选择结构模块5.3.1的火车货运站计费程序我们用多分支结构编写如下:printf(Please input w:);scanf(%d,&w);if(s1000)money=M*s*w;else if(s2000)money=M*0.9
14、5*s*w;else if(s3000)money=M*0.92*s*w;else if(s5000)money=M*0.90*s*w;elsemoney=M*0.88*s*w;printf(nmoney=%.2f,money);模块5.3.1的火车货运站计费程序我们用多分支结构编写如下:#include#define M 5.0int main()int s,w;float money;printf(Please input s:);scanf(%d,&s);5.3选择结构程序设计5.3.4程序示例 if语句嵌套的多分支选择结构模块5.3.1的火车货运站计费程序我们用嵌套的多分支结构编写如下
15、:elseif(s3000)money=M*0.92*s*w;elseif(s=1000这个条件,执行这一句*/printf(nmoney=%.2f,money);#include#define M 5.0int main()int s,w;float money;printf(Please input s:);scanf(%d,&s);printf(Please input w:);scanf(%d,&w);if(s=1000)/*在满足这个条件的前提下,执行下面的语句*/if(s2000)money=M*0.95*s*w;5.3选择结构程序设计5.3.4程序示例 if语句嵌套的多分支选择结
16、构要注意一种情况,有多个if和else时,else总是和它最近的if进行配对。如下例,根据对输入的两个整型值进行比较判断,输出相应的结果:if(yy若为1,再判断此处xy为假,直接执行这个else,输出Jack*/#include int main()int x,y;scanf(%d%d,&x,&y);/*输入2个整型值*/if(xy)/*判断xy的逻辑值为1还是0,为1,执行下面的if语句,否则,执行和该if对应的最末尾else,输出Jack*/5.3选择结构程序设计5.3.5程序示例 switch()语句多分支选择结构结构如下:switch(表达式)case 常量1:语句序列1;/*注意常
17、量值后面用的是冒号,不可与分号混淆*/case 常量2:语句序列2;case 常量n:语句序列n;default:语句序列;5.3选择结构程序设计5.3.5程序示例 switch()语句多分支选择结构switch()括号里的表达式将是一个确定的值。如果“”中哪个case后面的常量等于这个值,就从它后面的语句序列开始执行,直到遇到break语句或switch语句结束的“”为止。如果没有和它相等的值,就直接执行default后面的语句序列,退出switch。模块5.3.1的火车货运站计费程序我们用switch语句多分支结构编写如下:分析:条件中里程数都是1 000的倍数,根据题意有以下条件分段:s
18、=1 000&s=2 000&s=3 000&s=5 000去除上述条件后,剩最后这个条件,可设为default5.3选择结构程序设计5.3.5程序示例 switch()语句多分支选择结构由此,我们便可确定switch()括号里的表达式为s/1 000,而case 后面常量则是04的数。case 0:money=M*s*w;break;/*注意:每个case的常量值不能相同*/case 1:money=M*0.95*s*w;break;case 2:money=M*0.92*s*w;break;case 3:/*如果执行相同的语句组,则对应的case语句可以共用一个语句组,如此处3、4*/ca
19、se 4:money=M*0.90*s*w;break;default:money=M*0.88*s*w;break;/*没有匹配的常量值,执行此句*/printf(nmoney=%.2f,money);#include#define M 5.0int main()int s,w;float money;printf(Please input s:);scanf(%d,&s);printf(Please input w:);scanf(%d,&w);switch(s/1000)5.3选择结构程序设计5.3.5程序示例 switch()语句多分支选择结构说明:(1)switch()括号里表达式的
20、值须与常量值类型一致。(2)常量值后用冒号,语句用分号。(3)如果执行相同的语句组,则对应的case语句可以共用一个语句组,如程序中的case 3和case 4。(4)如果没有break语句,就会一直往下执行,直到遇到break或switch语句结束。(5)每个case的常量值不能相同。(6)case和default的出现次序不影响程序的执行结果。5.4循环结构程序设计5.4.1while语句先判断后执行结构如下:while(条件表达式)循环体语句;如果()里的条件表达式值为真(1),则执行循环体语句,否则不执行。【例54】求n的阶乘(n!)。分析:n!=123(n-1)n,即乘数依次递增1,
21、直到乘数递增到n。(1)这个乘数我们用一个整型变量(如i)来表示,从1开始(i初始化为1),每乘1次,i便递增1次,即i+。(2)相乘的结果(积)保存在一个长整型变量(如j)中。(3)循环的条件是i=n。printf(%ld,s);#include int main()int i=2,n;long s=0;scanf(%d,&n);while(i=n)s+=i;i+=2;/*每加1次便递增2*/printf(%ld,s);/*求1+2+3+n的和*/*求2+4+6+8+n的和(n为偶数)*/#include int main()int i=1,n;long s=0;/*求和为什么要初始化为0?
22、*/scanf(%d,&n);while(i=2时,f(n)=f(n-1)+f(n-2);(3)定义a,b,c三个整型变量,初始化a1,b2,c为第3项开始,则c=a+b;以第4项为例:第2项(b)变为了第1项(a),即a=b;第3项(c)变为了第2项(b),即b=c;第4项变为c,c=a+b。整个过程就这么交替变化,形式如下:5.4循环结构程序设计5.4.1while语句先判断后执行#include int main()int a=1,b=2,c,n=3;/*n=3,意即从第3项开始*/while(n=20)c=a+b;a=b;b=c;n+;printf(NO.20=%d,c);输出结果:N
23、O.20=109465.4循环结构程序设计5.4.1while语句先判断后执行【例5-7】有一分数序列21,32,53,85,138,2113求出这个数列的前20项之和。分析:(1)从第2项开始,分子是前一项的分子分母之和,分母是前一项的分子。(2)依据【例5-6】的思路,设3个浮点型变量(a=2,b=1,c)和一个求和的变量(s=0)以及循环变量(i=1);则在循环体内有以下变化:先求和:s+=a/b;分子分母之和放在变量c中:c=a+b;前一项的分子变分母:b=a;前一项的分子分母之和变分子:a=c;#include int main()int i=1;/*表示第1项*/5.4循环结构程序
24、设计5.4.1while语句先判断后执行float a=2,b=1,c,s=0;/*s用于求和,初始化为0*/while(i=20)s+=a/b;c=a+b;/*分子分母之和放在变量c中*/b=a;/*前一分子变分母*/a=c;/*前面的分子分母之和变分子*/i+;/*项数递增*/printf(s=%f,s);运行结果:s=32.6602595.4循环结构程序设计5.4.1while语句先判断后执行【例5-8】猴子吃桃问题。猴子第1天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了1个。第2天早上又将剩下的桃子吃掉了一半,又多吃了1个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再
25、吃时,只剩下1个桃子。求第1天共摘了多少桃子。分析:数学分析就是:设第一天共摘了x个桃子。若用xn表示每天剩下的桃子,如x1,x2,则有:第1天剩:x1=x-(x/2+1)=x/2-1,则x=2x1+2第2天剩:x2=x1-(x1/2+1)=x1/2-1,则x1=2x2+2第10天剩:x10=x9-(x9/2+1)=x9/2-1,则x9=2x10+2,而第10天只剩下1个桃子,这样,就可以初始化变量值为1。通过倒循环9次,得到x的值。5.4循环结构程序设计5.4.1while语句先判断后执行仅需设两个通用变化量x 和x1,最终求得x的值。#include int main()int i=9;/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 模块 课件
限制150内