临近期末,编程社团的活动也要告一段落了。这学期我们通过学习C++,了解了编程和算法的基本概念。
算法就是完成一项任务的步骤。编程是用计算机的语言实现一个算法。
我们还学习了如何使用C++进行输入输出,以及C++中常用的数据类型。最重要的是,我们学习了程序设计的三种基本结构:
- 顺序结构
- 分支结构
- 循环结构
下面请几位同学分享一下如何使用这三种基本结构进行程序设计。
顺序结构
顺序结构是程序设计中最简单的一种,只要按照解决问题的顺序写出相应的指令就行,它的执行顺序是自上而下,依次执行。
比如我们每天的任务就是:起床->洗漱->吃饭->上学->放学回家->写作业->洗漱->睡觉,按照这个顺序一步步进行的。
使用顺序结构时要注意的是:某些步骤是不能前后颠倒的,比如说上学和放学回家。
那么我们可不可以只用顺序结构来编写程序解决问题呢?当然可以!比如经典的鸡兔同笼问题:
鸡兔同笼是中国古代的数学名题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?
算这个有个最简单的算法。(总脚数-总头数×鸡的脚数)÷(兔的脚数-鸡的脚数)= 兔的只数,即:
兔子数量:(94-35×2)÷2=12 鸡的数量:35-12 = 23
解释:让兔子和鸡同时抬起两只脚,这样笼子里的脚就减少了总头数乘以2只,由于鸡只有2只脚,所以笼子里只剩下兔子的两只脚,再除以2就是兔子数。
用C++代码实现就是:
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int h, f;
cin >> h >> f;
int r = (f - h * 2) / 2;
int c = h - r;
cout << r << " " << c;
return 0;
}
运行程序后,输入:
35 94
输出:
12 23
即兔子有12只,鸡有23只。
实现了上述程序,以后我们再计算鸡兔同笼问题时,只要输入总头数和总脚数,就可以计算出兔的数量和鸡的数量,这就是程序设计的魅力。
分支结构
顺序结构的程序虽然能解决问题,但不能做判断再执行。举个例子,我们出门需不需要带雨伞,取决于天是否下雨:如果下雨,需要带雨伞出门;否则不需要带雨伞。对于要先做判断再选择的问题就要使用分支结构。
那么使用分支结构可以解决什么问题呢?我们小学时,成绩是根据分数划分等级的,一共有A、B、C、D,四个等级。那么我们可以使用分支结构编写程序,实现输入一个分数,输出该分数对应的等级。程序如下:
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int s;
cin >> s;
if(s >= 85)
{
cout << 'A' << endl;
}
else if(s >= 70)
{
cout << 'B' << endl;
}
else if(s >= 60)
{
cout << 'C' << endl;
}
else
{
cout << 'D' << endl;
}
return 0;
}
运行程序后,输入:
94
输出:
A
实现了上述程序,我们就可以根据一个分数快速地计算出成绩等级,是不是很方便?
循环结构
光有上面两种基本结构是不够的,我们知道计算机的计算速度是非常快的。
中国最快的超级计算机:神威·太湖之光超级计算机(Sunway TaihuLight),是由国家并行计算机工程技术研究中心研制、安装在国家超级计算无锡中心的超级计算机。它安装了40960个中国自主研发的“申威26010”众核处理器,该众核处理器采用64位自主申威指令系统,峰值性能为12.54京次/秒,持续性能为9.3京次/秒(1京为1亿亿) 。
在程序设计过程中,要想充分地利用计算机的性能,循环结构是少不了的。
例如,我们想知道1~10000所有数的平方数,如果让人去计算的话,可能要很久才能得到所有的答案;但使用用循环结构的话,只需要两行代码就能搞定:
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
for(int i = 1; i <= 10000; i ++)
cout << i * i << ' ';
return 0;
}
除此之外,我们还可以利用循环结构来判断一个大整数是否为质数:
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int n;
cin >> n;
for(int i = 2; i <= n - 1; i ++)
{
if(n % i == 0)
{
cout << "No" << endl;
return 0;
}
}
cout << "Yes" << endl;
return 0;
}
循环结构还有很多其它的妙用,这就需要你我继续学习去发掘啦!
总结
经过一个学期的学习,我们学到了一些关于编程的知识,对编程有了一个初步的了解,这为我们日后学习算法打下了基础。有很多同学从中发现了编程的乐趣——编程学习并不是枯燥乏味的,它也可以锻炼你的各项能力。同学们也意识到了学习编程的重要性,编程是大势所趋,能对每个人的未来提供巨大的帮助。希望大家在以后的学习过程中再接再厉!大家加油!