Программирование на языке С++



жүктеу 1,02 Mb.
бет17/17
Дата17.01.2022
өлшемі1,02 Mb.
#32981
түріУказатель
1   ...   9   10   11   12   13   14   15   16   17
Указатели и массивы

Массивы

  • //программа слияния двух массивов упорядоченных по возрастанию
  • #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++ продвигает указатель на следующий элемент массива. С именем массива так делать нельзя


жүктеу 1,02 Mb.

Достарыңызбен бөлісу:
1   ...   9   10   11   12   13   14   15   16   17




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау