- //программа слияния двух массивов упорядоченных по возрастанию
- #include
- const int n=3;
- const int m=3;
- const maxint=32767;
- void main(){
- int c[n+m],a[n],b[m];
- int j=0;
- for (int i=0; i
- cout<<”введите “<
- cin>>a[i]; }
- for (int k=0; k
- cout<<”введите “<
- cin>>b[k];}
- for (int j=0,i=0,k=0; j
- if (a[i]
- {
- c[j]=a[i];if(i
- a[i]=maxint;//обеспечивает корректную работу if (a[i]
- }
- else
- {c[j]=b[k];
- if(k
- b[k]=maxint;//обеспечивает корректную работу if (a[i]
- };
- }
- for (int j=0; j
- cout<<*(c+j)<< " "
- cin>>j;
- }
Массивы - В отличии от других языков высокого уровня в С++ векторы имеют только одну размерность . Многомерные массивы в С++ представляются в виде массивов указателей на многомерные массивы. Многомерные массивы описываются следующим образом
- int V[2][2]; // 2 массивы из 2 int каждый
- float BV [4][4][4]; // 4 массивов указателей на 4 векторов из 4 float
-
- Синтаксис языка С++ не накладывает ограничений на размерность массивов. Однако реально используются размерности не выше трех.
- Обращение к элементам многомерных массивами может производиться как классическим способом - путем указания значений индексов, например,
- V[1][2]=3;,
- так и с использованием механизма указателей
- *(V[1]+2)=3; // V[1][2]=3.
- Использование механизма указателей для доступа к некоторому i,j,k-ому элементу трехмерного массива удобно рассмотреть на примере следующих эквивалентных обращений
- BV[i][j][k]=*(BV[i][j]+k)=*(*(BV[i]+j)+k)=*(*(*(BV+i)+j)+k)
Массивы - В этих обращениях использован тот факт, что, имя многомерного массива является указателем-константой на массив указателя - констант массива строки, первый элемент которого есть тоже указатель - константа строки. Элементы многомерных массивов хранятся в памяти в порядке возрастания самого правого индекса - по строкам.
- Аналогично одномерным массивам многомерные массивы могут быть так же инициализированы при их описании, например:
- float BV[3][3][3]={1.1,1.2,1.3,
- 2.1,2.2,2.3,
- 3.1,3.2,3.3}
-
- В этом случае, набор начальных значений, задаваемый при описании массива, соответствует порядку размещения элементов в памяти.
- При инициализации массивов одна из размерностей, а именно левая может не указываться. В этом случае число элементов массива определяется по числу членов в наборе инициализации.
- int V[ ][3]={1,2,3,
- 4,5,6,
- 7,8,9}; // V[3][3]
Массивы - Эта же инициализация может быть выполнена следующим образом :
-
- static int b[3][3] = { {1,2,3 }, { 4,5,6 },{7,8,9} };
-
- С++ допускает инициализацию не всех, а только первых элементов строк многомерного массива. Оставшиеся элементы инициализируются 0. В этом случае элементы строк заключаются в фигурные скобки, например:
- int V[ ][3]={{1,2},
- {4,5,6},{7}};
-
- элементы первой строки получат значения 1,2 и 0, второй 4,5,6, а третей 7,0,0.
Массивы - Пример программы, вычисляющей сумму элементов главной диагонали матрицы
- #include
- void main( )
- {int V[ ][3]={1,2,3,
- 4,5,6,
- 7,8,9}
- int i, s, s2;s1=0;s2=0;
- for (i=0;i<3;i++)
- s1+=V[i][i];
- for(i=0;i<3;i++)
- s2+=*(*(V+i)+i);
- printf("s1=%d s2=%d " ,s1,s2);
- }
Массивы - Примеры решения задач с использованием матриц.
- //Вычислить суммы элементов каждой строки матрицы //arr1[n,n]. Найти минимальную из этих сумм и номер соответствующей строки
- #include
- #include
- #define n 2
- void main(void){
- int arr1[n][n],arr2[n];
- int sum=0;
- cout<<"введите данные arr[" <
- for(int i=0;i<=n;i++){
- for (int j=0;j<=n;j++){
- cout<<"введите arr["<
- cin>>arr1[i][j]; }}
- for (int i=0;i<=n;i++)
- {sum=0;
- for (int j=0;j<=n;j++)
- {
- sum+=arr1[i][j];}
- arr2[i]=sum;}
- int min=arr2[0],ind=0;
- for (int j=0;j<=n;j++){
- if(min>arr2[j]){min=arr2[j],ind=j;}}
- cout<<"min сумма ="<
- cin>>ind;
- }
Массивы - Краткие выводы из содержания лекции :
-
- 1) для доступа к элементу многомерного массива m в С++ нужно писать m[i][j], а не m[i,j].
- 2) если указатель p указывает на элемент массива, то p+1 - указывает на следующий элемент и т.д вне зависимости от типа элементов массива.
- 3) имя массива означает то же, что и адрес первого элемента массива a == &a[0]
- 4) доступ к массиву через индекс и через указатель со смещением аналогичны : a[i] == *(a+i)
- 5) указатель тоже можно использовать в выражениях с индексом. Если pa указывает на элемент массива, то
- *(pa+i) == pa[i]
- 6) pa++ продвигает указатель на следующий элемент массива. С именем массива так делать нельзя
Достарыңызбен бөлісу: |