学习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;
}