吉大 高级语言程序设计

基础知识

算法——程序设计精髓

什么是算法?
一个计算过程,具体指明应该进行的 操作描述了解决问题的方法和途径
是程序设计的基础和精髓

有效算法的特点
有穷性、确定性、有效性
输入、输出

组成

  1. 基本操作
    表达式、变量赋值、读(输入)、写(输出)
  2. 基本的控制结构
    顺序控制结构、分支控制结构、循环控制结构
    函数调用、函数返回

算法的表示

  • 自然语言 \(\to\) 程序 \(\to\) 流程图(越来越清晰明了)

image

  • 流程图 \(\to\) NS图(NS图是格式化的,但是没有流程图那么清晰,因为NS图是封闭的)
    image

  • PAD图(层次化,很清晰,是开放的)
    image

PAD图

优点:
相比传统的流程图和NS图等,PAD图具有可见性好、结构唯一、易于编制、易于检查和易于修改等优点,更适合讲述程序设计;
同时也避免了直接使用代码讲解算法的呆板和枯燥。

组成:

  • 操作序列:一条垂直竖线(顺序的从上向下操作)
  • 基本操作:小方块
  • 选择:长相如下,P1对应Ture的操作,P2对应False的操作
    image

基本的控制结构的表示:

  • 顺序控制结构:操作序列+基本操作
    image

  • if-else分支控制结构:
    image

  • CASE多分支
    image

  • While循环控制结构
    image

  • 函数调用、函数返回
    image

程序和计算机程序

▶ 什么是程序:
程序是一个指令序列,也就是用指令 排成的一个工作顺序,工作步骤。
▶ 计算机语言——程序设计语言
与计算机交流
下达指令

程序设计语言分为:机器、汇编、高级

C语言是一种高级语言

C语言程序结构

  • 扩入头文件
  • 变量声明
  • 有效计算部分(函数)
    image

注意:

  • 一个C语言程序由若干个编译单位组成(一个c语言文件就是一个编译单位)

  • 一个编译单位由若干顶层声明组成

  • 声明包括类型定义、变量声明、外部声明、宏、...;

  • 有且仅有一个主函数 main。

程序的执行

image

image

C语言是编译执行:
对于编译执行,过程如下:
image
具体执行流程如下:(理想情况下)
image

实际情况可能会出现各种错误:
image

  • 编译出错:出现语法错误
  • 数据出错:终端输入信息错误(数据类型不匹配等等)
  • 程序出错:程序输出错误(输出的结果不是我们想要的)

