第五单元 数组程序设计

1.数组的概念

数组是一组相同类型的变量,往往是为了表示同一批对象的统一属性。数组可以是一维的,也可以是多维的。数组可以简化代码,避免代码太过冗长。使用一维数组时,一般从0开始编号。

定义一维数组的格式:
类型标识符 数组名[常量表达式]

2.类型标识符

类型标识符可以是任何基本数据类型,也可以是结构体等构造类型,相同类型的数组可以一起定义。数组名必须是合法的标识符。常量表达式的值即为数组元素个数。数组定义好后,就可以“引用”数组中的任意一个元素。

引用格式:

“数组名[下标]”

  • 下标和常量表达式不是一个东西。下标只能为整型常量或整型表达式,值必须在数组定义的下标范围内,否则会出现“下标越界错误”。需要注意的是,不能一次引用整个数组,只能逐个引用数组的单个元素。数组在计算机内存单元中是连续存储的。程序一旦执行到数组的定义语句,就会开辟出若干字节内存单元。根据数组在内存单元中首地址和数组类型,可以计算出该数组中任意第i个元素的起始地址。

一维数组的输入输出都是采用循环语句结合下标变化逐个元素进行。

3.数组的表示

方括号括起来的常量表达式表示下标值,例如:
int a[10];
int a[2*5];
int a[n*2]; 

常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。也就是说,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;
}

学习感悟:

学习程序设计需要细心和耐心,需要注意到英文字母的大小写,还要注意到中英文切换时标点符号的切换,防止在编程过程中发生错误,发生错误了也要耐心地去寻找和修改错漏之处。在做题目时,需要认真的看清看透题目,根据题目的要求,按照相应的方法去解决,从而达到解决问题的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值