谭浩强C语言全书word版2008CH3-1_第1页
谭浩强C语言全书word版2008CH3-1_第2页
谭浩强C语言全书word版2008CH3-1_第3页
谭浩强C语言全书word版2008CH3-1_第4页
谭浩强C语言全书word版2008CH3-1_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 算法与程序设计基础3.1算法的概述3.2 算法的常用表示方法3.3 结构化程序设计方法3.4 语句概述3.5 选择结构程序设计退出13.1 算法3.1.1 算法的概念 编写一个程序的时候,总要首先想好:程序是干什么的?应该如何实现这些目标?(应该先进行什么处理、后进行什么处理?)所处理的数据的类型是什么?遇到一些复杂的问题,我们可能还需要考虑采用什么数学方法。这一切都涉及一个专业名词“算法”。算法就是程序处理问题的步骤与方法。很多时候,程序设计者所面临的问题就是寻找一个合适的算法。因此,算法在软件设计中具有重要的地位。程序=数据结构+算法23.1 算法P57 例3.1:求1+2+3+4

2、+100=?算法1:步骤1:1+2=3步骤2:3+3=6步骤3:6+4=10步骤99:4950+100=5050算法2:步骤1:0+100=100步骤2:1+99=100步骤3:2+98=100步骤50:49+51=100步骤51:10050=5000步骤52:5000+50=505033.1 算法P52 例3.1:求1+2+3+4+100=?算法3:步骤1:k=1,s=0 (k表示加数,s存放和)步骤2:如果 k100 则 算法结束,S即为所求的和步骤3:否则 s=s+k,k=k+1步骤4:转向步骤2执行算法的优劣:方法简单、运算步骤少。43.1.2算法的特性 一个方法要成为我们可以在程序设

3、计中所使用的算法,需要具备如下五个特征。1、有穷性一个算法要在有限的步骤内解决问题。 例如,求某一自然数N的阶乘: N!=1*2*3*. .*N但是,以下计算公式则不能作为算法,因为其计算步骤是无限的: SUM=1+1/1+1/2+1/3+. .+1/n+. 3.1 算法52、确定性 算法中操作步骤的顺序和每一个步骤的内容都应当是确定的,不应当是含糊不清的。3、可执行性一个算法应当是可以由计算机执行的,算法中描述的操作都是可以通过计算机的运行来实现。(例如:b=0,执行a/b)4、有零个或多个输入 输入就是从外界取得必要的数据。一个算法可以有零个或多个输入。例如:计算半径为r的圆的周长和面积。

4、同时一个算法可以没有输入,例如:计算出5!是多少。3.1 算法65、有一个或多个输出算法的目的就求解,“解”就是我们想要得到的最终结果。输出是同输入有着某些特定关系的量。一个算法得到的最终结果就是输出。没有输出的算法是没有意义的。3.1 算法73.1.3 算法设计的要求 什么样的算法是好的算法呢?设计算法时应向哪些方面努力呢?一般包括以下这几个方面。1、正确性一个算法应当能够解决具体问题。其“正确性”可分为以下几个方面:不含逻辑错误;对于几组输入数据能够得出满足要求的结果;对于精心选择的典型、苛刻的输入数据都能得到要求的结果;对于一切合法的输入都能输出满足要求的结果;3.1 算法82、可读性算

5、法应该可以用能够被人理解的形式表示。太复杂的、不能被程序员所理解的算法难以在程序设计中采用。3、健壮性指算法具有抵御“恶劣”输入信息的能力。当输入数据非法时,算法也能适当的作出反应或进行处理,而不会产生莫明其妙的输出结果。例如,当输入三个边的长度值来计算三角形的面积时,一个有效的算法在三个输入数据不能构成一个三角形时,应报告输入的错误,应返回一个表示错误或错误性质的值并中止执行。3.1 算法概述94、效率与低存储量的需求效率指的是算法执行时间,对于一个问题如果有多个算法可以解决,执行时间短的算法效率高。存储量需求指算法执行进程所需要的最大存储空间。高效率和低存储量是优秀程序员追求的目标。效率与

