2.3.1  经典程序设计语言C

1、C语言程序案例
【例】编写“hello.c”C语言程序。
C程序构成:
C程序由函数构成;程序必须有一个主函数main( );
C程序由头文件、执行部分、注释组成。

2、头文件
函数库是一种别人帮你写好的程序。
以#开始的是预处理语句。
C程序至少必须包含一条#include语句。

头文件案例:
#include<stdio.h>【I/O库函数,从键盘输入数据或向屏幕输出数据】。
#include<math.h>【数学库函数,开方等数学运算】。
【表】C语言常用函数和头文件。

3、C程序执行部分
(1)主函数
每个C程序必须而且只能有一个主函数main( );
主函数可位于程序的任何位置;
程序总是从主函数main( )开始执行;
用return 0语句说明程序结束。
变量声明是为变量分配内存空间。
每个语句都以;结束。
语句组的开始和结束用{  }标志。

(2)C语言函数
C语言程序由一个或多个源文件组成;
C语言程序一般由大量的小函数构成。
Windows SDK中有数千个应用程序函数,让程序员调用。

C/C++标准没有规定图形函数。
Windows图形编程需要图形设备接口类库(GDI):
如:MFC(微软基础类库);
如:DirectX (微软多媒体程序类库) ;
如:OpenGL (开放图形库)等。

【例】超市购物优惠:不超过100元按9折付款;超过100元超过部分按7折收费。
输入一个数给浮点型变量w;
判断w如果小于100,则x=0.9*w;
否则x=0.9*w+0.7*(w-100);
输出x的值。

【例】循环求1+2+3….+100之和。
步骤1:声明迭代变量sum初始值为0;
步骤2:确定迭代公式:sum←sun+i;
步骤3:i 分别取值1,2,3,…,100时,重复计算:sum←sun+i。

2.3.2  面向对象编程语言Java

1、Java语言的发展
Java组成:
Java程序语言
Java虚拟机(JVM)
Java应用程序接口(Java API)
特点:
面向对象
跨平台应用
多线程编程等。

2、Java跨平台工作原理
(1)Java语言跨平台的特性
将源程序编译为中间字节码文件(.class);
不同平台解释器程序(虚拟机)对字节码文件进行2次翻译;
将字节码解释成具体平台上的机器指令。

虚拟机是一种由软件实现的机器。
优点:安全性和跨平台性。
缺点:占用资源多,性能差,不适用于高性能计算和嵌入式系统。
 

3、面向对象程序设计的概念
Java是面向对象的语言,处理的最小完整单元为对象。

(1)对象
万事万物都是对象,如:学生、歌曲、数据等。
对象的状态用“属性”进行定义;
对象的行为用“方法”进行操作。

【名言】
一切都是对象。
—— 阿伦.凯

(2)类
类是相似对象的集合。
如:苹果、梨、橘子等对象都属于水果类。
(3)属性
属性是描述对象静态特征的一组数据。
如:汽车颜色、生产厂家等;如学生姓名、学号、性别、专业等。
(4)方法
在Java中,执行特定任务的函数或过程统称为方法。
如:abs(x)(求x绝对值方法),sin(x)(求x正弦方法)等。

【例】类/对象/成员属性/成员方法之间的关系。

4、Java程序的结构
Java源程序组成:包的引用、类的定义。
类由类声明和类体构成;
类体由变量和方法构成。

程序可以有多个类,但必须有一个主类(类似于C语言中的主函数);
主类是Java程序运行的入口点;
主类为包含main方法的类;
主类名称必须与文件名一致(C语言无此要求)。

第3行:public声明该类为公有类;class表示定义一个类;
第5行:主方法声明,方法是定义类的操作,功能与C的main( )主函数相同。
第5行:public声明该方法为公有类。
第5行:static表示这个方法是静态的。
第5行:void说明main()方法没有返回值,main是主方法名。
第5行:String args[]表示这个方法接受的参数是数组。
第7行:方法语句,功能是向控制台输出字符串。
第7行:System是类,out是对象,Print是方法;
第7行语句含义:利用System类下的.out对象的.println()方法,向控制台输出字符串“Hello, World!”,并用一个新行结束。

