当前课程知识点:C语言程序设计(上) >  数组(二) >  5.8 二维字符数组 >  5.8 单词排序

返回《C语言程序设计(上)》慕课在线视频课程列表

5.8 单词排序在线视频

5.8 单词排序

下一节:单词排序.c

返回《C语言程序设计(上)》慕课在线视频列表

5.8 单词排序课程教案、知识点、字幕

大家好

我们接下来学习

前边呢我们已经

遇到过说

可以把字符放在

一维数组里边

使这个字符呢

不一个一个去处理

变成一串一串去处理

这样感觉到非常的方便

那我们要把字符

放在一个二维数组里边

那岂不成了说

一串一串又一串的这样处理

因为二维数组是一行一行又一行

的确是这样

它会使字符处理

变得非常的方便

那怎么做这件事情呢

定义

首先是char一个数组

变成字符型的数组

那么

行下标列下标

对这样的东西的初始化

我们前边也

已经讨论过一维数组的初始化

二维数组

那你有几个行下标

你就可以给

几个行去做初始化

这里边只有一个要注意的

我们定义了三行

那我们是最多使用到三行

下标不要越界

还有列下标也是一样

我们最多是8个字符

大家一定不要忘了

给结束标记留一个位置

所以最长的这个串

是7个字符

如果这里边省略了

那我们以三个串

来定位它是

三行六列的这么一个数组

那对a数组

这样初始化完了

它在内存里的样子

是这样子

每一行

是一个串

如果我们现在这样看

把这个二维数组看成一个一维数组

这样看

那这个一维数组里边是

一个元素 两个元素 三个元素

那每一个元素

是什么呢

是一个串

所以从这个意义上说

我们其实呢

这一串一串的字符在内存里

也是这样线性的存放的

然后呢

我们把它

一串看成是一个元素的话

那它的这个

元素的首地址

就是我们现在说的

a0 a1 a2

每一行上

那么

我们有了它

就可以使

对字符的处理

变得非常方便

我们通过三个输出

就是printf的调用

来看它的方便之处

我们看第一个

从0到2

在循环体里做什么呢

printf

printf什么呢

三个s格式

就做三次

s格式

每一次对应的

ai

那么从0开始

a0 a1 a2

那这个标识什么呢

从ai开头的

这不是一个地址号吗

我们说如果是在一维数组里边

那它就是一个数组元素

而在二维地址里边

它是第i行的行首的地址

那这个s是说

你从这个行首的地址开始

一直到它的斜杠0结束

把这个串输出

把这个

ai开始的这个串输出

那这个循环进行了三次

就输出了三个串

那这个循环里边

对着的

不是s格式了是c

所以后边是什么呢

后边是aii

第i行第i列

0行0列

1行1列

2行2列

对角线上的元素都输出来

一个元素一个元素说

对应的百分号c

那我们通过这个是想说什么呢

一个二维数组里的

任何一个元素

你也是可以访问到的

你既可以一串一串的访问

用百分号s的格式

你也可以一个一个的访问

用百分号c的格式

和具体的

行列下标

去访问

而这个呢

是通过什么去访问呢

通过行首的地址

从某一个地址开始

到结束标记为止

而这个呢

一个一个访问

就与那个结束标记没有关系了

那我们再看第三种

是这样百分号s

后边呢

这取的是谁呢

这一个行这一个列的

从这个位置

我们指定了一个位置

哪个位置

第i行第i+1列的

这个元素的位置

把它的地址号拿到

从这个地址开始

到斜杠0结束

输出这个串

如果我们这个s的位置上

不是s是c

那大家想想

这一块应该

有这个取地址运算吗

就应该没有了

如果这是c

这就没有

不能有这个取地址运算了

因为它要的就是这一个元素

而我们这是一个串

对的串格式

我们要一个地址号

从这个地址号到结束的

所有的字符

通过这个我们看见了

