C++数组

  • 可以用来表达类型相同的元素的集合,集合的名字就叫数组名

  • 数组里的元素都是有编号的,元素的编号叫下标。通过数组名和下标,就能访问元素

  • 一维数组的定义如下:

类型名 数组名[元素个数];

其中"元素个数“必须是常量或常量表达式,不能是变量,而且其值必须是正整数。元素个数称为”数组长度“

T a[N]; //数组大小为N*sizeof(T)字节的存储空间

表达式“sizeof(a)”的值就是整个数组的体积,即N*sizeof(T)

数组名a代表数组的地址,假设为p,则变量a[i]的地址就是p+i*sizeof(int)

倒序问题

#include

using namespace std;

#define NUM 100

int a[NUM];

int main(){

         for(int i=0;i

           cin>>a[i];

              for(int i=NUM-1;i>=0;--i)

           cout<

return 0;

筛法求n以内的素数:把2到n中所有的数都列出来,然后从2开始,先划掉n内所有2的倍数,然后每次从下一个剩下的数(必然是素数)开始,划掉其n内所有的倍数。最后剩下的数,都是素数。

#include

using namespace std;

#define MAX_NUM 10000000

bool isprime[MAX_NUM+10];//用于标记每个数是否为素数

int main(){

for(int i=2;i<=MAX_NUM;++i)

        isprime[i]=true; //这个循环是将所有从2到MAX_NUM的数初始化为true

                for(int i=2;i<=MAX_NUM;++i){//这个循环遍历从2到MAX_NUM的每个数

                  if(isprime[i])

                       for(int j=2*i;j<=MAX_NUM;j+=i)//j+=i的作用是遍历当前素数i的所有倍数,并将这些数标记为非素数

                         isprime[j]=false;}

for(int i=2;i<=MAX_NUM;++i)//遍历从2到MAX_NUM的每个数

          if(isprime[i])

cout<

return 0;

}

用数组取代复杂分支结构

string weekday[]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"};//string是字符串类型。可存放字符串常量 //字符串数组

平年有365天 二月有28天,闰年有366天 二月有29天

一年中的大月(31):1,3,5,7,8,10,12

一年中的小月(30):4,6,9,11

数组越界

  • 数组元素的下标,可以是任何整数,可以是负数,也可以大于数组的元素个数。不会导致编译错误,但运行时很可能会出错!!!

  • 用变量作为数组下标时,不小心会导致数组越界(变量下标值变为负数,或者太大)

  • 可能引起意外修改其他变量的值,导致程序运行结果不正确

  • 可能试图访问不该访问的内存区域,导致程序崩溃

  • 数组越界的程序,用某些编译器编译后可能可以正确运行,换一个编译器编译后就运行错误

矩阵乘法

编程求两个矩阵相乘的结果。输入第一行是整数m,n,表示第一个矩阵m行n列。再一行输入整数p,q,表示下一个矩阵是p行q列(n=p)求两个矩阵相乘的结果矩阵

#include

using namespace std;

#define ROWS 8

#define COLS 8

int a[ROWS][COLS];

int b[ROWS][COLS];

int c[ROWS][COLS];

int main(){

int m,n,p,q;

cin>>m>>n;

for(int i=0;i

          for(int j=0;j

cin>>a[i][j];

cin>>p>>q;

for(int i=0;i

           for(int j=0;j

cin>>a[i][j];

for(int i=0;i

         for(int j=0;j

         c[i][j]=0;

          for(int k=0;k

          c[i][j]+=a[i][k]*b[k][j];

}

}

for(int i=0;i

        for(int j=0;j

cout<

}

cout<

}

return 0;

}

二维数组

a[0][0]是数组中地址最小的元素。如果a[0][0]存放在地址n,则a[i][j]存放的地址就是:n+i*M*sizeof(T)+j*sizeof(T)

遍历一个二维数组,将其所有元素逐行依次输出:

#define ROW 20

#define COL 30

for(int i=0;i

           for(int j=0;j

cout<

cout<

}

你可能感兴趣的:(算法,c++,数据结构)