C语言程序设计第3章C语言控制语句.ppt

上传人:tia****nde 文档编号:11495418 上传时间:2020-04-25 格式:PPT 页数:112 大小:2.77MB
返回 下载 相关 举报
C语言程序设计第3章C语言控制语句.ppt_第1页
第1页 / 共112页
C语言程序设计第3章C语言控制语句.ppt_第2页
第2页 / 共112页
C语言程序设计第3章C语言控制语句.ppt_第3页
第3页 / 共112页
点击查看更多>>
资源描述
第3章C语言控制语句,C语言程序设计,2020/4/25,本章介绍数据输出数据输入顺序结构程序设计分支结构程序设计循环结构程序设计,2020/4/25,程序的三种基本结构,顺序结构,N-S结构图,流程图,选择结构,2020/4/25,程序的三种基本结构,循环结构,直到型循环,当型循环,N-S结构图,流程图,2020/4/25,3.1结构化程序设计,3种基本结构特点:只有一个入口和一个出口结构内的每一个框都有机会被执行结构内没有死循环仅包含3种基本结构的程序称为结构化程序,2020/4/25,3.2顺序结构程序设计,主要内容:字符输出函数格式输出函数字符输入函数格式输入函数顺序结构程序设计举例,2020/4/25,3.2.1字符输出函数,函数调用的一般形式putchar(ch)功能:在标准输出设备(即显示器屏幕)上输出一个字符。,例如:putchar(b);putchar(n);putchar(101);putchar(st);,输出:b输出:回车换行输出:A,2020/4/25,说明,putchar是C语言的标准库函数,使用时必须加编译预处理命令:#includestdio.h或#include【例3.1】利用putchar函数输出字符。,#includestdio.hmain()charc1,c2;c1=a;c2=b;putchar(c1);putchar(c2);putchar(n);putchar(c1-32);putchar(c2-32);putchar(n);,输出结果:abAB,2020/4/25,3.2.2格式输出函数,函数调用的一般形式printf(格式控制字符串,输出表列)功能:按格式控制所指定的格式,在标准输出设备上输出输出表列各项的值。,例如有程序段:inta=123,b=100;printf(%d%d%dn,a,b,a+b);printf(c=%d+%d=%dn,a,b,a+b);,2020/4/25,2020/4/25,格式控制字符串,用双引号括起的字符串,用于指定输出数据的类型、格式、个数包括:非格式字符和格式字符,照原样输出,printf(c=%d+%d=%dn,a,b,a+b);,格式字符:指定输出3个十进制整型数,分别为变量a、b、ab的值,2020/4/25,输出格式说明符,在和格式符之间可以使用附加说明符,2020/4/25,附加格式说明符,例如:%ld输出十进制长整型数%m.nf右对齐,m位域宽,n位小数或n个字符%-m.nf左对齐,2020/4/25,例3.2整型数据的输出,main()inta=11,b=22;intm=-1;longn=123456789;printf(%d%dn,a,b);printf(a=%d,b=%dn,a,b);printf(m:%d,%o,%x,%un,m,m,m,m);printf(n=%dn,n);printf(n=%ldn,n);,程序输出:1122a=11,b=22m:-1,37777777777,ffffffff,4294967295n=123456789n=123456789,VC+环境下运行结果,2020/4/25,例3.3实型数据的输出,main()floatx=1234.56,y=1.23456789;doublez=1234567.123456789;printf(x=%f,y=%fn,x,y);printf(z=%fn,z);printf(z=%en,z);printf(z=%18.8fn,z);printf(x=%10.3fn,x);printf(x=%-10.3fn,x);printf(x=%4.3fnn,x);,程序输出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1234567.12345679x=1234.560 x=1234.560 x=1234.560,2020/4/25,例3.4字符型数据的输出,main()intm=97;charch=B;printf(m:%d%cn,m,m);printf(ch:%d%cn,ch,ch);printf(%sn,student);printf(%10sn,student);printf(%-10sn,student);printf(%10.3sn,student);printf(%.3snn,student);,程序输出:m:97ach:66Bstudentstudentstudentstustu,2020/4/25,注意:,printf函数格式控制中的格式字符与输出表列参数的个数和类型必须一一对应。格式说明符的%和后面的描述符之间不能有空格。长整型数应该用ld(或lo、lx、lu)格式输出,否则会出现输出错误。printf函数的参数可以是常量、变量或表达式。,2020/4/25,3.2.3字符输入函数,函数调用的一般形式getchar()功能:从标准输入设备(即键盘)上输入一个字符。,例如:getchar();c=getchar();printf(%cn,getchar();,2020/4/25,例如:,【例3.5】getchar函数的应用。,#includestdio.hmain()charch;ch=getchar();printf(%c%dn,ch,ch);printf(%c%dn,ch-32,ch-32);,程序运行时输入:m并按回车键后输出结果是:m109M77,2020/4/25,说明:,getchar是C语言的标准库函数,使用时必须加编译预处理命令:#includestdio.h或#includegetchar函数需要交互输入,接收到输入字符之后才继续执行程序。连续使用getchar函数时,要注意字符的输入形式,例如执行如下程序段:,charch1,ch2;ch1=getchar();ch2=getchar();,必须连续输入两个字符,中间不能有其他字符,2020/4/25,3.2.4格式输入函数,函数调用的一般形式scanf(格式控制字符串,地址表列);功能:按格式控制指定的格式,从标准输入设备(即键盘)交互输入数据,并依次存放到对应地址表列参数指定的变量中(即将输入值赋给变量)。例如:scanf(%d%f,2020/4/25,格式控制字符串,用双引号括起的字符串,用于指定输入数据的类型、格式、个数以及输入的形式包括:非格式字符和格式字符,照原样输入,scanf(a=%d,b=%d,格式字符:指定输入2个十进制整型数赋给变量a和b,2020/4/25,输入格式说明符,在和格式符之间可以使用附加说明符,2020/4/25,附加格式说明符,例如:%ld、%lo输入十进制、八进制长整型数%lf、%le输入双精度实型数%mf输入m位数(域宽)%*d忽略输入的一个整型数,此变量接收下一个数据,对float和double型指整数位数+小数点+小数位数,2020/4/25,例如:,scanf(%d%d%d,输入的形式是:a=32,b=28(普通字符要照原样输入),2020/4/25,程序举例,例1:格式控制串中分隔符的应用。main()inta,b,c,d;scanf(%d%d,运行时输入:123,4输出:,可以这样输入吗?123,4输出:1,2,3,4,1,2,3,4,2020/4/25,例2:c格式符的使用。,main()charc1,c2,c3;scanf(%c%c,运行时输入:ABC输出:?,思考:若输入:AB(回车)C输出:?,2020/4/25,例3:f格式符的使用。,main()floatx,y;doublez;scanf(%f,运行时输入:531.56212.345678.315输出:,注意:float型7位有效,double型1516位有效。,x=531.562012,y=12.345000,z=678.31000000,2020/4/25,例4s格式符的使用。,main()chara10,b10;scanf(%s%s,a,b);printf(%sn%sn,a,b);,运行时输入:Howdoyoudo!输出:Howdo,2020/4/25,例5抑制符的使用。,main()inta,b;scanf(“%2d%*3d%2d”,输入:1234567输出:?,a=12b=67,2020/4/25,使用scanf函数应注意:,要求在程序运行中输入数据,输入的数据个数和类型必须与格式说明符一一对应。地址参数形式:b=a;,?,正确的交换方法:,123,78,123,c=a;,a=b;,b=c;,2020/4/25,程序:,main()inta,b,c;printf(ninputa,b:);scanf(%d,%d,程序运行情况如下:inputa,b:32,57beforeexchange:a=32b=57afterexchange:a=57b=32,2020/4/25,举例(补充),【例3.6】已知三条边a、b、c,求三角形面积。计算三角形面积的海伦公式:,其中:,设定义:整型变量a、b、c实型变量s、area,2020/4/25,程序如下:,#includemath.hmain()inta,b,c;floats,area;scanf(%d,%d,%d,程序运行情况如下:3,4,5area=6.000,实际上还需要判断a、b、c是否能构成三角形,即应该进行选择判断处理,2020/4/25,举例(补充),【例3.7】从键盘输入两个整数,输出它们相除的余数及商(要求保留2位小数)。,例如输入的m和n分别为100和18,输出形式为:mn10m/n=5.56,main()intm,n;printf(ninputm,n:);scanf(%d,%d,2020/4/25,举例:,【例3-12】输入时间(时、分、秒),然后打印输出共计多少秒?,分析:,2020/4/25,程序如下:,#includevoidmain()shorthour,min,sec;longtotal;printf(%nEnterhour:min:sec:);scanf(%d:%d:%d,程序运行情况如下:Enterhour:min:sec:3:10:50Thetotalsecond=11450,思考:total的数据类型如何处理?,2020/4/25,40,提出问题:,自然语言:如果则否则C语言:分支语句,?,问题1:如何根据收入,确定他的纳税比例及纳税额?,?,问题2如何根据学生的分数判断是否及格?,2020/4/25,41,3.3分支结构程序设计,3.3.1if条件分支语句3.3.2switch多路开关语句,2020/4/25,42,单分支语句,语句一般格式if(表达式)语句,功能:计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。,2020/4/25,43,单分支语句的算法:,例如:if(x0)m+;if(ab)c=a;a=b;b=c;,2020/4/25,44,双分支语句,语句一般格式if(表达式)语句1else语句2功能:计算表达式的值,如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。,2020/4/25,45,双分支语句的算法:,例如:if(x0)m+;elsem-;if(ch=a,2020/4/25,46,多分支语句,语句一般格式if(表达式1)语句1elseif(表达式2)语句2elseif(表达式n-1)语句n-1else语句n功能:依次计算并判断表达式i,为非0时执行后面的语句,都为0时,执行语句n无论执行完哪个语句分支,都转到后续语句,2020/4/25,47,多重分支语句的算法,流程图,表达式n-1?,2020/4/25,48,多重分支语句的算法,N-S结构图,例如:if(a=Aprintf(EnterintegerXandY:);scanf(%d%d,应该正确判断:if的内嵌语句if和else的配对,if(x!=y)if(xy)printf(XYn);elseprintf(XYn);elseprintf(X=Yn);,提倡缩格书写有利于阅读程序,2020/4/25,55,双(或多)分支if语句的嵌套形式if(表达式)if语句elseif语句,if语句嵌套的形式,单if语句的嵌套形式if(表达式)if语句,可以是各种形式的if语句,可以是各种形式的if语句,如果是简单if语句,必须用“”括起,2020/4/25,56,if(c=50)printf(50150n);if(c=50)printf(50=c=100n);elseprintf(c50n);,例如:,if(c=50)printf(50=cc)if(ad)flag=1;elseflag=2;elseflag=3;,if(ab)if(ac)if(ad)flag=1;elseflag=2;elseflag=3;,flag=3的条件:,flag=3的条件:,当cab时,当ab时,例如:,2020/4/25,58,举例,【例3.10】输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。,x%2!=0?,x%5等于0?,2020/4/25,59,程序:,main()intx;scanf(%d,等价于if(x%2).,等价于if(!(x%5).,2020/4/25,60,学习if语句的难点,正确用表达式描述条件例如:当x大于5小于10时令x自增if(5x10)x+;,ifelse语句的配对正确判断内嵌语句例如:if(xy)x=x+3;y=y-2;elsex=x-3;y=y+2;,2020/4/25,61,选择结构举例,【例3.13】输入年份,判别该年是否为闰年。,思路:年份year为闰年的条件为能够被4整除,但不能被100整除的年份;能够被400整除的年份。只要满足任意一个就可以确定它是闰年。例如:1996年、2008年是闰年2006年、1900年不是闰年,设定标志变量leap,只要符合其中一个条件的就是闰年,令leap=1;否则令leap=0,2020/4/25,62,算法:,year%4=0scanf(%d,2020/4/25,64,3.3.2switch多路开关语句,switch语句的一般形式switch(表达式)case常量表达式1:语句序列1case常量表达式2:语句序列2case常量表达式n:语句序列ndefault:语句序列n+1功能:计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、n+1若与所有常量表达式值都不相等,执行语句序列n+1。,2020/4/25,65,switch语句的算法描述,例如:switch(a)case5:printf(,当a等于5,输出:default:printf($);case5:printf(,当a等于2,输出:#$break;,当a等于2,输出:#当a等于5,输出:charop;op=getchar();switch(op)case+:z=x+y;break;case-:z=x-y;break;case*:z=x*y;break;case/:z=x/y;break;default:z=0;if(int)z!=0)printf(%f%c%f=%fn,x,op,y,z);elseprintf(%cisnotanoperatorn,op);,实型数通常不使用z=0或z!=0的比较可用if(int)z)代替,2020/4/25,69,注意:,switch语句的书写格式:语句体本身必须用花括号括起;case和default后面如果有多条语句,则不必加花括号;case和常量表达式之间必须有空格;default可以写在语句体的任何位置,也可以省略。break语句可以改变case的语句标号作用,终止后续case语句序列的执行。switch语句和break语句结合,可以实现程序的选择控制。允许switch嵌套使用,但同一个switch语句中,任意两个case的常量表达式值不能相同。,2020/4/25,70,3.4循环结构程序设计,while循环控制do-while循环控制for循环控制循环的嵌套,2020/4/25,71,3.4.1while循环控制,语句一般格式while(表达式)语句,一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式用来控制循环体是否执行,称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句是循环重复执行的部分,2020/4/25,72,功能:,计算表达式的值,当为非0(逻辑真)时,执行内嵌语句,每执行一次,就判断一次表达式的值,当表达式的值为0时结束循环,转去执行while后面的语句。,循环控制条件,循环体,2020/4/25,73,例如:,【例3.14】编写程序,求100个自然数的和即:s=1+2+3+100,思路:寻找加数与求和的规律,加数i从1变到100,每循环一次,使i增1,直到i的值超过100。i的初值设为1。求和设变量sum存放和,循环求sum=sum+i,直至i超过100。,2020/4/25,74,算法和程序:,main()inti,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);,程序输出结果:sum=5050,i:循环控制变量sum:累加器,2020/4/25,75,注意:,如果(表达式)值为0,则循环体一次也不执行(例如当i的初值为101)。在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。,思考如下的输出?while(i=100)i+;sum=sum+i;printf(sum=%dn,sum);,运行后,输出:sum=5150原因是什么?如何修改程序使结果正确?,2020/4/25,76,其他的while语句形式,while(0).由于表达式恒等于0,所以循环体永远也不会执行,是一个逻辑错误的语句,while(1).由于表达式恒等于1,所以不可能通过循环控制条件来结束循环体的执行,即死循环。为了保证循环正常运行,应该特别注意:循环控制条件的描述控制条件的初始状态(初始值)循环体内部对控制条件的影响,2020/4/25,77,3.4.2do-while语句,语句一般格式do语句while(表达式);功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为0结束循环,转去执行while下面的语句。,2020/4/25,78,do-while循环的算法,N-S结构图,main()inti=1,sum=0;dosum=sum+i;i+;while(i=100);printf(%dn,sum);,用do-while语句求1+2+100,2020/4/25,79,说明:,while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构,区别:do-while语句先执行循环体再判断条件,循环体至少执行一次;while语句先判断条件再执行循环体,循环体有可能一次也不执行dowhile循环体中一定要有能使表达式值趋于0的操作(如i+),否则会出现死循环。,2020/4/25,80,3.4.3for语句,语句一般格式for(表达式1;表达式2;表达式3)语句,功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。,循环初始条件,循环控制条件,循环体,2020/4/25,81,for语句的算法,例如:main()inti,sum;for(sum=0,i=1;i=100;i+)sum=sum+i;printf(sum=%dn,sum);,可部分或全部省略,但“;”不可省略,2020/4/25,82,省略for语句的表达式,表达式1、2、3全省略,即:for(;)等同于:while(1),会无限循环(死循环),注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行,省略表达式1和表达式3,即:for(;表达式2;)等同于:while(表达式2)省略表达式2,即:for(表达式1;表达式3)等同于:表达式1;while(1)表达式3;,2020/4/25,83,例如:,i=1;for(;i100)for(i=1;i100)i+;,2020/4/25,84,说明:,所有用while语句实现的循环都可以用for语句实现。,等价于:,for(表达式1;表达式2;表达式3)语句;,表达式1;while(表达式2)语句;表达式3;,2020/4/25,85,for语句的简单应用,【例3.16】求n!,即计算p=123n的值。,思路:求阶乘与求累加的运算处理过程类似,只要将“+”变为“*”。,设置:乘数i,初值为1,终值为n(n是循环控制终值,需要从键盘输入)累乘器p,每次循环令p=p*i,2020/4/25,86,程序:,main()inti,n;longp;p=1;printf(Entern:);scanf(%d,思考:如何求s=1!+2!+n!?,2020/4/25,87,3.4.43种循环语句的比较,while和do-while语句的表达式只有一个,for语句有三个。while和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。,while语句多用于循环次数不定的情况do-while语句多用于至少要运行一次的情况for语句多用于要赋初值或循环次数固定的情况,2020/4/25,88,3.4.5循环的嵌套,如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套例如:,#includemain()inti,j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(j=i)?%4dn:%4d,i*j);,外循环语句,内循环语句,外循环体,内循环体,2020/4/25,89,例如:,#includemain()inti,j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(%4d,i*j);printf(n);,外循环语句,内循环语句,外循环体,内循环体,3.4.5循环的嵌套,2020/4/25,90,运行结果:,12436948121651015202561218243036714212835424981624324048566491827364554637281,2020/4/25,91,注意:,while、do-while、for循环语句可以并列,也可以相互嵌套,但要层次清楚,不能出现交叉。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。例如:,for(a=1;a=10;a+)for(b=0;b=5;b+),外循环执行了10次,内循环执行6次循环正常结束时,内循环执行了106=60次,2020/4/25,92,3.5break和continue语句,结构化程序设计中有如下2种语句实现跳转:continue语句break语句在循环语句的循环体中使用,可以进行循环的流程控制,2020/4/25,93,3.5.1break语句,功能:利用break语句能够强迫终止本层循环,转到后续语句执行。,2020/4/25,94,3.5.1break的应用,break;,while语句,break;,do-while语句,break;,for语句,2020/4/25,95,例如:,intx,n=0,s=0;while(n10)scanf(%d,intx,n=0,s=0;doscanf(%d,for(n=0,s=0;n10;n+)scanf(%d,2020/4/25,96,3.5.2continue语句及应用,功能:中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。,2020/4/25,97,3.5.2continue语句及应用(续),continue;,while语句,continue;,do-while语句,continue;,for语句,2020/4/25,98,例如:,intx,n=0,s=0;while(n10)scanf(%d,intx,n=0,s=0;doscanf(%d,for(n=0,s=0;n10;)scanf(%d,n+,2020/4/25,99,应用举例,【例3.17】把100200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的数。,思路:设变量n,从100变化到200;对每个n进行判断,当n不能被7整除时,终止本次循环,否则就输出这个数;设变量j作为输出个数的计数器,每输出一个数就令j+;当输出了10个数时(即j%10等于0),输出n退出循环后输出j的值。,2020/4/25,100,算法和程序,main()intn,j=0;for(n=100;n=70,改进,实际的游戏需要参加者不断根据给出的结论修改价格值,并期待最终猜中价格加上循环控制,直到猜中正确价格退出对于密码输入,考虑到不小心按错键等情况,允许用户3次输入密码进行验证,2020/4/25,改进后源代码,2020/4/25,#include“stdio.h”voidmain()intPassword=0,Number=0,price=58,i=0;while(Password!=1234)if(i=3)return;i+;puts(PleaseinputPassword:);scanf(%d,改进后源代码,2020/4/25,if(Number=90)printf(Toobigger!Pressanykeytotryagain!n);elseif(Number=70,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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