算法与控制语句_第1页
算法与控制语句_第2页
算法与控制语句_第3页
算法与控制语句_第4页
算法与控制语句_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第3 3章章 算法与控制语句算法与控制语句3.1 算法初步 3.2 C语言的标准输入和输出 3.3 条件语句 3.4 多分支语句 3.5 循环语句3.6 转移语句 3.7 综合应用 语言程序设计教学目标v初步理解算法的概念和特点v掌握常用问题的算法v掌握用流程图表示算法v了解结构化程序设计的方法v掌握格式化输入输出函数的用法v掌握分支结构的程序设计,理解分支语句的嵌套v掌握循环结构的程序设计及其相互嵌套v理解break和continue的控制v能够编写较复杂的程序语言程序设计3.1 算法初步v算法的概念 v算法的表示 v算法举例 v三种基本结构 语言程序设计算法的概念v算法:解决问题的方法

2、和步骤 v沃斯公式:数据结构+算法=程序v改进的沃斯公式:数据结构+算法+程序设计方法+开发工具=程序语言程序设计算法的表示 v自然语言v传统流程图vN-S流程图v伪代码v计算机语言 语言程序设计传统流程图输输 入入 输输 出出 框框起起 止止 框框处处 理理 框框判判 断断 框框流流 程程 走走 向向连连 接接 点点语言程序设计计算机语言#includeint main()int i,n,s=0;scanf(%d,&n);i=1;while(ibmax=amax=b输输出出max结结束束真真假假语言程序设计例3.2:求n!开始开始i=1,p=1输入输入ni=np=p*ii=i+1输出

3、输出p结束结束真真假假语言程序设计例3.3:判断某一年是否为闰年。开始开始输入年份输入年份yy%4=0&y%100!=0|y%400=0是闰年是闰年不是闰年不是闰年结束结束真真假假语言程序设计例3.4:输入一个正整数,将它反位输出(如输入12345,输出54321)。开开 始始输输 入入 正正 整整 数数 nn!=0m =n% 10输输 出出 m结结 束束n=n/10真真假假语言程序设计例3.5:判断一个整数n是否为素数 开始开始输入整数输入整数nm=2n%m!=0m=m+1m b交交 换换 a , ba c交交 换换 a , cb c交交 换换 b , c输输 出出 a ,b ,c结

4、结 束束真真真真真真假假假假假假语言程序设计算法的特点有穷性确定性有零个或多个输入有一个或多个输出可行性语言程序设计三种基本结构 v顺序结构:根据操作的先后顺序执行 AB语言程序设计v选择(分支)结构:根据某个给定条件进行判断,条件为真或假时分别执行不同的操作 AB条件条件真真假假A条件条件真真假假语言程序设计v循环结构:根据条件的真或假反复执行某些操作 条件条件A真真假假条件条件A真真假假语言程序设计三种基本结构的特点v只有一个入口和一个出口v结构内的每一部分都有可能被执行到v结构内不存在“死循环”语言程序设计3.2 C语言的标准输入和输出3.2.1 格式化输入输出3.2.2 其它输入输出3

5、.2.3 C语言语句3.2.4 顺序结构程序设计语言程序设计1. C语句概述vC语句 以“;”作分隔符,编译后产生机器指令。vC语句分类 表达式语句: 表达式加分号构成。 空语句: ; 程序控制语句(9种) 复合语句: 用 括起来的一组语句例: total = total + limit ; a = 3 ; func( ); printf( “Hello,world!n” );if( ) else switchfor( ) while( ) do while( ) continue break goto return分支循环辅助控制例: z=x+y; t=z/100; printf(“%f”,

6、t); 注意: “”后不加分号语言程序设计2. 赋值语句 v构成: 由赋值表达式加上一个分号构成v注意事项 “”是运算符 赋值表达式可以包括在其它表达式之中例: if (a=b)0) t=a;赋值表达式赋值语句语言程序设计3. 数据输入输出的概念及在C语言中的实现v数据输入输出的概念vC程序中输入输出是如何实现的? C语言无I/O语句,I/O操作由函数实现 #include 语言程序设计4. 单个字符的输入输出v字符输出函数putcharv字符输入函数getchar语言程序设计v字符输出函数putchar 格式: putchar( c ) 参数: c为字符常量、变量或表达式 功能: 把字符c输

