条件语句if-else的形式if-北京大学计算机科学技术研究所PPT课件_第1页
条件语句if-else的形式if-北京大学计算机科学技术研究所PPT课件_第2页
条件语句if-else的形式if-北京大学计算机科学技术研究所PPT课件_第3页
条件语句if-else的形式if-北京大学计算机科学技术研究所PPT课件_第4页
条件语句if-else的形式if-北京大学计算机科学技术研究所PPT课件_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-,1,第九/十讲C程序设计导引(II),北京大学信息科学技术学院,-,2,语句与控制流标准库函数:输入输出控制其他标准库函数程序风格,主要内容,-,3,1、语句与控制流,高级程序设计语言的运行单位是语句。在C语言中,诸如表达式:x=1、i+,等之后加上分号就构成了简单的语句(所有的表达式加上分号之后都可以形成语句,但它们并不都是有效的语句,如:x+5)。C语言中的语句种类大致包括:变量定义与初始化语句,如:intx,y=1;赋值语句,如:x=y+z;函数调用语句,如:scanf(“%d”,程序控制语句空语句,-,4,程序的执行顺序是由程序中的程序控制语句规定的。一般情况下,程序顺序地执行语句,语句出现的顺序就是其执行顺序(顺序程序结构)。程序控制语句包括循环控制语句,使得程序能够反复执行某些语句(循环程序结构,将n条相同的语句简单地复制会使程序变得不合理的冗长)。此外,还包括分支控制语句,用于控制多路选一的分支情况(分支程序结构)。,1、语句与控制流,-,5,程序控制语句及其控制说明:分支控制语句:if-else,switch-case/default循环控制语句:while,do-while,for这2种语句都是用大括号()把修饰性描述和语句组合在一起的,称为复合语句。复合语句在语法上和简单语句是一样的。此外,还有一些与程序转移控制有关的语句:break,continue,return,goto,1、语句与控制流,-,6,对于复杂的实际问题,常常要求依据条件来改变程序的执行顺序,选择所要执行的语句。“如果今天不下雨,我就去游泳;否则就在家里读书。”分支控制语句包括:条件语句:if-else多分支语句(开关语句):switch-case/default,1、语句与控制流分支控制语句,-,7,if(expression1)statements1;elsestatements2;,1、语句与控制流条件语句if-else的形式,if(expression1)statements1;,if(expression1)statements1;elseif(expression2)statements2;elseif(expressionN)statementsN;elsestatements(N+1);,-,8,表达式expression的值应该是数值(0表示假,非0表示真)。通常表达式expression是关系表达式或逻辑表达式。如:x(y+1),xyelseprintf(“Thebiggeroneis:%d”,b);,1、语句与控制流条件语句if-else示例,/判断一个数是否偶数inta=123;if(a%2=0)printf(“%disaneven.”,a);,/求3个数的最大者inta=123;intb=456;intc=237;if(ab,给定一个年份,判断是否闰年?,-,10,1、语句与控制流条件语句if-else,条件表达式“?:”能够部分替代if-else语句,如:,x=(ab)?(a-b):(b-a);=if(ab)x=a-b;elsex=b-a;,但是,初学者最好不使用条件表达式,而用if-else语句来替代。,-,11,-,12,-,13,-,14,-,15,switch(expression)casevalue1:statements1;break;casevalueN:statementsN;break;default:defaultStatements;,1、语句与控制流多分支语句switch-case/default,另一类问题,通常我们需要将一个表达式的值与多个不同的常量按顺序进行比较,选择其中的匹配项,执行相应部分的语句。这就是多分支语句。,-,16,表达式expression的值类型必须是整型或字符型:char,short,int,long。case子句中的值valueI也必须是整型或字符型常量,而且所有case子句中的值应是不同的。执行switch语句时,首先对表达式expression求值,然后与每个case子句中的常量值比较,若找到匹配的常量(相等),程序就执行该分支的语句。,1、语句与控制流多分支语句switch-case/default,-,17,break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。(如果某个case分支后没有break语句,程序将不再做比较而执行下一个分支,直到break语句或该复合语句结束。)当没有case子句匹配时,就执行default子句。default子句是任选的(可有可无)。若无default子句,此时switch语句就什么动作也没有做。switch语句的功能可以用if-else语句来实现,但某些情况下,使用switch语句更简炼。,1、语句与控制流多分支语句switch-case/default,-,18,inta=100;intb=20;intc;charoper;scanf(“%c”,1、语句与控制流多分支语句switch-case/default,case*:c=a*b;break;default:if(b=0)c=a;elsec=a/b;break;,输入一个算术运算符,求2个数的运算值。,-,19,1、语句与控制流多分支语句switch-case/default,switch(expression)casevalue1:casevalue2:casevalue3:statements1;break;casevalueN:statementsN;break;default:defaultStatements;,当多个匹配项做相同的事情时,则可以用这种形式。,-,20,1、语句与控制流多分支语句switch-case/default,intyear,month,days;scanf(“%d”,计算某年某月的天数。,case4:case6:case9:case11:days=30;break;default:/month=2if(year%4=0,-,21,intyear,month,days;scanf(“%d”,计算某年某月的天数。,1、语句与控制流多分支语句switch-case/default,-,22,-,23,很多实际问题中会遇到具有规律性的重复运算,因此,在程序中就需要将某些语句重复执行。比如,求1到N的和,如果没有循环,我们该如何编程?123N?1:intN,i,S=0;2:i=1;3:if(i=N)4:S=S+i;5:i=i+1;6:回到3,1、语句与控制流循环控制语句,-,24,循环控制语句包括:当型循环语句:while直到型循环语句:do-while另一种当型循环语句:for,1、语句与控制流循环控制语句,-,25,循环语句while(当型循环)initialization/初始化条件while(termination)/循环条件body;/循环体iteration/迭代,变更循环条件当表达式termination的值为“真”(非0)时,执行中的语句,否则终止循环。,1、语句与控制流循环语句while(当型循环),-,26,intsum=0;/注意sum要赋初值inti=1;/initializationwhile(i0);/termination,do-while循环,求1100的和,1、语句与控制流循环语句do-while(直到型循环),-,31,-,32,循环语句for(另一种当型循环)for(initialization;termination;iteration)body;/循环体for语句执行时,首先执行初始化操作initialization,然后判断终止条件termination是否满足,如果满足,则执行循环体中的语句(body),最后执行迭代部分iteration。完成一次循环后,重新判断终止条件termination。,1、语句与控制流循环语句for(另一种当型循环),-,33,for语句中初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。for(;)在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。for(inti=0,intj=10;ij;i+,j-),1、语句与控制流循环语句for(另一种当型循环),-,34,intsum=0;/注意sum要赋初值inti;for(i=1;i=100;i+)/initialization;termination;iterationsum=sum+i;,for循环,求1100的和,1、语句与控制流循环语句for(另一种当型循环),-,35,在while,do-while,for这三种循环控制语句中,都包括下面三个要素:initialization/初始化条件termination/循环条件iteration/迭代,变更循环条件在使用循环控制语句时,要注意正确处理以上三个要素,以避免死循环。要清楚循环的执行次数:往往容易多一次、少一次。,1、语句与控制流循环控制语句,-,36,inttotal=1;/注意total要赋初值inti=1;/initializationwhile(i=15)/terminationtotal=total*i;i+;/iteration,求15!,1、语句与控制流循环控制语句,-,37,程序转移相关语句包括:breakcontinuereturngoto,1、语句与控制流其它控制语句,-,38,在switch语中,break语句用来终止switch语句的执行,使程序从整个switch语句后的第一条语句开始执行。在循环语句中(while,do-while,for),break用于终止并跳出循环,从紧跟着循环体代码段后的语句执行。break语句的格式为:break;,1、语句与控制流程序转移相关语句break,inti;for(i=0;i10;i+)if(i=5)break;,到第5次循环时,就不再继续循环了,-,39,1、语句与控制流程序转移相关语句break,inta10,i;for(i=0;i10;i+)scanf(“%d”,寻找一组数中第一个小于0的元素的下标。,-,40,continue语句用来结束本次循环(while,do-while,for),跳过循环体中continue之后尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。注意:在进行终止条件的判断前,都应先保证执行迭代语句。它的格式为:continue;,1、语句与控制流程序转移相关语句continue,for(inti=0;i10;i+)if(i=5)continue;,第5次循环时,什么也不做,-,41,1、语句与控制流程序转移相关语句continue,求1100之间除7的倍数之外其他数的和?,intsum=0;inti=1;/initializationwhile(i=100)/terminationif(i%7=0)i+;/iterationcontinue;sum=sum+i;i+;/iteration,-,42,return语句从当前函数中退出,返回到调用该函数的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式:returnexpression;/当函数需要返回某种类型数据时return;/当函数的返回类型为void时单独一条return语句放在函数中间时,会使程序不能正常运行,因为其后的语句将不会执行到。若真需要退出函数,可以通过将return语句嵌入某些语句(如if-else)来使程序在未执行完函数中所有语句时退出。,1、语句与控制流程序转移相关语句return,-,43,1、语句与控制流程序转移相关语句return,voidmain()return;,intmain()return0;,#includefloatgetArea(floatr);voidmain()floatarea,radius=3.0f;area=getArea(radius);printf(“Areais%f.”,area);return;floatgetArea(floatr)floats;s=3.14159*r*r;returns;,-,44,1、语句与控制流程序转移相关语句goto,程序跳转控制语句,不提倡使用。与程序标号(也是一个标识符,其后要跟一个“:”)一起使用:,for()if()gotoerror;error:,也可以用于实现循环控制,inti=1,sum=0;loop:sum+=i;i+;if(i=0)x=1;elsex=2;,else子句和前面的if子句被空语句分隔开了,这会导致程序语法错误。,-,46,程序=函数的集合函数=语句的集合语句=简单语句复合语句简单语句=变量定义与初始化语句、赋值语句、函数调用语句、自增(减)语句、return、空语句,复合语句=if-else、switch-case/default、while、do-while、for、break、continue、goto,1、语句与控制流,-,47,1、语句与控制流,分支控制语句和循环控制语句中大括号()括起来的语句,可以是简单语句,也可以是这两种复合语句本身。这样,C语言程序中的语句就形成了一种嵌套的层次结构,并且原则上这种嵌套的层次是可以不断扩大的。,-,48,1、语句与控制流程序控制语句的嵌套,if()while()if()elseif()elseelse,-,49,2、输入输出控制,在标准输入输出函数库(stdio.h)中,提供了通过标准输入输出设备(键盘和显示器)进行数据的输入输出函数:单个字符输入:intgetchar(),返回的是字符的ASCII码格式化输入:intscanf(constrol_string,arg1,arg2,)单个字符输出:intputchar(int)格式化输出:intprintf(constrol_string,arg1,arg2,),charc;intn;floatf;c=getchar();scanf(“%d%f%c%s”,putchar(c);printf(“%d%f%c%sn”,n,f,c);,-,50,2、输入输出控制,scanf()的基本格式控制符有:%d:整数(int)inta;scanf(“%d”,%s:字符串(字符数组),第12讲中介绍chars20;scanf(“%s”,s);%f:单精度浮点数(float)floatx;scanf(“%f”,-,51,2、输入输出控制,scanf()主要是将从键盘中输入的数据赋给变量,它要求指示变量的在内存中的地址,才能正确将有关数据赋给变量。在C语言中,变量地址的获得是通过运算符“,-,52,2、输入输出控制,在同一个scanf()函数中输入多个变量的值:charc;inta;floatx;doubley;scanf(“%c%d%f%lf”,在scanf()中的格式控制中,还可以控制多个输入数据之间的分隔标记,如:scanf(“%c,%d,%f”,printf(“%c”,c);inta=10;printf(“%d”,a);floatx=1.321f;printf(“%f”,x);,doubley=2.7123;printf(“%f”,y);printf(“%.10f”,y);printf(“%g”,y);printf(“%e”,y);printf(“%.8e”,y);,-,55,2、输入输出控制,在printf()中的格式控制中,还可以包含其他希望输出字符(串),如:printf(“nThisisa%d!”,n);如果n的值为10,则输出效果为:在printf()中,可以只输出一些字符,而不包含变量,如:printf(“nPleaseinputdata:n”);也可以在同一个printf()函数中输出多个变量的值,并夹以其他提示字符,如:doubler,s;r=5.0;s=3.14*r*r;printf(“nTheareaofacirclewithradius%.2fis%.2f.”,r,s);,Theareaofacirclewithradius5.00is78.50.,Thisisa10!,-,56,2、输入输出控制,voidmain()inta;longb;floatf;doubled;printf(Pleaseinputdata:n);scanf(%d%ld%f%lf,-,57,多数编程语言都有预选编译好的开发库以支持各种特定的功能在C中,标准开发库以库函数的形式提供,常用的有:基本输入输出(stdio.h)键盘与屏幕:scanf(),printf(),getchar(),putchar(),文件操作:fopen(),fclose(),fsanf(),fprintf(),数学函数(math.h)abs(),cos(),sin(),sqrt(),pow(),exp(),log(),log10(),字符串处理(string.h)strlen(),strcat(),strcpy(),strcmp(),(MicrosoftVisualStudioVC98Include),3、标准库函数,-,58,4、程序风格,源文件、变量、函数等命名:要体现各自的含义。适当使用大小写简洁、清晰程序书写格式:保证良好的可读性,使程序一目了然。大括号的使用与对齐语句段的对齐在语句段之间适当空行语句段之间的层次性程序注释:帮助了解程序的功能。文件注释变量注释函数注释语句注释语句段注释,-,59,4、程序风格一些禁忌,神秘数,intmap242760;inti,j;intcount=0;for(i=0;i578;i+)for(j=0;j420;j+)if(mapi*420+i=0)count+;printf(“%dn”,count);,#defineMAPHEIGHT578#defineMAPWIDTH420#defineBLACK0intmapMAPHEIGHT*MAPWIDTH;inti,j;for(i=0;iMAPHEIGHT;i+)for(j=0;jMAPWIDTH;j+)if(mapi*MAPWIDTH+j=BLACK)count+;printf(“%dn”,count);,-,60,4、程序风格一些禁忌,神秘数,main()floatlength;floatarea;scanf(“%fn”,main()floatedgeLength;/正方形的边长floatsquareArea;/正方形的面积floatradius;/圆的半径floatcircumference;/圆的周长scanf(“%fn”,中途更改变量的用途,-,61,4、程序风格一些禁忌,a=a+b;b=a-b;a=a-b;,这3条语句的作用?,-,62,4、程序风格,在刚一开始学习写程序时,就应该注意培养良好的书写习惯。良好的程序风格有助于我们写出正确的代码,并且使得我们的程序更容易被其他人使用。,良好的程序风格示例(课堂例子),有一对兔子,出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问40个月的兔子总数为多少?,解题思路,5、程序示例,可以看到每个月的兔子总数依次为1,1,2,3,5,8,13这就是有名的费波那西(Fi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论