5、面向对象程序设计的特征

(1)封装
封装就是尽可能隐藏代码的实现细节。
   【例】人(对象)可以用下面的方式封装。

面向对象的三大特征:
封装:隐藏内部实现过程
继承:复用现有程序代码
多态:改写对象不同行为

(2)继承
继承是一个对象从另一个对象中获得属性和方法的过程。
继承实现了程序代码的重用。
继承要求父类更通用,子类更具体。
【例】“教师”与“人”差不多,只多了一个特征行为“授课”。
如果采用继承的方式,“教师”可以用下面的方式封装。

(3)多态
多态:不同对象对同一消息作出不同响应,产生不同执行结果。

2.3.3  数据统计编程语言R

R语言是统计学家发明的语言。
R语言应用:
统计分析(如:统计分布,假设检验,统计建模等);
金融分析(如:量化策略,投资组合,风险控制,时间序列,波动率等);
数据挖掘(如:数据挖掘算法,数据建模,机器学习等);
生物科学(如:DNA分析,物种分析等);
生物制药(如:生存分析,制药过程管理等);
地理科学(如:天气预报数据分析,气候数据分析,遥感数据分析等);
数据可视化(如:大数据,静态图,动态图,社交图,地图,热图)等。

1、R语言的功能
数据存储和处理;
数组运算工具(向量运算、矩阵运算等);
统计分析工具(时间序列分析,非线性建模,统计检验,分类,聚类等);
统计制图。

R语言是开源软件。
软件包由R语言、LaTeX、Java、C语言等编写。
R语言社区可下载到软件及第三方软件包。
常用软件包:经济计量、财经分析、人文科学研究、人工智能研究等。

2、R语言的运行
R语言语法上与C类似,但语义上属于函数设计语言。
R语言主要以命令行方式操作。
命令提示符为>

5、R语言编程案例
【例】R语言编制“helloworld!”程序。


【例】5种品牌的啤酒爱好者人数为:210,312,170,85,223。利用R语言进行卡方检验,说明不同品牌的啤酒爱好者人数之间是否没有差异?

结论:p<0.05,拒绝原假设,因为数据分布不均匀。

【例】用R语言画出鸢尾花的数据集的散点图。

2.3.4  逻辑推理编程语言Prolog

1、Prolog程序语言的特点
Prolog是以一阶谓词逻辑的霍恩子句为语法,以消解原理为工具,加上深度优先控制策略的逻辑编程语言。
Prolog语法简单,但描述能力很强。
如:事实和规则描述的是某一学科公理, 那么问题就是待证的命题;
如:事实和规则描述的是某些数据和关系,那么问题就是数据查询语句。
Prolog程序没有特定的运行顺序,程序运行顺序不由程序员决定。
Prolog程序中,数据就是程序,程序就是数据。
Prolog程序没有if、case、for等控制语句。

2、Prolog程序基本概念
(1)编译器
Prolog程序可以解释执行,也可以编译执行。
(2)常量与变量
常量称为原子,以小写英文字母表示;
变量以大写英文字母开头(如X、Y等);
变量没有数据类型之分。
(3)谓词
谓词可以是一段程序、一个数据,或者一种关系。
(4)内置谓词
内置谓词是Prolog基本函数。
比较谓词:>、<、>=、<=、=、\=(不等于);
赋值谓词:is(相当于=);
运算谓词:+、-、*、/、mod(模运算);
其他谓词:write(输出到屏幕)、length(获取长度)、append(合并列表)等。
(5)语句符号
一行程序代表一个子句;
每个语句以“.”表示语句的结尾;
带有“:-”(if)的子句称为规则;
不带“:-”的子句称为事实;
“,”表示逻辑关系“and”;
“;”表示逻辑关系“or”;
程序运行输入问题时,提示符以“?-”开头;
用户输入查询后,Prolog回答yes(true)或no(false)。

