学习c++,培养编程思维

[日期:2023-10-17] 作者:信息技术 次浏览 [字体: ]

2024届10班 赵子涵  指导教师:唐军

最开始接触编程是在七年级上期选修课的时候,那时只是想在课上玩玩电脑罢了。但是第一次课我就对编程产生了极大的兴趣,体会到了编程的巨大作用。之后我便买了一本关于编程的书,各类语句:if、switch、for、while、do-while……,各类算法:递推、递归、搜索、回溯、贪心……令我大开眼界,让我认识到了编程之路的漫长,学习编程不仅为得奖,更重要的是培养编程思维。

编程思维并不是编写程序的技巧,而是一种高效解决问题的思维方式,它是“理解问题—找出路径”的高效思维过程,由分解、模式识别、抽象、算法四个步骤组成。

分解,就是把一个复杂的大问题,拆解成更可执行、更好理解的小步骤。

模式识别,就是识别不同问题的模式和趋势(共同点)的过程,在我们的经验库里找出类似问题的解决办法,套用解决。识别的模式越多,解决问题的速度也就越快。

抽象,是指聚焦最重要的信息,忽视无用细节。简单来说就是找到问题的本质,过滤掉其他无关紧要的因素。

算法,是一步步解决问题的过程。根据前面对问题的分析与理解,设计每一步的路径方法,解决整个问题。

就以画一幅“一群人在操场上打篮球”的画举例:可以把整个画面分解成人物和背景,人物可以分解成正在抢球的人、投篮的人、防守的人……,背景可以分解为操场,宿舍楼,天空,宿舍楼可以分解成门、窗子……,天空可以分成蓝天、白云、飞鸟……这样分下来,条理就立刻清晰起来了。接着模式识别,虽然人长得不一样,但他们都是一双眼睛,两只耳朵,一个鼻子,一个嘴巴,都穿着校服……我们根据这些特点建立起人的“模式”,按照这个模式就能批量画,每次只需改变动作就可以了。抽象,我们看到画时,一般都是看打篮球的人,这就是重要信息,而后面的背景就是无关紧要的因素,适当简化。算法:画人先画脸,再画身子,接着添加细节。这就是编程思维在生活中的运用。

下面,我们再从程序设计里感受编程思维。

约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈再由下一个人开始报数,数到M的人出圈;……,输出依次出圈的人的编号。N,M由键盘输入。

1)分解:每个人只有出圈和没有出圈两种状态。

2)模式识别:由于每个人只有出圈和没有出圈两种状态,因此可以用布尔型数组存储游戏过程中每个人的状态。

3)抽象:环状的圈可以理解成最后一个人与第一个人相连。

4)算法:模拟报数游戏的过程,直到所有人出圈为止。用true表示出圈,false表示没有出圈。

约瑟夫问题完整程序如下:

#include<iostream>

using namespace std;

bool a[101];

int main()

{

int n,m;

cin>>n>>m;

for(int i=1;i<=n;i++) a[i]=false;

int f=0,t=0,s=0;

do

{

++t;

if(t==n+1) t=1;

if(a[t]==false)++s;

if(s==m)

{

s=0;

cout<<t<<" ";

a[t]=true;

++f;

}

}while(f!=n);

return 0;

}