8数组

一维数组声明

<存储类别>  <元素类型>  <数组名>[<元素个数> ];

如:

int a[10];

static double b[20];

说明

1.一组连续的存储单元

2.具有相同的名字和类型

3.第一个元素的序号是 0

4.10 个元素的数组a:  a[0], a[1] ... a[9]

 

初始化

int a[10]={4};

float r[20]={0.1, 5.1};

double d[3]={10.0,5.0,1.0};

初始值的数目小于数组元素个数时,剩余元素被初始化为0,不允许初始值的数目大于数组元素个数。

省略数组元素数目的数组声明

int x[] = { 1, 2, 3, 4, 5 };

等同于:

int x[5] = { 1, 2, 3, 4, 5 };

数组元素可以逐个赋值

int x[5] ;

x[0] = 1;

x[1] = 2;

 

 

注意:

x = { 1, 2, 3, 4, 5 }; //语法错

x[5] = { 1, 2, 3, 4, 5 }; //语法错

x[5] = 5;  //编译正确,但有语义错

 

示例:输出数组并对数组元素求和

#define   SIZE   10

#include  <iostream.h> 

int  main( )

{ int n[SIZE] = { 12, 34, 55, 71, 1, 65, 423, 19, 540, 10 };

   int  i ,  sum = 0; 

   for ( i = 0; i <= SIZE - 1; i++ )

   { cout << "n[" << i << "] = " << n[ i ] << endl;

      sum += n[ i ];

   } 

   cout << "The summary is: " << sum << endl;

   return 0;

}

 

一维数组(作函数参数)

1.数组名有值,其值是数组的第一个元素的地址

2.数组作为函数参数传递时,实参获得的是数组的首地址

3.被调用函数通过数组首地址能访问数组每个元素

 

示例:数组作为函数的参数

#include   <iostream.h>

#define   SIZE   10

void  modifyArray( int [ ], int);

int  main( )

{ int a[ SIZE ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

   modifyArray ( a,  SIZE );

   cout << "After calling modifyArray: " << endl;

   for (int index = 0; index <= SIZE - 1; index ++ )

      cout<<"a["<<index<<"]="<< a[index] << endl;

   return 0;

}

void  modifyArray ( int b[ ],  int len )

{ for (int index = 0; index <= len - 1; index++ )

      b[ index ] ++ ;

}

 

 

多维数组

1.有多个下标的数组称为多维数组

 int  a[3][4];

 char c[4][3][5];

2.n+1维数组可以看成元素是n维数组的一维数组

a[3][4]包含3个元素:a[0]、a[1]、a[2],每个元素都是包含4个元素的一维数组

 

初始化

1.多维数组可以在声明时初始化

2.可以给出全部元素的值,没有足够的值时,剩余元素初始化为0

int mat[2][2] = {{1},{3, 4}};

int a[3][4] = {1, 2, 3, 4, 5, 6};

int m[2][2][2] = {{{1},{5}},{3, 4}};

 

字符串

1.字符串是用一对双引号括起来的一串字符

"string"   "Visual C++"  "a+b="

2.字符串的长度等于双引号内所有字符的长度之和(汉字长度为2)

3.字符串可以包含一般字符,也可以包含转义字符

"\"cout<<ch\"\n" 中包含有11个字符

 

存储

1.字符串的存储是利用一维字符数组来实现的(字符串的值即为该数组的首地址)

2.字符数组的长度为待存字符串的长度加1,字符串以字符‘\0’ 结尾

3.如字符串“Strings.\n” 的存储内容为:

 

 

字符数组初始化

char a[10]= "array";

等价于

char a[10]={'a','r','r','a','y','\0'};

又如

char b[20]= "This is a pen. ";

char c[8]= "";

但  a = "struct";           //错误

    a[0]= ‘A’;       //正确

char week[7][11] = {"Sunday",

  "Monday", "Tuesday", "Wednesday",

  "Thursday", "Friday","Saturday"};

char grade[][10] = { "excellent",

   "good", "middle", "pass","bad"};

char typeName[6][10] = {"int",

   "double", "char"};

char d[10][20]={""};

 

I/O

char a[30];

cin >> a;  //输入字符串

cout << a   //输出字符串

cin >> a[3];   //输入字符

cout << a[4]; //输出字符

 

 

 

 

例子:二分法查找数组元素

#include    <iostream.h>

#define   SIZE    10

int  binarySearch ( int [ ],  int,  int,  int );

void  displayArray ( int [ ],  int,  int,  int );

int  main( )

 { int  a[ SIZE ], i , key, result;

   for ( i = 0; i <= SIZE - 1; i++ )   a[ i ] = 2 * i;

   cout << "Enter a number: " ;   cin >> key;

   result = binarySearch( a, key, 0, SIZE - 1 );

   if ( result != -1 )

      cout<<key<< " found: No." << result << "."<< endl;

   else

      cout<<key << " not found." << endl;

   return 0;

 }

int binarySearch(int b[ ], int searchKey, int  low, int  high )

{ int  middle;

  while ( low <= high )

  { middle = ( low + high ) / 2;

     displayArray( b, low, middle, high );

     if ( searchKey == b[ middle ] )

       return middle;

     else if ( searchKey < b[ middle ] )

          high = middle - 1;

     else

          low = middle + 1;

   }

  return -1;   /* searchKey not found */

 }

void  displayArray ( int b[ ], int low, int mid, int high )

 { for ( int i = 0; i <= SIZE - 1; i ++ )

   { if ( i == low)

         cout << "["; // 标记搜索的起点

        if ( i == mid )

          cout << "*";     // 标记被比较的元素

        cout << b[ i ];          

        if ( i == high)

          cout << "]" ;  // 标记搜索的终点

        if ( i != SIZE - 1)

          cout << "\t";

      }

   cout << endl;

 }

 

posted @ 2018-01-09 16:45  gd_沐辰  阅读(229)  评论(0编辑  收藏  举报