20C++数组(1)——教学

一、什么是数组

教学参考视频
  尼克、格莱尔等5位同学进行了一次信息学测试,试编一程序,实现查分功能。先输入成绩,然后输入学号输出相应的成绩。
  按以前方法:可以用al~a5分别保存1~5号同学的成绩,然后进行判断,若输入的学号是1则输出a1的值,若输入的学号是2则输出a2的值,以此类推。

#include <iostream>
using namespace std;
int main()
{
  int a1,a2,a3,a4,a5,n;
  cout<<"1-5号的成绩:"; 
  cin>>a1>>a2>>a3>>a4>>a5;
  cout<<"输入学号1-5:";
  cin>>n;   
  switch(n)
  {
    case 1:cout<<a1; break;
    case 2:cout<<a2; break;
    case 3:cout<<a3; break;
    case 4:cout<<a4; break;	
    case 5:cout<<a5; break;
    default:cout<<"输入的学号不存在!"; 
  }
  return  0;
} 

  若全班45位同学都进行了语文测试,那就需要45个变量来保存成绩,而且输出时需要判断46种情况,有没有简便的方法?有的,C+提供了数组的功能,来处理像成绩这样具有内在联系、相同属性的数据。
定义一维数组的一般形式为:

          类型名   数组名[常量表达式];           

如“int a[10];”就定义了一个数组a,其包含a[0],a[1],a[2],·,a[9]10个数组元素。
  数组名的命名规则和变量名相同,遵循标识符命名规则;在数组定义时用方括号括起来的常量表达式的值表示元素的个数,即数组的长度,下标从0开始,如上例中最后一个元素是a[9],而不是a[10];在数组元素访问时,用方括号括起来的表达式表示元素的下标;数组往往与循环语句结合使用。请用数组来重写前面的查分程序。

二、数组越界

教学参考视频
  一座山上有10个山洞。一天,格莱尔和尼克在山上玩捉迷藏游戏。尼克说:“我先把10个山洞从1~10编上号,你从10号洞出发,先到1号洞找我,第二次隔1个洞找我,第三次隔2个洞找我,如图62.1所示。以后以此类推,次数不限。”格莱尔同意了,但她从早到晚进洞1000次,也没找到尼克。试编一程序,算一算兔子尼克可能躲在几号洞里。

  试编一程序,算一算兔子尼克可能躲在几号洞里。
  用数组a记录格莱尔进10个洞的情况,首先把a[1]至a[10]的值初始化为true,表示格莱尔未进1~10号洞。当格莱尔进过i号洞时,a[i]标记为false。变量cishu表示进洞的次数。用“i=(i+cishu)%10”来确定每次格菜尔进的是哪个洞。最后,输出没进过的洞即可。流程图如图下两图:


  在本例中,定义数组时使用“bool a[i];”语句,程序编译时会开辟一片连续的存储单元供数组元素a[0]、a[1] 、a[2]、····、a[10]使用。若在序中使用了a[11]、a[12]····,就会发生数组越界出错。所谓数越界,就是程序运行时访问的数组元素并不在数组的存储空间内,但是数组越界在编译、运行时系统并不会示出错,不易发现。数组越界,会让程序访问超出数组边界的存储单元,造成内存的混乱,程序运行结果错误。

三、循环移位

教学参考视频
  狐狸老师和格莱尔等5位小朋友玩老鹰捉小鸡游戏,狐狸老师当“老鹰”,排在第1位的小朋友当“母鸡”,其他4位小朋友当“小鸡”。但是“母鸡”很辛苦,所以过一段时间“母鸡”需要排到队伍最后成为“小鸡”,让第2位小朋友当“母鸡”······。
试编一程序,模拟10次位置的变化过程。


四、冒泡排序

教学参考视频
  风之巅小学举行1分钟跳绳比赛,5人一小组。试编一程序,输入小组内同学的跳绳次数,按次数由多到少的顺序输出。
如输入: 126 80 98 158 204
输出: 204 158 126 98 80
  我们先来学习一下用冒泡排序算法解决这个问题的思路:依次比较相邻的两个数,将大数放在前面,小数放在后面。即依次比较第1个数和第2个数,第2个数和第3个数,…,第n-1个数和第n个数,每次比较时都将大数放在前面,小数放在后面,经过第一趟比较后,最后一个数就是最小的数了;然后再从第1个数开始到第n-1个数,重复以上操作后,第n-1个数就是第二小的数了…直到第4趟比较后,将后面的4个数排好序了,剩下的第1个数就是最大的。为了使数据由大到小(降序)排序,在比较和交换的过程中,越大的数就会像气泡一样慢慢“浮”到数列的顶端,所以把这种算法称为冒泡排序,如图所示:




  排序是计算机中经常进行的一种操作,常用的排序算法还有选择排序、桶排序、归并排序、希尔排序、插入排序、快速排序等。
  如要使数据由大到小排序,用选择排序的思路是:按顺序先用第1个数与后面的所有数进行比较,找出最大数的位置,只要最大数的位置不是1,就把最大数与第1个数进行交换,第1趟比较后可将最大数换到第1个位置;接着,第2个数与后面的所有数进行比较,找出剩下数中最大数的位置,只要当前最大数的位置不是2,就把当前的最大数与第2个数进行交换;以此类推,最后得到的就是排序后的结果。因为我们总是持续选择剩下数中的最大的数(最小的数),选择排序由此得名。

posted @ 2025-03-29 11:02  gdyyx  阅读(110)  评论(0)    收藏  举报