7、出到显示器上 返值: 正常,为显示的代码值;出错,为EOF(-1)/* This is an example of putchar() */#include int main() int c; char a; c=65; a=B; putchar(c); putchar(n); putchar(a); return 0;语言程序设计v字符输入函数getchar 格式: getchar( ) 功能: 从键盘读一个字符 返值: 正常,返回读取的代码值;出错,返回EOF(-1)/* This is an example of getchar() */#include int main() char

8、c; c = getchar(); putchar(c); putchar(n); return 0;语言程序设计5. 格式输入与输出v格式输出函数printfv格式输入函数scanf语言程序设计(1)格式输出函数 格式: printf(格式控制串,输出表) 功能: 按指定格式向显示器输出数据 返值: 正常,返回输出字节数;出错,返回EOF(-1) 说明:v 输出表 要输出的数据(可以没有,多个时以“,”分隔)v 格式控制串包含两种信息: 格式说明 普通字符或转义字符%修饰符格式字符printf(“Hello,World! n ”);语言程序设计格式字符格式字符含义举例结果c按字符输出char

9、 a=65;printf(“%c”,a);Ad按十进制整数输出int a=567;printf ( “%d”,a);567u按十进制无符号整数输出int a=567;printf(“%u”,a);567f按浮点数输出float a=567.789;printf(“%f”,a);567.789000E 或e按指数形式输出double a=567.789;printf(“%e”,a);5.677890e+02o按八进制输出int a=65;printf(“%o”,a);101X 或x按十六进制输出int a=255;printf(“%x”,a);ffs按字符串输出printf(“%s”,“ABC”

10、);ABCg按e、f格式中较短的一种输出float a=567.789;printf(“%g”,a);567.789确定数据输出的格式 语言程序设计修饰符修饰符修饰符含义M输出数据域宽,数据长度m,左补空格;否则按实际输出.n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数-输出数据在域内左对齐(缺省右对齐)+指定在有符号数的正数前显示正号(+)0输出数值时指定左面不使用的空位置自动填0#在八进制和十六进制数前显示前导0,0 xl在d,o,x,u前,指定输出精度为long型在e,f,g前,指定输出精度为double型确定数据输出的宽度、精度、小数位数、对齐方式 语言程序设计#in

11、clude int main() int a=3; float b=1.23; char c=a; printf(the result is:n); printf(%dn,a); printf(%fn,b); printf(%cn,c); printf(%s,ok!); return 0;例1:printf(%dn%fn%cn%s,a,b,c,ok!);语言程序设计#include int main() int a=3; float b=1.23; printf(%d %fn,a,b); printf(a=%d b=%fn,a,b); printf(a=%d,b=%fn,a,b); print

12、f(a=%6d,b=%6.1fn,a,b); printf(a=%-6d,b=%-6.1fn,a,b); return 0; 例2:语言程序设计#include int main()int a=97;char b=b;printf(a=%d,a=%cn,a,a);printf(b=%d,b=%cn,b,b); return 0; 例3:语言程序设计 格式输出函数使用注意事项:v 格式字符要用小写v 格式字符与输出项个数应相同,按先后顺序一一对应v 输出转换:格式字符与输出项类型不一致,自动按指定格式输出语言程序设计(2)格式输入函数 格式: scanf(格式控制串,地址表) 功能: 按指定格式

13、从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束 返值: 正常,返回输入数据个数 说明:v 地址表 变量的地址,常用取地址运算符&v 格式控制串 含义同printf函数例1: scanf(%d,&a); 输入:10 则 a=10例2: scanf(%x,&a); 输入:10 则 a=16语言程序设计l修饰符功 能hm*用于d,o,x前,指定输入为short型整数用于d,o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量例 scanf(“%4d%2d%2d”,

14、&yy,&mm,&dd); 输入 19991015 则1999yy, 10 mm, 15 dd例 scanf(“%3d%*4d%f”,&k,&f); 输入 12345678765.43 则123k, 8765.43f例 scanf(“%2d%*3d%2d”,&a,&b); 输入 1234567 则12a, 67b例 scanf(“%3c%2c”,&c1,&c2); 输入 abcde 则ac1, d c2语言程序设计 格式输入函数使用注意事项: 关于输入数据时的分隔符 默认:以空格、TAB键、回车键作为分隔符 以格式控制串中

