




已阅读5页,还剩479页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,计算机程序设计基础(C语言),2,1.课堂要求很严格。2.多听,适时做笔记。3.上课不能讲闲话。4.课后认真完成作业、实验报告。5.有问题,及时与老师联系。,教学要求,3,选用教材与参考书,主教科书顾治华、陈天煌等C语言程序设计机械工业出版社2007.2参考教材顾治华、陈天煌等C语言程序设计实验指导机械工业出版社2007.2参考书谭浩强C语言程序设计清华大学出版社,4,课程内容,第一章C语言程序设计概述第二章算法及算法设计简介第三章数据描述与基本操作第四章选择结构程序设计第五章循环结构程序设计第六章数组与指针第七章函数与模块化程序设计方法,5,第一章语言程序设计概述,6,1.1程序设计的概念1.2语言的产生及发展1.3简单程序介绍1.4C程序的上机步骤1.5C语言的基本语法和基本结构1.6本章要点小结,7,1.1程序设计的概念,1.1.1程序设计语言1.1.2程序设计的概念,8,计算机,计算机是用来延伸人的能力的工具,需要人来驾驭我们的职责是让非计算机专业的人更容易驾驭它完成这一目标的主要手段之一就是“编程(Programming)”,9,计算机基本工作过程,整个过程的执行者是硬件,但硬件是受软件控制的编程,就是编写软件,使硬件按照人的意图工作,10,计算机基本工作过程,源程序和输入数据,输出结果,取出数据,存入数据,操作命令,存取命令,取出程序指令,输入输出命令,计算结果,CPU,“冯诺依曼机”结构,大脑,眼/耳/口,11,软件的形成,软件(Software)的形成程序员(Programmer)编写程序源代码(SourceCode)编译器(Compiler)把源代码转换为可被计算机理解的机器代码(MachineCode)并把机器代码以可执行文件(ExecutableFile)的形式保存在磁盘上,12,机器语言,汇编语言,高级语言,面向过程,面向对象,CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减,用助记符号描述的指令系统如ADDA,B,面向机器的语言,程序设计是数据被加工的过程,客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系,程序设计关键是定义类,并由类派生对象,1.1.1程序设计语言,13,程序设计语言的故事,计算机为什么用二进制呢?为什么不用我们日常熟悉的十进制呢?二进制在在电器元件中容易实现计算机进行二进制运算比进行十进制运算要简单得多,14,程序设计语言的故事,机器语言编写的1+1程序汇编语言(AssembleLanguage)编写的1+1程序,101110000000000100000000000001010000000100000000,MOVAX,1ADDAX,1,15,程序设计语言的故事,BASIC语言编写的1+1程序C语言编写的1+1程序,PRINT1+1,#includemain()printf(%dn,1+1);,16,Ada,ALGOL60,ALGOL68,Pascal,Modula-2,CPL,BCPL,B,C,C+,Java,LISP,PROLOG,COBOL,FORTRAN77,FORTRAN,PL/1,Simula67,Smalltalk80,BASIC,ANSI-BASIC,QBASIC,VB,FORTRAN90,17,1.1.2程序设计的概念,程序设计就是用计算机语言来编写程序的过程。什么是程序?著名计算机科学家沃思提出有名的公式:算法+数据结构=程序,18,算法即问题的求解过程、计算机的工作步骤。数据结构即对参与运算的数据怎样进行合理的组织、安排,以提高程序运行的效率和求解的精确性。,程序的两大要素:数据结构、算法,19,1.2C语言的产生和发展,1.2.1C语言的产生1.2.2C语言的发展1.2.3C语言的特点,20,1.2.1C语言的产生,一切从一个叫“SpaceTravel”的电子游戏开始的KenThompson为了让他的游戏能在PDP-7上运行,用汇编语言给PDP-7写了一个操作系统UNIX汇编太不好用了,Thompson需要高级语言试验了一些高级语言,包括Fortran,都不理想他在BCPL基础上,自己设计了一个B语言UNIX开始发展,B也不够用了DennisRitchie加入,把B改造成C开始用C重写UNIX,21,1.2.2C语言的发展,C语言发展过程产生过程时间:19721973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准标准C:K,输出:Hello,World!,32,/*example1.2calculatethesumofaandb*/#include/*Thisisthemainprogram*/main()inta,b,sum;a=10;b=24;sum=add(a,b);printf(”sum=%dn,sum);/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty)intz;z=x+y;return(z);,运行结果:sum=34,33,格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式,main().,main()inti,j,sum;sum=0;for(i=1;idoublefloat=long=int=shortchar把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换从大到小,可能丢失信息(好的编译器会发出警告),见教材28页,118,隐式转换(自动转换),不同类型数据间的混合运算:+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算;(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型;(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算.,119,inti;floatf;doubled;longe;i=2;f=2.5;d=3.9;e=3;,10+a+i*f-d/e,107,5.0,1.3,112.0,110.7,int,double,double,double,double,思考:根据已知变量定义及赋值语句,计算以下表达式的值,并说明每一步所得结果的数据类型。,120,(二)显式转换(强制转换),一般形式,(要转换成的数据类型)(被转换的表达式)注:当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。,举例,floatx,y;x=2.3;y=4.5;(int)(x+y)/6(int)(int)x+y/6.5(double),说明,强制转换得到的是所需类型的中间变量,原变量或表达式的类型不变。,121,#includevoidmain()floatx;inti;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);,思考:以下程序的输出结果是什么?,x=3.600000,i=3,程序运行结果:,结论:较高类型向较低类型转换时可能发生精度损失问题,122,举例:已知三角形的边长a、b、c,求三角形周长的一半。,#includevoidmain()floata,b,c,s;a=3;b=4;c=5;s=1/2*(a+b+c);printf(s=%8.2f,s);,s=0.00,程序运行结果:,?,s=6.00,程序运行结果:,改为:1.0/2(1/2.0)或(float)1/2(1/(float)2),123,C运算符简介算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式关系运算符和表达式逻辑运算符和表达式条件运算符与表达式,3.2运算符与表达式,124,详见254页!,C运算符简介,125,运算符必须有运算对象,分为3类:运算对象是一个的,则称为单目运算运算对象是两个的,则称为双目运算运算对象是三个的,则称为三目运算,C运算符简介,126,基本算术运算符,+-*/%,说明,例:5/3=1-5/3=-1,模运算符或求余运算符,算术表达式,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。,优先级和结合性,先乘除、后加减,有括号先算括号。自左至右,常量、变量、函数等,说明,两个整数相除的结果为整数,舍去小数部分。当商为负数时,多采用“向零取整”的方法。,求余运算的两侧均应为整数5%3=2,例:a*b/c-1.5+a,算术运算符和算术表达式,如果一个运算符两侧的数据类型不同,先自动进行类型转换,使二者具有同一类型,然后进行运算。,127,格式:前置:+i,-i(在使用i之前,使i的值加(减)1)后置:i+,i-(在使用i之后,使i的值加(减)1),自增、自减运算符,作用:自增运算符()使单个变量的值增1;自减运算符()使单个变量的值减1。,例,i=3;A)j=+i;j=i+;j=-i+;,i=i+1,i=i-1,?j,i,A)j=4i=4j=3i=4j=-3,+和-结合方向是“自右至左”,128,(1)自增、自减运算是语言特有的,常用于循环语句中,使循环控制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。(2)自增、自减运算符,不能用于常量和表达式。例如,5+、-(a+b)等都是非法的。(3)+和-的结合方向为自右至左。(P30)(4)如果对一个变量的自增自减运算,单独构成语句,而不是作为表达式的一部分时,前置和后置运算效果一样,都是使变量自加。如i+;和+i;是一样的,都是使i加。(5)在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。,说明,129,赋值运算符,简单赋值运算符:=复合赋值运算符:+=,-=,*=,/=,%=,简单赋值运算符的一般形式为:变量=表达式它的作用是将一个表达式的值赋给一个变量。,复合赋值运算的一般格式为:变量双目运算符=表达式复合赋值运算符它等价于:变量=变量双目运算符(表达式)。只有当表达式简化为一个变量或一个常数时,两边的括号可以省略。,赋值运算符和赋值表达式,130,赋值表达式,格式:赋值表达式的值:被赋变量的值,类型转换,转换条件:当赋值运算符两侧的数据类型不一致时转换原则:转换为被赋值变量的类型。,131,注意:将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分,非四舍五入反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,例1,floata;intb;a=1.2;b=a*3;,?b,b=3,例2,a=b=5;a=7+(b=8),?a,b,a=5;b=5a=15;b=8,自右而左的结合性,132,算术自反赋值运算符,(1)运算规则,对象数,名称,运算符,运算规则,运算对象,运算结果,结合性,双目,加赋值,减赋值,乘赋值,除赋值,模赋值,*,/=,%=,a+=b相当于a=a+b,a=b相当于a=ab,a*=b相当于a=a*b,a/=b相当于a=a/b,a%=b相当于a=a%b,数值型,数值型,自右向左,整型,整型,133,逗号运算符,,,逗号表达式,表达式1,表达式2,表达式n,说明,1、逗号表达式的求解过程为自左至右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值;2、逗号运算符的优先级最低。3、使用逗号表达式的目的通常是想分别得到各个表达式的值,而并非一定要得到整个表达式的值。4、常用于for循环语句中,除此以外很少使用。,逗号运算符和逗号表达式,134,例1,a=3a=(3*5,a*4),?a,a=12,例2,a=3a=3*5,a*4,?a,a=15表达式的值为60,135,关系运算符及其优先次序,关系运算符:用来对两个数值进行比较的比较运算符语言提供种关系运算符:(小于)=(小于或等于)(大于)=(大于或等于)=(等于)!=(不等于),优先级相同(高),优先级相同(低),136,关系、算术、赋值运算符的优先级,关系运算符及其优先次序,137,ca+b等效于c(a+b)ab=c等效于(ab)=ca=bc等效于a=(bc),关系运算符及其优先次序,138,关系表达式,关系表达式用关系运算符将两个数值或数值表达式连接起来的式子关系表达式的值是一个逻辑值,即“真”或“假”在C的逻辑运算中,以“”代表“真”,以“”代表“假”,139,关系运算注意:,例若a=0;b=0.5;x=0.3;则a78在C中是允许的,值为,0,例a0结果为A100结果为,1,0,140,关系运算注意:,例注意区分“=”与“=”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);,例应避免对实数作相等或不等的判断如1.0/3.0*3.0=1.0结果为,0,141,逻辑运算符及其优先次序,3种逻辑运算符:elsemax=b;,max=(ab)?a:b;,条件运算符,150,条件运算符和条件表达式,有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(ab)max=a;elsemax=b;,max=(ab)?a:b;,条件表达式,151,条件表达式的一般形式为表达式?表达式:表达式,条件运算符和条件表达式,条件运算符的执行顺序:求解表达式1若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,152,条件运算符优先于赋值运算符条件运算符的结合方向为“自右至左”以下为合法的使用方法:ab?(max=a):(max=b);ab?printf(“%d”,a):printf(“%d”,b);,条件运算符和条件表达式,153,长度运算符,长度运算符优先级,和单目算术运算符、单目逻辑运算符、增1减1运算符同级别同级运算符的结合性是自右向左的,154,设变量定义如下:intn;shorts;unsignedlongu3;floatf;charc;,则sizeof(n)的值是4sizeof(s)的值是2sizeof(long)的值是4sizeof(unsignedint)的值是2sizeof(u3)的值是4sizeof(f)的值是4sizeof(double)的值是8sizeof(c)的值是1,注意:上述结果是在32位机VisualC+6.0环境运行的结果。,155,位运算C语言中提供的位运算符:、,格式声明,167,1.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%cn”,i,c);,普通字符,用printf函数输出数据,168,1.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%cn”,i,c);,可以是常量、变量或表达式,用printf函数输出数据,169,2.常用格式字符格式符。用来输出一个有符号的十进制整数可以在格式声明中指定输出数据的域宽printf(”%5d%5dn”,12,-345);%d输出int型数据%ld输出long型数据,用printf函数输出数据,170,2.常用格式字符格式符。用来输出一个字符charch=a;printf(”%c”,ch);或printf(”%5c”,ch);,输出字符:a,用printf函数输出数据,171,2.常用格式字符格式符。用来输出一个字符串printf(”%s”,”CHINA”);,输出字符串:CHINA,用printf函数输出数据,172,2.常用格式字符f格式符。用来输出实数,以小数形式输出不指定数据宽度和小数位数,用%f例:用%f输出实数,只能得到位小数。doublea=1.0;printf(”%fn”,a/3);,用printf函数输出数据,173,2.常用格式字符f格式符。用来输出实数,以小数形式输出指定数据宽度和小数位数。用%m.nfprintf(%20.15fn,1/3);printf(%.0fn”,10000/3.0);,用printf函数输出数据,174,2.常用格式字符f格式符。用来输出实数,以小数形式输出输出的数据向左对齐,用%-m.nf,用printf函数输出数据,175,2.常用格式字符f格式符。用来输出实数,以小数形式输出float型数据只能保证6位有效数字double型数据能保证15位有效数字计算机输出的数字不都是绝对精确有效的,用printf函数输出数据,176,2.常用格式字符e格式符。指定以指数形式输出实数%e,VC+给出小数位数为位指数部分占5列小数点前必须有而且只有1位非零数字printf(”%e”,123.456);输出:1.234560e+002,用printf函数输出数据,177,2.常用格式字符e格式符。指定以指数形式输出实数%m.neprintf(”%13.2e”,123.456);输出:1.23e+002(前面有4个空格),用printf函数输出数据,178,printf格式字符,179,180,printf的附加格式说明字符,181,用scanf函数输入数据,1.scanf函数的一般形式scanf(格式控制,地址表列),含义同printf函数,182,1.scanf函数的一般形式scanf(格式控制,地址表列),可以是变量的地址,或字符串的首地址,用scanf函数输入数据,183,2.scanf函数中的格式声明与printf函数中的格式声明相似以开始,以一个格式字符结束,中间可以插入附加的字符scanf(a=%f,b=%f,c=%f,用scanf函数输入数据,184,3.使用scanf函数时应注意的问题scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。scanf(”%f%f%f”,a,b,c);scanf(”%f%f%f”,用scanf函数输入数据,错,对,185,3.使用scanf函数时应注意的问题如果在“格式控制字符串”中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。scanf(a=%f,b=%f,c=%f,132a=1,b=3,c=2a=1b=3c=2,用scanf函数输入数据,错,错,对,186,3.使用scanf函数时应注意的问题在用”c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入.对于scanf(”%c%c%c”,如输入:a|_|b|_|cc1值为字符a,c2值为字符|_|,c3值为字符b,因为c只要求输入一个字符,后面不需要用空格作为两个字符的间隔,因此空格|_|作为下一个字符送给c2,用scanf函数输入数据,187,3.使用scanf函数时应注意的问题在输入数据时,遇以下情况时该数据认为结束。遇空格,或按“回车”或“跳格”(Tab)键。按指定的宽度结束,如”3d”,只取3列。遇非法输入。对于scanf(”%3d%d%f”,若输入123|_|4|_|1.2*345,用scanf函数输入数据,188,Scanf格式字符,189,Scanf的附加格式说明字符,190,例:求方程的根。a、b、c由键盘输入设,191,解题思路:首先要知道求方程式的根的方法。由数学知识已知:如果0,则一元二次方程有两个实根:,若记,192,#include#includeintmain()doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,程序中调用数学函数sqrt,输入a,b,c的值,193,#include#includeintmain()doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,输入的是双精度型实数,194,#include#includeintmain()doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,要求输入3个实数,自动转成实数后赋给a,b,c,195,#include#includeintmain()doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,输出数据占7列,其中小数占2列,196,字符数据的输入输出,1.用putchar函数输出一个字符从计算机向显示器输出一个字符putchar函数的一般形式为:putchar(c),197,例:先后输出BOY三个字符。解题思路:定义3个字符变量,分别赋以初值B、O、Y用putchar函数输出这3个字符变量的值,字符数据的输入输出,198,#includeintmain()chara=B,b=O,c=Y;putchar(a);putchar(b);putchar(c);putchar(n);return0;,向显示器输出字符B,向显示器输出换行符,字符数据的输入输出,199,#includeintmain()chara=B,b=O,c=Y;putchar(a);putchar(b);putchar(c);putchar(n);return0;,改为inta=66,b=79,c=89;,字符数据的输入输出,200,putchar(101)(输出字符)putchar()(输出单撇号字符),字符数据的输入输出,输出其他转义字符:,201,2.用getchar函数输入一个字符向计算机输入一个字符getchar函数的一般形式为:getchar(),字符数据的输入输出,202,例:从键盘输入BOY三个字符,然后把它们输出到屏幕。解题思路:用3个getchar函数先后从键盘向计算机输入BOY三个字符用putchar函数输出,字符数据的输入输出,203,#includeintmain()chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar(n);return0;,输入一个字符,送给变量a,字符数据的输入输出,204,第四章结构化程序设计,205,4.1三种基本结构概述4.2顺序结构4.3选择结构4.4循环结构,206,4.1三种基本结构概述,顺序结构、选择结构、循环结构已经证明,任何程序均可只用这三种结构实现Bhm,Corrado,andJacopiniGuiseppe.Flowdiagrams,Turingmachinesandlanguageswithonlytwoformationrules.CommunicationofACM,9(5):366-371,May1966.只用这三种结构的程序,叫结构化程序程序“必须”符合结构化规则,207,顺序选择循环-三分天下,顺序结构,循环结构,选择结构,208,B,A,NS图,传统流程图,顺序结构,B,A,209,4.2顺序结构,例1计算存款利息。有1000元,想存一年。有三种方法可选:(1)活期,年利率为r1(2)一年期定期,年利率为r2(3)存两次半年定期,年利率为r3请分别计算出一年后按三种方法所得到的本息和。,210,解题思路:确定计算本息和的公式。从数学知识可知:若存款额为p0,则:活期存款一年后本息和为:p1=p0(1+r1)一年期定期存款,一年后本息和为:p2=p0(1+r2)两次半年定期存款,一年后本息和为:,211,算法:,212,#includeintmain()floatp0=1000,r1=0.0035,r2=0.03,r3=0.028,p1,p2,p3;p1=p0*(1+r1);p2=p0*(1+r2);p3=p0*(1+r3/2)*(1+r3/2);printf(“%7.2fn%7.2fn%7.2fn”,p1,p2,p3);return0;,定义变量同时赋予初值,213,在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票,4.3选择结构,214,在现实生活中,需要进行判断和选择的情况是很多的处理这些问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断,4.3选择结构,215,4.3选择结构,if-else语句(如果.爱)实现两个分支的选择结构Switch语句(分道扬镳)实现多分支的选择结构,216,选择结构的作用是,根据所指定的条件是否满足,决定从给定的两组或多组操作选择其一。,4.3选择结构,217,B,N,如果成绩b,225,#includeintmain()floata,b,t;scanf(%f,%f,选择结构,用if语句实现的,226,1)if(表达式)语句1else语句2,例如:if(xy)printf(“d”,x);elseprintf(“d”,y);,227,2)if(表达式)语句例如:if(xy)printf(“d”,x);,这种if语句的执行过程如图:,228,例:输入3个数a,b,c,要求按由小到大的顺序输出。,解题思路:可以先用伪代码写出算法:ifab,a和b对换(a是a、b中的小者)ifac,a和c对换(a是三者中最小者)ifbc,b和c对换(b是三者中次小者)顺序输出a,b,c,229,#includeintmain()floata,b,c,t;scanf(%f,%f,%f,如果ab,将a和b对换,a是a、b中的小者,230,#includeintmain()floata,b,c,t;scanf(%f,%f,%f,如果ac,将a和c对换,a是三者中的小者,231,#includeintmain()floata,b,c,t;scanf(%f,%f,%f,如果bc,将b和c对换,b是三者中的次小者,232,一般形式:,3)嵌套的if-else语句,233,ifelse配对原则:缺省时,else总是与它上面最近的未配对if配对,234,例:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,修改:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,实现ifelse正确配对方法:加,235,例:有一函数:编一程序,输入一个x值,要求输出相应的y值。,解题思路:用if语句检查x的值,根据x的值决定赋予y的值由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现,236,解题思路:方法1(1)先后用3个独立的if语句处理:输入x若x0,则y=1输出x和y,scanf(%d,237,解题思路:方法2(2)用一个嵌套的if语句处理:输入x若x0,则y=-1否则若x=0,则y=0否则y=1输出x和y,scanf(%d,238,解题思路:方法2(2)用一个嵌套的if语句处理:输入x若x0)printf(“f”,x);elseprintf(“f”,x);,各有一个分号,“;”是C语言的语句中不可缺少的部分,也是if语句中的内嵌语所要求的。else子句不能作为语句单独使用,必须是if语句的一部分与if配对使用。在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。,244,switch语句用来实现多分支选择结构学生成绩分类85分以上为A等7084分为B等6069分为C等人口统计分类按年龄分为老、中、青、少、儿童,switch语句,245,switch语句,1switch的一般形式,多路选择:根据表达式的值,使流程跳转到不同的语句switch(表达式)case常量1:语句序列1;case常量2:语句序列2;default:语句序列3;default可以没有,但最好不省略不要忘记break,整数类型(包括字符型),246,switch语句的作用是根据表达式的值,使流程跳转到不同的语句switch语句的一般形式:switch(表达式)case常量1:语句1case常量2:语句2case常量n:语句ndefault:语句n+1,不能相同,247,例:要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为7084分,C等为6069分,D等为60分以下。成绩的等级由键盘输入。,switch语句,解题思路:判断出这是一个多分支选择问题根据百分制分数将学生成绩分为4个等级如果用if语句,至少要用3层嵌套的if,进行3次检查判断用switch语句进行一次检查即可得到结果,248,#includeintmain()chargrade;scanf(%c,值为A,249,#includeintmain()chargrade;scanf(%c,不能少,250,#includeintmain()chargrade;scanf(%c,值为C,251,#includeintmain()chargrade;scanf(%c,值为F,252,#includeintmain()chargrade;scanf(%c,此行位置有问题,应如何修改?,253,scanf(%c,254,scanf(%c,255,scanf(%c,256,2关于Switch的说明,(1)Switch后面括弧内的“表达式”,ANSI标准允许它为任何类型,每个case后的常量表达式的类型应与switch后括号内的表达式类型一致。(2)当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句;若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。(3)每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。,257,(4)各个case和default的出现次序不影响执行结果。(5)执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行Switch语句时,根据Switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。应在执行一个case分支后,可用break语句使流程跳出Switch结构。如不加break语句,当和某个case中常量匹配时,后面语句都会执行。,258,s=1*1+2*2+3*3,循环结构的应用场合,1*1+2*2+3*3=?,s?=1*1+2*2+100*100,1*1+2*2+99*99+100*100=?,for(i=1,s=0;i=100;i+)s+=i*i;,4.4循环结构,259,在许多问题中需要用到循环控制。输入全校学生成绩;求若干个数之和;迭代求根等。几乎所有实用的程序都包含循环。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。,260,4.4循环结构,while语句dowhile语句for语句多重循环(圈圈圆圆圈圈)break、continue语句(打破怪圈)Goto(去吧!),261,条件P,A,当型循环,直到型循环,真,假,假,条件P,A,假,真,循环结构,262,while语句,1While语句的一般形式,while(表达式)语句,当表达式为非0时,执行while语句中的内嵌语句。,2while语句的执行流程,263,特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)循环体;,264,例:求1+2+3+100,即解题思路:这是累加问题,需要先后将100个数相加要重复100次加法运算,可用循环实现后一个数是前一个数加1而得加完上一个数i后,使i加1可得到下一个数,265,#includevoidmain()inti,sum;i=1,sum=0;while(i=100)sum=sum+i;i+;printf(%d,sum);,266,4注意:,(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。如果不加花括弧,则while语句的范围只到while后面第一个分号处。,(2)在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。,267,dowhile语句,1dowhile语句的一般形式为:,do循环体语句while(表达式);,2dowhile语句的执行流程,268,3用dowhile语句求n,100,n=1,程序如下:,#includevoidma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 承包地土地租赁合同
- 乡村旅游开发实施细则指南
- 挡土墙工程劳务承包合同
- 预制砼界碑施工方案
- 镂空砖隔断施工方案
- 遂宁雨水收集系统施工方案
- 四川球场拼装地板施工方案
- 沙坪坝餐厅石膏板施工方案
- 沥青站搬迁改造方案
- 青浦区遮阳停车棚施工方案
- 2024-2025学年第二学期天域全国名校协作体高三3月联考 地理试卷(含答案)
- 修理木桥施工合同范本
- 学校2025年每日两小时体育活动方案-阳光体育活力四溢
- B超的基本知识
- GB/T 45107-2024表土剥离及其再利用技术要求
- 5G优化案例:5G波束配置优化提升CQI优良比案例
- JT-T-1202-2018城市公共汽电车场站配置规范
- DZ∕T 0201-2020 矿产地质勘查规范 钨、锡、汞、锑(正式版)
- GB/T 18747.1-2002厌氧胶粘剂扭矩强度的测定(螺纹紧固件)
- 2023年广州港集团有限公司校园招聘笔试题库及答案解析
- 铁科研微机控制直通式电空制动系统
评论
0/150
提交评论