8 月 8 日上课内容:一维数组
一维数组的实际运用
我们先看一道题目:输入 100 个数,并倒着输出它们。
这道题我们如果用变量解,就需要定义 100 个变量,而且还不能用循环优化,这个时候就要用到数组,使 100 个数挨个放在数组里,然后再用循环挨个调用数组的下标( i )所对应的数,在进行输入输出即可。
一维数组的定义
例如,我们要将 5 个数挨个放在数组的前 5 个格子里:
1 | 2 | 3 | 4 | 5 |
---|
此时我们可以用 a[i]
来分别调用它们。
注意,数组的下标是从 0 开始的:
下标 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
数 | 1 | 2 | 3 | 4 | 5 |
所以我们用 a[0]
调用 1 ,a[1]
调用 2 。
定义:int a[数组容量];-->>int a[5]={1,2,3,4,5};//下标从 0 开始
我们通常把数组容量定义大几位,以防万一。
通常来讲,我们循环都是从 1 开始的,那么就要从 a[1]
开始调用:
下标 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
数 | - | 1 | 2 | 3 | 4 | 5 |
长度 6 (下标有 6 个)
由此可见,如果我们要从 1 (下标)开始调用,就要至少定义大一位,防止溢出。
一维数组的运用
回到最顶端的一个问题,输入 100 个数然后再倒着输出一遍:
- 定义:
int a[105];
- 输入:
for(int i=1;i<=100;i++)cin>>a[i];
- 输出:
for(int i=100;i>=1;i--)cout<<a[i]<<" ";
这样我们就简洁明了的完成了一维数组的简单学习。
一维数组的其他知识点
在 int main(){;}
外面定义变量、数组可以使变量、数组全部初始化。
集体赋值数组里的所有数:
memset(a,0,sizeof(a));->memset(初始化的变量名,初始化的数值,初始化的范围);
其中 sizeof(a)
是读取 a 里的内存,是初始值覆盖整个数组。
例题
题目描述
输入 n 个数,并判断 n 个数组里有多少个 k 。
输入格式
第一行两个整数 n,k(1 \le n,k \le 100) ,空格间隔。
第二行 n 个整数,空格间隔。
输出格式
一行表示答案。
样例 1
样例输入
5 1
1 2 3 4 1
样例输出
2
样例 2
样例输入
5 0
1 2 3 4 1
样例输出
0
例题解法
大概思路
先把数循环输入到数组里,然后再用循环判断 a_i 是否等于 k 。
带有亿点点注释的答案,并非上课的答案
#include<bits/stdc++.h>//万能头
using namespace std;//命名空间
int main(){
int a[105];//数组开大一点,以防意外
int sum=0;//累加器初始值赋值为 0,以防随机值导致结果出错
int n;//n 个数
int k;//要找得数
cin>>n>>k;//输入
for(int i=1;i<=n;i++)cin>>a[i];//利用下标循环输入
for(int i=1;i<=n;i++){
if(a[i]==k)sum++;//如果一样就计数
}
cout<<sum;//输出结果
return 0;//好习惯
}