2、Prolog基本语句
Prolog的基本语句:事实、规则、问题。
问题相当于主程序,规则相当于子程序,而事实相当于数据。

(1)事实
说明问题已知对象之间的性质和关系。
例如:likes(libai,book).   /* 喜欢(李白,书) */
like语句表示对象libai(李白)和book(书)之间有喜欢的关系。
末尾“.”表示语句结束。

(2)规则
规则表示对象之间的因果关系、蕴含关系、对应关系。
规则左边表示结论,右边表示条件。
例如:bird(X):-animal(X),has(X,feather).    /* 鸟(X):-动物(X),有(X,羽毛). */
“:-”表示“if”,它的左边是结论,右边是前提;
“,”表示“and”,用来分隔两个句子;
以上语句表示:如果X是动物,而且X有羽毛,那么X是鸟。

(3)问题(目标)
问题表示用户的询问,它是程序运行的目标,是程序执行的起点。
问题可以写在程序内部,也可以在程序运行时临时给出。
例如:?- student(libai).    /* 李白是学生吗? */

3、Prolog程序案例
【例】编制Prolog程序,判断李白(libai)的朋友是谁?

【例】命令式语言的IF语句用Prolog语言实现。
命令式编程语言IF语句实现:                                                          Prolog语言IF语句实现:


Prolog语言的工作原理与关系数据库基本相同。
在Prolog程序语言中,递归功能得到了充分体现。

2.3.5  函数式编程语言Haskell

1. 函数式编程的特点
(1)函数是第一等公民
意思是函数什么都可以做。
如:函数可以是对象,可以有属性;可以作为参数传输,可以作为结果返回。

(2)函数嵌套调用
函数式编程的思想是把程序运算过程尽量写成一系列嵌套函数地调用。
函数式编程关心数据的映射,命令式编程关心解决问题的步骤。

(3)用表达式不用语句
表达式是一个单纯的运算过程,它总是有返回值;
语句是执行某种操作,它不一定有返回值;
函数式编程要求使用表达式,不使用语句。

(4)变量不可改变
函数式编程不允许多次给同一个变量赋值。
如:函数式编程语言不认可“x = x + 1”这种语法。
函数式编程中,对值的操作不是修改原值,而是产生新值,原值保持不变。

(5)用递归代替循环
纯函数语言无法实现循环。
原因:for循环使用变量作为计数器,While循环需要可变的状态作为跳出循环的条件。因此,纯函数式语言中只能使用递归来解决迭代问题。

2. 函数式编程语言案例
(1)编译器
Haskell语言的编译器是GHC;GHCI是解释器。

(2)表达式
表达式格式:let [绑定] in [表达式]

(3)函数
函数形式:函数名 参数 = 表达式

【名言】
不用任何赋值的程序设计称为函数式程序设计。
—— 哈罗德·阿贝尔森《计算机程序的构造和解释》

【例】用Haskell编写二次方程求根函数。

2.3.5  函数式编程语言LISP

【参考】 LISP(列表处理语言)由约翰·麦卡锡在1958年创造,它是一种基于λ演算的函数式编程语言。 
【例】打印“hello world”,并打印1+2+3+4运算结果(Common Lisp 实现)。

Lisp程序由表组成,形式为:(xxx ......);行尾的“;”为注释符;
运算符在前,元素在后,如 (a+b)表示为 (+ a b)、*(3,4)等【逆波兰表达式/后缀表达式】;
Lisp仅仅是语言规范,并没有指定具体的解释和编译行为,因此Lisp的语法是可扩展的;
自由促进了多样化,也促进了分裂,各种Lisp方言和设计方法层出不穷;
Lisp是历史上第一个采用内存垃圾回收的语言。

2.3.6  并行程序设计概述

1、并行编程类型
两个事件在同一时间内发生称为并发。
两个或多个任务在同一时间段内执行叫做并发执行。
并行编程将程序分成独立的若干部分,在多个CPU内核中同步执行。
并行编程目前仍然没有一套普遍认同的编程体系或方法。
目前没有一个专业的并行程序语言。
大部分并行程序语言都是附加在传统的程序设计语言之上,如MPI。

