第五节课

复习

复习是我们掌握知识的唯一方法,学到了新的知识,不去使用,不去复习的话,我们很快就会忘记。要想掌握一项技能,就需要不断地练习、练习、练习,我希望大家在我的课程上完后,都可以独立写出一个简易的“走迷宫”游戏。

  • 请问 while(1) 这个函数会循环多少次?
  • 请问 for() 这个函数有什么作用?
  • 如何判断 变量a 是否 等于 变量b
  • <=, !=, >, => 这几个符号分别是什么符号,并说出哪些符号是错误的
  • 请说出 for(①;②;③) 函数括号内各处所填写的表达式有什么作用(可翻书)

数组

在第二节课我们学习了变量,很简单

int a;

那如果我们要申请10个变量呢?你可能会这么写

int a, b, c, d, e, f, g, h, i, j;

那如果要申请100个,10000个呢?这么写?

int a1, a2, a3, a4, a5, a6, a7, a8..........;

照这个写法估计一晚上都写不完。

以上一小段参考《啊哈c》

其实还有一种更简单的申请方法

int a[10];

这样,就可以一下申请10个变量了。

这种方法申请出来的变量,就叫做 数组

“变量”在我上课的时候有一个很形象的描述。

变量就像一个个小盒子,盒子外面的名字就是变量名,盒子里面装的数字或者字符,就是变量的值。

那么今天讲的数组是什么呢。

我们可以把数组想象成一排同名但有不同编号的箱子or火车

(使用Excel举例)(用画图画给大家举例)

在上上星期的课中,我们输出一个人的名字的时候就使用到了“字符数组”

那个待会儿再详细给你们讲,现在,我先讲讲“整型变量”的数组

也就是一般我们用于储存数字最常用的数组。

一般来说,我们这样定义一个数组 (大小为5的整形数组a)

int a[5];                   //只定义,不初始化,不赋值
int a[5] = {0,1,2,3,4};     //定义,并赋初始值为 0,1,2,3,4

//只给某个“车厢”(某个下标对应的变量)赋值
a[0] = 0;
a[1] = 20;
a[5] = 17;

以下是数组a

a[0] a[1] a[2] a[3] a[4] a[5]
1 2 3 4 5 6

就像函数的特点是 () 一样,数组的特点,就是 [] ,我们看到带有 [] 这两个符号的,就是数组了

那么,我们在定义数组的时候,你需要多少个空间,你就在 [ ] 内填上数字几。

比如我们存储5个数值,就需要5个空间,那么,我们就这么来定义

int array[5];  //代表我们需要一台总共有5个车厢的小火车

那么有了这五个空间,怎么给它赋值呢

其实这就像是一列火车,[ ] 里面的数字,就是火车的车厢号

这个车厢号专业的名称叫做 —— 下标

我们想要单独操作哪一节车厢,我们就只需要使用车厢名加车厢号(数组名+下标)

array[3] = 27;  //往 array 火车的 3 号车厢放入数值 27

大家有一点需要注意的是,在绝大部分编程中,我们都是以 0 开始计算的

也就是说,我们通常所说的“第一节车厢”,其实是第 0 号车厢,后面一次类推

那么我们五个车厢的火车,只有以下几个“车厢”可以用

int array[5];

array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;    //只能用到这里

array[5] = 6;    //这是第六个,我们并没有申请,用了的话数据就会溢出
                 //可以理解为,往第六节车厢放东西,可是没有车厢,东西就掉到火车轨道上去了

如果使用了array[5]数据就会溢出(毕竟没有这个车厢怎么装东西呢)

因为这是第六个,我们并没有申请,用了的话数据就会溢出

可以理解为,往第六节车厢放东西,可是没有车厢,东西就掉到火车轨道上去了

好了,现在我们知道了怎么定义一个数组和怎样给数组中某个空间赋值

可是照这么一个个赋值,也是很麻烦。

其实我们可以利用上上节课的内容——循环,来解决

那么是怎么办呢

接下来,看仔细了

1、首先我们先申请一个变量 i ,用来表示数组下标

