程序设计第五单元

程序设计第五单元

第1课 一维数组的定义
一、数组概念
数组就是一组相同类型的变量,他们往往都是为了表示一批对象的统一属性。
数组可以是一维的,也可以是二维的或多维的。使用一堆数组时,一般是从0开始编号。
示例:for(int i=0;i<=49;i++)
cin>>h[i];
数组经常应用在大批量、同一类型的数据处理任务中。

二、一维数组的定义
1.定义一维数组的格式:
类型标识符 数组名 [常量表达式];
2.注意:
①类型标识符可以是任何基本数据类型,也可以是结构体等构造类型,相同类型的数组可以一起定义。
②数组名必须是合法的标识符。
③常量表达式的值即为数组元素的个数。
示例:int[50] 就表示定义一个维数组,其有50个元素,它们的编号儿0开始到49,每个元素都是int类型。
3.定义特例:
int d[50],g[100];
int a[5*10];
#define N 50;
int b[N];
如果要定义两个大数据,可定义两个数组。
示例:
int score[10000];//或者float score[10000];
bool xb[10000];//或者char xb[10000];

三、因为数组的元素引用
数组定义好后,就可以“引用”数组中的任意一个元素。引用格式为“数组名[下标]”,如h[5]、h[i*2+1 ]等。其中,下标只能为整型常量或整型表达式,值必须在数组定义的下标范围内,否则会出现“下标越界错误”。
需要注意的是,不能一次引用整个数组,只能逐个引用数组的单个元素。例如,对于一个数组a来说,语句"cout <<a;"是不合法的。
即数组只提供元素。

四、一维数组的存储结构
数组在计算机内存单元中式连续存储的,程序一旦执行到数组的定义,语句就会开辟出若干字节的内存单元。
示例:对于以定义的数组,假设系统给它分配的内存单元,地址从1000开始,则1000就称为该数组在内存中的“首地址”。
可通过此规律计算数组所占用的空间。也就是说,整个数组所占的内存大小等于数组元素类型的大小乘以数组元素的个数。
若已知数组在内存单元中的首地址和数组类型,可以计算出该数组中任意第i个元素的起始地址。

第2课 一维数组的输入与输出

一、一维数组的输入与输出流程
1.输入方法
因为对数组的操作只能逐个引用单个元素,所以一维数组的输入、输出等操作,都是采用循环语句结合下标变化逐个元素进行的。
示例:
int h[100];
for(i=0;i<100;i++)
cout<<h[i];
①键盘读入
int h[100];
for(i=0;i<100;i++)
cin>h[1];
②直接赋值
int h[100],a[20];
for(i=0;i<100;i++)
h[i]= 0;
for(i=0;i<20;i++)
a[i]=i*2+1;
③整体赋值
(1)memset函数
memset函数是给数组“按字节”进行赋值,一般用在char型数组中,如果是int类型的数组,一般赋值为0和-1。使用前需要包含头文件:
#include
例如,“memset (h,0,sizeof(h));“就是将h数组所有元素均赋值为0。(2)fill函数
fill函数是给数组“按元素”进行赋值可以是整个数组.也可以是部分连续元素,可以赋任何值。使用前需要包含头文件: #inelude
例如:
“fill(a,a+10.5);” 就是将a数组的前10个元素赋值为5。
另外C++还支持在定义四数组的同时,给所有或者部分元素赋值。
示例:
int a[10]={0,1,2,3,4,5,6,7,8,9};
int a[10]={0,1,2,3,4};//部分复初值,后面的元素自动初始化为零
int a[ ]={0,1,2,3,4,5};
注意:
①一般来说,memset函数只管数组元素清零。fill函数一般用来赋值。
②对于memset函数来说,一般只用于是0的情况,如000000000000
若赋值为1,则会出现000100010001的情况,合在一起并不是1。
③若局部元素进行赋值,则其他元素值不确定,区分直接定义数组元素并赋值,除赋值元素之外,其他元素自动初始化为零。
2.应用:
幸运数的划分。
【问题描述】判断一个正整数n是否能被一个“幸运数”整除。幸运数是指一个只包含4或7的正整数, 如7、47、477等都是幸运数,17、42则不是幸运数。
【输入格式】
一行一个正整数n,1≤n≤1000。【输出格式】
一行一个字符串, 如果能被幸运数整除输出“YES” ;否则,输出“NO"。
【输入样例】47
【输出样例】YES
【问题分析】
分析发现,1~1000范围内的幸运数只有14个。于是,将这14个幸运数直接存储到一个数目lucky中,再穷举判断其中有没有一个数能整除n
#include
using namespace std;
int main(){
int n,lucky[14]={4,7,44,47,74,77,444,447,474,477,744,747,774,777};//在数组定义时,给数组赋值
scanf("%d",&n);
bool flag=false;
for(int i=1;i<14;i++)
{if(n%lucky[i]==0) flag=true;}
if(flag) printf(“YES\n”);
else printf(“NO\n”);
return 0;
}

第3课 一维数组的插入删除
一、插入与删除概念
1.在实际操作中,如果需要在数组中插入一个元素或删除某个元素,则该操作称为数组的插入操作或删除操作。
2.插入一个元素,需要先找到插入的位置(假设下标为x),将这个元素及其之后的所有元素依次往后移一位(注意要从后往前进行操作),再将给定的元素插入(覆盖)到位置x。3.删除某一个元素,也需要先找到删除的位置(假设下标为x),将下标为x+1及其之后的所有元素依次向前移一位, 覆盖原来位置上的元素
4.插人或者删除一个区间 (连续若干个数),只要重复以上单个元素的操作即可。另外,插入操作需要注意把数组下标定义的足够大。(防止越界)
二、应用举例
【题目描述】
有 n 个人(每个人有一个唯一的编号,用 1~n 之间的整数表示)在一个水龙头前排队准备接水,现在第 n 个人有特殊情况,经过协商,大家允许他插队到第 x 个位置。输出第 n 个人插队后的排队情况。
【输入】
第一行 1 个正整数 n,表示有 n 个人,2<n≤100。
第二行包含 n 个正整数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值