并行计算主要软件平台:
广泛用于高性能集群计算的MPI技术;
互联网海量数据计算平台,如:Hadoop;
互联网大规模网格计算平台,如:BOINC。

2、程序并行计算中的相关性
相关性是指指令之间存在某种逻辑关系。
包括:数据相关,资源相关、控制相关。

(1)数据相关
一条指令的结果,可能在后面的指令中使用,称为数据相关。
【例】Python程序片段如下。

(2)资源相关
一条指令需要另一条指令正在使用的资源,称为资源相关。
【例】程序片段如下。
(3)控制相关
分支指令会引起指令的控制相关。
【例】某程序指令序列片段如下

3、Amdahl加速比定律
(1)加速比定律
阿姆达尔:加快经常性事件的处理速度能明显地提高整个系统的性能。
Amdahl加速比定律:

Amdahl定律阐述了回报递减规律:
如果仅仅改进一部分计算性能,则改进越多,系统获得的加速比增量会逐渐减小。

(2)Amdahl定律应用
【例】100亩成熟庄稼等待收割,越多的人收割庄稼,就能越快地完成收割任务。

【例】100亩庄稼的成熟日期不一,增加更多人收割也无法很快完成收割任务。

大多数程序由一系列并行和串行化的片断组成。
程序的并行加速比受到程序中串行部分的限制。

4、程序并行执行的基本层次
应用程序的并发
操作系统的并发
硬件设备的并发
目前CPU和操作系统均已具备并发执行功能。
并行编程层次:
指令级并发,如(a+b)和(c-d)之间没有相关性,能够并发执行。
函数级并发,如分解若干个没有相关性的函数,分配给不同进程并发执行。
对象级并发,如3D游戏中,对游戏人物并行渲染处理。
程序级并发,如操作系统并发运行数个应用程序。

5、并发程序设计的难点
程序执行的顺序和位置通常不可预知;
多任务并发执行时,不能确定哪个任务首先完成;
多任务并发执行时,不能确定由哪个CPU来执行这些任务;
并行编程的特征:
确认问题是否存在并行性。
将程序适当地分解成多个任务,使这些任务可以并发执行。
进行任务之间的通信协调,使任务能够同步高效运行。
注意任务调度,避免竞争和死锁。

【参考】并行程序设计的步骤。


(1)划分:将计算事务拆分成多个小任务。
(2)通信:确定任务之间需要执行那些通信。
(3)聚合:将确定好的任务与通信聚合成更大的任务。
(4)分配:将聚合好的任务分配到进程或线程中。

2.3.7  事件驱动程序设计

GUI(图形用户接口)程序是一种典型的事件驱动程序。
GUI程序在循环等待接收消息或事件,然后根据事件执行相应的操作。
GUI基本组件:窗口、按钮、标签、文本框、菜单等。
事件驱动=事件发生时,程序立即调用事件处理函数进行相关操作。
事件:鼠标点击、键盘输入、程序退出等操作。
程序根据事件采取的操作称为回调。

Python事件触发命令:command=回调函数
点击组件时将会触发回调函数。

下一篇:【08】2.4  软件开发方法

回到目录