15、指定的字符作为分隔符2. 关于格式符%c用%c格式符时,空格和转义字符作为有效字符输入实例实例3. 输入数据时,遇以下情况时认为该数据结束 遇空格、TAB键、回车键 按指定的宽度结束 遇非法输入实例next part语言程序设计 int a,b,c; scanf(%d%d%d,&a,&b,&c); int a,b,c; scanf(%d,%d,%d,&a,&b,&c); int a,b,c; scanf(a=%d,b=%d,c=%d,&a,&b,&c);输入:5 6 9 或者:5 6 9 返回输入:5,6,9 输入:a=5

16、,b=6,c=9 语言程序设计 char ch1,ch2,ch3; scanf(%c%c%c,&ch1,&ch2,&ch3);正确输入方式:abc 分析: 若这样输入: 则: 若这样输入: 则:a b c abch1为a,ch2为 ,ch3为bch1为a,ch2为换行符,ch3为b返回语言程序设计 int a; scanf(%3d,&a); int a; char b; float c; scanf(%d%c%f,&a,&b,&c);则: a= ?若输入: 12345 则: a=? b= ? c=?若输入:123a 123o.26 a=1

17、23 b= a c=123a= 123返回语言程序设计6. 程序举例例1: 输入三角形边长,求面积例2: 从键盘输入大写字母,用小写字母输出gogonext part语言程序设计例1: 输入三角形边长,求面积1()2() () ()sabcareassasbsc预备知识:(1) 输入边长a,b,c(2) 根据数学公式计算s,area(3) 输出面积area用c语言编写的程序:分析:语言程序设计#include #include int main() float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,&c); s=1.0/2*(a+b+c)

18、; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2fn,a,b,c,s); printf(area=%7.2fn,area); return 0;文件包含预处理命令变量定义输入数据输出数据?return 语言程序设计例2: 从键盘输入大写字母,用小写字母输出预备知识:分析:(1) 输入大写字母(2) 把大写字母转换为小写字母(3) 输出小写字母用c语言编写的程序:大写字母的ASC值比小写字母的ASC值少32语言程序设计return #include void main() char c1,c2; c

19、1=getchar(); printf(%c,%dn,c1,c1); c2=c1+32; printf(%c,%dn,c2,c2);语言程序设计3.3 条件语句3.3.1 if语句3.3.2 if else 语句3.3.3 if else if 语句3.3.4 条件语句的嵌套3.3.5 条件语句的应用语言程序设计if语句vif语句的三种形式 if (表达式) 语句 if (表达式) 语句1 else 语句2 if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else if (表达式m) 语句m else 语句nexampleexprstat

20、ement非0=0exprstatement1statement2非0=0expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0语言程序设计if (xy)printf(%d,x);if (xy)max=x;elsemax=y;if (salary1000) index=0.4;else if (salary800) index=0.3;else if (salary600) index=0.2;else if (salary400) index=0.1;else index=0;语言程序设计v关于if语句的几点说明 if后

21、面的表达式类型任意 在三种形式的if语句中,语句i也可以是复合语句或嵌套if语句。 注意if与else的配对关系: else总是与它上面的最近的未配对的if配对。vif语句编程实例exampleexampleexampleexamplenext part语言程序设计if(a=b&x=y) printf(a=b,x=y);if(3) printf(OK);if(a) printf(%d,a);return语言程序设计例1: if (x0 & y0) printf(“x is a positive number.”); printf(“y is a positive number.

22、”); else if (x=0) printf(“x is not a positive number); else printf(“y is not a positive number.”); 语言程序设计例2: 考虑下面程序的输出结果: #include void main()int x,y;scanf(%d,%d,&x,&y);if(xy) x=y; y=x;else x+; y+;printf(%d,%dn,x,y);输入:1,2 输入:2,1 Compile Error!return语言程序设计例: if (a=b) if (b=c) printf(“a=b=c”)

23、; else printf(“a!=b”);修改: if (a=b) if (b=c) printf(“a=b=c”); else printf(“a!=b”);实现if else 正确配对方法: 加 return语言程序设计例1: 求一个整数的绝对值#include int main() int x,y; printf(Enter an integer:); scanf(%d,&x); y=x; if (yabsolute value:%dn,x,y); return 0;语言程序设计例2: 输入两个整数并判断两个数是否相等#include int main() int a,b; p

24、rintf(Enter integer a and b:); scanf(%d,%d,&a,&b); if (a=b) printf(a=bn); else printf(a!=bn); return 0;语言程序设计例3: 将3个整数按从小到大的顺序排列#includeint main() int a,b,c,t; scanf(%a %b %c,&a,&b,&c); if (ab) t=a; a=b; b=t; if (ac) t=a; a=c; c=t; if (bc) t=b; b=c; c=t; printf(%d,%d,%dn,a,b,c);

