【 问题1描述 】
(1-1)计算某位同学的高等数学、英语及计算机导论3门课程的总分。
(1-2)已知一个班级20名学生的高等数学成绩,求全班该门课程的平均分。
(1-3)已知一个班级20名学生的高等数学、英语及计算机导论课程的成绩,计算每位同学的总分以及全班3门课程各自的平均分。
(1-4)在问题1-3的基础上,列出全班成绩的排名(列出学号、姓名及分数),见表1-1。
表1-1 学生成绩表
(续)
(1-5)假设一个U盘中有3个文件夹,每个文件夹中又有若干文件,如图1-1所示。
图1-1 U盘中的文件
请设计一种文件信息存储方法,当输入某个文件名称后,显示该文件在U盘中的存储路径,若U盘中无该文件,则显示“文件未找到”。
(1-6)某城市中5个地标建筑间有多条道路相通,每条道路长度不同,如图1-2所示。设计一个道路查询系统,能让游客查询从任一个地标建筑到另一个地标建筑之间的最短路径。
图1-2 城市中地标建筑道路图
【 问题1分析 】
用计算机解决实际问题时,首先要了解实际问题中需要处理的数据有哪些,在计算机中如何表达并存储这些数据以及在这些存储结构上如何对其进行所需的操作。
在问题1-1中,需要处理的数据是3个数值型成绩,因此可定义3个普通整型变量用于存储(考虑到考试成绩均为整数),然后对这3个变量求和即可。请读者在下面的空白框中尝试用C语言写出解决问题1-1的变量定义和求和操作相关语句。
在问题1-2中,需要处理的数据是20个数值型成绩,因此可用C语言中的一维数组来存储这些数据,对数组元素求和后再计算平均成绩。请尝试用C语言写出解决问题1-2的一维数组定义和主要操作语句。
在问题1-3中,需要处理的数据是20名学生3门课程共60个数值型成绩,可将这些数据表示成20行3列的形式,其中每行是各学生的成绩,每列是各门课的成绩,因此可用C语言中的二维数组来存储这些数据,然后按行求和得到每位学生的总分,按列求和后再计算各门课程的平均分。请尝试用C语言写出问题1-3的二维数组定义和主要操作语句。
尽管问题1-4是在问题1-3的基础上提出的,但需要处理的数据不仅是单纯的数值成绩,还有学号、姓名这样的字符型数据。对于表1-1的操作不仅是简单的数值求和等计算,还需要进行非数值运算——排序等操作。
考虑到每位学生的信息中包含不同的数据类型,C语言提供了结构体数组或链表等线性的形式来存储并处理这些数据。请尝试用C语言写出问题1-4的结构体数组定义语句。
说明:书写上述语句如有困难,请用手机扫描右侧的二维码查看参考语句。
问题1-5和1-6是更加复杂的问题,主要体现在以下两个方面:
1)计算机处理的对象由数值发展到字符串、图形、图像等非数值数据,而且处理的数据量也越来越大。在程序设计时面对这样的数据,需要解决如何表示这些数据间的结构关系,以及如何在计算机中存储这些数据。
2)计算机处理的不再只是加、减、乘、除等数值计算,而是排序、信息可视化、求最短路径等较为复杂的非数值计算。在程序设计时,需要解决如何在问题的数据上进行非数值计算等操作。
以上这些问题正是数据结构这门课程研究的内容。本章1. 1节将介绍数据结构课程的研究内容、数据结构的概念,1.2节将介绍导学问题中涉及的数据结构。