全名:Muhammad ibn Musa al-Khwarizmi 穆罕默德·伊本·穆萨·花拉子密 (大约780年—850年),波斯-阿拉伯著名的数学家和天文学家。代数学的创始人,现代数学的重要奠基人。曾任“巴格达智慧之家”大学士,翻译,钻研,总结如阿基米德,欧几里德等希腊数学家的著作后发表著名的《代数论》。至此开辟了现代数学两大门类之一的代数学(Algebra,即阿拉伯语的‘平衡’之意)。
花拉子密被认为被第十代哈里发——穆塔瓦基勒(在位847——861)即位后推行强硬伊斯兰教法后遭到迫害,普遍认为他死于公元850年。事实上瓦基勒早在穆阿台绥姆末期就掌握大权并推行伊斯兰教法造成大量学者出走或被迫流亡,被视为欧洲文艺复兴的原因之一,同时终结了阿拔斯王朝的黄金时代。
算法(Algorithm)是指一组有限的、可行的步骤,用于解决特定类型的问题。一个算法应满足以下特性:
算法方法论可以总结为三大步骤(注意:这三步并非独立存在,彼此相关联):
ALGORITHM(算法):
PROGRAMMING LANGUAGE(编程语言):
C语言诞生于1972年由 丹尼斯·麦卡利斯泰尔·里奇(英语:Dennis MacAlistair Ritchie,1941年9月9日—2011年10月12日) 和 肯尼斯·蓝·汤普逊(英语:Kenneth Lane Thompson,1943年2月4日—) 为了移植,开发UNIX,于贝尔实验室,基于B语言开发。
而C++是1983年基于C语言,由丹麦数学家,计算机科学家比雅尼·斯特劳斯特鲁普 ( Bjarne Stroustrup 1950年12月30日— )开发而来。
值得一提的是,大量的C语言的Unix使用者,也包括C语言之父汤普逊并不喜欢C++,认为它繁琐。更令人难以忍受的是,C++还将程序的本身分为了“函数Fonction”与“过程 Procedure”两类(这是一个很重要的概念,但今天与我们的主题无关暂且不表)。巧的是,不仅是他们这么认为,用C++的人和设计C++的人也是这么认为的。
尽管如此,C++ 的广泛应用不可否认。它被称为“一用就骂,骂完就用”的工业编程语言,承载着现代工业软件开发的许多任务。
在 C 语言中,平均值的计算通常使用 scanf 和 printf 实现输入和输出。它们基于格式化字符串,虽然语法简单直接,但需要手动管理输入输出的格式,不够灵活。
在 C++ 中,则使用 cin 和 cout 进行输入输出。cin 和 cout 是基于流的输入输出机制,提供了更现代化的接口,且更加面向对象。但它们的语法略显冗长,例如需要通过 ‘<< ’ 和‘ >>’ 操作符分隔输入输出。
在 C++ 中,#include 是一个预处理指令,表示在编译之前将指定的头文件内容包含到程序中。 是一个标准库头文件,它提供了输入输出流(input/output stream)的功能。通过它,我们可以使用 cin 和 cout 进行输入输出操作。值得注意的是,iostream 是由 io(input/output)和 stream(流)两个部分组成的,而不是 ios-tream,和苹果无关。
随后的:
using namespace std;翻译为:使用/using 命名空间/namespace 标准/std, (stand)的简写。std 是 C++ 标准库的命名空间,包含了常用的标准库功能,比如 cin、cout 和 vector 等。
什么是命名空间?举个例子:
一觉醒来的老白终于穿越到了他梦想的国度——苏联。还成了一名光荣的苏联红军战士。老白高兴地走在路上,迎面也走来一名军人。
军人:你哪个部队的?
老白:我是一营二连二排三班的!
对面的军人Bia一枪就把老白给毙了说:“我就是我就是一营二连二排的排长,我没见过你!你一看就是契丹人派来的间谍!”
苏联解体之后终于真相大白,源濑老白(不是错别字)是另一个团一营二连二排三班的。团就是命名空间的一种。
顺便科普一个军事常识,绝大多数情况下当有人问某个人是“哪个部队的”,在全世界绝大多数情况下这个“部队”都是指“团或及其以下。(即番号)”
类似地,命名空间也是用来区分不同“团”的机制。例如:
命名空间的作用是为了区分不同模块中的同名对象,避免命名冲突。类似于“部队编号”系统,能够确保每个代码模块都有唯一的标识。
程序执行过程的内存分布代码解释
main函数 float a, b; // 声明局部变量 (栈区)
cin >> a >> b; // 从输入缓冲区获取数据
cout << (a + b) / 2 << endl; // 输出平均值
return 0; // 栈区释放
一看中文,你就懵逼了。但在英语种stack的含义十分清晰而且直观。就是堆叠的意思。例如
stack on,指飞机降落,尤其是体型庞大的客机或运输机。
更有意思的是,编程中拥有一个原则,后进先出(LIFO),也和它的直观感受一样符合程序运行原理。
如上图,最下面的是Ice-bear,他是最先进入‘栈’的,其次是胖达(Panda),Grizz灰熊是最后一个入栈,入栈被称为push。而它们要下来(出栈)的话则是相反,Grizz先下,胖达随后,Ice-bear最后,这个被叫做“出栈”,英语即pop,这就是程序中所谓的“后进先出”(LIFO Last In First Out )原则。
举个例子:你在写文章,修图片的时候不小心误操作下意识地按下CTRL+Z,这就是栈的经典的应用,回溯上一步操作的行为叫做pop/出栈,记录上一步操作叫做push/入栈。
每次你的操作都会进入内存,简称入栈(push)就像你输入HELLO的时候
此时,栈底 [H, E, L, L, O] 栈顶
CTRL+Z,即将O弹出(pop),称为出栈,从而回到
HELL
总结
完
今天没有作业,因为快超字数了。下一课我们来讲算法和C++的布尔运算,变量,常量类型,书写规范以及语法。
推荐读物,可以帮你了解pseudocode的书写规范:
伪代码(加拿大滑铁卢大学)
Pseudocode: An Introduction (伪代码,介绍),西密歇根大学,英语