6、低存储量需求这两者都与问题规模有关。占用存储量最小、运算时间最少的算法就是最好的算法。3.1 算法概述103.2 算法的常用表示方法算法可以用多种方式来表达。常用的有自然语言、传统的流程图、伪代码、N-S流程图、计算机语言等。113.2.1 自然语言表示算法(P58)自然语言就是指人们在日常生活中使用的语言,如汉语、英语等。例如:编程计算圆周长和面积编程思路:输入圆的半径rscanf(%f,&r);如果r0)使2*3.14*r,得到的积放在c中 c=2*3.14*r; 使3.14*r*r,得到的积放在area area=3.14*r*r; 3.2 算法的表示方法123.2.2 流程图(P59)

7、用图形的方式来表示算法。用一些几何图形来代表不同性质的操作。常用的流程图符号: 3.2 算法的表示方法结构化程序设计中采用三种基本结构:顺序结构、选择结构和循环结构,其共同特点:P59131、顺序结构2、选择结构3、循环结构3.2 算法的表示方法14编程计算圆周长和面积,用流程图表示的算法如下:3.2 算法的表示方法开始输入半径rr0c=2*3.14*r;area=3.14*r*r输出r,c,area结束noyes153.2.3 N-S结构流程图(P61)把流程图中的流程线完全去掉,全部算法写在一个矩形框内。 3.2 算法的表示方法 A BAPBP成立AA当P成立16编程计算圆周长和面积,用N

8、-S图表示的算法如下:3.2 算法的表示方法输入半径r r0 yesnoc=2*3.14*r;area=3.14*r*r输出r,c,area173.2.4 伪代码表示法(P58)指用介于自然语言和计算机语言(语句关键字)之间的文字和符号来表示算法。例如:编程计算圆周长和面积编程思路:输入圆的半径rscanf(%f,&r);if (r0) 计算:if (r0) c=2*3.14*r; c=2*3.14*r; area=3.14*r*r area=3.14*r*r; 3.2 算法的表示方法183.2.5 用计算机实现算法用计算机解决一个问题,包括设计算法和实现算法两个部分。用自然语言表示了算法,还

9、要将它转换成计算机语言程序。 用计算机语言描述算法必须严格遵循所用语言的语法规则。例如:编程计算圆的周长和面积3.2 算法的表示方法193.2.5 用计算机实现算法#include #define PI 3.14main()float r;double c,area;scanf(%f,&r);c=2*PI*r;area=PI*r*r;printf(r=%f,area=%f,c,area);如果对一个问题设计好了算法,再用计算机语言来表示就非常容易,所以用计算机来解决问题,算法设计是非常关键的。对于程序员在编写解决一较复杂的问题的程序时,往往要先设计解决该问题的算法。203.3 结构化程序设计方

10、法要解决实际问题,编写程序的步骤是:确定数学模型设计算法编写源程序程序编译运行进行结构化的程序设计,采用的方法是(P64):1、自顶向下2、逐步细化3、模块化4、结构化编码 模块化:是将一个大任务分成若干个较小的任务,较小的任务又细分为更小的任务,直到更小的任务只能解决功能单一的任务为止,一个小任务称为一个模块。213.3 结构化程序设计方法在C语言中,模块化由函数来实现。“自顶向下,逐步细化”:这种把大任务分成小任务的方例例:工资管理系统分解成的模块结构如下:223.4 C语句概述一个C语言程序的执行部分由语句组成。程序的各种功能(如输入、输出、计算、打印等)也由语句实现的。C语言的语句可分

11、为:说明语句、表达式语句、函数调用语句、控制语句、复合语句以及不执行任何操作的空语句。1、声明语句声明语句用来定义变量的数据类型,如:int s,i; /* 说明s,i是整型变量 */2、函数调用语句由一个函数调用加一个分号构成。例:printf(“n Please input an integer to n:”); scanf(“%d”,&n); 233.4 C语句概述3、表达式语句由一个表达式加上一个分号构成。任何表达式都可以加上分号而成为语句。例:s=0;i=1;s=s+i;i=i+2;4、空语句只有分号的语句。空语句不执行任何操作; 245、复合语句把多个逻辑上相关的一组语句用大括号“

