1.算法——程序设计的灵魂
-
提问:当你面对一个问题时,你解决它的基本步骤是什么?
答曰:理解问题;制定计划;执行计划;回头看。 -
提问:如何用计算机求解问题?
答曰:问题描述——>对问题进行抽象,数学建模(让计算机理解问题)——>算法设计——>程序设计(用计算机语言)——>求出问题的解。然后,我们查看计算机求得的结果是否正确,还能不能改进等。
【实例】对于买土豆这个问题。我们需要抽象出买多少斤土豆(用x表示),土豆一斤多少钱(用y表示),继而才能计算出买土豆所需的总价格。
建模:t=x*y
算法设计:
step1:输入x,y;
step2:根据公式t=x*y计算总价;
step3:输出总价t
有了算法设计,接下来用程序语言来实现就可以进行问题的求解了。可以看出,算法设计很关键。
- 提问:什么是算法?
- 答曰:为解决一个具体问题而采取的确定的有限的操作步骤,仅指计算机能执行的算法。
前辈说,程序设计是一门艺术,体现在:算法设计是程序的灵魂,结构设计是程序的肉体。Pascal语言的发明者,同时也是图灵奖获得者Wirth教授提出:算法+数据结构=程序。
-
算法的特性:
有穷性(包含有限的步骤操作);确定性(每一条指令必须有明确的含义,对于相同的输入能得出相同的执行结果);允许没有输入或有多个输入;必须有一个或多个输出。
-
常用的算法描述方法:
(1)自然语言;通俗易懂,符合人的日常思维习惯,但不易直接转换为程序。
step1:输入x,y;
step2:根据公式t=x*y计算总价;
step3:输出总价t
(2)伪码描述:介于自然语言和计算机语言之间
begin
input x,y
t=x*y
output t
End
(3)流程图:形象直观。描述程序的控制流程和指令执行情况的有向图。
(4)N-S结构化流程图:取消了流程线。
2. 顺序结构
- 问题:把大象放到冰箱里需要几个步骤?
- 答曰:打开冰箱门;把大象放进去;把冰箱门关上。
让计算机求解问题,必须事先指定好求解次序。一般而言,顺序结构程序涉及如下三个基本操作:输入数据;处理数据;输出数据 - 顺序结构特点:
只要按照解决问题的顺序写出相应的语句就行。执行顺序是自上而下,依序而行,也即一句一句执行。
【编程实例】求两个整相乘的结果,并将该结果输出的屏幕上。
#include<stdio.h>
int main()
{
int x,y,xc;
scanf("%d%d",&x,&y);
xc=x*y;
printf("%d*%d=%d\n",x,y,xc);
return 0;
}
3. 选择结构
- 思考:什么时候需要使用选择结构?选择结构有几种形式?
人生常常面临许多岔路口,不同的抉择将有可能完全改变你人生的轨迹。
例子1:
- 曹操败走华容道
- 如果曹操不走华容道
- 如果关羽不放走曹操
历史恐怕就要改写了。
例子2:
意林上有篇文章:马屁精改变了欧洲世界。有关窝阔台的故事,大家可以去看看,特别有趣。
例子3:
前几天微信朋友圈发了一个幼儿园的视频,老师提问:树上有10只鸟,开枪打死一只,还剩几只?
孩子们回答:
如果挂在树枝上,则剩一只,如果掉下来,则一只也不剩。
如果有关在笼子里的鸟,则。。。。。。
如果用的是无声手枪,则。。。。。。
如果树上有的鸟是聋子,则。。。。。。
如果一枪打死了两只,则。。。。。。
当时笑的肚子疼,看了好几遍。
其实,上述几个例子均为多分支控制问题,可以采用选择结构(分支结构)来解决,共有三种选择结构。
3.1单分支
单分支:如果满足某种条件,就进行相应的处理。例如,我昨天给月月说:闺女,你要是认真吃饭,待会妈妈让你看两集小猪佩奇。该问题可采用if语句来实现。
if(月月认真吃饭)
妈妈让她看两集小猪佩奇;
单分支只提到月月认真吃饭了该怎么处理,并没有提到月月不认真吃饭该怎么处理。
【编程实例】比较两个数的大小,求出较大的值。
#include<stdio.h>
int main()
{
int x=11,y=22;
int max=x;
if(x<y)
max=y;
printf("max=%d\n",max);
return 0;
}
单分支指的是:在满足x<y的情况下,语句max=y;被执行,并没有提到x>=y的情况该怎么做。所以说,单分支就是要么执行,要么不执行。
3.2:双分支
双分支:在两个不同的操作中选择其中一个来执行。用if-else语句实现。
例如,我今天又给月月说:闺女,你要是认真吃饭,待会妈妈让你看两集小猪佩奇;否则的话,妈妈带你去游乐场玩。该问题可采用if-else语句来实现。
if(月月认真吃饭)
妈妈让她看两集小猪佩奇;
else
妈妈带她去游乐场玩;
双分支不但提到月月认真吃饭了该怎么处理,也提到了月月不认真吃饭该怎么处理。
【编程实例】比较两个数的大小,求出较大的值。
#include<stdio.h>
int main()
{
int x=11,y=22,max;
if(x<y)
max=y;
else
max=x;
printf("max=%d\n",max);
return 0;
}
再来看一个稍微复杂的双分支结构,不要晕哦。
【编程实例】比较三个数的大小,求出最小值。
#include<stdio.h>
int main()
{
int x=11,y=22,z=33;
if(x>y)
{
if(y>z)
printf("min=%d\n",z);
else
printf("min=%d\n",y);
}
else
{
if(x>z)
printf("min=%d\n",z);
else
printf("min=%d\n",x);
}
return 0;
}
3.3多分支
多分支:有多个选择,用else if语句实现。
例如,我又给月月说:闺女,你要是认真吃饭,待会妈妈让你看两集小猪佩奇;否则的话,如果你认真洗脸,妈妈就带你去游乐场玩,要是不认真洗脸,就待在家里听妈妈给你讲故事哦。该问题可采用if-else语句来实现。
if(月月认真吃饭)
妈妈让她看两集小猪佩奇;
else if(月月认真洗脸)
妈妈带她去游乐场玩;
else
月月待在家里听妈妈讲故事;
【编程实例】根据输入的学生成绩判断等级:成绩≥90时为A级,80≤成绩<90时为B级,70≤成绩<80时为C级,60≤成绩<70时为D级,成绩<60为E级。
#include<stdio.h>
int main()
{
int score;
scanf("%d",&score);
if(score<0||score>100)
printf("input error!\n");
else if(score>=90&&score<=100)
printf("A\n");
else if(score>=80)
printf("B\n");
else if(score>=70)
printf("C\n");
else if(score>=60)
printf("D\n");
else
printf("E\n");
return 0;
}
上述程序也可以改写单分支结构:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int score;
scanf("%d",&score);
if(score<0||score>100)
{
printf("input error!\n");
exit(1);
}
if(score>=90&&score<=100)
printf("A\n");
if(score>=80&&score<90)
printf("B\n");
if(score>=70&&score<80)
printf("C\n");
if(score>=60&&score<70)
printf("D\n");
if(score>=0&&score<60)
printf("E\n");
return 0;
}
也可以改写为双分支结构:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int score;
scanf("%d",&score);
if(score<0||score>100)
{
printf("input error!\n");
exit(1);
}
else
{
if(score>=70)
{
if(score<80)
printf("C\n");
else if(score<90)
printf("B\n");
else
printf("A\n");
}
else
{
if(score>=60)
printf("D\n");
else
printf("E\n");
}
}
return 0;
}
采用嵌套,if选择语句将变得异常灵活。 大家慢慢领悟它的奥秘吧。祝你们愉快,健康!!!