【07】2.3 程序语言介绍相关推荐

  1. Lua:01---Lua语言介绍、运行Lua程序(lua解释器)

    一.Lua语言介绍 Lua语言从一开始就被设计为能与C/C++及其他常用语言开发的软件集成在一起使用的语言,这种设计带来了非常多的好处: 一方面, Lua语言不需要在性能.与三方软件交互等C语言已经非 ...

  2. [C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍

    今天是个不错的日子,不仅有人收了我做徒弟从此传授我有关C++的一些知识,由于前一段时间喜欢上了外挂的研究也用到了一些MFC的知识及一些Windows APIs编程,但是对C++还是没有从根本上认识.我 ...

  3. JavaScript脚本语言介绍并实现第一个Hello World程序

    1.JavaScript是Web页面中的一种脚本编程语言,也是一种通用的.跨平台的.基于对象和事件驱动并具有安全性的脚本语言,具有与Java类似的语法.它不需要进行编译,而是直接嵌入在HTML页面 ...

  4. 程序语言原理基本介绍

    影响语言设计的两大要素 计算机体系结构 程序设计方法学 程序语言评价标准 可读性 可写性 可靠性 总成本 正交性 正交性好久意味着相对较小的基本结构集合,能够以较少的组合方式来构成语言的控制结构和数据 ...

  5. 学习之旅10-R语言介绍

    一.R语言介绍 前言 1.R语言介绍 1.1 为何要使用R 1.2 R的获取和安装 1.3 R 的使用 1.3.1 初识R 1.3.2 获取帮助 1.3.3 工作空间 1.3.4 输入和输出 1.4 ...

  6. Scheme 语言介绍

    Scheme 语言介绍 Wolfgang Kreutzer 翻译:寒蝉退士 原文:http://www.cosc.canterbury.ac.nz/~wolfgang/cosc302/Chap2.3. ...

  7. 56岁潘石屹下定决心学Python,60多岁程序语言之父们还在敲代码,你还敢懈怠吗?...

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 比你成功的人,比你还努力. 上周,SOHO中国董事长.地产大亨潘石屹,56岁生日当天发布微博宣布进军编程语言Python. 紧接着第二天,又 ...

  8. python语言简介-Python语言介绍

    原标题:Python语言介绍 Python简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其 ...

  9. 计算MATLAB时间复杂度的例子,学编程数学到底有多重要?线性代数能否视为一门程序语言呢?...

    点击上方蓝色字体,关注我们 相信这么努力的你 已经星标了我 老九学堂 你身边的IT导师 学编程数学到底有多重要?在大学数学学科中线性代数是最为抽象的一门课从初等数学到线性代数思维跨度比微积分和概率统计 ...

最新文章

  1. T-SQL中default值的使用
  2. python安装包-在Python中安装包的三种方法
  3. 《计算机组成原理》数据传送类指令不包括( ),兰大《计算机组成原理》20秋平时作业1【标准答案】...
  4. 事务日志的物理和逻辑构架
  5. linux 三维数据绘图软件,Linux下开发基于.NET的三维绘图程序
  6. DRBD+Heratbeat+NFS高可用文件共享存储
  7. 对文式编程的一些误解
  8. 论文翻译 SLAM综述
  9. 289页初中级前端题助你拿下Offer,附面试题答案
  10. Word2013关于图表目录
  11. SpringCloud基础学习
  12. Matlab2019b中配置最小均方误差滤波器(dsp.LMSFilter)详细设置
  13. matlab 匹配屏幕大小写,匹配正则表达式(不区分大小写)
  14. 麦澜德医疗科创板上市:年营收3.4亿市值44亿 深耕盆底康复
  15. GlusterFS 和 Ceph 比比看
  16. oracle add_months()函数
  17. 【视频教程】帝国CMS制作网站系列教程17—帝国CMS模板的策划
  18. SEO教程VIP资源合集,速度领!手慢无
  19. 项目经理的职责与技能
  20. mysql数据库理论和实践教学

热门文章

  1. SitePoint Podcast#180:David Lee King的Face2Face
  2. 4G LTE频带划分和国内运行商资源分配
  3. 小程序滚动穿透解决方案
  4. [Eureka集群] 在linux上部署SpringCloudEureka的集群服务端(Dalston.SR5版本)
  5. 防手机锁屏解锁自定义View
  6. MySQL之主键ID生成策略
  7. iceberg系列:源码- BinPacking 解读
  8. WEB前端之ELEMENT-TABLE
  9. win10下载备忘录
  10. matlab图形设计界面 文献翻译,毕业设计基于matlab的数字图像识别的设计与实现文献翻译V8.1(资料4)...