C语言的优点

  1. 语言简洁、紧凑,使用方便、灵活;最主要

  2. C本身是模块式,便于集体分工合作开发大型程序

  3. 运算符丰富(36个)

  4. 数据结构丰富

  5. 具有结构化控制结构,也就是说用C可以写出结构化程序(只有顺序、选择、循环数据结构的程序

  6. 与计算机硬件联系紧密,可以直接访问计算机内存,具有位操作编写系统程序方便

  7. 生成目标代码质量高

C语言的缺点

  1. 语法不严格
  2. 类型机制不严密,比如字符类型与整数类型没有区别、不检查下标超界
  3. 程序设计自由度太大,不利保证程序的正确性
  4. 若程序与计算机硬件一切,则可移植性不好
  5. 有些语言成分太复杂,不容易掌握,比如运算符(36个)
  6. 语言本身不能保证程序设计的结构化

C语言优点远远超过了它的缺点——成为主流语言
课程学习选择:“有所取、有所不取”的策略

  • 常用的语言成分——详细准确的介绍。
  • 常用但与程序设计方法联系不太紧要的成分——简单介绍
  • 不常用且与程序设计方法关系不太大的成分——不涉及
    image

顺序程序设计

基本符号

程序由若干词法单位(相当于单词)构成,词法单位由一些基本字符 构成。

  • 字符集
  • 特定符
  • 标识符
  • 间隔符
  • 注释

字符集

任何计算机系统都使用一个可被本系统识别的字符集。
该字符集包括:

  • 们常用的字母、数字
  • 诸如句号、逗号、括号之类的特殊 字符。 设计

字符集被用于:

  • 人与计算机之间以及计算机与计算之间
  • 计算机与外部设备之间进行信息交换。

注: 除字符集上的符号以外,其他符号都不允许在C语言程序中出现。

每个字符有两种形态:

  • 可视形态: A
  • 存储形态: 01000001(二进制) 、 65(十进制)

最常用的字符集--ASCII
ASCII(The American Standard Code for Information Interchange)

  • 可视字符
    字母: a~z A~Z
    数字:0~9
    特殊字符:+ - * / 等

  • 不可视字符
    文本控制符 、 介质控制符 等等

C语言使用的字符集: ASCII的子集

  • 字母:a~z A~Z
  • 数字 :0~9
  • 特殊字符(29个) ! # % ^ & * + || ( ) { }, [ ] /? : < Λ

特定符

▶在程序中起关键作用,定义程序的意义及操作
image

  • “/”表示除法: 7/2 表示整数7除2,结果为3;
  • “%”是整数求余(求模),求7整除2后的余数,结果为1;
  • for表示循环语句的开始;
  • int 是整数类型说明符;
  • “{”、“}”分别表示复合语句的开始和结束。

包括:

  • 保留字(37个):拼写是固定,并具有特殊的独立的含义及作用。
    如:auto,break,int,for等等

  • 分隔符(14个): 一个字符组成的特殊符号
    如:#( ) [ ] '| ; : { }" , \

  • 运算符(36个):定义运算
    由一个或多个字符组成的特殊符号
    中间不许夹有任何其它符号(包括空格)

标识符

“名字”:用来表示程序中出现的对象。
如:类型、变量、函数...
image

C语言标识符的构成规则

  • 以字母开头的字母、数字序列
  • 下划线“_”被作为字母看待

在使用标识符时需要注意以下几点

  1. 不能与保留字重名, 例如:for、if 等
  2. 不能与标准标识符重名, 例如:sin、exp等。
  3. 字母是区分大小写的 例如:identifier ,Identifier 不同
  4. 尽量与它所代表对象的含义相符

间隔符

间隔符包括:

  • 空格

  • 行结束符(‘\n’)

  • 水平制表符(‘\t’):其在终端和文件中的输出显示相当于按下键盘TAB键效果

  • 垂直制表符(‘\v’):让‘\v’后面的字符从下一行开始输出,且开始的列数为“\v”前一个字符所在列后面一列。

  • 换页符(‘\f’)

image

注意:

  • 任何由标识符、保留字、 字面常量组成的两个相邻词法单位之间至少应有一个间隔符。
  • 多个间隔符一起连用相当于一个。
  • 任何词法单位之内不允许有间隔符。

注释

组成

  • 由“//”开始,直到该对斜线所在文本行结束
  • 由“/”和“/”,括起来的任意一串字符

功能

  • 注释是给程序加注解用的,
  • 对程序的实际意义没有任何影响,
  • 只增加程序的可读性,
  • 编译程序把注释作为空白符处理。

意义

  • 适当利用间隔符和注释组织程序的印刷格式,
  • 使得一个程序在行文上看清晰,易读。
  • 是良好的程序设计习惯。

注:C语言对注释格式没有规定,但是建议规范注释格式
image

数据

程序操作的对象:

  • 常量:在程序的执行期间值不变
    字面常量:可以书写在程序中的常量
    常量标识符(宏定义)

  • 变量:在程序的执行期间值变化

注意:类型是数据的一个属性。 任意一个特定的常量或者变量都属于某一个数据类型.

字面常量

image

image

常量标识符

image

image

变量

变量是程序执行期间值可变的数据对象。

  • 变量值:程序运行某一刻,变量具有的值。
  • 变量属性:
    名字
    类型
    作用域
    存储空间
    存储地址

image

编译程序在把高级语言程序翻译成机器语言时:

  • 给每个变量都分配一块适当的存储空间,以便随时保存变量的值。这块存储区就是变量的存储区

  • 这块存储区的首地址就是变量的地址

  • 这块存储区中现行保存的数据就是变量的值

image

image

变量地址

  • 变量地址:变量在内存中的位置,即内存地址。
  • 求地址运算:将单目运算符“&”,缀在变量前, 求相应变量地址。
    image

变量的赋值
image

注意

  • 在同一作用域内:
    任何两个变量不许重名,也不许与其它类标识符重名。

  • 从程序的静态行文顺序看: 变量的声明必须出所有使

  • 从程序的动态执行顺序看:
    为变量赋值的操作必须在所有使用值之前。

  • 从程序的静态行文顺序看,在变量声明中给变量赋初值处,相应常量表达式必须是可计算的。

语句

程序的一个侧面是描述对数据的操 作。在程序设计语言中,表示对数据操 作的是语句。
image

image

表达式

表达式:由运算符连接起来的运算分量组成。

运算分量:变量、常量、函数调用带括号的表达式等。

  • image
  • image
  • image
  • image

image

image

表达式优先级

image

image

image

image

表达式语句

表达式语句=表达式+;
image

image

顺序控制结构

image

数据类型

运算

image

字符类型

字符类型就是单个字符。

  • C语言中把字符类型看成整数类型,其整数值是在计算机系统字符集中的编码

  • 由于C语言把字符类型看成整数类型,还定义不带符号的字符类型。

  • C语言中,所有关于在整数类型的运算定义,自然也都适用于字符类型。

混合运算

C语言中只有两种简单类型:浮点类型和整数类型

  • 字符类型、布尔类型、枚举类型都是整数类型的不同表现 形式。

这样处理类型,更接近计算机数据表示的实质(本来在计 算机内部所有数据都是二进制代码,也都是整数) 简化了概念。

但是,带来后果:

  • 类型概念太弱,有时一些不可思意的运算也是合法的; (例,字母A和年龄28相加,不可理解。但是在C中得93)
  • 不利于类型检查;
  • 不利于保证程序的正确性。

image

image

类型转换

image

隐式转换

image

单目运算(一元运算、后缀运算)转换规则

  • 所有浮点类型不转换

  • 语言街长于int类型的整数类型不转换设计

  • 短于int类型的带符号整数类型转换成int类型

  • 短于int类型的无符号整数类型
    ▶值可以用int类型表示,转换成int类型
    ▶值不能用int类型表示,转换成unsigned int类型(已经超过了 int 类型的表示范围

image

强制转换

image

赋值转换

image
image

输入输出

image
C语言不提供I/O语句, 通过标准函数库中若干标准函数实现I/O。

标准函数库

image

单字符输入输出

image

单个字符输出
输出函数:putchar (int型表达式)

操作:

  • 把 int型表达式计算出的值转换成字符类型值
  • 输出到标准输出设备

函数值

  • 输出的int型整数(操作正确)
  • EOF(-1) (否则)

例:
char ch='c';
putchar(ch+3);
将显示字符‘F'

格式输出

image
image

image

image
image

格式输入

image
image
image

分支程序设计

双分支结构

image

单分支结构

image

image

image

运算优先级

image

多分支结构

switch-case

image

image

不含break
image
image

image

enum(枚举)

枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量。它可以让数据更简洁,更易读。

枚举语法定义格式为:enum 枚举名 {枚举元素1,枚举元素2,……};

注意: 每个枚举常量可以用一个标识符来表示,也可以指定一个整数值,如果没有指定,那么默认从 0 开始递增。

image

image

循环程序设计

先循环后循环
image

image

后判断循环

image
image
例如:
image

先判断循环

image
image

for循环

image
image
例子
image

多重循环

image

image

image

求最大公因数

image

函数

image

image

image

image

image

函数调用

image

image

函数原型--先调用后定义

image

数组

数组

image

构造型数据类型 :一个值,由若干其它类型的值构成。

C语言提供3种构造型数据类型:数组、结构体、共用体
▶针对构造类型,要回答的三个问题:

  • 他的基础类型是什么?

  • 该构造型类型是以什么类型为基点出发构造新类的。

  • 构造的方法是什么

  • 不同的构造方法形成了不同的构造型数据类型。

  • 一个成分的存取方式和使用方法。
    不同的类型使用不同形式。

注意事项——数组长度为空
数组声明的最外层可以不指明本维元素个数,而由初始化算子元素 个数决定。

int a[]={0,1,2}; //声明一维数组a,a有三个元素(虽然声明 
                 //没有指出a的长度),初值分别是0,1,2。
int b[][3]={{0,1,2}, {1,2,3}, { 2, 3, 4}}, 
/*声明二维数组b,b有三行(虽然在声明中没有 指出b数组有几行),每行三个元素。
b中各个 元素的初值分别是:0,1,2,1,2, 3, 2, 3, 4, 5*/

注意:多维数组声明中,若省缺长度,只能是最左边的一维,也就是 最外层一维

//下述写法都是错误的
int a[3][ ]= ...
int_b[ ][ ][4]= ...
int c[2][ ][5]= ...

线性表--分类与检索

线性表:每个数据项的类型相同

  • 起始数据项只有唯一后继项,没有前驱项;
  • 终止数据项只有唯一前驱项,没有后继项;
  • 其他数据项 都 个唯一的前驱项;有且仅有 一个唯一的后继项。

数组是典型的线性表。
特殊的线性表:栈、队列
操作:

  • 分类:按一定规律排列数据,最简单的分类就是“排序”
  • 检索:在给定的数据集合中查找某特定的数据

分类--排序

主元排序

image

image

冒泡排序

image

image

插入排序

image

检索

顺序检索

image

对半检索

image

字符串

image

image
为标志字符串结尾,使用结束符\0'。

  • 结束符“0”的ASCII码值为0,是一个不可显示字符,代表“空”。它在 字符串结束处只起标志作用,无任何操作。

C语言中:

  • 变量字符串(字符数组),程序员须在程序中自己添加结束标志
  • 常量字符串,系统会自动添加结束。

▶ 没有结束标志,会使有效字符部分与其余无效字符混杂。

“C programming”共有13个字符,但系统自动用14个字符空间保 存它,最后一个位置保存结束符'\0'。
image

image
image

字符串操作——运算

  • C语言没有定义字符串上的运算,也不提供施与字符串上 运算的运算符,C语言字符串运算都是通过函数实现的。
  • C语言有一字符串运算函数库,头文件是string.h。

image
image
image

类型定义

image
image
image
image
image

栈和队列

线性表——队列
在数据管理上,队列的特点是“先进先出”

  • 最后进入队列的数据元素最后取出使用;
  • 而最先进入队列的数据元素也最先取出使用;
  • 数据进入在队尾进行(排在队尾);而取出在队头进行。

队列经常用于组织各种缓冲区(如打印缓冲区)。
▶由于数据总是不断产生送入缓冲区,并不断的被取出使用,所以经常把缓冲区组织成一个环形,即把缓冲区 的首尾接起来
image
image

指针

指针是高级程序设计语言中一个重要的概念
指针是程序中最灵活的成分。正确灵活运用指针,可以

  • 有效地表示和使用复杂的数据结构
  • 动态分配内存空间,节省程序运行空间,提高运行效率。
  • 指针也是程序中最危的理解和使用指针不正确,将给程序带来无法估量的错误后果。

image

image
image

image

image

指针类型、基类型

  • 在C语言中,任何一个类型都伴随着一个指向 本类型的指针
  • 指向T类型的指针为用 T* ,表示T称为该指针类型的基类型。

image

image

image

posted @ 2023-06-13 09:15  kingwzun  阅读(130)  评论(0编辑  收藏  举报