12、”括起来组成的一个语句称复合语句。C语言的编译系统把复合语句作为是单条语句对待。如下所示就是一个复合语句:b=c+d; a=e-f; printf(%d%d,b,a); 复合语句中的各条语句都以分号“;”结尾。注意:在大括号“”之后不要加分号。3.4 C语句概述256、控制语句用来规定语句执行的顺序,共有9种控制语句:if (条件) else 条件语句for (条件) 循环语句while (条件) 循环语句do while(条件) 循环语句continue 结束本次循环语句break 结束循环语句或结束switch语句switch (表达式) 多分支选择语句goto 标号; 转向语句retur

13、n (表达式)3.4 C语句概述26顺序结构举例bch2_1.c:输入圆半径,计算周长和面积。编程思路:输入圆的半径rc=2*3.14*r;area=3.14*r*r选择结构举例:改进上例,如果输入的半径为负,就输出一段信息,说明输入数据错误。编程思路:输入圆的半径r如果:r0 则c=2*3.14*r;area=3.14*r*r;输出c,area否则:则输出“数据输入错误”,程序结束;3.3 结构化程序设计方法273.3 结构化程序设计方法N-S流程图如下:输入半径r r0 yesnoc=2*3.14*r;area=3.14*r*r输出r,c,area输出:“输入数据错误”28源程序ch3_6

14、8.c#include #define PI 3.14main()float r;double c,area;printf(r=);scanf(%f,&r);if (r0) c=2*PI*r;area=PI*r*r;printf(c=%f,area=%fn,c,area);else printf(输入数据必须大于0n);3.5 选择结构程序设计选择结构的特点是:根据所给出的条件,决定从给出的操作中选择一组去执行。293.5.1关系运算符和关系表达式(描述条件)关系运算符用来比较两个操作数大小关系的运算符。利用关系运算符写出关系表达式,用这种表达式的结果去控制计算的进程。1、关系运算符及优先级高

15、:=低:=!=可以对数值类型使用这些运算符,构造出关系表达式关系运算符的优先级低于算术运算符,高于赋值运算符例如:3.24a+b相当于c(a+b)a=bc相当于a=(bc相当于a=(bc)2.关系表达式用关系运算符连接起来的表达式称为关系表达式,C规定:如果关系成立,表达式值为1;关系不成立表达式值为0。例: 3.24a+b 若:a=3,b=4,c=9则结果为:1a=bc若:b=4,c=9 则结果为:0aA 结果为:13.5 选择结构程序设计31一个关系表达式不连续写一个以上的关系运算符,例:数学关系:5=3=2判断变量c的值是否为字母:c=a & c=A & cb)&(xy)ab&xy(a=

16、b)|(x=y)a=b|x=y(!a)|(ab)!a|ab2.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子称逻辑表达式.例如:若a=4,b=2,x=6,y=7,则:ab&xy结果为:0a=b|x=y结果为:0!a|ab结果为:13.5 选择结构程序设计34注意:非零为“真”,用1表示;零为“假”,用0表示。例:a&b结果为:1!5.34结果为:0例:要判断某一年是否是闰年,闰年的条件是符合下面二者之一:能被4整除,但不能被100整除;或能被4整除,又能被400整除。若用变量year表示年份,则C语言的表达式:(year%4=0 & year%100!=0) | year%400=0

17、 注意: P70(2)并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例:x!=0.0 & y=1.0(当x=0时,不执行y=1.0)3.5 选择结构程序设计35例(p70):求表达式:a & b & c的解。(1)若a为假,则b和c不必计算,表达式的值为假(2)若a为真,b为假,则c不必计算,表达式的值为假(3)若a为真,b为真,则计算c的值例:求表达式:a | b | c(1)若a为真,则b,c不必计算,表达式值为真(2)若a为假,b为真,则c不必计算,表达式值为真(3)若a,b为假,则计算c,若c为真,表达式值为真。例3-6(P71 c

18、h3_65.c)3.5 选择结构程序设计36#include main()int a,b,c;scanf(%d%d%d,&a,&b,&c);printf(“e=%d,a=%d,b=%d,c=%dn”,+a & b- &+c ,a,b,c);printf(a=%d,b=%d,c=%d,e=%dn,a,b,c, +a & b- & +c);c=a|(a=c)b);printf(a=%d,b=%d,c=%dn,a,b,c);printf(e=%d,a=%d,b=%d,c=%dn, -c|b-|+a ,a,b,c);printf(a=%d,b=%d,c=%d,e=%dn,a,b,c, -c|b-|+a

