程序控制结构(Zhp).ppt

上传人:za****8 文档编号:14784706 上传时间:2020-07-30 格式:PPT 页数:123 大小:1.40MB
收藏 版权申诉 举报 下载
程序控制结构(Zhp).ppt_第1页
第1页 / 共123页
程序控制结构(Zhp).ppt_第2页
第2页 / 共123页
程序控制结构(Zhp).ppt_第3页
第3页 / 共123页
资源描述:

《程序控制结构(Zhp).ppt》由会员分享,可在线阅读,更多相关《程序控制结构(Zhp).ppt(123页珍藏版)》请在装配图网上搜索。

1、2020/7/30,1,第3章 程序控制结构,ed2k:/|file|%E8%89%B2%E6%88%92%20DVD%E6%9C%AA%E5%88%A0%E5%85%A8%E6%B8%85%E6%99%B0%E7%89%88.AVI|2021681152|05768D47B60034A21D11796F378FC9F2|/,2020/7/30,2,内容:,关系运算和逻辑运算 条件控制语句及条件表达式 多分支控制语句 循环语句for,while,dowhile 自增、自减运算 逗号运算符和逗号表达式 break和continue语句,重点:,选择结构程序设计 循环结构程序设计,2020/7/3

2、0,3,解决步骤图示:,需要选择结构描述,示例1:A,B两个整数,如果A大于B,则输出A,否则输出B。,2020/7/30,4,选择结构需要解决的两个问题,控制选择结构执行方向的条件表示 一般用关系表达式,逻辑表达式来描述条件 控制结构的结构描述,N,Y,2020/7/30,5,关系运算符 优先级,用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式,其值为0或1。,关系运算符和关系表达式,从左向右,结合性:,2020/7/30,6,示例: 8=4 其值为“假”,表达式的值为0。 50 其值为“真”,表达式的值为1。 思考:x=1与x=

