C程序设计第二章 算法
- 格式:pdf
- 大小:1.25 MB
- 文档页数:64
习题2.1什么是算法?是从日常生活中找三个例子,描述他们的算法?答:对操作的描述,即操作步骤,就是算法。
广义的说;为解决一个问题而采取的方法和步骤,就称为“算法”。
例:(略)2.2什么叫结构化的算法?为什么要提倡结构化的算法?答:由基本节构所构成的算法属于“结构化”的算法。
结构化的算法便于编写、阅读、便于修改和维护。
这就减少了程序出错的机会、提高了程序的可靠性,保证了程序的质量。
2.3试述三种基本结构的特点,你能否自己另外设计两种基本结构(要符合基本结构的特点)。
答:基本结构有以下共同点:1:只有一个入口。
图2-14-------2-17中的a点为入口。
2:只有一个出口。
图2-14-------2-17中的b点为出口。
注意,一个判断框有两个出口,但一个选择结构只有一个出口。
不能混淆。
3:结构内的每一部分都有被执行到的机会。
也就是说,对每一个框来说,都应当有一条到出口的路径通过它。
图2-20中就没有一条从入口到出口的路径通过A框。
4:结构内不存在死循环(无终止的循环)。
图2-21就是一个死循环。
需要说明的是基本结构并不一定只限于以上3中,只要有以上四种特点就可以。
人们可以自己定义之。
例:如下两图2.4用传统流程图表示求解一下问题的算法。
(1)有两个瓶子A和B,分别放醋和酱油,要求将他们互换。
#include<stdio.h>void main(){int a;int b;int c;a=10;b=5;printf("%d,%d\n",a,b);c=a;a=b;b=c;printf("%d,%d\n",a,b);}(2)一次将10个数输入,要求将将其中最大的数输出。
#include<stdio.h>void main(){int a[10];int i;int max;printf("input 10 numbers.\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");max=a[0];for(i=1;i<10;i++)if(max<a[i]) max=a[i];printf("the max is: %d\n",max) ;}(3)有3个数a b c,要求安大小顺序把他们输出。
第2章程序的灵魂——算法1. 概念:为解决某一特定问题而采取的具体工作步骤和方法。
2. 举例◆计算1+2+3+……+100的值◆计算1×2×3×……×1000的值◆有50个学生,要求输出他们之中成绩在80分以上的学号和成绩◆判定2000-2500年中的每一年是否闰年3. 算法的表示(1) 自然语言(2) 流程图表示法(3) 伪代码表示法(4) 计算机语言表示法(2) 流程图表示法顺序结构、选择结构和循环结构流程图这三种基本结构有以下共同的特点:1. 只有一个入口;2. 只有一个出口;3. 结构中的每一部分都有被执行到的机会;4. 结构内没有死循环。
用上述基本结构的顺序组合可以表示任何复杂的算法结构,但是基本结构中的流程线使流程图显得较乱,于是1973年美国学者提出了一种新的流程图形式。
在这种流程图中,完全去掉了带箭头的流向线,全部算法写在一个矩形框内。
下面是三种控制结构的N-S图。
例1 求四个数的和算法一:在内存中设一累加用的存储单元S。
第1步:将存储单元S清零。
第2步:输入第1个数a1。
第3步:把a1加到存储单元S中。
第4步:输入第2个数a2。
第5步:把a2加到存储单元S中。
第6步:输入第3个数a3。
第7步:把a3加到存储单元S中。
第8步:输入第4个数a4。
第9步:把a4加到存储单元S中。
第10步:把存储单元S中的结果输出。
算法二:在内存中设一累加用的存储单元S和一计数用的单元I。
第1步:将累加单元S清零。
第2步:将计数单元I清零。
第3步:输入一个数A。
第4步:把A加到累加单元S中。
第5步:计数单元I的值增加1,即I+1=>I。
第6步:若I<4则转去执行第3步,否则,继续执行第7步。
第7步:输出存储单元S中的结果。
开始结束S+A=>S 0=>S 0=>I 输入A I+1=>I I<4输出S 0=>s0=>I输入A S+A=>S I+1=>I 直到I=4输出结果S N-S 图Y例2 求5!开始结束T*i=>t 1=>t 2=>i i+1=>i i>5输出S N例3 将50名学生中成绩在80分以上练习1:交换两个单元的内容。