第二章 算法——程序的灵魂
习题
1.什么是算法?试从日常生活中找3个例子,描述它们的算法。
算法:为解决一个问题而采取的方法和步骤。
举例:1)上班的算法:首先要收拾好出门的东西,走出家门,选择交通方式(如驾车、公交地铁、打车、步行等),前往上班所在地点,信息登记,前往工位,正式上班。
2)唱歌的算法:选择要唱的歌曲,熟悉歌曲旋律和歌词,练习一小段时间,跟着伴唱一起演唱。
3)学习的算法:确定学习的内容(学什么),选择学习的方式(怎么学),学习后的巩固,掌握程度的考察(自我检测),合格后完成该部分学习。
2.什么叫结构化的算法?为什么要提倡结构化的算法?
由顺序、选择、循环三种基本结构组成的算法叫做结构化的算法;由结构化算法组成的程序便于编写、阅读、修改和维护,这就减少了程序出错的机会,提高了程序的可靠性,保证了程序的质量。
3.试述3种基本结构的特点,请另外设计两种基本结构(要符合基本结构的特点)。
1)顺序结构:按照既定的顺序依次执行,在程序中一般是从上到下依次执行。
2)选择结构:根据既定的条件进行判断,符合条件沿一条分支执行,不符合条件沿另外一条分支执行。
3)循环结构:满足判断条件时,重复执行某一部分的操作。
4.用传统流程图表示求解以下问题的算法。
答题说明:由于画流程图、N-S图、伪代码的效果并不是很好,后面每个题目直接给出相应的C语言代码
(1)有两个瓶子A和B,分别盛放醋和酱油,要求将他们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。
代码展示:
#include<stdio.h>
//假设1代表醋,0代表酱油
int main()
{
int a = 1;
int b = 0;
int temp;
printf("未互换之前a = %d,b =%d\n", a, b);
temp = a;
a = b;
b = temp;
printf("互换之后a = %d,b =%d\n", a, b);
return 0;
}
结果展示:
(2)依次将10个数输入,要求输出其中最大的数。
代码展示:
#include<stdio.h>
//依次将10个数输入,要求输出其中最大的数。
int main()
{
int arr[10] = {
5,24,44,2,55,35,36,66,27,30 };//假设输入的10数字
int Max = 0;//用来存储最大值
int i = 0;
int sz = sizeof(arr) / sizeof(arr[10]);//求数组元素的个数
for (i = 0; i < sz; i++)
{
if (Max < arr[i])
Max = arr[i];
}
printf("最大值为:%d\n", Max);
}
结果展示:
(3)有3个数a,b,c,要求按大小顺序把它们输出。
#include<stdio.h>
//(3)有3个数a,b,c,要求按大小顺序把它们输出。
int GetMax(int a, int b, int c)
{
if (a < b)
{
a = b;
}
if (a < c)
{
a = c;
}
return a;
}
int main()
{
int a =