在一个二维数组里

放上字符

那么它的使用

就会变的

把一个

按行和列访问的事情

变成了一个非常简单的

一串一串

就像是我们在

访问一个一维数组一样

下面我们看一个例子

怎么做呢

输入5个单词

你把它们按照

字母的顺序

字母的顺序就是

abc这样的顺序

那三个单词

第一个单词如果一样

后边的再按abc这样的顺序排

排列以后并且输出

比如说

这么一个

5个字符

那么我要排

我们看一下按第一个字符去排的话

那肯定是d最小了

它排在最前边

而这两个w一样

一样那比第二个

第二个谁小

i小

那这个win肯定排在

words的前边

排好的序应该是这样子

要做这么一件事情

那怎么做呢

我们看

思路是不是这样

5个单词

那我这个外边的循环一定是

进行了5次

从0到4

进行5次

每一次循环里边我们做什么呢

两个串做比较啊

比较

你应该在哪个位置上

找到自己的位置

然后到那个位置上去

那我们在找位置这件事情上

一定也是要循环的

因为我不是找一个

比如说我这个do

我需要跟win比

也需要跟scanf比

也需要跟printf比

所以这里边也是在做

一个循环

那么有了这个思路

我们看一下

用什么方法做呢

其实这种排序

可以用很多方法

我们可以用一个

考虑一个插入的算法

这样的排序算法

来做这件事

也就是说

拿到一个去比

找它自己的合适位置

一个一个比

比到

比如说我们要从小到大排序

你比我大吗

比我大我就要往前插

前边还有比我大的吗

比我大再往前插

这样一个一个往前走

一直找到自己合适的位置

那这个合适的位置是

别人往后移

你才能插进去

是这样的一个状况

好了

那我们

来看一下

这个代码

大家看一下这个程序

我们在这个程序里边

给了一个

二维数组

5乘15的二维数组

还给了一个

15个元素的一维数组

都是给的是字符的

那在这个一开始进入循环之前

我们就先给这个二维数组里边

读了一个字符串

一个百分号s对应的一个串

读进去了

然后呢

进入循环以后呢

我们又给

这个一维数组里边

读了一个串

那现在是

二维数组里的第一行上有一个串

还有一维数组里边的

这个temp里边有一个串

我们在这里边做什么呢

看一下

用了一个

字符串处理函数

这是什么函数呢

大家还记不记得

字符串比较

比较的是

我们刚才读进来的

这个二维数组里边的

这个串

和temp这里边的串

进行

这两个串进行比较

比较出来呢

谁大谁小我们是以0为标记的

大于0

小于0

等于0

等于0的时候是它两个串相等

大于0小于0

分别表示它们的大小

那这是

while的

判断的条件

在这个条件里边

如果说

你找到了自己的合适位置

要做的话

我们现在是怎么做呢

用的什么呢

复制

字符串复制的

这样的一个函数

把后边的这个串的

位置上的

那个串

复制到前边这个位置上来

每做一次

j减减

往后退一个

在这个循环体完成了以后

那么

当前这个串

一定找到了自己的位置

一定找到了自己的位置

最后

做一个最终的

位置上的一个

复制

那把这个循环

循环完了

5个串都找到了

自己的位置

我们把这个程序

运行一下大家看一下

我们给咱刚才说的那几个

第一个是words

第二个是do

然后还有一个win

还有一个scanf

还有一个printf

我们看排好的序是

排好了

这个程序里边就是说

我们大家注意是这样子

我们定义的是一个

两维数组

可是

我们在使用的过程里边

大家看

我都是以一维数组的方式

来使用的

这个words

都是用一维数组的方式

来使用的它

这边也是一样的

用一维数组的方式

使用了这个

这个二维数组

那么有关这方面的例子呢

还有很多

大家的那个

给的作业里边也有一些

大家下去可以自己再做一些练习

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

5.8 单词排序笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。