备战大晨7月 GESP C++ 1级(22):初探一维数组,存点成绩好不好

备战大晨7月 GESP C++ 1级(22):初探一维数组,存点成绩好不好
强仔上篇咱们聊到了循环嵌套,大晨在屏幕前挠头算九九乘法表,最后总算是磕磕绊绊跑通了。今天继续往下推进《一本通•编程启蒙C++版》,咱们正式踏进一个新大门——一维数组。
变量不够用了
之前大晨写代码,存个成绩就 int a;,存两个就 int a, b;。今天书上题目要求存全班50个人的数学成绩。大晨盯着屏幕发呆,转头问我:”爸爸,我是不是得写50个变量?a1, a2一直到a50?”
我没忍住笑出了声。要是存全校1000个人,你手不得敲抽筋了?
我跟他说,C++里有个神器叫”数组”,就像是一排连在一起的抽屉,你只要给它起个名字,就能一次性存一堆同类型的数据。
数组怎么开
定义一个数组的格式很简单:int scores[50];
这句话的意思是,我向电脑要50个连在一起的抽屉,名字都叫 scores,里面只能放整数。
大晨一听眼睛亮了:”那这个太省事了!”
不过我马上给他泼了盆冷水。C++的数组有个坑,下标是从0开始的。 也就是说,第一个抽屉叫 scores[0],第50个抽屉叫 scores[49],没有 scores[50] 这个东西。
大晨皱着眉头嘟囔:”为什么从0开始?从1开始多好,1号抽屉、2号抽屉,小孩子都懂。”
我跟他打了个比方:”你可以把 scores 当成这排抽屉的起点,scores[0] 就是起点往后偏移0个抽屉,也就是第一个抽屉。scores[1] 就是偏移1个抽屉。这是老外定的规矩,计算机底层的偏移量就是这么算的。” 大晨似懂非懂地点点头,反正先死记硬背下来再说。
来段能跑的代码
为了让他彻底弄懂,我让他写个简单程序:输入5个人的成绩,存在数组里,然后再把5个人的成绩按顺序打印出来,最后算个总分。
大晨敲了大概十分钟,中间忘了加分号,还把循环条件写成了 i <= 5,我提醒他下标越界了,他才改过来。
1 |
|
他在终端输入 90 85 78 92 88,一回车,程序乖乖吐出结果。大晨兴奋地拍大腿:”这就跟点名一样!太好玩了!”
老父亲陪跑笔记
今天这关过得还算顺利。我觉得教小孩学编程,千万别一上来就讲什么”连续的内存空间”这种抽象概念,直接说”一排抽屉”最管用。
不过有个细节得盯紧:大晨在 for 循环里写 i <= 5 是惯性思维,平时数学里1到5就是包含5的。但在数组里,scores[5] 就越界了,这属于未定义行为,运气好不出错,运气差程序直接崩。养成 i < 5 的习惯,能省后面无数个Bug。
今天大晨算是把一维数组的定义、输入和输出基本拿下了,但对于数组里怎么找最大值、怎么排序,他还一无所知。这小子刚跑通程序,转头就去跟妈妈炫耀自己会存全班成绩了。
既然数组的基础走通了,下篇咱们就得上点强度了。下一篇文章,我准备教大晨用一维数组来找找班里谁的成绩最高,看看这小子能不能转过这个弯来。
免责声明:本文仅为大晨学习信奥的家庭陪跑真实记录,不构成任何专业编程教学指导。代码基于入门级理解编写,各路大神轻喷。