19、 );3.5 选择结构程序设计输入数据:0 0 0373.5.3 if 语句(条件语句)if语句用于描述在一些操作中选择执行。它以一个逻辑条件的成立与否为条件:区分两种不同的执行方式;或决定一个操作的做或者不做;一般格式格式1: if (条件表达式) 语句;语句的执行过程:首先计算条件表达式的值值为非0时,执行语句;否则什么都不做,执行后续语句。3.5 选择结构程序设计表达式语句真(非0)假(0)38问题:编程输入圆半径,计算周长和面积(ch3_68.c)。#include #define PI 3.14main()float r;double c,area;printf(r=);scanf(

20、%f,&r);if (r0) c=2*PI*r;area=PI*r*r;printf(c=%f,area=%fn,c,area);3.5 选择结构程序设计表达式语句真(非0)假(0)39例3.7(CH3_71.C)输入一个字符c,若c是字母,则输出“Yes!”(按F10单步执行)#include main()char c;c=getchar();if (c=a & c=A & c=Z)printf(Yes!n);3.5 选择结构程序设计是C是字母?不是输出“Yes”40课本P73页例(ch3_67.c):#include main() int s; printf(nInput your sco

21、re:); /*输入提示信息*/ scanf(%d,&s); printf( n your score=%d ,s); if (x=60) printf(,pass!); /*if x=60,输出pass!*/3.5 选择结构程序设计413.5 选择结构程序设计例3-10(CH3_69.C)输入一个整数,若该数不为0,则输出。#include main()int x;scanf(%d,&x);if (x)printf(n x=%d,x);42例3.8(教材P73 ch3_73a.c)编写程序,求下列分段函数的值。#include #include void main() float x; do

22、uble z; printf(nx=); scanf(%f,&x); if(x0)z=log(x); printf(z=%fn,z);3.5 选择结构程序设计 -1 (x0)43例3.8(3.5):编写求一元二次方程ax2+bx+c=0的实数解的程序。d=b*b-4*a*cd0 否 输出两个不等的实根是 否 输出两个相等的实根d=0是 否d0输出无实根提示3.5 选择结构程序设计是44#include #include main() int a,b,c; int d; printf(n a=); scanf(%d,&a); printf(n b=); scanf(%d,&b); printf(

