1.数组的概念
数组是一组相同类型的变量,往往是为了表示同一批对象的统一属性。数组可以是一维的,也可以是多维的。数组可以简化代码,避免代码太过冗长。使用一维数组时,一般从0开始编号。
定义一维数组的格式:
类型标识符 数组名[常量表达式]
2.类型标识符
类型标识符可以是任何基本数据类型,也可以是结构体等构造类型,相同类型的数组可以一起定义。数组名必须是合法的标识符。常量表达式的值即为数组元素个数。数组定义好后,就可以“引用”数组中的任意一个元素。
引用格式:
“数组名[下标]”
- 下标和常量表达式不是一个东西。下标只能为整型常量或整型表达式,值必须在数组定义的下标范围内,否则会出现“下标越界错误”。需要注意的是,不能一次引用整个数组,只能逐个引用数组的单个元素。数组在计算机内存单元中是连续存储的。程序一旦执行到数组的定义语句,就会开辟出若干字节内存单元。根据数组在内存单元中首地址和数组类型,可以计算出该数组中任意第i个元素的起始地址。
一维数组的输入输出都是采用循环语句结合下标变化逐个元素进行。
2.数组的表示
方括号括起来的常量表达式表示下标值,例如:
int a[10];
int a[2*5];
int a[n*2];
3.常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。也就是说,C++不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
4.在数学中可以用hi表示第i个同学的身高,i为编号,在c++中,使用一维数组时,一般是从0开始编号。,h[i]就表示第i+1个同学的身高,i称为下标变量。
- 读入50个同学的身高,语句就可以这样写:
for(i=0;i<=49;i++) cin>>h[i];
5.一维数组例题:幸运数的划分
问题描述:
判断一个正整数n是否能被一个“幸运数”整除。幸运数是指一个只包含4或7的正整数,如7,47,477等都是幸运数,17,42则不是幸运数。
输入格式:
一行一个正整数n,1<=n<=1000。
输出格式:
一行一个字符串,如果能被幸运数整除输出“YES”,否则输出“NO”.
#include <iostream>
using namespace std;
int main(){
int n,flag = 0;
cin>>n;
for(int i = 1;i<=n;i++)
{
int j = i;
do{
if(j%10==4||j%10==7)
flag = 1;
else{
flag = 0;
break;
}
j/=10;
}while(j);
if(flag==1&&n%i==0){
cout<<"YES"<<endl;
return 0;
}
}
if(flag==0)
cout<<"NO"<<endl;
return 0;
}
6.两个函数给数组“整体”赋值:
①memset函数
memset函数是给数组“按字节”进行赋值,一般用在char型数组后,如果是int类型的数组,一般赋值为0和-1。使用前需要包含头文件:#include<cstring>
例如,“memset(h,0,sizeof(h));”就是将h数组所有元素赋值为0。
.②fill函数
fill函数是给数组“按元素”,可以是整个数组,也可以是部分连续函数,可以赋任何值。使用前需要包含头文件:#include<algorithm>。
例如,“fill(a,a+10,5);”就是将a数组的前10个元素赋值为5。
7.一维数组的输入与输出
①.输出数组格式:
int h[100];
for(i=0;i<100;i++) cout<<h[i];
②输入数组格式:
(1)键盘读入:
int h[100];
for(i=0;i<100;i++) cin>>h[i];
(2)直接赋值:
int h[100],a[20];
for(i=0;i<100;i++) h[i]=0;
foe(i=0;i<20;i++) a[i]=i*2+1;
8.一维数组的插入删除
.插入一个元素需要先找到插入的位置,假设下标为x,将这个元素及其之后的所有元素依次往后移一位,注意要从后往前进行操作,再将给定的元素插入,到位置x删除某一个元素,也需要先找到删除的位置,将下标为x+1及其之后的所有元素依次向前移一位,覆盖原来位置上的元素。
9.一维数组的元素排序
1.排序就是按照某个关键字的大小,将若干对象从小到大或者从大到小进行重新排列,关键字是对象的某一属性,它可以是任何基本数据类型。
2.而且它可以将所有单词按照字典序倒过来排序,就是降序排列,关键字的类型就是字符串。
10.二维数组
一维数组的元素可以是任何基本数据类型,也可以是结构体,如果一维数组的每一个元素又是一个一维数组,则称这种数组为二维数组。
格式:类型标识符 数组名[常量表达式1][常量表达式2];
常量表达式一的值表示第一维大小,常量表达式二的值表示第二维大小,常量表达式一和常量表达式2的乘积就是二维数组的元素个数。
11.例题:
给定N个单词(每个单词长度不超过100,单词字符串内仅包含小写字母)。请求出N个单词中共有多少个不同的单词。
输入
第1行包含1个正整数N。
接下来N行每行包含一个字符串。
输出
一个整数,代表不同单词的个数
样例输入
lalala
hahaha
haha
lalala
haha
样例输出 3
提示
N <= 10000000
不同单词个数不超过100000
#include<iostream>
#include<set>
#include <vector>
using namespace std;
int main()
{
vector<string> a;
set<string> b;
string c;
int n;
cin>>n;
while(n--)
{
cin>>c;
a.push_back(c);
}
b.insert(a.begin(),a.end());
cout<<b.size()<<endl;
return 0;
}
学习感悟:
学习程序设计需要细心和耐心,需要注意到英文字母的大小写,还要注意到中英文切换时标点符号的切换,防止在编程过程中发生错误,发生错误了也要耐心地去寻找和修改错漏之处。在做题目时,需要认真的看清看透题目,根据题目的要求,按照相应的方法去解决,从而达到解决问题的目的。