25、return 0;找到最小数?算法语言程序设计return例4: 写出下面程序的执行结果#includeint main() int x=100,a=10,b=20; int v1=5,v2=0; if (a=60n); break;case D: printf(score60n); break;default: printf(errorn);next part语言程序设计#include int main() int score;scanf(%d,&score);switch(score) case 5: printf(Excellent!);case 4: printf(Good!

26、);case 3: printf(Pass!);case 2: printf(Fail!); default: printf(data error!); return 0; break; break; break;break;语言程序设计#include int main() int x=1,y=0,a=0,b=0;switch(x)case 1: switch(y)case 0: a+; break;case 1: b+; break;case 2: a+; b+; break;case 3: a+;b+;printf(a=%d,b=%dn,a,b); return 0;a=1a=2 b=1

27、return语言程序设计switch 实例1例3.25 从键盘上输入年份和月份,求该月有多少天?分析:v一年12个月,1、3、5、7、8、10、12月每月31天;4、6、9、11月份每月30天v2月份闰年是29天,非闰年是28天v判断闰年的标准v能被4整除不能被100整除的年份或者能被400整除的年份v(year%4=0)&(year%100!=0)|(year%400=0)1.或!(year%4)&(year%100)|!(year%400)语言程序设计switch 实例2v例3.24:已知银行整存整取存款不同期限的年利率分别为: 2.25% 期限1年 2.79% 期限2年年

28、息= 3.33% 期限3年 3.60% 期限5年 4.14% 期限8年 要求输入本金和期限,求到时候能从银行得到的利息与本金的合计。分析:总金额=本金*年利率*存期+本金语言程序设计3.5-7 循环语句和转移语句3.5.1 while 循环语句3.5.2 dowhile循环语句3.5.3 for循环语句3.5.4 循环语句的嵌套3.6.2 break和continue语句语言程序设计1. while语句语法形式:(3) 特点:(2) 执行流程:while (表达式) 语句可以是一条语句, 也可以是复合语句表达式循环体假(0)真(非0)先判断,后执行;循环体被执行的次数有可能为0次。next p

29、art语言程序设计 使用while语句编程实例1:计算整数1n的求和2. 用c语言实现:#include int main() int sum,i,n; scanf(%d,&n); i=1; sum=0; while(i=n) sum=sum+i;i=i+1; printf(sum=%dn,sum); return 0;1. 算法:输入ni=1sum=0i= nsum=sum+ii=i+1输出sum开 始结 束真假语言程序设计 使用while语句编程实例2:计算n的阶乘1. 算法:#include int main() int product,i,n; scanf(%d,&n)

30、; i=1; product=1; while (i=n) product=product*i;i=i+1; printf(product=%dn,product); return 0;2. 用c语言实现:product=product*ii=i+1输入ni=1product=1i= n输出product开 始结 束真假return语言程序设计2. dowhile语句语法形式:(3) 特点:(2) 执行流程: do 语句 while (表达式);表达式循环体假(0)真(非0)先执行循环体,再判断;循环体至少被执行1次。不可少!next part语言程序设计 使用dowhile语句编程实例1:

31、计算整数1n的求和2. 用c语言实现:#include int main()int sum,i,n;scanf(%d,&n);i=1;sum=0;do sum=sum+i; i=i+1;while (i=n);printf(sum=%dn,sum); return 0;1. 算法:输入ni=1sum=0i= nsum=sum+ii=i+1输出sum开 始结 束真假语言程序设计 使用dowhile语句编程实例2: 计算n的阶乘#include int main() int product,i,n; scanf(%d,&n); i=1; product=1; do product=

32、product*i;i=i+1; while (i=n); printf(product=%dn,product); return 0;2. 用c语言实现:1. 算法:product=product*ii=i+1输入ni=1product=1i= n输出product开 始结 束真假return语言程序设计 比较1: while语句与dowhile语句(1) 从执行过程看:(2) 从循环体执行次数看: while语句: 先判断表达式,后执行循环体 dowhile语句: 先执行循环体,后判断表达式 while语句: 循环体执行次数可能为0 dowhile语句: 循环体至少会被执行1次(3) 同一

