What & How & Why

Intro, Key Concepts, Functions

Period 1 Notes


Introduction

Programming Language

  • Programming Language:
    • Low Level
      • 计算机实际执行的程序
    • High Level
      • human friendly
      • 需要被转换成 low level 才能被计算机处理
      • 优势:可移植(protable):可以在不同的平台上运行
解释器与编译器
  • 解释器按行对程序进行 High level 到 low level 的转换
  • 编译器只转换一次。转换后的程序被称为 Object Code & Executable,可反复使用

Program

  • 一系列为了实现某种功能的指令集合
  • 需要的部分:
    • input
    • output
    • math:比如加法等算数运算
    • testing:检查程序的执行是否正常
    • repetition:通常用于执行重复的工作

Debuging

错误的种类
  • Compile-time error
    • 编译期间出现的错误,通常是语法错误,由编译器检测
  • Run-time error
    • Logic error & semantics:可成功编译,但结果不正确

System Development

Life Cycle
  • Application 通常包含了各种程序,用于实现各种任务
  • 这些任务的设计与组合通过系统分析师(System Analyst)在程序计划期完成
  • 流程 Cycle:计划→分析→设计>实现→维护→计划
    • 计划期:所有的 Input,processing,output 都会被系统分析师设计好
    • 实现期:每个程序员会被指定去实现对应的模块
    • 维护期:程序在实际使用中出现的问题,以及新的功能的实现,都在此阶段解决

Modularization

Programming 中最重要的一点就是整合(调用)已经实现的代码到我们自己的程序中。调用通常通过函数(function)来实现。通过函数,我们可以将大型的 program 分解为若干的小的部分进行实现。

函数通常分为两种类型:

  • programming Control:分解并控制整个程序,调用的名字可能相同,但每次执行的任务很可能不同
  • Special task:为特定的功能而实现的函数
函数的建立方式
  • 定义函数:撰写函数实际的代码
  • 声明函数:告诉编译器我们已经有了某个函数的原型
  • 调用函数
函数的交流

函数通过参数(parameter)进行数据的传递与交流。这种方式允许我们同时使用多个函数来完成复杂的任务。

C++ 中的函数

  • Program Control: C++ 中使用 main() 函数
    • main 函数是整个程序开始和结束的地方
    • 结构:
      • includes
      • technical items: 比如命名空间
      • 全局变量
      • 函数的声明
      • 函数的调用
      • 函数的实现
Special task function

return type + identifier name (<data type> <identifier name for input value>)
{
    line of code;
    return <value>;
}

函数的前置声明

函数的前置声明是为了使函数对编译器可见。通常在程序的撰写中,main() 函数处于其他函数实现的前面。main() 中可能会包含各种定义至于其后的函数的调用。调用此类后置定义的函数,必须要对其进行前置申明,也就是:声明→调用→定义

Programming Design

  • 程序通常通过 IPO (Input & processing & output) 的方式来设计。
  • 设计工具包含
    • 伪代码(pseudocode):用于对程序的每个函数进行逻辑和算法上的建模
    • 流程图(flowcharting):类似伪代码,以图形的方式对程序进行建模,通常通过计算机软件来实现(computer aid SDE)
  • Test Data:包含一组输入和对应的期望的输出,用于检查程序的正确性
Pseudocode

为了描述逻辑而使用,不是真正的可编译代码。比如下面的例子:

Input
    display a message asking the user to enter the first page
    get the first age from the keyboard
    display a message asking the user to enter the second page
    get the second age from the keyboard
Processing
   calculate the answer by adding two ages together and dividing by two
Output
    display the answer on the screen
    pause so the user can see the answer
当使用伪代码确定了程序的设计之后,我们就可以使用具体的程序语言,按照指定好的逻辑来实现程序。对于程序复杂的情况,每个子模块都需要以 IPO 的形式独立存在,并以 Hierarchy chart 的形式串联起来。这种方法被称为 HIPO(Hierarchy IPO

Test data
  • Test data 可以用于检查 model 和 code 的正确性。
  • model 检测:测试伪代码中的逻辑是否正确
  • code检测:测试实现中的逻辑是否正确

Formal & Natural languages

  • Formal language:为特殊目的而设计的语言。程序语言是 formal lanugage of expressing computations.
    • 对 systax 有严格的要求
  • Nature language:人类使用的语言
  • 区别:
    • 二义性(ambiguity):自然语言通常会有歧义
    • 复杂性(redundancy):自然语言通常非常复杂
    • literalness:自然语言不够精确
Syntax rules

Syntax 与下面的两个概念相关:

  • tokens:语言的基础组成部分
  • structure of statement:taken 的排列方式
    • parsing:排列 taken 进而生成 structure correct 的 statement 的过程。(semetics of sentence)

IDE

IDE(integrated Development Environment)指集成开发环境,包括了:

  • text editer
  • compiler
  • linker
  • operation system commands
编译过程
  1. 加载 pre-processor
  2. 将编程语言转换为机器指令,并将指令和对应数据&linker 的解决方案保存为 Object file
  3. linker 通过 Object file 将对象,库连接到一起,生成可执行文件
  4. IDE 通过 loader 来读取可执行文件进行和运行
编译过程中的错误
  • compiler error:任何 Pre-professior 处理,和机器指令转换过程中遇到的错误
  • linker error:链接期的错误
  • Logic

Compiler Directives

指编译期的预处理阶段,通常包括:

  • include:将会被插入到本文件前的文件,通常是 Header file
  • define:由编译器存储的变量,当在程序中遇到该变量,编译器会自动将其替换为对应的值

#define PI 3.14159
areaCircle = r * r * PI;
//equal to 
areaCircle = r * r * 3.14159

Key concepts

Variables and types

  • 类型(type)定义了一系列的值,和一系列可以应用到此类值上的操作。有四种类型:
    • Nothing
    • Integer
    • Float-point
    • Complex
C++ 中的数据类型属性
  • C++ 关键字
  • Domain:数据类型允许的值
  • Signage:是否允许负数
  • Meaning:数据类型表示的是哪类值
  • Rules of Definition:该类型数据用什么特殊字符表示
  • Size:该类型需要占用多大的内存空间\
Family Data Type Reserved Word Represents Standard Type
Nothing Null or nothing void No data Yes
Integer Boolean bool Logical true and false Yes
Integer Character char Single characters Yes
Integer Integer int Whole numbers Yes
Floating Point Floating Point float Fractional numbers Yes
Complex String string A sequence (sting them along) of characters No
Complex Array N/A A collection of elements of the same data type No
Complex Pointer N/A A value that points to a location (an address) within the data area No
数据类型的特点
  • 变量的类型决定了值的取值范围
  • 赋值的变量必须符合声明的类型
  • 输出变量指输出变量中存储的值

Identifier Names