10-17日(第七周周三)上课简记:选择结构

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选择语句将变得异常灵活。 大家慢慢领悟它的奥秘吧。祝你们愉快,健康!!!

猜你喜欢

转载自blog.csdn.net/lvcongying0601/article/details/83094510