int i = 0;

2、利用循环

while(i<5)                  //总共需要读取从0-5,5个数值
{
  scanf("%d",&array[i]);    //读入键盘输入的数字
  i = i+1;                  //下标加1(往下一节火车厢走去

  //i++;    这种写法感兴趣的同学可以自行百度,作用和上面那句几乎相同,代表 i 自增1
}

3、输出我们刚才输入的数据,同样使用循环

i = 0;  // 重新初始化为0     非常重要!!!

while(i<5)
{
  printf("%d    ",array[i]);    //输出“车厢”里的数字
  i = i+1;                  //下标加1(往下一节火车厢走去
}

那么,完整代码是

#include <stdio.h>
int main()
{
  int array[5];     //数组:用于储存一组数据
  int i;            //用于代替 数组下标

  //读取
  while(i<5)
  {
    scanf("%d",&array[i]);
    i = i+1;
  }

  //输出
  i = 0;    // 重新初始化为0     非常重要!!!
  while(i<5)
  {
    printf("%d  ",array[i]);
    i = i+1;
  }

  return 0;
}

分支一(if else)

这三个数谁最大?

21, 654, 152

很简单对吧,我们一眼就能看出来了

那么,下面这几个呢?谁是最大的?

21, 15, 54, 36, 94, 48, 13, 61, 70, 64, 59, 12

诶,这个需要仔细看一看,但也能看出来是 94

那么,我就要提问了,你们是怎么找出哪个数最大的呢?

好像我们就是,看一下,就能得到答案,就能知道哪个数字比较大对吧

可是如果遇到下面这种情况呢?我们可没办法一眼看出谁最大了?

2154863, 21548545, 21549865

虽然没法一眼看出来,可是仔细找还是能找到最大的这个数的

这三个数最大的是21549865

再接着来,这次,大家仔细观察自己的大脑是如何从一组数据中找出最大的数

6261869245286136647

我们先是以第一个为标准,然后往后找后面的数

如果遇到比标准的这个数大的数值,我们就会用更大的数值替换掉对吧

比如,第一个数是 62 ,我们往后用 62 和各个数对比

直到遇到 696962 大,接下来我们就会只记住 69

一直到数据的最后面,如果没有更大的了

那么我们当前心里想着的这个数字,就是这组数据中最大的

其实,电脑也是这么算的。

我们先定义一个 整形变量 max

int max = 0; //定义并初始化为0

因为如果不初始化,它会是系统随机给一个数。

接下来呢,我们需要使用一个循环遍历这组数据

遍历:即一个接一个按顺序地对比

遍历的时候,同样会用到循环,循环就需要一个用来控制循环的变量,这个变量一般是 i

i = 0;
max = array[0];
while(i<10)
{
  if(array[i] > max)
    max = array[i];
  else
    continue;
}

哎呀呀,出现了一堆不认识的东西啊,怎么办

没关系,我会慢慢给你们讲

首先我们先看这两个单词 if else

大家应该都知道,意思就是 如果 否则 对吧

我要讲的是 if 后面这对括号里,就像是 while 函数一样,要放进用于判断的表达式。

我这里放的是

array[i] > max

用于判断我们当前遍历到的这个数字是否大于我们目前的最大值

也就是 变量max

如果这个表达式返回是 ,那么 if 语句就会执行下面的那句话

把当前空间的数值,赋值给 max 变量

max = array[i];

那么返回是 呢,它就会执行 else 语句下的代码

continue 在英文里是继续的意思

在c语言中,它的作用是继续循环

还有另外一条语句是用来跳出循环的,叫做

break;

当然,这个分支可以多重嵌套,进行复杂的判断操作

比如下面这段代码

if(a>b)
{
  printf("%d",a);
  if(a<c)
    printf("%d",c);

  else
    printf("%a",a);
}

else if
{
  if(b<c)
    printf("%d",c);

  else
    printf("%d",b);
}

作业

请写出一个程序,用于判断三个数字中哪个最大


发表评论

电子邮件地址不会被公开。 必填项已用*标注