23、n c=); scanf(%d,&c); d=b*b-4*a*c; 3.5 选择结构程序设计45if (d0) printf(n x1=%f,(-b+sqrt(d)/(2*a); printf(n x2=%f,(-b-sqrt(d)/(2*a);if (d=0)printf(n x1=x2=%f,(float)(-b)/(2*a);if (d0,则求得两实根后,还进行后续判断吗?3.5 选择结构程序设计46格式2(P73): if (条件表达式) 语句1; else 语句2;执行过程:先计算条件表达式的值值为非0,则执行“语句1”,继续执行下一条语句;否则执行“语句2”,结束。注意:语句1或语

24、句2为多条语句时,要用复合语句 。例:if (h1.1) price=0; else price=50;3.5 选择结构程序设计473.5 选择结构程序设计例3-9(ch3_9a.c)输入两个数,判断两数是否相等?#include main()int a,b;printf(a=);scanf(%d,&a);printf(b=);scanf(%d,&b);if (a=b)printf(a=bn);elseprintf(a!=bn);说明:P74483.5 选择结构程序设计改进求圆周长和面积的源程序ch3_68.c#include #define PI 3.14main()float r;doub

25、le c,area;printf(r=);scanf(%f,&r);if (r0) c=2*PI*r;area=PI*r*r;printf(c=%f,area=%fn,c,area);else printf(输入数据必须大于0n);if (条件表达式) 语句1; else 语句2;语句1的判断:条件表达式后,else之前的所有语句;语句2的判断:else之后的一条语句。49补例3.6(ch3_6.c):判断一个数是奇数还是偶数,并把结果显示出来.算法设计:#includemain() int x; printf(nPlease input a integer to x:); scanf(%d,

26、&x); if (x%2=0) /*x是偶数 */ printf(“n%d 是偶数!,x); else printf(“n %d 是奇数!,x); 3.5 选择结构程序设计X%2=0503.5 选择结构程序设计练习:(ch3_68a.c)输入一个整数,判断该数是否为3的倍数,并把结果显示出来。#include main()int x;printf(n输入一个整数:);scanf(%d,&x);if (x%3=0) printf(n%d是3的倍数!n,x);elseprintf(n%d不是3的倍数!n,x);51补例ch3_74.c:由键盘输入两个数,编程输出大者。#include main()

27、float a,b,max;printf(a,b=);scanf(%f%f,&a,&b);if (ab) max=a;elsemax=b;printf(最大者:%fn,max);3.5 选择结构程序设计52补例ch3_74a.c:由键盘输入三角形的三条边,编程输出它的面积。#include #include main()float a,b,c;double s,area;printf(a,b,c=);scanf(%f%f%f,&a,&b,&c);if (a+b)c & (a+c)b & (b+c)a) s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c);pr

28、intf(Area:%fn,area);elseprintf(输入数据不能构成三角形!n);3.5 选择结构程序设计测试数据1:3 4 5测试数据2:1 2 153当语句部分为复合语句时,常用的写法有两种:if (*) 或*else *3.5 选择结构程序设计if (*) *else * 54 if语句中应注意的问题分支语句的复杂性关键在于表达式,表达式通常是逻辑表达式或关系表达式,但是也可以是其它表达式,甚至也可以是一个变量。例如: if (a=8); if (c);只要表达式的值为非0,即为“真”,就执行其后的语句。在if语句中的表达式必须用括号括起来;如果要想在if语句中满足条件时执行一

29、组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。注意复合语句的之后不能加分号;else总是与它前面最接近的if配对。3.5 选择结构程序设计553.5.2 if语句的嵌套问题的提出:改进的求一元二次方程ax2+bx+c=0的实数解的程序(P81 ch3_7.c)。编程思路:首先求出判别式的值:d=b*b-4*a*c若d0,输出两个实根,结束;否则若d=0,输出两个相等的实根,结束;否则:输出没有实根,结束3.5 选择结构程序设计56#include #include main() float a,b,c,d; printf(na,b,c=); scanf(%f%f%f,&a,&b,

30、&c); d=b*b-4*a*c; if (d0) printf(nx1=%f,(-b+sqrt(d)/(a*2); printf(nx2=%f,(-b-sqrt(d)/(a*2); /*语句1*/else if (d=0) printf( n x1=x2=%f,(-b)/(a*2);else printf(n The equation has no real root!);3.5 选择结构程序设计57当一个条件语句的else部分又是一个条件语句时,通过连续判断完成三种情况的分别处理。有多个分支选择时,可采用if-else-if语句,其一般形式为(嵌套发生在else后面):if (条件表达式1

31、) 语句1; else if(表达式2) 语句2; else 语句序列3; 3.5 选择结构程序设计语句1223583.5 选择结构程序设计例3.11(P75 CH3_73.C)编程思路: -1 (x0)输入x x0 真 假z=log(x)z=0593.5 选择结构程序设计#include #include void main() float x; double z; printf(nx=); scanf(%f,&x); if(x0) z=log(x); /*语句2*/ else z=0; /* 语句3*/ printf(z=%fn,z); 603.5.2 if语句的嵌套嵌套发生在if后面(条

32、件之后直接出现条件语句):if (表达式1) if (表达式2) 语句1;else 语句2;else语句1;else总是与它前面最接近的if配对。P76 另解例3.11(ch3_73b.c)3.5 选择结构程序设计613.5 选择结构程序设计#include #include void main() float x; double z; printf(nx=); scanf(%f,&x); if(x=0) if(x0) z=-1; /*语句1*/ else z=0;/*语句2*/ else z=log(x); /*语句3*/ printf(z=%fn,z);输入x x=0假 真z=log(x)

33、 x0 真 假Z=-1z=062#include #include main() float a,b,c,d; printf(na,b,c=); scanf(%f%f%f,&a,&b,&c); d=b*b-4*a*c; if (d=0) /*若d=0*/ if (d0) /*若d0*/ printf(nx1=%f,(float)(-b+sqrt(d)/(a*2); printf(nx2=%f,(float)(-b-sqrt(d)/(a*2); else /*否则d=0*/ printf( n x1=x2=%f,(float)(-b)/(a*2);else/*否则d0)if (y1) z=1;e

34、lse z=2; /*这个else属于哪个if?*/C规定:每个else部分总属于前面最近的那个缺省对应的else部分的if语句。若需要else与第一个if配对,可以采用下面的写法:if (x0) if (y1) z=1;else z=2; /*这个else属于哪个if?*/ 3.5 选择结构程序设计64例3-12(P77)写出下列程序的运行结果。#include main()int a,b,c;a=5;b=3;c=0;if (c)if (ab)printf(n max=%d,a);elseprintf(n max=%d,b);elseprintf(n c=%d,c);3.5 选择结构程序设计

35、653.5.5 条件运算符和条件表达式条件表达式的一般形式为:表达式1?表达式2:表达式3表达式的执行顺序:计算表达式1的值,若为非0(条件成立),则计算表达式2的值,作为条件表达式的结果;若为0(条件不成立),则计算表达式3的值,作为条件表达式的结果。例:x0?2:3当x0时,表达式的值为2,否则为3表达式的值依赖于x当时的值,得到的结果也依赖于x的值说明:P783.5 选择结构程序设计66优先级:高于赋值运算符,低于算术和关系运算符例:max=(ab)?a:b相当于 max=(ab)?a:b) ab?a:b+1相当于 ab?a:(b+1)C规定:如果有多个条件表达式嵌套出现,后续的每个:符

36、号总与前面最近的没有配对的那个?符号相匹配。条件运算符的结合方向为“自右至左”例:x0?1:x=0?0:-1相当于:x0?1:(x=0?0:-1)例:ab?a:cd?c:d相当于ab?a:(cd?c:d)if (ab) max=a;else max=b;可以用条件运算符来表示为:max=(ab) ? a:b例:求x,y中大者,可使用条件表达式:xy?x:y3.5 选择结构程序设计673.5.7 选择结构程序设计举例例3.13(P77ch3_72.c)阅读下面程序,若输入为59,则输出结果是什么?#include main()int score;char grade;printf(请输入成绩:n

37、);scanf(%d,&score);grade=score=90?A: (score=60?B:C);printf(%d 属于%cn,score,grade);683.5.7 选择结构程序设计举例补例(ch3_9.c):编写程序,求下列分段函数的值。 ex+y x0,y0 Z= e2*x-y 0 x1,y0 ln x x1程序清单如下:#include #include main() float x,y,z; printf(nx=); scanf(%f,&x); printf(ny=); scanf(%f,&y); if (x0)&(y=0)&(x=0) z=exp(2*x-y); if(x

38、=1) z=log(x); printf(z=%5.2fn,z);69例3.17(ch3_10.c) 输入两个正整数a,b。b最大不超过三位数,a不大于31。使a在左,b在右,拼成一个新的数c。例如a=23,b=30,则c为2330。若a=1,b=15,则c为115。算法分析:抽象分析出以下数学模型,决定c的值的计算公式如下:当b为一位数(b10)时,b作为个位,c=a*10+b当b为二位数(10=b100 )时,b作为个位、十位,c=a*100+b当b为三位数(100=b1000)时,c=a*1000+b求c的公式:c=a*k+b。(k的取值可以为:10,100,1000) 3.5.7 选择

39、结构程序设计举例70算法流程图 :3.5.7 选择结构程序设计举例if (b10) k=10;else if (k100) k=100;else if(b1000) k=1000;71程序清单如下:#includemain() int a,b,c,k; printf(nInput two positive integer number:); scanf(%d,%d,&a,&b); if (b10)k=10; else if (b100)k=100; else if (b0,是5位数,否则:b0,是4位数3、是否回文数:从最高位依次与最低位比较,都相同,是回文数。 3.5.7 选择结构程序设计举

40、例73main()int a,b,c,d,e;long x;do printf(请输入一个正整数x:);scanf(%ld,&x);while (x100000);a=x/10000;b=x%10000/1000;c=x%1000/100;d=x%100/10;e=x%10;if (a0) printf(这是5位数,%d %d %d %d %dn,e,d,c,b,a);if (e=a & b=d) printf(这是一个回文数n);elseprintf(这不是一个回文数n); 74else if (b0) printf(这是4位数,%d %d %d %d n,e,d,c,b);if (e=b

41、& d=c) printf(这是一个回文数n);elseprintf(这不是一个回文数n); else if (c0) printf(这是3位数,%d %d %dn,e,d,c);if (e=c) printf(这是一个回文数n);elseprintf(这不是一个回文数n);elseif (d0) printf(这是2位数,%d %dn,e,d);if (e=d) printf(这是一个回文数n);elseprintf(这不是一个回文数n);elseif (e0) printf(这是1位数,%dn,e); 75习题3.8(P104)#include #define PI 3.14159main

42、()float x;double z;printf(请输入x的值:);scanf(%f,&x);if (xb),则a与b中的保存的数互换。z=a;a=b;b=z再比较a,c的大小,从而找出三个数中最小的if (ac),则a与c中的保存的数互换。z=a;a=c;c=z最后比较b,c的大小,较小者存入b,大者存入cif (bc),则b与c中的保存的数互换。z=b;b=c;c=z3.5.7 选择结构程序设计举例77#include main()float a,b,c,w;printf(请输入a,b,c的值:);scanf(%f%f%f,&a,&b,&c);if (ab)w=a;a=b;b=w;if

43、(ac)w=a;a=c;c=w;if (bc)w=b;b=c;c=w;printf(na,b,c从小到大为%f,%f,%f,a,b,c);3.5.7 选择结构程序设计举例783.5.6 switch语句(P73)if判断语句可以实现两个分支的程序流程。但编程中往往要求实现多个分支(3个以上)的程序流程。例3.14 编写一个程序,要求输入学生的分数,输出其成绩的分数段,用A、B、C、D、E分别表示90分以上、8089、7079、6069分和不及格(059分)5个分数段。793.5.6 switch语句(P73)其一般形式为:switch (表达式) case 常量表达式1: 语句1; case

44、常量表达式2: 语句2; . . default: 语句n+1; 执行过程是:首先计算表达式的值,然后把该值与各case常量表达式值逐个相比较。当遇到值相等时,程序就从那里执行下去;如找不到,则执行default后的语句。若没有default语句,则退出此开关语句。注意:switch要求case表达式的值互不相同80程序代码段如下(CH3_79A.C):scanf(%d,&score);grade=score/10;switch (grade)case 0:case 1:case 2:case 3:case 4:case 5: printf(grade=E!n); break;case 6:

45、printf(grade=D!n); break;case 7: printf(grade=C!n); break;case 8: printf(grade=B!n); break;case 9: case 10:printf(grade=A!n); break;default: printf(the score is out of range!n);81例:3.8(14):某幼儿园只收26岁的小孩.23岁入小班,4岁入中班,56岁入大班.输入年龄,要求输出应入什么班.算法分析:1、输入小孩年龄age2、age=23、4、56,进入小、中、大班82程序代码段如下:scanf(%d,&age);

46、 switch (age) case 2: case 3: printf(n Enter Lower class!); break; /*age=2,3时,共享此代码段*/ case 4: printf(n Enter Middle class!); break;case 5:case 6: printf(n Enter Higher class!) break; default: printf(n Cant enter!); 83说明(P80)程序在执行完毕相应的case语句后不能退出,而是继续执行其后的其它语句。switch中的表达式的作用为控制程序的流程。它的类型必须与case语句中常量

47、表达式的类型一致(整型、字符型、枚举型)。所有常量表达式的类型必须相同,而它们的值必须不同。若要执行完一个case的语句后,转到switch后的语句去执行,则要在该case语句的最后加上break语句(跳转语句),跳转到switch后的语句去执行。 3.5.6 switch语句84switch (n) case 1:break;case 2:break;default:break;3.5.6 switch语句85补例(bch3_4.c):输入年份和月份,显示该月的天数。提示:月份为1、3、5、7、8、10、12时,天数为31天;月份为4、6、9、11时,天数为30天;月份为2时,如果为闰年天数为29天,否则为28天(闰年能被4整除,不能被100整除,或年份能被400整除)。编程思路:1、输入年份(year),月份(month)2、如果month=1,3,5,7,8,10,12,则天数day=31 如果month=4,6,9,11,则天数day=30 如果month=2, 如果是闰年:day=29 否则day=28天86main()int year,month,day;printf(输入年、月);scanf(%d%d,&year,&month);switch (month) case 1:case 3:case 5:case 7:case 8:case 10:

温馨提示

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

评论

0/150

提交评论