1、Page 1,第4章 程序控制结构,4.1 C语言的执行语句 4.2 顺序结构 4.3 选择结构 4.4 循环结构,Page 2,4.1 C语言的执行语句,C程序组成,Page 3,4.1 C语言的执行语句,C语句的分类: 表达式语句 空语句 复合语句 控制语句,Page 4,表达式语句,赋值语句:变量 = 表达式 ;功能:将“=”右侧表达式的值赋给左侧变量的值。 函数调用语句;例如 putchar(ch);,Page 5,空语句和复合语句,空语句:仅由一个分号构成的语句,在执行时不产生任何指令。 复合语句:用一对花括号 将多个语句括起来构成一个整体。注意:1)复合语句中的每个语句必须以分号;
2、结束但右花括号后不能有分号2)复合语句中可以有自己的数据说明,Page 6,控制语句,条件选择语句:if 开关分支语句:switch 当循环语句:while 直到循环语句:do while 计数循环语句:for 中止本次循环语句:continue 中止整个循环语句:break 函数返回语句:return 无条件转移语句:goto,Page 7,顺序结构,顺序结构程序:由两个或两个以上的语句组成,先执行 A 操作,然后再执行 B 操作。传统流程图 N-S流程图,Page 8,顺序结构程序设计举例,例4.1 输入任意两个整数,求它们的和及平均值。要求平均值取两位小数输出。 #include voi
3、d main() int num1,num2;float sum,aver;printf(“Please input two integers: n“);scanf(“%d,%d“,Page 9,顺序结构程序设计举例,例4.2 给定一个三位正整数,分别输出它的个位数、十位数和百位数。 #include void main() int m,m0,m1,m2;printf(“Input a number(100999): “);scanf(“%d“,Page 10,顺序结构程序设计举例,例4.4 求方程ax2+bx+c=0的根。a、b、c由键盘输入,a0且b2-4ac0。 #include #in
4、clude void main() float a,b,c,d,x1,x2;printf(“Input a,b,c: “);scanf(“%f,%f,%f“,Page 11,4.3 选择结构,C语言的选择控制结构语句有: if语句和switch语句 if 语句是用来判断所给定的条件是否满足,根据判定的结果(真或假)决定执行给定的某种操作之一。,Page 12,if 语句的形式1单分支结构,格式: if (表达式) 语句执行过程:,Page 13,if语句举例1,例 输入两个实数,按升序输出两个实数。 解法一: #include void main( ) float a,b,t;scanf(“%
5、f%f“, ,单边条件(条件判断两次),Page 14,if 语句的形式2双分支结构,格式: if (表达式) 语句1else 语句2 执行过程:,Page 15,if语句举例1,例 输入两个实数,按升序输出两个实数。 解法二: #include void main ( ) float a,b;scanf(“%f%f“, ,双边条件(条件判断一次),Page 16,if语句举例1,解法三: #include void main( ) float a,b,t;scanf(“%f%f“, ,单边条件(条件判断一次),3个语句用花括号括起来构成1个复合语句,若不使用复合语句, 则可用t=a, a=b
6、, b=t;,Page 17,if 语句的形式3多分支结构,格式: if (表达式1) 语句1else if (表达式2) 语句2else if (表达式3) 语句3 : : else if (表达式n) 语句n else 语句n+1,入口,出口,Page 18,if语句举例2,例 根据所输入的x之值,求 解法一:用多分支if 语句 #include void main ( ) int x,y;scanf(“%d“, ,1 (x0) y= 0 (x=0)-1 (x0),Page 19,if语句举例2,解法二:用多个单分支if 语句 #include void main ( ) int x,y;
7、scanf(“%d“, ,Page 20,if语句举例2,解法三:用双分支if 语句的嵌套 #include void main ( ) int x,y;scanf(“%d“, ,这是一个嵌套结构,Page 21,if 语句的嵌套,在if 语句中又包含一个或多个if 语句,称为if 语句的嵌套 一般形式:if (条件1 ) if (条件2 ) 语句1 else 语句2 elseif (条件3) 语句3 else 语句4 if 与 else 的配对关系:从最内层开始, else 总是与它上面最近的且尚未配对的 if 配对。,为了使逻辑关系清晰,建议采用“分层缩进书写格式”。,Page 22,在内
8、嵌if语句中要注意配对关系,结合右图,观察以下程序: #include void main ( ) int x,y;scanf(“%d“, 输入 0输出结果:x=0,y= -1,真正的配对,结果错误,Page 23,在内嵌if语句中要注意配对关系,在内嵌if语句中加花括号改变配对关系 #include void main ( ) int x,y;scanf(“%d“, 结论:如果内层if 语句为单边结构,要加花括号,花括号改变配对关系,结果正确,正确配对,Page 24,条件运算符的应用,例:输入一个字符,判断它是否大写字母,若是将其转换为小写;否则原样输出。 #include void ma
9、in( ) char ch ;scanf(“%c“,printf (“%cn“,ch) ,Page 25,switch 语句(多分支选择语句,开关语句),switch 语句的格式: switch (表达式) case 常量表达式1 : 语句1; break; case 常量表达式2 : 语句2; break;case 常量表达式3 : 语句3; break; case 常量表达式n : 语句n;break; default : 语句n+1 执行过程: 先计算switch后面表达式的值,如果与某个case后的常量值相等,则执行其后的语句;若所有case中的常量值都不能与之匹配,则执行defaul
10、t后的语句n+1。,根据此表达式的值找入口,一般为常量,TC要求为int或char型,Page 26,switch 语句流程图(无break语句),注意: 执行完入口语句后,则自动转到下一个case后面的语句执行;,Page 27,switch 语句流程图(有break语句),注意: 如果语句中有break;,则执行完一个入口语句后跳出switch选择结构。,Page 28,switch语句举例,例:输入成绩等级,打印出百分制分数段。 #include void main( ) char c;printf(“Please enter a charn“);c=getchar( );c=(c=a
11、,注意:case后面应为字符常量A、B等,不能为变量A、B等。,Page 29,switch语句举例(无break语句的效果),例4.9:输入成绩等级,打印出百分制分数段。 #include void main( ) char c;printf(“Please enter a charn“);c=getchar( );c=(c=a ,去掉break语句,程序运行后,从键盘上输入b,则程序运行的顺序和结果如下:,8089 7079 6069 60 error,Page 30,switch 语句使用说明,各个分支中如果没有break语句,则执行了相应的操作后,会自动转到下一个case后面的语句执行
12、。 case后面的常量值不能相同。 各个分支中允许有多个语句,可以不用 括起来。 各个case和default分支的顺序可以改变,但default总是最后考虑的入口。如果各个分支中均有break语句,各个分支的出现次序不影响执行结果。 可以使多个case共用同一组执行语句。,Page 31,例4.10 输入百分制成绩,要求输出相应的五级制成绩。百分制成绩与五级制成绩之间的转换标准为:90分以上为“A”,80-89分为“B”,70-79分为“C”,60-69分为“D”,60分以下为“E”。 #include void main ( ) int score;scanf(“%d“, ,switch
13、语句举例,Page 32,上题也可用多分支if语句实现,见课本P71例4.7。 #include void main ( ) int score;scanf(“%d“, ,Page 33,选择结构程序设计举例,判断字母、数字 分段函数值的计算 三个数中求最大数 求三角形面积 判断闰年 计算器程序 求一元二次方程的根 对三个数进行升序排序,Page 34,例1:从键盘上输入一个字符判断是数字、字母或其它字符。课本P81 例4.13#include void main( ) char c;c=getchar( ) ;if ( c=A ,Page 35,例2:计算分段函数。课本P73 例4.8 #i
14、nclude void main ( ) float x,y;scanf(“%f“, ,Page 36,例3: 从三个数中找出最大的数。 思路一: 先将a、b进行比较,将二者之中的大数放入变量a中,小数放入b中,这样a中就是a、b中的大数; 再将变量a与变量c进行比较,将a,c中的大数放到a中,小数放到c中,这样,变量a中存放的就一定是三个数中的最大数。 思路二: 先假设a为最大数max; 将b与max进行比较,若bmax,则max改为b; 将c与max进行比较,若cmax,则max改为c. 于是变量max中存放的就是三个数中的最大数。,Page 37,例:对三个数进行升序排序 思路: 1.先
15、将a、b进行比较,将二者之中的较小者放入变量a中,较大者放入b中,这样a中就是a、b中较小数; 2.再将变量a与变量c进行比较,将a、c中的较小者放到a中,较大者放到c中,这样,变量a中存放的就一定是三个数中的最小数; 3.最后将b和c进行比较,将二者之中较小者放入变量b中,较大者放入变量c中,就完成了对三个数的升序排序。 也就是说,对三个数进行排序,需要进行3次比较。,Page 38,#include void main( ) int a,b,c,t;scanf(“%d,%d,%d“, ,Page 39,解1)#include void main( ) int a,b,c,t; scanf(
16、“%d,%d,%d“, ,解2) #include void main( ) int a,b,c,max; scanf(“%d,%d,%d“, ,Page 40,例4 输入三角形三边长,求三角形面积。课本P82 例4.14 #include #include void main() float a,b,c,s,area;scanf(“%f,%f,%f“, ,Page 41,例5:判断闰年算法,闰年的条件:能被4整除,但不能被100整除;能被100整除,又能被400整除。,否,输出year不是闰年,是,输出year是闰年,输出year不是闰年,输出year是闰年,是,是,否,否,Page 42,
17、解1)用多边if语句实现#include void main() int year; scanf(“%d“, ,Page 43,解2)多边if语句+用变量leap标识是否闰年#include void main( ) int year,leap;scanf(“%d“, ,Page 44,解3)直接用复合条件判断闰年#include void main( ) int year,leap; scanf(“%d“, ,Page 45,例6 计算器程序。用户输入运算数和四则运算符,输出运算结果。当输入运算符不是“+”、“-”、“*”或“/”时提示出错,当输入除数为0时也提示出错。课本P80 例4.12
18、 #include #include void main() float a,b; char c;scanf(“%f%c%f“, ,Page 46,例7 求一元二次方程的根算法。课本P85 例4.17,Page 47,#include void main( ) float a,b,c,disc,x1,x2,real,imag; scanf(“%f,%f,%f“, ,表示a等于0,表示disc等于0,注意a= =0 这种表示不够准确!,Page 48,4.4 循环结构,C语言的循环结构共有下列三种: while 语句 do-while 语句 for 语句,Page 49,4.4 循环结构,举例
19、求1100之间所有整数的和,当型循环,直到型循环,Page 50,while 语句,格式: while (表达式) 语句,注:循环体可能一次也不执行。,Page 51,while 语句,例4.18 用while语句求1100之间整数和 #include void main( ) int i,sum;sum=0; i=1;while( i=100) sum=sum+i;i+; printf(“i=%d,sum=%dn“,i,sum); ,语句sum=sum+i;和语句i+;能否改变位置?程序的哪些地方应作相应的改动?,如果在while语句之前对变量sum赋初值为1,是否可以?程序的哪些地方应作相
20、应的改动?,循环,Page 52,while 语句,例4.19 根据公式计算圆周率的值。 部分程序: int i=1,n; double pi; scanf(“%d“,Page 53,do-while 语句,格式:do 语句 while (表达式) ;,注:循环体至少执行一次。,用do-while语句实现直到循环,Page 54,do-while 语句,例4.18 用do-while语句求100以内正整数的和 #include void main( ) int i,sum; sum=0; i=1; do sum=sum+i; i+; while( i=100 ); printf(“i=%d,s
21、um=%dn“,i,sum); ,循环,分号不可缺少,Page 55,do-while 语句,例4.22 利用公式:求,直到最后一项的值小于10-6。 int s; float n,t,pi; pi=0; t=1; /*序列的第一项*/ n=1.0; /*分母从1开始*/ s=1; /*变量s表示符号*/ 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);,Page 56,for 语句,格式: for
22、(表达式1;表达式2;表达式3) 语句,实质是当型循环!,Page 57,for 语句,在for语句中,通常表达式1用来为循环变量赋初值;表达式2一般用来设置循环条件;表达式3一般用于循环变量增值。 for 语句的最常用格式: for (循环变量赋初值;循环条件;循环变量增值) 语句,Page 58,for 语句,例4.18 用for语句求1100之间的整数之和 #include void main( ) int i,sum; sum=0;for ( i=1; i=100; i+ )sum=sum+i; printf(“i=%d,sum=%dn“,i,sum);,Page 59,for 语句,
23、例4.26 统计从键盘输入一行字符的个数,以回车结束。 #include void main() int n;char c;printf(“Input a string: n“);for(n=0;(c=getchar()!=n;n+);printf(“%d“,n); ,Page 60,for 语句,例4.27 编程输出“斐波那契数列”的前20项。 #include void main() int i,x1=1,x2=1;for(i=1;i=10;i+) printf(“%10d %10d “,x1,x2);if(i%2=0) printf(“n“); x1=x1+x2;x2=x2+x1; ,P
24、age 61,for 语句的灵活使用,循环之前的赋初值语句可以放在表达式1中,中间用逗号间隔。 表达式3可缺省(但其前的分号不能省略),将表达式3作为语句放到循环体的末尾。 循环体中的内容可以放在表达式3中,但要在for语句圆括号的后面加一个分号。 表达式1、表达式3可同时缺省,但表达式2前后的分号都不能省略。,Page 62,for 语句的灵活使用,表达式2可缺省,放在循环体之中,但for语句中的两个分号都不能省略;且判断与退出放在循环体中。 int i,sum; sum=0; for ( i=1; ; i+) if ( i=100 ) sum=sum+i; else break; /*退出
25、循环*/printf(“i=%d,sum=%dn“,i,sum);,Page 63,几种循环的比较,1)while循环、do while循环、for循环都可以用来处理同一个问题,一般可以互相代替。 2)在while和do-while循环的循环体中,应包括使循环趋于结束的语句。 3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。 4)三种循环均可用break语句跳出循环,用continue语句结束本轮循环。 5)for语句功能最强。,Page 64,break语句和continue语句,b
26、reak 语句 格式: break; 功能: 提前结束循环,从循环体中无条件跳转到循环语句后面执行。 可用于switch语句和循环结构中。 continue语句 格式: continue; 功能: 结束本次循环,即在本次循环中,不再执行循环体中continue后面的语句。 只能用于循环结构。,Page 65,break语句的使用,例4.28 将数字512表示成两个数的和,这两个数分别为15和13的倍数。#include void main() int i;for(i=1;i+)if(!(512-i*15)%13) break;printf(“%d+%d=512n“,i*15,512-i*15)
27、;,!(512-i*15)%13) 等价于(512-i*15)%13=0,Page 66,continue语句的使用,例4.29 输出100200之间所有能够被7或9整除的数。#include void main( ) int i,n=0;for(i=100;i=200;i+) if(i%7!=0) /*当n被5整除时换行,即一行输出5个数*/,Page 67,break与continue的区别,分析以下两个程序,程序一: #include void main() int i;for(i=1;i=10;i+) if (i%3=0) continue;printf(“%3d“,i);printf
28、 (“n“); 结果输出 1 2 4 5 7 8 10,Page 68,break与continue的区别,程序二: #include void main() int i;for(i=1;i=10;i+) if (i%3=0) break;printf(“%3d“,i);printf (“n“); 结果输出 1 2,Page 69,循环嵌套,一个循环体中又包含了另一个完整的循环结构,叫做循环的嵌套。 三种循环结构可以互相嵌套。 循环嵌套的执行过程是:外循环执行一次,内循环执行一个全过程。,Page 70,举例:输出一个图形,* * * *,/*外循环控制输出图形的行数 */,#include
29、void main( ) int i, j;for( i=1 ; i=4 ; i+ ) for( j=1; j=i ; j+ ) printf(“*“); printf(“n“); ,Page 71,举例:输出一个图形,/*外循环控制输出的行数 */,#include void main( ) int i, j, k;for( i=1 ; i=4 ; i+ ) for( j=1; j=i ; j+ )printf(“ “); for( k=1; k=3; k+)printf(“*“);printf(“n“); ,* * * *,Page 72,举例:输出一个图形,#include void m
30、ain( ) int i, j, k;for( i=1 ; i=4 ; i+ ) for( j=1; j=4-i ; j+ )printf(“ “);for( k=1; k=2*i-1; k+) printf(“*“); printf(“n“); ,* * * *,Page 73,举例,例4.31 计算s=1!+2!+3!+ +10! 解1:#include void main( ) int i,n; float s,t;s=0; t=1;for ( i=1; i=10; i+) t=t*i; s+=t; printf (”s=%.0fn”,s); ,t=1; for (j=1;j=i;j+)
31、 t=t*j;,解2:用双重循环实现 外循环计算累加 内循环求i!,Page 74,循环结构程序设计举例,举例:累加、连乘算法 统计个数 数的分离 穷举法 判断一个数是否为素数 辗转相除法求最大公约数 方程求根 求定积分,Page 75,举例:累加、连乘算法,从键盘上输入10个整数,求总和及平均值,解1:#include void main( ) int x, i;float sum=0, aver;for ( i=1;i=10; i+) scanf(“%d“, ,Page 76,举例:累加、连乘算法,解2:#include #define N 10 /*数的个数用符号常量表示*/void m
32、ain( ) int x, i; float sum=0, aver;for ( i=1; ; i+) scanf(“%d“, ,i=N,N,Page 77,举例:累加、连乘算法,从键盘上输入n个整数,求总和及平均值,n由键盘输入 #include void main( ) int x, i, n; float sum=0, aver;for ( i=1; ; i+) scanf(“%d“,scanf(“%d“,i=n,n,Page 78,举例:累加、连乘算法,从键盘上输入若干个整数,求总和及平均值,输入-1结束 #include void main( ) int x, i=0; float
33、sum=0, aver;while ( )sum+=x;i+;if (i0) aver=sum/i ; printf(“sum=% .0f,aver=%.2fn“,sum,aver);,scanf(“%d“,scanf(“%d“, ,或 for (; x!=-1;),x!=-1,若i=0说明没有输入,无需进行操作,Page 79,举例:累加、连乘算法,求若干个整数的总和,要求总和不大于1000 #include void main( ) int x,sum=0; while(sum=1000) scanf(“%d“,sum-x,Page 80,举例:累加、连乘算法,例4.35 计算多项式的值。
34、float sum,term,x; int n,k,sign;scanf(“%d,%f“,Page 81,举例,例4.21猴子吃桃问题:猴子摘下了一堆桃子,第一天吃总数的一半多一个,第二天吃剩下的一半多一个,以后每天都吃前一天剩下的一半多一个,到第十天想再吃时剩一个,求第一天共有多少个桃子? #include void main( ) int k,x;k=1;x=1;while(k=9) x=(x+1)*2; k+; printf(“Total number=%dn“,x1); ,Page 82,递推法总结,以上的算法采用了递推的方法,即在一个数的序列中,后一项值是前一项或前几项的基础上推算出
35、来的。 使用该方法的两个注意事项:1)确定初始条件或边界条件;2)找出递推公式。 典型的例子包括求斐波那契数列,牛顿迭代法求方程的根等,Page 83,统计个数,例4.38 输入十个数,求出最小数和奇数、偶数个数。 int i, min,odd=0,eve=0,x; for(i=1;i=10;i+) printf(“Please input integer %d:“,i);scanf(“%d“,Page 84,数的分离,例4.33 输入132767之间的整数,把这个整数显示为一系列数字,每组数字都是用两个空格分开。例如,整数1234应该显示为:1 2 3 4。 int i,num,counte
36、r,temp; counter=1; printf(“Enter an integer: n“); scanf(“%d“, ,Page 85,数的分离,续上页 while(counter) temp=1;for(i=1;i=counter-1;i+)temp*=10;printf(“%3d“,num/temp);num%=temp;counter-; printf(“n“); ,Page 86,数的分离,求出水仙花数,水仙花数是指一个3位数的个位数、十位数、百位数之和正好等于该数本身。,i =a3+b3+c3,Page 87,数的分离,void main() int i,a,b,c; for(
37、i=100;i=999;i+) c=i%10; /*取出个位数*/ a=i/100; /*取出百位数*/b=i/10%10; /*取出十位数*/ if(i=a*a*a+b*b*b+c*c*c) printf(“%dt”,i); ,Page 88,用穷举法解决问题,百钱买百鸡问题(出自算经,古代数学家张丘建):鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何。 变量cocks: 存放鸡翁数量,取值020 变量hens: 存放鸡母数量,取值033 变量chicks:存放鸡雏数量,取值0100 有下列方程: cocks+hens+chicks=100 5*cocks+
38、3*hens+chicks/3=100,Page 89,百钱买百鸡问题N-S图,Page 90,百钱买百鸡问题的程序1,#include void main( ) int cocks,hens,chicks;for (cocks=0 ; cocks=20 ; cocks+ ) for (hens=0 ; hens=33 ;hens+ )for (chicks=0 ; chicks=100 ; chicks+=3 )if (cocks+hens+chicks =100,Page 91,百钱买百鸡问题的程序2,仅用两重循环实现: #include void main( ) int cocks,he
39、ns,chicks;for (cocks=0 ; cocks=20 ; cocks+ ) for (hens=0 ; hens=33 ;hens+ )chicks=100- cocks - hens ;if (chicks%3=0 ,Page 92,判断一个数是否为素数,例 判断整数m是否为素数 素数即为质数,如果一个整数只能被1或者它本身整除,这个数就称为是素数。 判断素数的思路是: 让m被2sqrt(m)之间所有的整数整除,如果m能被2sqrt(m)之中的任何一个整数整除,则m一定不是素数;如果在2sqrt(m)之间不存在能被m整除的整数,则m是素数。,Page 93,判断整数m是否为素数
40、算法N-S图,或者i=k+1,循环结束后根据 i的值来决定m是否为素数,Page 94,#include #include void main( ) int m,i,k;scanf(“%d“, ,for 语句有两个出口:i=k+1 和 break 不是结构化程序!,判断整数m是否为素数程序1,Page 95,判断整数m是否为素数程序2,#include #include void main( ) int m,i,k;scanf(“%d“, ,for 语句只有一个出口: ik| m%i=0 是结构化程序,Page 96,辗转相除法求最大公约数,求两个整数的最大公约数与最小公倍数。 用辗转相除法
41、求最大公约数,Page 97,辗转相除法求最大公约数,void main() int m,n,a,b,r;printf(“请输入2个整数”); scanf(“%d%d”,Page 98,举例 用二分法求一元方程的根,用二分法求非线性方程f(x)=x3+1.1x2+0.9x-1.4=0的根。 基本思路:取区间两端点x1和x2, (1)若f(x1)、f(x2)符号相同,则无解。(2)若f(x1)、f(x2)符号相反,则在(x1,x2)区间内有一实根; 取(x1,x2)的中点x,若f(x)=0,则x即为方程的根 若f(x1)、f(x)符号相反,则实根在(x1,x)区间内; 若f(x1)、f(x)符号
42、相同,则实根在(x,x2)区间内; 重复上述步骤,直到找到方程的根。,Page 99,举例 用二分法求一元方程的根,float x,x1,x2,y1,y2,y; do printf(“Input x1,x2: n“);scanf(“%f,%f“,Page 100,用牛顿迭代法求一元方程的根,用牛顿迭代法求方程2x3-4x2+3x-6=0的在1.5附近的根。 从导数的物理意义得出:因此: 令 =2x3-4x2+3x-6 =(2x-4)x+3)x-6 则 =6x2-8x+3 = (6x-8)x+3,Page 101,举例 用迭代法求一元方程的根,补充 用迭代法求方程2x3-4x2+3x-6=0的在
43、1.5附近的根。 基本思路: 将f(x)=0 改写成 x=g(x) 的形式 如 2x3-4x2+3x-6=0 则 x=(- 2x3+4x2 +6) /3将初值x0代入上式等号右边,求得x的第一次近似值x1,再由x1求得下一次近似值 直到前后两次求出的x的差的绝对值小于10-5,Page 102,用牛顿迭代法求一元方程的根N-S图,Page 103,求定积分,例4.39 用梯形法求定积分: 其中:f(x)=x2+4.8。 int i,n; float a=0,b=1.5,h,x,area=0,s=0; printf(“Please input n=“); scanf(“%d“,Page 104,
44、举例 译电码,译电码 密码转换规律:将字母A变成字母E,字母a变成e,即变成其后的第四个字母,字母W变成A,X变成B,Y变成C,Z变成D。非字母不变。,Page 105,译电码N-S图,Page 106,举例 人口及利率问题,人口基数、人口平均增长率、时间、总人口之间的关系。 存款本金、银行利率、存期、本金合计问题。 产值基数、产值增长率、时间、总产值问题。,Page 107,人口增长率求解问题,已知人口基数为x,人口平均增长率为r,求y年以后的人口总量z。 已知人口基数为x,人口平均增长率为r,求几年以后人口的总量达到z。,Page 108,人口增长率问题程序,已知人口基数为12亿,人口平均
45、增长率为r,求经过多少年后的人口数量超过16亿。 #include void main( ) int y; float x =12,r ; scanf( “%f “, ,Page 109,上机任务六,1)填空题:输入两个数,求它们的最大公约数和最小公倍数。 2)输入一个正整数,求它的各位数字之和。 3)编程输入若干个字符,回车结束输入,统计其中字母个数,数字个数,空格个数和其它字符的个数。 4)编程实现求从2开始100以内的所有素数。,Page 110,上机任务七,1. 编程实现求输入两个数,求它们的最大公约数和最小公倍数。 2. 课本P122页,习题4.23。编程实现百钱买百鸡问题,公鸡一,值钱五;母鸡一,值钱三;小鸡三,值钱一。百钱买百鸡,问公鸡、母鸡、小鸡各几只。(分别用三重循环和二重循环实现) 3. 编程实现打印右图1: 4. 将上题改为打印右图2:,* * * * * * * 图1,1 123 12345 1234567 12345 123 1 图2,