资源描述
第4章 程序控制结构,主要内容,4.1 C语言的执行语句 4.2 顺序结构 4.3 选择结构 4.4 循环结构,4.1C语言的执行语句,C语言的语句分为声明语句和执行语句。第3章介绍的变量定义语句是最常见的声明语句,声明语句在编译时处理,在程序运行时不产生相应的操作。执行语句的作用是在程序运行时向计算机系统发出操作命令,使计算机执行特定的操作. C语句:以“;”作结束符,编译后产生机器指令。 C语句分类: 表达式语句 空语句 控制语句 复合语句,4.1.1表达式语句,表达式语句是在表达式的末尾加上分号构成的语句。 z=x+sin(y); a-=a*a; 赋值语句 i+; 自增1语句 x=0,y=1; 逗号表达式语句 x+y; 无意义 printf(“This is a C program.n”); 函数调用语句 赋值语句和函数调用语句是使用最多的表达式语句,如: printf(“This is a C statement.“); func(a,5); y=max(a,b);,4.1.2空语句,仅由一个“;”构成的语句 只是在逻辑上起到一个语句的作用,在编译时不产生任何指令,在执行时不产生任何操作。 作用: 构成标号语句,标示流程的转向点; 构成循环语句中空循环体。 例如:while(getchar()!=n) ; 只要从键盘上输入的字符不是回车则重新输入。,4.1.3复合语句,用 括起来的一组语句。 一般形式: 执行语句; ,说明: “”后不加分号 其中最后一个语句后也要加分号 语法上和单一语句相同 复合语句可嵌套,如: z=x+y; t=z/100; printf(“%f“,t); ,如: z=x+y; t=z/100; printf(“%f“,t); ,4.1.4控制语句,控制语句:完成一定的控制功能。,如: if (xy) z=x; else z=y;,4.2顺序结构,流程图 流程图是表示算法的一种工具,用一些图框来表示各种操作。 一个流程图包括以下几部分 : 表示相应操作的框; 带箭头的流程线; 框内外必要的文字说明。,顺序结构,常用的流程图符号:,N-S流程图:完全去掉了流程线,算法的每一步都用矩形框描述,把一个个矩形框按执行的次序连接起来就是一个完整的算法描述。,顺序结构,结构化程序的三种基本结构 顺序结构:按书写顺序执行的语句构成的程序段,选择结构 循环结构,例4.1 输入任意两个整数,求它们的和及平均值。要求平均值取两位小数输出。,/例4.1 #include #include void main() int num1, num2; float sum, aver; printf(“Please input two integers: n“); scanf(“%d,%d“, ,运行情况: 30000,5005 sum=35005, aver= 17502.50,例4.2 给定一个三位正整数,分别输出其个位数、十位数和百位数。,#include void main() int m,m0,m1,m2; printf(“Input a number(100999):”); scanf(“%d“, ,运行结果: Input a number(100999):263 输出: 3,6,2,例4.3 取一个16位的二进制数a的7、6、5、4四个位,如图4-2中加阴影的部分。,void main() unsigned a,b,c,d; scanf(“%x“, /*以十六进制输出a和结果d*/ ,例4.4 求ax2+bx+c=0方程的根。 a,b,c由键盘输入,设 。 一元二次方程式的根为 x1= x2= 可以将上面的分式分为两项: p= , q= ,则 x1=p+q,x2=p-q。,顺序结构,#include #include void main ( ) float a,b,c,disc,x1,x2,p,q; scanf(“a=%f,b=%f,c=%f“, ,运行情况: 输入: a=1, b=3, c=2 输出: x1=-1.00 x2=-2.00,4.3选择结构,选择结构是指在程序执行过程中,根据指定条件的当前值在两条或多条路径中选择一条执行。 C语言的选择控制语句有两条: 条件选择语句:if语句 开关分支语句:switch语句,4.3.1 if语句,1、if 格式(单分支语句) if (判断表达式) 语句1; 语句 1可以是一条语句或复合语句。 注意:满足条件时想要执行多条语句一定要用复合语句,当判断表达式值不为零(即”真”), 则执行语句1, 再执行其后继语句; 否则, 不执行语句 1, 执行其后继语句。,单分支语句,判断表达式应该是具有一定意义、有实用价值的表达式,因此,最常用关系表达式和逻辑表达式来表达,例如: if(a=b) if(a=0) 等价于if(!a) if(a!=0) 等价于if(a) if(a=5&a=10),例:输入一个整数,求绝对值. main( ) int i ; scanf(“%d“, ,例:执行下列程序段后 a 的值是_。 int a=3; if (2) a=5;,单分支语句,#include main( ) char c; printf(“input a letter:“); c=getchar(); if(c=A ,例4.5 从键盘输入一个字母,以小写字母形式输出该字母,单分支语句,例4.6从键盘输入两个整数,按升序输出这两个数。,#include void main( ) int a,b,t; scanf(“%d%d“, ,例:输入三个数a,b,c,要求按由小到大的顺序输出。,If ab 将a和b对换 If ac 将a和c对换 If bc 将b和c对换,单分支语句,单分支语句,#include void main ( ) float a,b,c,t; scanf(“%f%f%f“, , 必不可少,否则,会出现逻辑错误!,2、if(表达式) 语句1 else 语句2,双分支if-else语句,例:if (xy) printf(“%d”,x); else printf(“%d”,y);,双分支if-else语句,说明:在if和else后面可以只含有一条语句,也可以含有用花括号 括起来的复合语句。如: if (a+b)c,例: 输入两个数并判断两数是否相等。,#include void main( ) int a,b; printf(“Enter integer a:“); scanf(“%d“, ,运行结果: Enter integer a:12 Enter integer b:12 a=b,运行结果: Enter integer a:12 Enter integer b:9 a!=b,双分支if-else语句,分析以下程序的输出结果:,(1) #include void main ( ) int a,b; scanf(“%d“, ,(2) #include void main ( ) int a,b,t; scanf(“%d%d“, ,(3)#include void main ( ) int x,y; scanf(“%d“, ,(4)程序输出结果 #include void main( ) int x,y; scanf(“%d“, ,3.多分支语句,几种形式:,3、if(表达式1)语句1 else if(表达式2)语句2 else if(表达式3)语句3 else if(表达式m)语句m else 语句n,多分支语句,例: if (number500)cost=0.15; else if(number300)cost=0.10; else if(number100)cost=0.075; else if(number50)cost=0.05; else cost=0;,多分支语句,多分支语句,匹配规则: Else总是与它上面的,最近的,统一复合语句中的,未配 对的if语句配对。,当if和else数目不同时,可以加花括号来确定配对关系。,例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,-1 (x0) 算法1: 算法1: 输入x 输入x 若x0,则y=1 若x=0,则y=0 输出y 若x0,则y=1 输出y,多分支语句,程序 #include void main( ) int x,y; scanf(“%d”, ,程序1: 程序2: if(x=0) y=-1; if(x0) y=1; else else y=0; if(x=0) y=0; else y=-1; else y=1; 程序3: 程序4: y=-1; y=0; if(x!=0) if(x=0) if(x0) y=1; if(x0) y=1; else y=0; else y=-1;,正 确,正 确,上例中的程序段有四个,请判断哪个是正确的?,X0时,y=0,X=0时,y=-1,多分支语句,例4.7:输入百分制成绩,要求输出相应的五级制成绩。百分制成绩与五级制成绩之间的转换标准为: 90分以上为“A”, 80-89分为“B”, 70-79分为“C”, 60-69分为“D”, 60分以下为“E”。,If语句嵌套,void main ( ) int score; printf(“nPlease input the score(0-100):“); scanf(“%d“, ,多分支语句,例4.8 分段函数定义如右: 根据所输入的x的值,求函数值。 main ( ) float x,y; scanf(“%f“, ,4.3.2 switch语句,switch语句的格式: switch (表达式) case 常量表达式:语句 break; case 常量表达式:语句 break; case 常量表达式:语句 break; default :语句 ,执行过程: 当表达式的值与某一个case后面的常量表达式的值相等时,就从此case后面的语句开始执行下去,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。,switch语句,switch语句,执行流程: 首先计算switch圆括号中表达式的值,然后将结果值按前后顺序依次与各个case后的常量表达式进行比较。 当表达式的值与某一个case后面的常量表达式的值相等时,就执行该case后边的语句组k,接着如果遇到break语句, 则结束整个switch语句(即退出switch)。如果不遇到break语句,则按顺序执行下面其他case后边的语句组, 直至遇到break语句或最后边的“”为止, 才结束switch语句 当结果值与常量表达式k的值都不相等时, 若有default, 则执行其后语句;若无default, 则什么都没执行,switch语句,说明: 1)switch关键字,case也是关键字,与其后面的常量表达式合称case语句标号,常量表达式类型必须与switch后面表达式类型相匹配,且各case语句标号的值各不相同,不能重复;default也是关键字,起语句标号的作用,代表除了以上所有case标号之外的那些标号; 2)语句1、语句2可以是一条语句,也可以是若干条,在必要时, case语句标号后的语句可以省略不写; 3) switch的表达式通常是一个整型或字符型变量,也允许枚举型变量,其结果为相应的整数、字符或枚举常量; 4)break语句不是一定需要加上,执行完一个case后面的语句,若没有遇到break,就自动进入下一个case继续执行,而不再判断是否与之匹配。,当程序在执行时,如果输入的是A,#include “stdio.h“ main() char a; a=getchar(); switch(a) case 65: printf(“%c“,A); case 66: printf(“%c“,B); default :printf(“%sn“,“other“); ,运行结果: ABother,当程序在执行时,屏幕上输出为:,#include “stdio.h“ main() int k=2; switch(k) case 1: printf(“%dn“,k+);break; case 2: printf(“%d“,k+); case 3: printf(“%dn“,k+);break; cade 4: printf(“%dn“,k+); default :printf(“Full!n“); ,运行结果: 2 3,switch语句,例:要求按照考试成绩的等级输出百分制分数段,用switch语句实现,应写为: switch(grade) case A: printf(“85100n“); break; case B: printf (“7084n“); break; case C: printf (“6069n“); break; case D: printf (“60n“); break; default: printf(“errorn“); ,补充例:输入成绩, 用A、B、C、D、F、R分别表示优、良、中、及格、不及格、补考、缺考。,grade=getchar( ); switch (grade) case A: case a: printf(“优“);break; case B: case b: printf(“良“);break; case C: case c: printf(“中“);break; case D: case d: printf(“及格“);break; case F : case f : printf(“不及格“); /* 此处没有break语句 */ case R: case r: printf(“请补考“);break; default: printf(“输入错“); ,switch语句,例:某幼儿园只收2至6岁的儿童。23岁入小班,4岁入中班,56岁入大班。根据输入的年龄,求应入的班级。 分析:设年龄为age,当age为2和3时,应输出同样的内容“入小班”,age为5和6时输出同样的内容“入大班”。该题算法比较简单。,switch语句,#include void main() int age; printf(“Please enter age: “); scanf(“%d“, ,void main() int x,y,a=0,b=0; scanf(“x=%d,y=%d“, ,运行结果: 输入:x=1,y=0 输出:a=2 b=2,switch语句的嵌套,选择结构程序举例,例4.13 输入一个字符,判别该字符是数字、英文大写字母、小写字母还是其它字符。 #include void main() char c; printf(“input a char: “); c=getchar(); if (c=0 ,选择结构程序举例,例4.14 输入三角形三边长,求三角形面积。 #include void main() float a,b,c,s,area; scanf(“%f,%f,%f“, ,选择结构程序举例,例4.15 输入a、b、c三个整数,输出最大数和最小数。 void main() int a,b,c,max,min; printf(“input three numbers: “); scanf(“%d,%d,%d“, ,课堂练习,1以下程序的运行结果是( )。 main( ) int n=5; if(n+=6) printf(“%dn“, n); else printf(“%dn“, +n); 2对于整型变量a,赋值语句 a=(a%3=0?1:0); 与( )语句不等价。 (A) if (a%3=0) a=1; else a=0; (B) if (a%3!=0) a=0; else a=1; (C) if (a%3) a=0; else a=1; (D) if (a%3) a=1; else a=0;,课堂练习,3以下程序的运行结果是( )。 main() int n=c; switch(n+) default: printf(“error “); break; case a: case b: printf(“good “); break; case c: printf(“pass “); case d: printf(“warn “); ,循环结构,在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。 特点:当给定的条件成立时, 反复执行某个程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体, 它由C的语句构成。 C语言提供了3种循环结构: while语句; do-while语句; for语句,4.4.1用while语句实现循环,while语句用来实现“当型”循环结构。 一般形式: while (表达式) 语句 当表达式为非0值时,执行while语句中的内嵌语句。 其特点是:先判断表达式,后执行语句。,(1) 与 if 的区别, if 只一次, while反复判断, 反复执行; (2) while 语句中通常有改变表达式的值的语句。,用while语句实现循环,例4.18 计算1+2+100。 main() int i=1, s=0; while ( i=100) s+=i; i+; printf(“%d, %d“, i, s); getch(); ,1.如果缺少i+这一行会出现什么情况? 2.若计算:n!该程序应如何修改?,例4.19 根据公式 计算的值。,#include void main() int i=1, n; double pi=0; printf(“Input an integer:n“); scanf(“%d“, ,用while语句实现循环,例4.21 猴子吃桃问题:猴子摘下了一堆桃子,第一天吃总数的一半多一个,第二天吃剩下的一半多一个,以后每天都吃前一天剩下的一半多一个,到第十天想再吃时剩一个,求猴子摘了多少个桃子?,算法分析: 设第 i 天未吃前有 x i 个桃子, 由题意得: x1/2-1=x2 x2/2-1=x3 x9/2-1=x10 已知x10=1, 我们有: x10=1 xn-1=(xn+1)*2,void main( ) int k,x1,x2; k=1; x2=1; while(k=9) x1=(x2+1)*2; x2=x1; k+; printf(“Total number=%dn“,x1); ,用while语句实现循环,补充1. 统计从键盘输入的字符个数。(以回车结束),补充2. 从键盘输入一个整数(至少大于9), 求最高位的数字.,#include main( ) int count=0; while (getchar() !=n) count+; printf(“count=%d“,count); 这种结构的循环次数是不确定的。,while (d9) d=d/10; /* 反复执行d=d/10 */ printf(“最高位是%d“,d); 也可写成: while (d/=10)9); /* 空循环体,反复执行d=d/10 */ printf(“最高位是%d“,d);,4.4.2用do-while实现循环,do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式: do 循环体语句 while (表达式);,执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。,用do-while实现循环,用do-while计算 : 1+2+100。 main() int i=1, s=0; do s=s+i; i+; while ( i=100); printf(“%d, %d“, i, s); getch(); ,计算:1-3+5-7+101 main() int i=1,s=0; int s=1,t=1; do s=s+t*i; i=i+2 t=-t; while(i=101); printf(“%dt“,s); ,用do-while实现循环,例4.22 利用格里高公式: 求,直到最后一项的值小于10-6。 void main() int s=1; float n=1.0, t=1, pi=0; do pi=pi+t; n=n+2; /*分母每循环一次增加2*/ s=-s; /*单项的正负号交替变化*/ t=s/n; /*下一项的值*/ while (fabs (t)1e-6); pi=pi*4; printf(“pi=%10.6fn“, pi); ,while和dowhile循环的比较,上述程序的功能是什么? 比较:输入5和11时两个程序的输出结果如何?,#include void main( ) int i,sum=0; scanf(“%d“, ,#include void main( ) int i,sum=0; scanf(“%d“, ,当型循环最少执行次数是多少? 直到型循环,最少执行次数是多少?,4.4.3用for语句实现循环,C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。 一般形式: for(表达式1;表达式2;表达式3) 循环体 也可写作: for(循环变量赋初值;循环条件;循环变量增值)循环体,for语句等价于如下的while循环形式: 表达式1; while (表达式2) 语句 表达式3; ,用for语句实现循环,for语句的执行过程: (1) 先求解表达式1。 (2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。 (5) 循环结束,执行for语句下面的一个语句,用for循环计算 : 1+2+100。 main( ) int i, s=0; for (i=1; i=100; i+) /* 注意括号后没有分号 */ s=s+i; /* 求和: 1+2+3+100 */ printf(“%d“, s); ,变量i用于控制循环次数, 我们称其为循环控制变量。,1. 最后i的值是多少? 2. 从1加到10000或更多呢?,用for语句实现循环,说明:,表达式1,表达式2和表达式3之间必须用分号隔开,但表达式3后面不能加分号。 循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。 循环体有可能一次也不执行。 循环体可以为空。 表达式1和表达式3都可以为逗号表达式。(例) 表达式1,表达式2和表达式3都可省略,但不鼓励省略表达式2和表达式3。(例:省略表达式1) for语句循环与while循环可以互相转换,但for循环的结构更简洁。,for语句的省略形式,例(1): i=1; for ( ; i=1000; i+) sum=sum+i ;,例(2): for (i=1; i=1000; ) sum=sum+i ; i+; ,例(3): for (i=1; ;i+) if (i1000) break ;sum=sum+i ;,1)表达式1可省略,但分号不能省,在for语句前为变量赋初值; 2)表达式3也可省略,但应把其放入循环体内,否则for无法正常结束; 3)表达式2省略后,for语句将无限循环下去。可在循环体内加退出循环的语句,for语句的省略形式,4)表达式1和表达式3可以是一个简单的表达式,也可以是一个逗号表达式,表达式1和表达式3也可以是与循环无关的任意表达式; 5)三个表达式全省略,无终止执行循环体,分号不能省; 6)把循环体内容放到表达式3,循环体为空语句。尽量避免此写法,例(4): i=1,sum=0; for (p=0 ; i=100;p+=1) sum=sum+i ;i+;,例(6): for (i=1, sum=0; i1000; sum=sum+i, i+) ;,例(5): i=1,sum=0; for (; ; ) sum=sum+i ; i+; if (i100) break; ,用for语句实现循环,例4.25 求1!+2!+10!的值。 void main() int i, n=10; long s, t; for(i=1, t=1, s=0; i=n; i+) t*=i; /*t为上一个数i-1的阶乘值,再乘以i,即i!=(i-1)!*i*/ s+=t; /*累加i!*/ printf (“s=%ldn“, s); ,用for语句实现循环,例4.27 编程输出“斐波那契数列”的前20项。 “斐波那契数列”是意大利中世纪数学家列昂纳多斐波那契以兔子繁殖为例子而引入的,故又称为“兔子数列”。 main() int i, x1=1, x2=1; for(i=1; i=10; i+) /*每次生成并输出两项,所以循环10次*/ printf(“%10d %10d “, x1, x2); if(i%2=0) printf(“n“); /*当i为偶数时换行,即每四个换行*/ x1=x1+x2; x2=x2+x1; ,用for语句实现循环,最简单的写法: main() int i, j, k=10000; for (i=1, j=0; i=k; i=i+j, j=i-j) printf(“ %d“,i ); 这里: i 表示fibonacci(n) i=i+j; 即 第n项=第n-1项+第n-2项 j=i-j; 即 第n-1项=第n项-第n-2项 使i存放当前项, j存放前一项,程序运行结果为: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,4.4.4 continue语句和break语句,1. break语句 (1)在while、 for、 dowhile语句的循环体或switch语句的语句组中, 使用break语句可使程序立即退出该结构。故有中断语句之称。 其语法格式如下: break; (2)功能:用在循环语句或switch语句中,使得跳出循环体或分支,提前结束循环或分支。,continue语句和break语句,#include void main() int i; for (i=1 ; ; i+) if (!(512-i*15)%13)break; printf(“%d+%d=512n“, i*15, 512-i*15); ,例4.28 将数字512表示成两个数的和,这两个数分别为15和13的倍数。,运行结果: 135+377=512,continue语句和break语句,说明 break只能终止并跳出最近一层的循环结构。 break不能用于循环语句和switch语句之外的任何其它语句之中。 在循环语句中,break总是与选择语句配合使用。,main() int i, s; s=0; for (i=1;i5) break; printf(“%dn“, s); ,运行结果: 1 3,continue语句和break语句,2. continue语句 一般形式: continue; 功能:用在循环语句中,使得结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。 补充例题: for (i=1; i=10; i+) if ( i%2=0 ) continue; printf(“%d”, i); 该程序的功能是:只打印出单数,continue语句和break语句,说明: continue只能终止本次循环,而不是终止整个循环的执行。 continue不能用于循环语句之外的任何其它语句之中. continue总是与选择语句配合使用。,/例4.29 #include void main( ) int i,n=0; for(i=100;i=200;i+) if(i%7!=0) ,例4.29 输出100200之间所有能被7或9整除的数。,continue语句和break语句,补充例:计算输入的10个整数中正数的个数及正数平均值。 main() int i,n,a; float s=0.0; printf(“请输入10个整数:n“); for (n=0,i=0;i0) 下两句要加 */ s+=a; n+; printf(“共有%d个正数.其平均值为%f。n“,n,s/n); ,3. continue和break的区别: continue语句只是结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断条件是否成立。,continue语句和break语句,main() int i, a=0, b=0, c=0, d=0; for (i=1;i=4;i+) switch(i) case 1 : a=1; continue; case 2 : b=2; case 3 : c=3; break; case 4 : d=4; printf(“%d%d%d%dn“, a, b, c, d); ,main() int i, s; s=0; for (i=1;i5) break; printf(“%dn“, s); ,continue语句和break语句,main() int k=4,n=0; clrscr(); for (;nk;) n+; if(n%3!=0) break; k-; printf(“%d,%dn“, k,n); ,运行结果: 4, 1,将break改为continue 运行结果: 3, 3,4.4.5循环的嵌套,循环的嵌套:一个循环体内又包含另一个完整的循环结构。 多层循环:内嵌的循环中还可以嵌套循环。 三种循环(while循环、do-while循环和for循环)可以互相嵌套,层数不限。循环嵌套形式举例:,(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( );,循环的嵌套,(4) while( ) (5) for(;) (6) do do while( ) for(;) while( ) while( ),外层循环可包含两个以上内循环,但不能相互交叉。 嵌套循环的执行流程 例:for(i=1; i=n; i+) for(j=1; j=5; j+) s=i*j;,例4.30 在屏幕上输出如下图形:,main() int i, j, k; for(i=8; i=1; i-) /*总共要输出8行星号*/ for(j=1; j=8-i; j+) printf(“ “); /*控制每行星号前面显示的空格*/ for(k=1; k=2*i-1; k+) printf(“*“); /*控制每行星号的个数*/ printf(“n“); /*控制输出每行星号后换行*/ ,循环的嵌套,例4.31 改写例4.25 求1!+2!+10!的程序,用嵌套的循环结构来实现。,main() int i, n=10, j; long s=0, t; for(i=1; i=n; i+) for(t=1, j=1; j=i; j+) t*=j; /*每次循环都重新计算i!*/ s+=t; /*累加i!*/ printf (“s=%ldn“,s); ,程序举例穷举法,例4.32 三位自方幂数又称水仙花数,用穷举法求出所有水仙花数。如:13+53+33=153,main() int i,j,k,m1,m2; printf(“narcissus numbers are: “); for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) m1=i*100+j*10+k; m2=i*i*i+j*j*j+k*k*k; if (m1=m2) printf(“%4d“,m1); printf(“n“); ,程序举例数的分离,例4.33 编写一个程序,输入132767之间的整数,把这个整数显示为一系列数字,每组数字都是用两个空格分开。例如,整数1234应该显示为:1 2 3 4。,main() int i,num,counter,temp; counter=1; printf(“Enter an integer: “); scanf(“%d“, ,程序举例方程求根,例4.34 用二分法求非线性方程f(x)=x3+1.1x2+0.9x-1.4=0的根。,void main() float x, x1, x2, y1, y2, y; do printf(“Input x1,x2: n“); scanf(“%f,%f“, ,程序举例多项式计算,例4.35 编程计算多项式 的值。,void main() float sum, term, x; int n, k, sign; printf(“Input n, x: n“); scanf(“%d,%f“, ,程序举例数的判别,例4.36 输入一个数,判断这个数是否为素数。,void main() int m, i, k; printf(“Enter an integer:n“); scanf(“%d“, ,程序举例辗转相除法,例4.37 用辗转相除法求两个数的最大公约数和最小公倍数。,void main() int a,b,m,n,temp,c,d; printf(“Please enter 2 integers n,m:n“); scanf(“%d,%d“, ,程序举例统计问题,例4.38 输入十个数,求出最大数、最小数和奇数、偶数个数。,void main() int i,max,min,oldn=0,even=0,x; for(i=1; imax) max=x; if (xmin) min=x; printf(“max=%d,mix=%dn“,max,min); printf(“There are %d even numbers.n“,even); printf(“There are %d old numbers.n“,oldn); ,程序举例面积问题,例如:求曲线 y2=x 在3=x=15间围成如右图的阴影部分面积.,曲线方程可转化为:,而求阴影部分的面积其实就是求下式积分的问题:,也就是接近将区域微分为足够多的小矩形的面积和。当然,一种方法就是从数学上求出它的积分;另一种可与C语言来描述:,程序举例面积问题,#include main() double x,area=0.0; for (x=3; x15; x=x+0.01) area=area+sqrt(x)*0.01; printf(“area is:%fn“,area); getch(); ,课 堂 练 习,1以下程序的运行结果是( )。 void main() int sum = 0, item = 0; while (item =6) break; printf(“%dn“,sum); ,2以下程序的运行结果是( )。 void main() int sum = 0, item = 0; while (item 5) item+; if (item = 2) continue; sum += item; printf(“%dn“,sum); ,牛顿迭代法,方程f(x)=0,若满足下列三个条件可使用牛顿迭代法: f(x)在区间a,b上的f (x)及f (x) 都存在 f(a)f(b)0. 则可以使用牛顿迭代公式 f(xn-1) xn = xn-1 f (xn-1),牛顿迭代法,#include main() float x,x0,f,f1; x=2; do x0=x; f=x0*x0*x0+4*x0*x0-10; f1=3*x0*x0+8*x0; x=x0-f/f1; while (fabs(x-x0)=1e-6); printf(“the root is: %5.2fn“,x); ,作 业,编写程序计算:,2. P121 4.22 3. P122 4.25,课后习题,4.22 “鸡兔同笼”是一个中国古算题,最早出现在孙子算经中。笼中有若干只鸡和兔子,它们共有88个头,244只脚,问鸡和兔各有多少只? 4.25求1-999之间的所有同构数。一个数出现在它的平方数的右端,这个数称为同构数。如: 5出现在25右侧 5是同构数 25出现在625右侧 25也是同构数,课后习题,补充下面程序,该程序的功能是求满足以下条件的最大的n。 1+2+3+。+n1000 void main() int n,s; /*/ /*/ while (s=1000) n+; s=s+/*/ /*/; printf(“n=%dn“,n); getch(); ,
展开阅读全文