版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言第三章课件 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 本章主要内容 程序设计方法简述程序设计方法简述 算法与流程图算法与流程图 算法的两种表示法算法的两种表示法 两种流程图两种流程图 三种基本结构三种基本结构 选择结构程序设计选择结构程序设计 if else 语句语句 switch语句语句 循环结构程序设计循环结构程序设计 四种循环语句四种循环语句 常用算法常用算法 枚举法(穷举法)枚举法(穷举法) 归纳法(递推法)归纳法(递推法) 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 一、程序设计方法简述一、程序设计方法简述 1、计算机处理问题的
2、过程 【例一】让某学生解方程 ax2+bx+c=0 求解过程: 分析问题 这是一个一元二次方程(代数问题,须中学代数知识) 确定处理方案 用求根公式 确定解题步骤 确定a、b、c的值 求出b2 -4ac的值 如果 b2 -4ac0(双实根) X1= X2= 如果 b2 -4ac=0(单实根) X1=X2= 如果 b2 -4ac=60) printf(“Passed!”); else printf(“Failed”); 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 二、算法与流程图二、算法与流程图 2、传统流程图 P19 特点: 直观形象; 使用流线。 缺点: 占面积大,使
3、用流线 任意转移,易出现 “乱麻”现象,造成 编程与阅读程序困难。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 二、算法与流程图二、算法与流程图 3、N-S结构化流程图 P26-27 77年美学者和提出。 特点 取消流线 不允许流程任意转移,只能从上而下顺序执行 规定三种基本结构的流程图单元,由这些基本结构象搭积木似的组成各种算 法(结构化设计)。 优点 算法清晰,流程不会无规律乱转移。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 二、算法与流程图二、算法与流程图 4、三种基本结构 P23-26 通常情况下,程序中的语句是以所编写的顺序一句接一句
4、 地执行,这种执行方法称为“顺序执行”。许多C语句能够 让程序员指定不按编写顺序执行下一条执行语句,这种执 行方法称为“控制转移”。 Bohm和Jacopini的研究证实,所有的程序都能够只用三种 控制结构编写,即 顺序结构 选择结构(selection structure) 循环结构(repetition structure) 顺序结构是C语言的基本结构,除非指示转移,否则计算机 自动以语句编写的顺序一句一句地执行C语句。 任何C语言程序都是由七种控制结构(顺序结构、三种选择 结构和三种循环结构)构成的。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 二、算法与流程图二
5、、算法与流程图 4、三种基本结构 P23-26 顺序结构 A块、B块顺序执行(每块代表一个或一组操作) 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 二、算法与流程图二、算法与流程图 4、三种基本结构 P23-26 选择结构 条件p成立时执行a块(否 则执行b块) uif 选择结构选择结构 条件为真时 执行某个指定的操作,条 件为假时跳过该操作(单 路选择) uififelseelse选择结构选择结构 条件 为真时执行某个指定的操 作,为假时执行另一个指 定的操作(双路选择) uswitchswitch选择结构选择结构 根据表 达式的值执行众多不同操 作中的某个指定的操作
6、 (多路选择) 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 二、算法与流程图二、算法与流程图 4、三种基本结构 P23-26 循环结构 分当型和直到型两类。 当型 先判断,只要条 件为真就反复执行A块, 为假则结束循环。 直到型 先执行A块, 再判断条件是否为真, 为真则继续执行循环体, 为假则结束循环。 C语言提供了三种循环 结构,即while循环结 构,dowhile循环结 构和for循环结构。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 1、if语句 P91 三种形式: nif(表达式)语句; (图
7、) nif(表达式)语句1; else 语句2; (图) nif(表达式1)语句1; (图) else if(表达式2)语句2; else if(表达式n)语句n; else 语句n+1; e1?e2:e3 是if else 语句在特定情况下的变体。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 if-else 选择结构的一种最常用形式选择结构的一种最常用形式 if (表达式表达式) 语句语句1; else 语句语句2; 语句语句3 表达式表达式值值非非0时,执行时,执行语句语句1,然后,然后语句语句3; 表达式表达式值为值为0时,执行时,执行语句语句2,然后,然后语句语
8、句3 else部分可以没有。部分可以没有。 if (表达式表达式) 语句语句1; 语句语句3 当当表达式表达式值为值为0时,直接执行时,直接执行语句语句3 if-else嵌套使用时,注意嵌套使用时,注意else和谁配对的问和谁配对的问 题题 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 else-if if的一种扩展形式的一种扩展形式 if (表达式表达式1) 语句语句1; else if (表达式表达式2) 语句语句2; else if (表达式表达式3) 语句语句3; else 语句语句4; 语句语句5; else部分可以没有部分可以没有 信息学院自动化仪表研究所信息
9、学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 1、if语句 示例 【例一】以下程序的作用是什么? main( ) char c; printf(“Input :”); scanf(“%c”, if (c=a else c=c; printf(“%c”,c); /*将小写字母转换为大写字母*/ 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 1、if语句 示例 【例二】以下程序的执行结果是什么? main( ) int x=2,y=-1,z=2; if (xy) if (y0) ; if (x=2)
10、 if (1=x0”); y=x-1; 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例三】 if(ab) /*1 */ if(ac) /*2 */ if(ad) flag=1;/*3 */ else flag=2;/*4 */ else flag=3;/*5 */ 问题:第四行和第五行的问题:第四行和第五行的else语句与哪一个语句与哪一个if语句相匹配呢语句相匹配呢? 三、选择结构程序设计三、选择结构程序设计 1、if语句 示例 分析:匹配方案可以有很多种分析:匹配方案可以有很多种,(2-4,1-5),(3-4,2-5) ,(1-4,) 信息学院自动化仪表研究所信息
11、学院自动化仪表研究所 C语言第三章课件 1、if ( ab ) if ( ac ) if ( ad ) flag=1; else flag=2; else flag=3; 程序含义:当程序含义:当 c= ab 时,时,flag=3 2、程序含义:当程序含义:当 ab ) if ( ac ) if ( ad ) flag=1; else flag=2; /* 以上是一个完整的复合语句以上是一个完整的复合语句 */ else flag=3; 三、选择结构程序设计三、选择结构程序设计 1、if语句 示例 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 3、if (a=b) if
12、(b=c) printf(a=b=cn); else printf(”a!=bn”); 尽管书写格式如此,真实的正确的含义是:尽管书写格式如此,真实的正确的含义是: if (a=b) if (b=c) printf(a=b=cn); else printf(a!=bn”); 通过加通过加 ,可以改变配对关系:,可以改变配对关系: if (a=b) if (b=c) printf(a=b=cn); else printf(”a!=bn”); 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 体型判断。按体型判断。按“体指数体指数”对肥胖程度进行划分:对肥胖程度进行划分: 体指数
13、体指数t = 体重体重w / (身高身高h)2 (w 单位为公斤,单位为公斤,h单位为米)单位为米) 当当t = 27时,为肥胖。时,为肥胖。 编程从键盘输入你的身高编程从键盘输入你的身高h和体重和体重w,根据给定公式计算体指,根据给定公式计算体指 数数t,然后判断你的体重属于何种类型。,然后判断你的体重属于何种类型。 用用3种方法编程:种方法编程: 算法算法1:用不带:用不带else子句的子句的if语句编程语句编程 算法算法2:用在:用在if子句中嵌入子句中嵌入if 语句的形式编程语句的形式编程 算法算法3:用在:用在else子句中嵌入子句中嵌入if 语句的形式编程语句的形式编程 信息学院自
14、动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 2、switch语句 P98 switch 语句的一般形式: switch(e) case c1:语句组1; case c2:语句组2; case cn:语句组n; default:语句组n+1; /*可缺省*/ c1cn 常量(整数、字符、 常量表达式如3+4,不 含变量或函数) default 不是c1cn的情况 (位置不一定在最后)。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 2、switch语句 示例 main() ch
15、ar s; scanf(“%c”, switch(s) case A : printf(“85100n”); case B : printf(“7084n”); case C : printf(“6069n”); case D : printf(“60n”); default : printf(“错误输入n”); 输入“C”,求输出结果。 结果: 6069 60 错误输入 ?! 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 2、switch语句 示例 main() char s; scanf(“%c”, switch(s) cas
16、e A : printf(“85100n”); case B : printf(“7084n”); case C : printf(“6069n”); case D : printf(“60n”); default : printf(“错误输入n”); 我的成绩 应该是 6069! 什么!“60”? “错误输入”? 怎么会这样?! 不好意思, 我属于C级! 运行结果: 6069 60 错误输入 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 2、switch语句 示例 解决方法break语句: main() char s; scan
17、f(“%c”, switch(s) case A : printf(“85100n”);break; case B : printf(“7084n”);break; case C : printf(“6069n”);break; case D : printf(“60n”);break; default : printf(“错误输入n”); 这才差不 多! break! 运行结果: 6069 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 2、switch语句 示例 解决方法break语句: main() char s; scanf
18、(“%c”, switch(s) case A : printf(“85100n”);break; case B : printf(“7084n”);break; case C : printf(“6069n”);break; case D : printf(“60n”);break; default : printf(“错误输入n”); switch(s)语句中的s实际上 并非真正的条件选择,而 只是一种跳转指示(与if语 句不同),表示下面应该 跳转到什么位置继续执行。 而各case实际上只是一个 跳转处的标记。当程序跳 转到某个case处时,并非 只执行此case行的程序组, 而是从此处
19、开始一直向下 执行各条语句,直到整个 switch开关体结束(“”)。 如果要使每个case处相当 于一种if(s)else的效果, 必须在其语句组最后加上 break语句。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 三、选择结构程序设计三、选择结构程序设计 2、switch语句 示例 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=
20、%d,b=%dn”,a,b); 1、每个case常量表达式的值 必须互不相同,否则会出现互 相矛盾的结果。 2、允许多个case共用一个执 行语句。 求程序运行结果。 结果:a=2,b=1。 如果x=2? 结果:a=1,b=1 如果x=3? 结果:a=1,b=1 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 提出问题提出问题 提问:从键盘上输入提问:从键盘上输入10个整数并求和,怎么编程?个整数并求和,怎么编程? 回答:在程序中写回答:在程序中写10个个scanf语句,还可以写语句,还可以写%d%d. 提问:从键盘上输入提问:从键盘上输入500个整数并求和,怎么编程?个整
21、数并求和,怎么编程? 回答:这个,嗯回答:这个,嗯? 不会让我写不会让我写500个个. 让我们换一个角度来看待这些问题,让我们换一个角度来看待这些问题, 以上问题的实质是:将以上问题的实质是:将scanfscanf函数重复执行函数重复执行N N遍。遍。 我们可以引出一个概念我们可以引出一个概念“循环循环”,简单而言:循环是,简单而言:循环是 在循环条件为真时计算机反复执行的一组指令在循环条件为真时计算机反复执行的一组指令 (循环体)(循环体) 四、循环结构程序设计四、循环结构程序设计 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计
22、循环控制通常有两种方式: 计数控制事先能够准确知道循环次数时用之 用专门的循环变量来计算循环的次数,循环变量 的值在每次执行完循环体各语句后递增,达到预定 循环次数时则终止循环,继续执行循环结构后的语 句。 标记控制事先不知道准确的循环次数时用之 由专门的标记变量控制循环是否继续进行。当标 记变量的值达到指定的标记值时,循环终止,继续 执行循环结构后的语句。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 在C语言中可用以下语句构成循环: if goto while do while for 其中if goto是通过编程技巧(if语
23、句和goto语句 组合)构成循环功能。而且goto语句将影响程序流程 的模块化,使程序可读性变差,所以结构化程序设计 主张限制goto语句的使用。 其他三种语句是C语言提供的循环结构专用语句。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 循环结构两大要素: 循环条件 p 结束循环的条件表达式 循环体 A 循环执行的语句或语句组 设置循环条件要特别注意确定: 循环变量的初值 循环变量的终值 循环变量的变化规律 名词解释 无限循环 死循环 名词解释 空循环 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环
24、结构程序设计四、循环结构程序设计 1、if goto语句循环结构 P106 【例一】 main() int n=0,sum=0; loop: sum+=n; +n; if (sum=10000) goto end; sum+=n; +n; goto loop; end: printf(“n = %dn”,n); 直到型 当 型 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 2、while语句循环结构 P107 【例三】 main() int n=0,sum=0; while (sum=10000) sum+=n; +n; prin
25、tf(“n = %dn”,n); 当 型 一般形式 while (条件表达式) 循环体; 用于构成当型循环:先判断 后执行/条件为真继续循环, 直到条件为假时结束循环。 【注意】条件表达式或循环 体内应有改变条件使循环结 束的语句,否则可能陷入 “死循环”。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 3、dowhile语句循环结构 P108 【例四】 main() int n=0,sum=0; do sum+=n; +n; while (sum0); printf(“n”); /*取得num的个位数*/ /*输出num的个位数
26、*/ /*直到num/10为0*/ 结果: 65421 将各位数字反序显示出来 循环初始条件循环初始条件 循环控制条件循环控制条件表达式表达式2? 执行语句执行语句 成立成立 不成立不成立 执行执行for循环之后的语句循环之后的语句 执行表达式执行表达式3 执行表达式执行表达式1 循环体循环体 forfor语句等价于下列语句:语句等价于下列语句: 表达式表达式1 1; while while (表达式(表达式2 2) 语句;语句; 表达式表达式3 3; main() int i , s=0; printf(“Sum=%dn”,s); 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三
27、章课件 forfor语句的变化形式语句的变化形式 forfor语句中的三个表达式中的任意一个都是可以省略的,语句中的三个表达式中的任意一个都是可以省略的, 但是分号不能省略。但是分号不能省略。 1.1.省略表达式省略表达式2 2,则:,则: forfor(表达式(表达式1 1; ;表达式;表达式3 3) 就形成了一个死循环。就形成了一个死循环。 2.2.省略表达式省略表达式1 1和表达式和表达式3 3,则:,则: forfor(;表达式(;表达式2 2;);) 等同于:等同于: whilewhile( 表达式表达式 ) 据此结论:所有用据此结论:所有用whilewhile语句语句实现的循环都可
28、以用实现的循环都可以用forfor语语 句句实现。实现。 3.3.表达式表达式1 1、2 2、3 3全省略,则:全省略,则: for ( ; ; )for ( ; ; ) 等同于:等同于: while (1)while (1) 四、循环结构程序设计四、循环结构程序设计 4、for语句循环结构 P110 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 5、其他循环控制结构 P114 break 结束循环 在switch中退出switch结构; 在循环中结束循环。 continue 结束本次循环 循环“短路” (跳过循环体后 面的语句,
29、开始下一轮循环 )。 goto 跳转 跳到循环体外指定标号处。 【注意】 goto 语句只能从循环内向外 跳转 ,反之不可! main( ) int a,y; a=10,y=0; do a+=2;y+=a; if (y50) break; while (a=14); printf(a=%d,y=%dn,a,y); 变量跟踪 a y 10 0 12 12 14+2 16+12=28 14+2 16+28=44 14+2 16+44=60 C语言第三章课件 breakbreak语句使用注意:语句使用注意: 1 1、在嵌套循环中,、在嵌套循环中,break break 语句仅能退出一层语句仅能退出一
30、层 ( (当前当前) )循环循环。 2 2、若在循环语句中包含了、若在循环语句中包含了 switch switch 语句,那语句,那 么么switch switch 语句中的语句中的 break break 语句仅能使控制退出语句仅能使控制退出 switch switch 语句。语句。 3 3、break break 语句并不是程序设计中必不可少的语句并不是程序设计中必不可少的 语句,可以通过改变程序的结构去掉。语句,可以通过改变程序的结构去掉。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 5、其他循环控制结构 P114 bre
31、ak 结束循环 在switch中退出switch结构; 在循环中结束循环。 continue 结束本次循环 循环“短路” (跳过循环体后 面的语句,开始下一轮循环 )。 goto 跳转 跳到循环体外指定标号处。 【注意】 goto 语句只能从循环内向外 跳转 ,反之不可! 求以下程序段执行后x和i的值。 int i,x; for ( i=1,x=1;i=10) break; if (x%2=1) x+=5; continue; x-=3; 结果:x的值为10,i的值为6 变量跟踪 i x 1 16 2 63 3 38 4 85 5 510 6 信息学院自动化仪表研究所信息学院自动化仪表研究所
32、C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 5、其他循环控制结构 P114 break 结束循环 在switch中退出switch结构; 在循环中结束循环。 continue 结束本次循环 循环“短路” (跳过循环体后 面的语句,开始下一轮循环 )。 goto 跳转 跳到循环体外指定标号处。 【注意】 goto 语句只能从循环内向外 跳转 ,反之不可! main() int i=1; while (i=15) if (+i%3!=2) continue; else printf(%d ,i); printf(n); 变量跟踪 i +i%3 输出输出i 12 2 2 23 0 3
33、4 1 45 2 5 56 0 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 main() int i,k=0; for (i=1; ;i+) k+; while (ki*i) k+; if (k%3=0) goto loop; loop:printf(%d,%d,i,k); 四、循环结构程序设计四、循环结构程序设计 5、其他循环控制结构 P114 break 结束循环 在switch中退出switch结构; 在循环中结束循环。 continue 结束本次循环 循环“短路” (跳过循环体后 面的语句,开始下一轮循环 )。 goto 跳转 跳到循环体外指定标号处。 【注意】
34、 goto 语句只能从循环内向外 跳转 ,反之不可! 结果:2 ,3 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 6、While do/while for 语句的选用语句的选用 同一个问题,可以用同一个问题,可以用whilewhile语句来解决,也可用语句来解决,也可用do/whiledo/while语句语句 或者或者forfor语句来解决。但在实际应用中,我们要根据具体情况语句来解决。但在实际应用中,我们要根据具体情况 来选用不同的循环语句。选用的一般原则如下来选用不同的循环语句。选用的一般原则如下: : 如果循环次数在循环之
35、前就已确定,一般用如果循环次数在循环之前就已确定,一般用forfor语句;语句; 如果循环次数是根据循环体的执行情况确定的,如果循环次数是根据循环体的执行情况确定的, 一般选用一般选用whilewhile语句或者语句或者do whiledo while语句。语句。 int n=10; char c; int a10; doc=getchar(); for(i=0;in;i+) printf(“%c”,c); scanf(“%d”, while(c!=q 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 当循环体执行一次时,用当循环体执行一次时,用do whiledo whil
36、e语句;反之,如果循语句;反之,如果循 环体可能一次也不执行时,用环体可能一次也不执行时,用whilewhile语句语句 char c; char c; do c=getch(); c=getchar(); while(c!=Q) printf(“%c”,c); printf(“%c”,c); while(c!=Q); c=getch(); 6、While do/while for 语句的选用语句的选用 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 四、循环结构程序设计四、循环结构程序设计 7、循环嵌套、循环嵌套 例:在屏幕上打印一个八行七例:在屏幕上打印一个八行七 列的
37、星号矩形列的星号矩形 include main() int i; for(i=0;i7;i+) printf(“*”); printf(“n”); for(i=0;i7;i+) printf(“*”); printf(“n”); for(i=0;i7;i+) printf(“*”); printf(“n”); Whats Whats 循环嵌套?循环嵌套? 一个循环的循环体中套有一个循环的循环体中套有 另一个循环叫循环嵌套。另一个循环叫循环嵌套。 这种嵌套的过程可以一直这种嵌套的过程可以一直 重复下去。二重循环重复下去。二重循环多重多重 循环。循环。 前几节所学的三种循环结构:前几节所学的三种循
38、环结构: WhileWhile、 do/whiledo/while和和 forfor 可以互相嵌套,自由组合。可以互相嵌套,自由组合。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 例:打印出这个三角例:打印出这个三角 形形 0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 四、循环结构程序设计四、循环结构程序设计 7、循环嵌套、循环嵌套 main() int i,j; for(i=0;i=9;i+) f
39、or(j=0;j=i;j+) printf(“%d”,i); printf(“n”); 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 五、常用算法五、常用算法 1、枚举法(穷举法) “笨人之法”: 把所有可能的情况一一测试,筛选出符合 条件的各种结果进行输出。 【例一】百元买百鸡:用一百元钱买一百只鸡。已知公 鸡5元/只,母鸡3元/只,小鸡1元/3只。 分析: 这是个不定方程三元一次方程组问题(三个 变量,两个方程) xyz=100 5x3yz/3=100 设公鸡为x只,母鸡为y只,小鸡为z只。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 百元买百
40、鸡问题分析百元买百鸡问题分析 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 百元买百鸡问题分析百元买百鸡问题分析 main() int x,y,z; for (x=0;x=100;x+) for (y=0;y=100;y+) for (z=0;z=100;z+) if (x+y+z=100 结果:x=0,y=25,z=75 x=4,y=18,z=78 x=8,y=11,z=81 x=12,y=4,z=84 【讨论 此为“最笨”之法要进行101101101= 1030301次 运算。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 百元买百鸡问题分析百元
41、买百鸡问题分析 【讨论】 令z=100-x-y 只进行101101= 10201 次运算(前者的1%) main() int x,y,z; for (x=0;x=100;x+) for (y=0;y=100;y+) z=100-x-y; if (5*x+3*y+z/3.0=100 ) printf(“cocks=%d,hens=%d,chickens=%dn,x,y,z); 取x=19,y=33 只进行 2034= 680 次运算(第 1种运算的0.067%) 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例二】雨水淋湿了算术书的一道题,8个数字只 能看清3个,第一个数
42、字虽然看不清,但可看出不 是1。编程求其余数字是什么? (3)2 = 89 分析 设分别用A、B、C、D、E五个变量表示自左到右五 个未知的数字。其中A的取值范围为29,其余取 值范围为09。条件表达式即为给定算式。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 main() int A,B,C,D,E; for (A=2;A=9;A+) for (B=0;B=9;B+) for (C=0;C=9;C+) for (D=0;D=9;D+) for (E=0;E=9;E+) if (A*(B*10+3+C)*A*(B*10+3+C)=8009+D*100+E*10) pri
43、ntf(“%2d%2d%2d%2d%2dn”,A,B,C,D,E); 结果:3 2 8 6 4 【例二】雨水淋湿了算术书的一道题,8个数字只 能看清3个,第一个数字虽然看不清,但可看出不 是1。编程求其余数字是什么? (3)2 = 89 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例三】 求100200之间不能被3整除也不能被7整除的数。 分析:求某区间内符合某一要求的数,可 用一个变量“穷举”。所以可用一个独立 变量x,取值范围100200。 for (x=100;x=200;x+) if (x%3!=0 如果是求指定条件的奇数呢? 如果是求指定条件的偶数呢? x=
44、101;x=200;x=x+2 x=100;x=200;x=x+2 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 2、归纳法(递推法) “智人之法” : 通过分析归纳,找出从变量旧值出发 求新值的规律。 五、常用算法五、常用算法 【例一】 编程求i =1+2+3+4+99+100 (i=0100) 分析 i=0 S0= 0 (初值) i=1 S1= 0+1=S0+1 i=2 S2=1+2=S1+2 i=3 S3=1+2+3=S2+3 i=4 S4=1+2+3+4=S3+4 i=n Sn=1+ 2+3+4+n=Sn-1+n 信息学院自动化仪表研究所信息学院自动化仪表研究所
45、C语言第三章课件 【例一】 编程求i =1+2+3+4+n ( n 100) 程序: main() int i ,n, s=0; printf(n=); scanf(%d, for ( i=1;i=n;i+) s=s+i; printf(Sum=%dn,s); 运行结果: n=100 Sum=5050 如果是 i =1+1/2+1/3+1/n 呢? 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 算法类型小结:累加型 【累加型】类型诸如 + 求其前n项之和的编程题。 累加型算法 若设i为循环变量,s为前n项累加之和,则程序的 基本结构为: s=0; for( i=1 ;i=
46、n ;i+ ) s=s+; 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例二】 编程求11/2+1/31/4+1/5 +1/991/100 分母为奇数时,相加 分母为偶数时,相减 法1:从变化规律分析 程序: main() int i; float s=0; for (i=1;i=100;i+) if (i%2) s=s+1/i; else s=s-1/i; printf(Sum=%fn,s); 运行结果: 错在哪里? 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例二】 编程求11/2+1/31/4+1/5 +1/991/100 法2:这是个
47、累加型算法的编程题 程序: #include main(); int i ; float s=0; for (i=1;i=100;i+) s=s+pow (-1, i+1) / i ; printf(Sum=%fn,s); 程序: #include main() int i ,k=1; float s=0; for (i=1;i=100;i+) s=s+ k / i ; k = -k ; printf(Sum=%fn,s); 累加型算法 程序基本结构为: s=0; for( i=1;i=n;i+ ) s=s+; 错在哪里? 运行结果:Sum=0.688172 运行结果:Sum=1.000000
48、 : 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例三】 编程求n! (n由键盘输入) 分析 i=0 S0= 1=S0 (初值) i=1 S1= 11=S01 i=2 S2=12=S12 i=3 S3=123=S23 i=4 S4=1234=S34 i=n Sn=1 234n=Sn-1n 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例三】 编程求n! (n由键盘输入) 程序: main() int i ,n, s=1; printf(n=); scanf(%d, for ( i=1;i=n;i+) s=s*i; printf(Sum=%dn,
49、s); 运行结果: n=5 Sum=120 运行结果: n=8 Sum=-25216 Why? 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 算法类型小结:阶乘型 【阶乘型】类型诸如 求其前n项之积的编程题。 阶乘型算法 若设i为循环变量,s为前n项相乘之积,则程序的 基本结构为: s=1; for( i=1 ;i=n ;i+ ) s=s*; 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例四】 编程求n! =1!+2!+3!+n! (n由键盘输入) 外循环为累加型 内循环为阶乘型 法1:从变化规律分析 程序: main() int i, j ,
50、n ; float s,s1; printf ( 请输入n=) ; scanf ( %d, s=0; for (i=1;i=n;i+) s1=1; for (j=1; j=i ; j+) s1=s1*j ; s=s+s1; printf ( Sum=%.0fn,s) ; 运行结果: n=5 Sum=153 /*如果如果n值较大,可改为值较大,可改为printf ( “Sum=%en”,s) ;*/ 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 main() int i, n ; float s,s1; printf ( 请输入n=) ; scanf ( %d, s=0,
51、s1=1; for (i=1;i=n;i+) s1=s1* i ; s=s+s1; printf ( Sum=%.0fn,s) ; 法二:通过单循环实现法二:通过单循环实现 运行结果:运行结果: N=20 Sum=2.56133e+18 (用(用printf ( “Sum=%en”,s) 运行结果:运行结果: 输入输入N=5 Sum=153 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例五】 P116 例 兔子繁殖问题(斐波那契数列问题) 著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。 某人想知道一年内一对兔子可以生几对兔子。他筑了一道围
52、墙,把一对 大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生 后第三个月即可成为“大兔”再生小兔。问一对大兔一年能繁殖几对小 兔? 分析:表示大兔,表示小兔 由分析可以推出,每月新增兔子数Fn=1,1,2,3,5,8,13,21,34,(斐波那契数列) 月份n 兔子数Fn 1 F1=1 2 F2=1 3 F3=2=F1+F2 4 F4=3=F2+F3 5 F5=5=F3+F4 n Fn=Fn-1+Fn-2 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例五】 P116 例 兔子繁殖问题(斐波那契数列问题) main() int f1=1,f2=1,f=2,
53、i,s=2,n; printf(Input n=); scanf(%d, for (i=3;i=n;i+) s=s+f; f1=f2; f2=f; f=f1+f2; printf(%d,s); 对照:P116例 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例六】 编程显示以下图形(共N 行,N 由键盘输入)。 * * * * * * * * * * * * * * * * * * * * * * * * * 此类题目分析的要点是: 通过分析,找出每行空 格、* 与行号i、列号j 及总行数N的关系。 其循环结构可用右图表 示。 分析:(设N=5) 第1行 4个空格=5-
54、1 1个“*”=2*行号-1 第2行 3个空格=5-2 3个“*”=2*行号-1 第3行 2个空格=5-3 5个“*”=2*行号-1 第4行 1个空格=5-4 7个“*”=2*行号-1 第5行 0个空格=5-5 9个“*”=2*行号-1 由此归纳出:第i行的空格数N-i个; 第i行的“*”数是2i-1个。 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 【例六】 main() int i,j,N; printf (请输入N=) ; scanf(%d, for ( i=1 ; i=N ; i+) for (j=1; j=N - i; j+) printf( ); for (j
55、=1; j=2* i -1; j+) printf(*); printf(n); * * * * * * * * * * * * * * * * * * * * * * * * * 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 除了以上例题,要求根据教材掌握: 1、求按指定精度近似值问题(例) 2、判断一个数是否素数问题(例) 3、密码问题(例) 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 判断一个数是否素数问题(例6.8 另一种解法) #include main() int m,k,i; clrscr(); printf(x=); scanf(%
56、d, for(i=2;im-1;i+) if (m%i=0) printf(%d is not a prime numbern,m); exit(0); printf(i=%d,%d is a prime numbern,i,m); 把im-1 改为isqrt(m-1) 比较i的值 信息学院自动化仪表研究所信息学院自动化仪表研究所 C语言第三章课件 第三章 作业 一、编程题 1、编写一个程序,计算、编写一个程序,计算-32768+32767之间任意整数(由之间任意整数(由 键盘输入)中各位奇数的平方和。键盘输入)中各位奇数的平方和。 2、设有一四位数、设有一四位数abcd=(ab+cd)2,编写一个程序,求,编写一个程序,求a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版酒店项目股权融资及股权转让协议3篇
- 《6 洋快餐现象》(说课稿)-2023-2024学年五年级上册综合实践活动粤教版
- 2025长白云上公司员工聘用合同书范本
- 2025物业管理私人承包合同范本
- 二零二五年度房屋租赁权质押合同3篇
- 乡村、家族、泥塑-生计与执念的共融研究
- 黔西北彝族情歌《斜雀阿素雀》音乐特点与演唱分析
- 初2期末考试数学试卷
- 2025版高端定制摩托车转让与售后服务协议4篇
- 砂砾石隧洞施工方案
- 项目绩效和奖励计划
- 光伏自发自用项目年用电清单和消纳计算表
- 量子计算在医学图像处理中的潜力
- 阿里商旅整体差旅解决方案
- 浙江天台历史文化名城保护规划说明书
- 逻辑思维训练500题
- 第八讲 发展全过程人民民主PPT习概论2023优化版教学课件
- 实体瘤疗效评价标准RECIST-1.1版中文
- 企业新春茶话会PPT模板
- GB/T 19185-2008交流线路带电作业安全距离计算方法
- DIC诊治新进展课件
评论
0/150
提交评论