3、1意义相同吗?,注意:关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。,2020/7/30,7,逻辑运算符和逻辑表达式,逻辑运算符 优先级,2020/7/30,8,真真假假 真 真 真假假真 假 真 假真真假 假 真 假假真真 假 假,a b! a! ba scanf(%d,%d,示例: 求两个整数中较大的数,int a , b , max,键盘输入a,b值,amax,maxb,1,0,bmax,输出max值,if (表达式) 语句,2020/7/30,17,#include int main(void)int a,b,max; scanf(%d,%d, ,示例: 求两个

4、整数中较大的数,int a , b , max,键盘输入a,b值,ab,1,0,amax,输出max值,if (表达式) 语句1 else 语句2,bmax,2020/7/30,18,if-else形式的执行流程,if-else 形式结构:if (表达式) 语句1; else 语句2;,2020/7/30,19,#include int main(void) int a,b,max; scanf(%d,%d, ,示例: 求两个整数中较大的数,可以通过条件表达式来完成赋值,max=ab?a:b;,2020/7/30,20,条件运算符 ?: 条件表达式的形式: 表达式1?表达式2:表达式3 计算过

5、程:先计算表达式1,若其值为非零,则结果为表达式2的值,否则就是表达式3的值。,条件运算符和条件表达式,2020/7/30,21,示例2:根据如下描述的算法,编程。,#include int main(void) float a,b ; scanf(%f,%f, ,必须用复合语句,定义变量,键盘输入两个实数,ab,1,0,a,b互换,依次输出a,b的值,2020/7/30,22,练习:阅读下列源程序,写出运行结果,#include int main(void) int a=4,b=3,c=3,t=0; if(a=c) t=a;a=c;c=t; printf(“%d %d %dn”,a,b,c)

6、; return 0; ,结果: 3 0 3,2020/7/30,23,示例3:求ax2+bx+c=0的实根(要求:a,b,c的值从键盘输入,a不等于0),#include #include void main( ) int a,b,c; float d,x1,x2; scanf(“%d%d%d”, ,思考:若改为求两个根,应如何修改源程序?,2020/7/30,24,-1 (x0) 请编写程序,输入一个x值,输出对应的y值。,if (x0) y=-1; else if (x=0) y=0; else y=1;,变量定义,由键盘输入x值,X0,1,0,y=-1,X=0,1,0,y=0,y=1,

7、输出x,y值,2020/7/30,25,else-if形式结构 : if (表达式1) 语句1; else if (表达式2) 语句2; else 语句n+1;,else-if形式的执行流程,2020/7/30,26,示例5:请仔细检查下列程序:,#include void main( ) intx,y; scanf(“%d”,x); if x1 y=x; else (1=x10) y=2x-1; y=3x-11; printf(“%d”,y); ,2020/7/30,27,在一个if语句中又包含了另 一个if语句,称为if语句的 嵌套。,一般形式为: if ( ) if ( ) 语句1; e

8、lse 语句2; else if ( ) 语句3; else 语句4;,C语言规定, else总是和它 上面离它最近 的if配对。,if 语句的嵌套,2020/7/30,28,程序段1,程序段2,在if子句中嵌套,在else子句中嵌套,if (x=0) if (x0) y=-1; else y=0; else y=1;,if (x0) y=-1; else if (x=0) y=0; else y=1;,-1 (x0) 请编写程序,输入一个x值,输出对应的y值。,2020/7/30,29,#include #include void main() /*已知三角形的三边,计算其面积*/ int

9、a,b,c; float s; double re; scanf(%d,%d,%d, ,示例7,2020/7/30,30,复习小结:,关系运算符和关系表达式、逻辑运算符和逻辑表达式; 条件表达式; if语句,if-else形式: if (表达式) 语句1; else 语句2;,if形式: if (表达式) 语句;,else-if形式 if (表达式1) 语句1; else if (表达式2) 语句2; else 语句n;,2020/7/30,31,示例8:从键盘输入一个整数放在a中,当输入的值为1时,显示A,输入2时显示B,输入3时显示C,当输入其他整数时显示D。,2020/7/30,32,多

10、分支控制语句(switch语句),switch语句是实现多分支 选择结构的另一个语句。,switch (表达式) case 常量表达式1:语句1;break; case 常量表达式n:语句n;break; default :语句n+1; ,switch语句的 基本格式,各常量表达式的值必须互不相同,且必须是整型或字符型。,2020/7/30,33,示例:阅读下列源程序,请写出运行结果,#include void main() int j; scanf ( “%d ” , ,输入1 结果 111 输入2 结果 ? 输入3 结果 ?,2020/7/30,34,示例:源程序:,#include vo

11、id main( ) int a; scanf(“%d”, ,2020/7/30,35,示例: 将1至7中的任意一个数字转化成对应的英文星期几的前三个字母,如1转化为Mon,7转化为Sun等。,#include void main() int a; printf(“请输入整数: ); scanf(%d,/*输入的不是0至7的整数时执行*/ ,2020/7/30,36,示例7:用公式f=p*w*s*(1-d) 计算运输费。,吨公里运价,运输距离,折扣,货重,s250(公里) d=0 250s500 d=0.02 500s1000 d=0.05 1000s2000 d=0.08 2000s3000

12、 d=0.10 3000s d=0.15,switch (表达式) case 常量表达式1:语句1;break; case 常量表达式n:语句n;break; default :语句n+1; ,示例,2020/7/30,37,用if语句、else-if语句完成上述例题, 并做对比。,?,要根据运输距离计算折扣d,关键 是要构造switch后的表达式,根据 题目,选择 c=s/250 来求c的值。 if (s=3000) c=12; else c=s/250;,程序中当c的值为2,3时, d的值都是0.05,则这两 个case语句可以共同使用 一个语句。,分析,说明,2020/7/30,38,源

13、程序:,#include void main() int c,s; float f,p,w,d; scanf(“%f,%f,%d”, case 4:,case 5: case 6: case 7: d=0.08; break; case 8: case 9: case 10: case 11:d=0.01;break; case 12: d=0.15; f=p*w*s*(1-d); printf(“运费:%.2fn”, f);,2020/7/30,39,思考:如果将全部的break语句去掉会有什么结果?,2020/7/30,40,选择结构应用举例,输入三个整数,输出最大数和最小数。,定义变量a

14、,b,c,max,min,输入a,b,c的值,ab,1,0,max=a min=b,max=b min=a,maxc,1,0,max=c,minc,1,min=c,0,输出 max和 min的值,#include void main( ) int a, b, c, max, min ; scanf ( “%d,%d,%d” , ,2020/7/30,41,编写简单的计算器程序。用户输入运算数和四则运算符,输出计算结果。,float a,b; char c;,输入一个运算符,输入参与运算的两个运算数,c=?, + , - , *, / ,其他,计算和并输出结果,计算差并输出结果,计算积并输出结果

15、,计算商并输出结果,输出错误信息,#include void main( ) float a,b; char c; printf(“输入一个运算符+,-,*,/:”); scanf(“%c”, ,2020/7/30,42,循环结构程序设计,示例9:编写满足1+2+3+n500中最大的n并求其和的程序。,本题是一个累加求和的问题, 当累加和sum500时反复执行 循环体(sum+=n; n=n+1;), 否则结束循环。,0,1,2020/7/30,43,循环结构需要解决的两个问题,控制循环执行的条件表示 可以使用c中的任意表达式,一般是关系表达式或逻辑表达式 循环结构的结构描述,2020/7/3

16、0,44,格式: for(表达式1;表达式2;表达式3) 语句;,0,真(非0),表达式2?,语句 计算表达式3,循环体外语句,表达式1,执行流程:,for语句,表达式1,2,3 可以是任何类型 的表达式,甚至 可以省略。,2020/7/30,45,示例9:编写满足1+2+3+n500中最大的n并求其和的程序。(第1种解法),#include void main( ) int n ,sum=0; for(n=1; sum500; n+) sum=sum+n; n- -; sum=sum-n; printf(“%d,%d,n-1,sum); ,#include void main( ) int

17、n ,sum; for(n=0,sum=0; sum500; sum+=n,n+); n- -; sum=sum-n; printf(“%d,%d,n-1,sum); ,2020/7/30,46,示例10:在3100之间所有3的倍数中,找出个位数为2的数。,定义变量 i,for( i=3; i=100 ; i+=3 ),i % 10=2,输出 i值,#include void main( ) int i; /*i从3开始,每循环一次增加3*/ for( i=3;i=100;i+=3 ) if (i%10=2) /*i%10的值就是i的个位数*/ printf (“%4d”,i); printf

18、(“n”); ,2020/7/30,47,#include void main( ) int i ,sum; for(i=1,sum=0; i=10; i+) sum=sum+i; printf(%d,sum); ,示例:用for语句编程,计算1+2+.+10,2020/7/30,48,#include int main(void) int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); return 0; ,示例:求 1+1/2+1/3+ 1/100,for(i=1;

19、i=100; i+) sum=sum+1.0/i;,int i; double sum;,printf( “sum = %fn”, sum);,2020/7/30,49,输入一个正整数n,求前n项和,即循环n次 #include int main(void) int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); return 0; ,示例:求 1+2+3+n,for(i=1; i=n; i+) sum=sum+i;,printf(“Enter n:); scanf(%d

20、, ,Enter n: 100 Sum = 5050,2020/7/30,50,#include int main(void) int i, sum; printf(“Enter n: ); scanf(%d, ,示例:求1+1/2+1/3+ 1/n,#include int main(void) int i; double sum; printf(“Enter n: ); scanf(%d, ,源程序,2020/7/30,51,求前n项和,即循环n次,每次累加1项。 for (i = 1; i = n ; i+) sum = sum + item (第i项) item = 1.0 / (2

21、* i - 1),示例:求 1+1/3+1/5+ 的前n项和,2020/7/30,52,#include int main(void) int i, n; double item, sum; printf(“Enter n: ); scanf (%d, ,示例:求 1+1/3+1/5+,源程序,2020/7/30,53,求前n项和,即循环n次,每次累加1项。 for (i = 1; i = n ; i+) sum = sum + item (第i项) item = flag * 1.0 / denominator denominator = denominator + 2 flag = -fl

22、ag,示例:求 1-1/3+1/5- 的前n项和,item = flag*1.0/(2 * i - 1),2020/7/30,54,#include int main(void) int denominator, flag, i, n; double item, sum; printf(“Enter n: ); scanf (%d, ,源程序,2020/7/30,55,n! = 1*2*n for (i = 1; i = n ; i+) product = product * item (第i项) item=i,示例:求n!,product = ?,2020/7/30,56,#include

23、int main(void) int i, n; double product; printf(input n: n); scanf (%d, ,源程序,2020/7/30,57,输入实数x和正整数n, 计算xn = x * x * * x for (i = 1; i = n ; i+) power = power * item (第i项) item=?,示例:求 xn,2020/7/30,58,#include int main(void) int i, n; double x, power ; printf(“Enter x, n: n); scanf (%lf%d, ,求 xn 源程序,

24、2020/7/30,59,示例:程序解析,输入一个正整数n,生成一张2的乘方表,输出20 到2n的值,可以调用幂函数计算2的乘方。,for (i = 0; i = n ; i+) power = pow(2, i); /*调用幂函数pow(2,i)计算2的i次方*/ 输出power的值; ,2020/7/30,60,生成乘方表源程序,#include #include int main(void) int i, n; double power; printf(Enter n:); scanf(%d, ,Enter n: 4 pow(2,0)= 1 pow(2,1)= 2 pow(2,2)= 4

25、 pow(2,3)= 8 pow(2,4)= 16,2020/7/30,61,生成阶乘表,输入一个正整数n,生成一张阶乘表,输出0!到n!的值。要求定义和调用函数fact(n)计算n!,函数类型是double。,for (i = 0; i = n ; i+) power = pow(2, i); /*调用幂函数pow(2,i)计算2的i次方*/ 输出power的值; ,for (i = 0; i = n ; i+) product = fact(i); /* 调用自定义函数fact(i)计算i! */ 输出product的值; ,2020/7/30,62,#include double fac

26、t(int n); /* 自定义函数的声明 */ int main(void) int i, n; double result; printf(Enter n:); scanf(%d, ,生成阶乘表源程序,Enter n: 3 0!=1 1!=1 2!=2 3!=6,double fact(int n) /* 函数首部 */ int i; double product; product = 1; for (i = 1; i = n; i+) product = product * i; return product; /* 将结果回送主函数 */ ,2020/7/30,63,字符输入/输出函数

27、),格式:getchar( ),功能: 从标准设备(一般是键盘) 输入一个字符。getchar函数没有 参数,函数值就是从设备输入的 字符。头文件为stdio.h,2020/7/30,64,字符输入/输出函数,格式:putchar(c),功能:将c值所对应的字符输出 到标准输出设备上。 (输出设备一般为显示器)。,c可以是整型或字符型。 一次只能输出一个字符, 头文件为stdio.h 。,2020/7/30,65,#include int main(void) int digit, i, letter, other; char ch; digit = letter = other = 0; p

28、rintf(“Enter 10 characters: ); for(i = 1; i = a ,input 10 characters: Reold 123? letter=5, digit=3, other=2,多层缩进的书写格式 使程序层次分明,示例,2020/7/30,66,假设自动售货机出售4种商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),售价分别是每份3.0、2.5、4.0和3.5元。 在屏幕上显示以下菜单,用户可以连续查询商品的价格,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。当用户输入编号14,显示相

29、应商品的价格;输入0,退出查询;输入其他编号,显示价格为0。 1 Select crisps 2 Select popcorn 3 Select chocolate 4 Select cola 0 Exit,示例,2020/7/30,67,#include Int main(void) int choice, i; double price; for( i = 1; i = 5; i+) printf(1 Select crisps n); printf(2 Select popcorn n); printf(3 Select chocolate n); printf(4 Select col

30、a n); printf(0 exit n); printf(Enter choice: ); scanf(%d, ,1 Select crisps 2 Select popcorn 3 Select chocolate 4 Select cola 0 Exit Enter choice: 1 price = 3.0 1 Select crisps 2 Select popcorn 3 Select chocolate 4 Select cola 0 Exit Enter choice: 7 price = 0.01 Select crisps 2 Select popcorn 3 Selec

31、t chocolate 4 Select cola 0 Exit Enter choice: 0 Thanks,2020/7/30,68,int main(void) int blank, digit, i, other; char ch; blank = digit = other = 0; printf(Enter 10 characters: ); for(i = 1; i = 10; i+) ch = getchar(); switch (ch) case : case n: blank +; break; case 0 : case 1 : case 2 : case 3 : cas

32、e 4 : case 5 : case 6 : case 7 : case 8 : case 9 : digit +; break; default: other +; break; printf(blank=%d, digit=%d, other=%dn, blank, digit, other); return 0; ,Enter 10 characters: Reold 123? blank=1, digit=3, other=6,示例,输入10个字符,分别统计出其中空格或回车、数字和其他字符的个数。,2020/7/30,69,格式:while(表达式) 语句;,0,真(非0),表达式?

33、,循环体外语句,语句,执行流程:,while语句,注意使用 复合语句。,2020/7/30,70,示例9:编写满足1+2+3+n500中最大的n并求其和的程序。(第3种解法),#include void main( ) int n=1,sum=0; while ( sum500 ) sum+=n; n=n+1; n=n-1; sum=sum-n; printf(“n=%d,sum=%dn”, n-1,sum); ,可使用自增运算符描述来提高编译效率(n+),2020/7/30,71,自增和自减运算符 + 运算符的作用是使变量的值增1。 - 运算符的作用是使变量的值减1。 常见的用法有: +i

34、, -i 在使用i前,先使i的值加(减)1 i+ , i- 在使用i后,先使i的值加(减)1,2020/7/30,72,示例:,已知 i=5 j=i+; j=? i=? j=+i; j=? i=?,5,6,6,6,i+1 不等同于 i+,2020/7/30,73,注意: 1 自增和自减运算符只能用于变量,表达式 (x+y)+ 是不合法的。 2 自增和自减运算符的结合方向是“自右向左”。如表达式 -i+ 等价于 -(i+)。 3 具有一定的二义性,使用时请慎重! 如:设i原值是3,则(i+)+(i+)+(i+)的值可能是9,也可能是12,2020/7/30,74,练习:,已知a=3,b=0,c=

35、2,则执行下列表达式后a,b,c分别是多少? 1、a a=(b=c=5,+b,b+(c+); printf(“a=%d,b=%d,c=%dn”,a,b,c);,下面程序段的输出结果: int a=10,b=10,c,d; c=(+a,b+,a+,+b); d=-a,b-,-a,b-; printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d);,a=11,b=6,c=6,a=10,b=10,c=12,d=11,考虑=“号和”,“的优先级别,2020/7/30,78,格式:do 语句 while(表达式);,真(非0),表达式?,语句,循环体外语句,执行流程:,do while

36、 语句,假(0),2020/7/30,79,示例:,#include void main() int k =100;while (k0) k=k-1;printf(“%d”,k); ,#include void main() int k =100;do k=k-1; while (k0) ; printf(“%d”,k); ,结果:,100,结果:,99,2020/7/30,80,示例9:编写满足1+2+3+n500中最大的n并求其和的程序。(第3种解法),0,1,#include void main( ) int n = 1 , sum = 0; do sum += n; +n; while

37、 ( sum 500 ); n- -; sum=sum-n; printf(n=%d,sum=%d , n-1,sum); ,2020/7/30,81,程序,示例11: 求两个数m和n的最大公约数,当mm,r-n m % nr 直到r=0时,输出n的值。,当r!=0时,输出n值,2020/7/30,82,#include void main( ) int m,n,r; scanf(“%d,%d”, ,2020/7/30,83,#include void main( ) long a=1,b=1,j=1; while(j=15) printf(%8ld,%8ld,a,b); a=a+b; b=b

38、+a; j+; ,示例12:请编程输出一数列,已知第一,第二个数都是1,从第三个数开始,每个数都是与其相邻的前两个数之和,求这一数列的前30个数,请编程。,2020/7/30,84,思考:若将示例10,改为求这一数列,直到其数不小于105 ,应该如何编程?,变量定义,a=1, b=1,输出a值,当b105 时,输出b值,a=a+b,a,b值互换,#include void main( ) long a=1,b=1,c; printf(n%8ld,a); while(b1e+5) printf(%8ld,b); a=a+b; c=a;a=b;b=c; ,2020/7/30,85,一个循环体内又包

39、含另一个完 整的循环结构,称为循环的嵌套。,内嵌的循环中还可以嵌套循环, 这就是多重循环。,循环的嵌套,2020/7/30,86,for( ) while( ) ,Do for() while();,while() for() ,for() for() ,注意:以下四种均为合法的嵌套循环结构,2020/7/30,87,练习:阅读下列源程序,写出运行结果:,#include void main() int i,j; for( i = 1;i = 9;i+ ) for( j = 1;j = i;j+) printf(%3d , i * j); printf(n); ,2020/7/30,88,输出

40、结果: 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81,2020/7/30,89,阅读下列源程序,写出运行结果:,#include void main() int i,j; for(i=1;i=4;i+) for(j=1;j=5-i;j+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n); ,2020/7/30,90,阅读下列源程序,写出运行结果

41、:,#include void main() float sum=1.0,t,s=1.0; int i; for(i=1;i=100;i+) t=s/i; sum=sum+t; s=-s; printf(“sum=%5.4fn,sum); ,1-1/2+1/3-1/4+1/99-1/100,2020/7/30,91,break语句用于循环语句和switch语句。 作用:跳出循环语句和switch 语句。,while() . if( ) break; . ,示例: #include void main( ) int i,s=0; for(i=1;i5) break; printf(“s=%dn”

42、,s); ,break语句,1 3 6 10 15,2020/7/30,92,continue语句类似于break语句,但不是退出循环,而是跳过循环体下面未执行的语句,接着执行循环下一次迭代。如: while( ) if ( ) continue; ,continue语句,#include void main() int n; for(n=100;n=200;n+) if(n%3=0) continue; printf(“%5d”,n); 功能?,2020/7/30,93,复习小结,1:顺序结构程序设计: 2:选择结构程序设计: 3:循环结构程序设计:,注意:break和continue语句的

43、应用。,库函数调用语句; 赋值等表达式语句。,if语句; Switch语句; 条件表达式;,while循环; do 循环; for 循环;,case后的表达式中不能出现变量,并且数据类型必须是整型、字符型或枚举型,各常量表达式必须互不相同。,2020/7/30,94,循环结构应用举例,示例13:用近似公式求e1+1/1!+1/2!+1/n! 分析:设t分别代表求和公式中的每一项,则第i项总可以用第i-1项推算出来,即 t=t/i。,#include void main( ) float e=1.0,t=1.0; int i,n; scanf(“%d”, ,2020/7/30,95,实验2.3的

44、参考源程序,#include void main() double a,ra,tax,pr; int b; scanf(%lf,case 4: case 5: case 6: case 7: case 8: case 9:ra=0.10;break; case 10: ra=0.15; tax=a*ra; pr=a-tax; printf(na=%.1fn,a); printf(rate=%.2f tax=%.2f profit=%.2fn,ra,tax,pr); ,2020/7/30,96,#include void main() int i; double a, rate,tax,prof

45、it; printf(输入奖金数目a=); scanf(%lf,switch(i) case 0: rate=0.0;tax=0.0;profit=a; break; case 1: tax=(a-500)*0.05; profit=a-tax;rate=tax/a; break; case 2: case 3: tax=(a-1000)*0.08+500*0.05; profit=a-tax;rate=tax/a; break;,2020/7/30,97,case 4: case 5: case 6: case 7: case 8: case 9: tax=(a-2000)*0.10+100

46、0*0.08+500*0.05;profit=a-tax; rate=tax/a;break; case 10: default: tax=(a-5000)*0.15+2000*0.10+1000*0.08+500*0.05; profit=a-tax; rate=tax/a; printf(nrate=%.4f,tax=%.4f,profit=%.4fn,rate,tax,profit); ,2020/7/30,98,示例14:百钱买百鸡问题。公鸡每只5元,母鸡每只3元,小鸡3只一元,问一百元买一百 只鸡有几种解法。,#include void main( ) int x, y, z ; f

47、or(x=0; x=19; x+) for(y=0;y=33-x; y+) z=100-x-y; if (z%3=0 ,枚举法,2020/7/30,99,示例15:猴子吃桃,第一天摘下若干个桃子,当天吃了一半后又多吃了一个,从第二天起,猴子每天都是吃了前一天剩下的一半多1个桃子。到第10天,猴子想吃桃子时发现只剩下了1个桃子,请编程计算猴子第一天共摘下多少个桃子?,分析: 根据题意,可以依次从第10天推出第九天的桃子数,从第九天推出第8天的桃子数,.。 用循环的算法来解决,循环变量控制天数(从10至1),循环体:n1=(n2+1)*2和n2=n1 其中n2为当天的桃子数,n1为前一天的桃子数。

48、,递推法,2020/7/30,100,参考源程序:,#include void main( ) int i, n1 ,n2; /*n2为当天的桃子数,n1为前一天的桃子数*/ for(i=10,n2=1;i1;i-) n1=(n2+1)*2; /*依次求出前一天的桃子数*/ n2=n1; printf(“ 第1天摘的桃子数为:%dn ”,n1); ,2020/7/30,101,字符输入/输出函数),格式:getchar( ),功能: 从标准设备(一般是键盘) 输入一个字符。getchar函数没有 参数,函数值就是从设备输入的 字符。头文件为stdio.h,2020/7/30,102,字符输入/

49、输出函数,格式:putchar(c),功能:将c值所对应的字符输出 到标准输出设备上。 (输出设备一般为显示器)。,c可以是整型或字符型。 一次只能输出一个字符, 头文件为stdio.h 。,2020/7/30,103,示例16:,编程:对键盘输入的任何 一个大写英文字符输出与 此对应的小写字符。,输入C cc+32 输出c,转换的算法:,2020/7/30,104,#include void main( ) char c; c=getchar(); c=c+32; putchar(c); ,输入c,转换,输出,2020/7/30,105,示例17:阅读下列源程序,总结其功能。,#includ

50、e void main( ) int sum=0; char c; while(c=getchar( )!=n) sum+=c; printf(“nsum=%d,sum); ,运行时输入: AaBb,功能:由键盘输入一个字符串,计算该字符串各字符对应的ASCII码值的累加和。,结果: 326,2020/7/30,106,练习:,1:执行下面程序片段的结果是( )。 int x=23; do printf(“%2d”,-x); while(!x);,22,2020/7/30,107,练习(续):,2:请写出以下源程序的运行结果。 #include void main() int a= -1,b=

51、4,k; k=(a+=0) ,1 0 3,2020/7/30,108,练习(续):,3:请写出以下源程序的运行结果。 #include void main() int j; for(j=0;j3;j+) switch (j) case 1: printf(“%d”,j); case 2: printf(“%d”,j); default : printf(“%d”,j); ,011122,2020/7/30,109,练习(续):,4:以下程序运行后的输出结果是? #include void main( ) char c ; int n=100; float f=10 ; double x ; x

52、=f*=n/=(c=50) ; printf ( “%d %fn” ,n, x) ; ,2 20.000000,2020/7/30,110,练习(续):,5:以下程序运行后的输出结果是? #include void main( ) int a=1,b=2,c=3; if (c=a) printf(“%dn”,c); else printf(“%dn”,b); ,1,注意:“=“与”=”的区别,2020/7/30,111,6:有以下程序,运行后的输出结果是? #include void main( ) int k=5,n=0; while(k0) switch (k) default : bre

53、ak ; case 1 : n+=k; case 2 : case 3 : n+=k; k- ; printf(“%dn”, n) ; ,7,2020/7/30,112,练习(续):,7:请编程,完成如下计算: SUM=1+12+123+1234+12345。,2020/7/30,113,练习(续):,8:请编程(实验题):从键盘上输入10个学生的成绩,统计并输出最高成绩和最低成绩。,2020/7/30,114,实例讲 解,2020/7/30,115,if(leap) printf(%d is,year); else printf(%d is not,year); printf(a leap

54、year .n) ; ,闰年问题,#include void main( ) int year ,leap; scanf(%d,2020/7/30,116,#include void main() int year,leap; printf(输入年份:n); scanf(%d, ,闰年问题解法二,2020/7/30,117,#include void main( ) char c ; int letter=0,space=0,digit=0,other=0; printf(请输入一行字符:n); while (c=getchar()!=n) if (c=a ,统计字母、空格、数字,2020/7

55、/30,118,#include void main( ) int j, find, x; scanf ( “%d”, ,示例:对任意不小于3的正整数,判断其是否是素数,请编程。,for( j=2,find=1; j=x-1 j+),find=0,x是素数,x不是素数,通过设置标志位, 来控制循环。,2020/7/30,119,示例:对任意n个不小于3的正整数,求出素数的累加和,请编程。,for ( i=1 ; i=n ; i+),输入x的值,for( j=2,find=1; j=x-1 j+),find=0,0,1,s+=x,输出s的值,2020/7/30,120,p63 3.1 输入三角形

56、的三边a,b,c,判断a,b,c,能否构成三角形,何种类型的三角形:等腰、等边、直角、等腰直角、一般。,#include #include void main() float a,b,c; printf(请输入三角形边长:n); scanf(%f%f%f,if(a-b=c)|(b-c=a)|(c-a=b) printf(不能够成三角形n); else if (a*a+b*b=c*c)|(b*b+c*c=a*a)|(c*c+a*a=b*b) if (a=b)|(b=c)|(c=a) printf(等腰直角三角形n); else printf(直角三角形n); else if (a=b) ,202

57、0/7/30,121,示例:对任意不小于3的正整数,判断其是否是素数,请编程。,#include void main( ) int j, find, x; scanf ( “%d”, ,通过break语句 提前结束循环,2020/7/30,122,示例12(解法2):对任意不小于3的正整数,判断其是否是素数,请编程。,#include #include void main( ) int x,i,j; scanf(%d, ,2020/7/30,123,示例:对任意n个不小于3的正整数,求出素数的累加和,请编程。,#include void main( ) int i,find,x,n,j,s=0; scanf(“%d”,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!