33、个问题既可以用while语句实现,也可以用dowhile语句实现 注意:初始值和循环条件的设置!实例分析next part语言程序设计实例分析:计算i,i+1,i+2,100的和(i为自然数,通过程序输入)1. 用while语句实现2. 用dowhile语句实现#include int main()int i,sum;scanf(%d,&i);sum=0;while(i=100)sum=sum+i;i=i+1;printf(sum=%dn,sum); return 0;#include int main()int i,sum;scanf(%d,&i);sum=0;dosum=s

34、um+i;i=i+1;while(i=100);printf(sum=%dn,sum); return 0;return语言程序设计3. for语句语法形式:(3) 理解:(2) 执行流程:for (表达式1;表达式2;表达式3) 语句for (循环变量赋初值;循环条件;循环变量增值) 语句表达式2语 句假真表达式1表达式3next part语言程序设计 使用for语句编程实例1: 计算整数1n的求和1. 算法:2. 用c语言实现:#include int main()int i,sum,n;scanf(%d,&n);sum=0;for(i=1;i=n;i+) sum=sum+i;pr

35、intf(sum=%dn,sum); return 0;输入nsum=0i=0i= nsum=sum+ii=i+1输出sum开 始结 束真假语言程序设计 关于for语句形式灵活的实例说明:1. #include int main()int i,sum,n;scanf(%d,&n);sum=0;for(i=1;i=n;i+) sum=sum+i;printf(sum=%dn,sum); return 0;#include int main()int i,sum,n;scanf(%d,&n);sum=0; i=1;for(;i=n;i+) sum=sum+i;printf(sum=

36、%dn,sum); return 0;语言程序设计 关于for语句形式灵活的实例说明:2. #include int main()int i,sum,n;scanf(%d,&n);sum=0;for(i=1;i=n;i+) sum=sum+i;printf(sum=%dn,sum); return 0;#include int main()int i,sum,n;scanf(%d,&n);sum=0; for(i=1;i=n;) sum=sum+i; i=i+1; printf(sum=%dn,sum); return 0;语言程序设计 关于for语句形式灵活的实例说明:3.

37、#include int main()int i,sum,n;scanf(%d,&n);sum=0;for(i=1;i=n;i+) sum=sum+i;printf(sum=%dn,sum); return 0;#include int main()int i,sum,n;scanf(%d,&n);for(sum=0,i=1;i=n;i+) sum=sum+i;printf(sum=%dn,sum); return 0;return语言程序设计 比较2: while语句、dowhile语句、for语句while (表达式) 语句 do 语句 while (表达式);for (循

38、环变量赋初值;循环条件;循环变量增值) 语句next part语言程序设计4. 循环的嵌套while (表达式) 语句 do 语句 while (表达式);for (循环变量赋初值;循环条件;循环变量增值) 语句语句内又包含有循环结构(1) 什么是循环的嵌套?(2) 循环的嵌套的表现形式:next part语言程序设计 while() while() .do do while( ); .while( );while() do while( ); .for( ; ;) do while(); while() .(3) 有关循环的嵌套的说明: 三种循环可相互嵌套,层数不限 注意嵌套循环的执行流程实

39、例语言程序设计 循环嵌套编程实例: 计算1!+2!+10!#include int main()int i,j,i_product,sum;sum=0;for(i=1;i=10;i+)i_product=1;for(j=1;j=i;j+)i_product=i_product*j;sum=sum+i_product;printf(1!+2!+.+10!=%dn,sum); return 0;return语言程序设计5. break语句和continue语句next part(1) break语句(2) continue语句 功能: 功能: 使用场合: 使用场合: 在循环语句中: 结束当层整个循

40、环体 在switch语句中: 终止switch语句的执行只能用在循环语句或switch语句中只能用在循环语句中结束本次循环 语言程序设计(3) 注意事项: 在循环语句中: break语句用于结束整个循环体 continue语句用于结束本次循环 在嵌套循环结构中: break语句和continue语句功能都 是对该语句所在的循环结构而言。实例分析返回本节语言程序设计 break语句使用实例: 计算1+2+3+,直到和超过100即停止相加#include int main() int i,sum; sum=0; for(i=1;i+) sum=sum+i;if(sum100)break; printf(i= %d,sum= %dn,i,sum); printf(i= %d,sum= %dn,i-1,sum-i); return 0;运行结果:语言程序设计 continue语句使用实例: 计算1100之间非3的倍数的所有奇数之和#include int main()int i,sum;sum=0;for(i=1;i=3)1534233185537721389610321144987如:语言程序设计求解本题的算法:求Fibonacci数列前40个数(教材P125)f1=1,f2=1for i=1 to 2

温馨提示

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

评论

0/150

提交评论