数组

二、一维数组的定义
  当数组中每个元素只带有一个下标时,我们称这样的数组为一维数组。
  数组的定义格式如下:
   类型标识符 数组名[常量表达式]
  说明:
  ①数组名的命名规则与变量名的命名规则一致。
  ②常量表达式表示数组元素的个数。可以是常量和符号常量,但不能是变量。
  例如:
  int a[10]; //数组a定义是合法的
int b[n]; //数组b定义是非法的

a数组共有10个元素组成,在内存中10个数组元素共占10个连续的存储单元。a数组最小下标为0,最大下标9。按定义a数组所有元素都是整型变量。

三、一组数组的引用
通过给出的数组名称和这个元素在数组中的位置编号(即下标),程序可以引用这个数组中的任何一个元素。
一维数组元素的引用格式:
数组名[下标]
四、数组越界
C++语言规定,使用数组时,要注意:
(1)、数组元素的下标值为正整数。
(2)、在定义元素个数的下标范围内使用。
然而,当在程序中把下标写成负数、大于数组元素的个数时,程序编译的时候是不会出错的。例如: int a[10]; a[-3]=5; a[20]=15; a[10]=20; int k=a[30] 这些语句的语法是正确的,能够通过程序的编译。然而,它们要访问的数组元素并不在数组的存储空间的,这种现象叫数组越界。
例 输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。
  【分析】我们可定义一个数组a用以存放输入的n个数, 然后将数组a中的内容逆序输出。
#include
int a[100];
int main()
{
int x,n=0;
while(scanf("%d",&x)==1) a[n++]=x; //相当{a[n]=x;n++;}
for (int i=n-1;i>=1;–i)
printf("%d “,a[i]); //注意%d后面有一个空格,保证行首行尾均无空格
printf(”%d\n",a[0]);
return 0;
}

例5.4 约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。N,M由键盘输入。
  #include
  using namespace std;
  int n,m,s,f,t;
  bool a[101]; //根据题意开出数组大小
  int main()
{
cin>>n>>m; //共n人,报到m出圈
cout<<endl;
for (t=1;t<=n;++t) a[t]=false; //等同于memset(a,0,sizeof(a)),要调用cstring库
f=0; t=0; s=0; //刚开始所有变量默认值也是0,或者用f=t=s=0;
do
{
++t; //逐个枚举圈中的所有位置
if (t== n+1) t=1; //数组模拟环状,最后一个与第一个相连
if (a[t]== false) ++s; //第t个位置上有人则报数
if (s==m) //当前报的数是m
{
s=0; //计数器清零
cout<<t<<" "; //输出出圈人的编号
a[t]=true; //此处的人已出圈,设置为空
f++; //出圈的人数增加一个
}
} while(f!=n); //直到所有的人都出圈为止
return 0;
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值