Обращение к элементам массива по имени.
Обращение к элементам массива осуществляется по индексу, значение которого начинается с нуля.
Пример:
int a[ 5];
a [0]-к первому по счету или с инд=0.
a [1]-
a [2]-
…….
a[4] – к последнему элементу массива.
Одномерные массивы и указатели.
Имя массива, объявленного статически, является адресом-константой элемента массива с индексом 0.
Начальный адрес определяется в момент описания массива и не может быть переопределен. Зная адрес элемента массива с индексом 0, можно получить адрес любого элемента массива, добавляя соответствующее смещение к адресу элемента массива с индексом 0. По выражению адреса можно получить значение любого элемента массива.
номер 1 2 3 4 5
индекс 0 1 2 3 4
.
имя эл.масс.a[0]a[1]a[2] a[3] a[4]
адрес эл.масс.a a+1 a+2 a+3 a+4
знач.эл.масс. *a *(a+1) *(a+2) *(a+3) *(a+4)
По адресу
Выделение памяти под массив динамически.
Выделение памяти динамически – выделение памяти под массив в процессе выполнения программы.
Выделить память под 7 элементов массива целого типа:
# define SIZE 7
int *p;
p=new int[SIZE];
p-содержит адрес начала массива..
Организация перебора элементов числового массива.
int a [10];
cin>>* a;
cin>>* (a+1); или for (i=0; i<10; i++)
cin>>*( a+2); cin>>* (a+i); //или cin>>a[i];
…………………
cin>>* (a+9);
Стандартный цикл перебора символов в строке.
char str [80];
int kol=0;
cin>>str;
for (i=0; str [i]!=0; i++) //подсчет количества символов в строке
kol++;
Задача 1:
Дан массив статически, заполнить с клавиатуры
Вычислить сумму элементов кратных числу k.
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
int main (void)
{
const int N=5;
int mas[N],k,i,sum=0;
cout << "\nВведите K: ";
cin >> k;
cout << "\nВведите массив: ";
for (i=0; i<N; i++)
cin >> mas[i];
for (i=0; i<N; i++) {
if (mas[i]%k==0)
sum += mas[i];
}
cout << "\nS=" << sum << endl;;
return 0;
}
Задача 2:
Выделить память динамически. Заполнить массив случайными числами. Вывести массив на экран. Вычислить минимум в массиве
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include "time.h"
#include "stdlib.h"
int main (void)
{
srand((unsigned)time(NULL));
int n, i, m=10000;
double min;
cout << "\nВведите размерность массива: ";
cin >> n;
double *p=new double[n];
for (i=0; i<n; i++) {
p[i] = (rand()%(2*m+1)-m)*0.9738179;
}
min = p[0];
cout << "\nмассив ";
for (i=0; i<n; i++) {
cout << i << "=" << p[i] << " ";
if (min>p[i])
min=p[i];
}
cout << "\nmin=" << min << endl;;
return 0;
}
Задача 3.
Задать строку статически. Ввести с клавиатуры и определить кол-во символов в строке
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
int main(void)
{
char str[80];
int n, i;
cout << "\n Введите строку:";
cin.getline(str,80);
for (i=0, n=0; str[i]!=0; i++) {
n++;
}
cout << "\n Кол-во=" << n << endl;
return 0;
}
Задача 4.
Решить задачу 1, выделяя память динамически и работая через адрес
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
int main(void)
{
char *p=new char[80];
int n=0;
cout << "\n Введите строку:";
cin.getline(p,80);
// цикл построен таким образом, что p содержит адрес текущего символа
while(*p!=0) {
n++;
p++; // Увеличиваем адрес для перехода к следующему символу
}
cout << "\n Кол-во=" << n << endl;
return 0;
}
Стандартные функции обработки строк
Все строки обязательно должны оканчиваться нуль-символом, и при объявлении размера массива необходимо это учитывать. Когда вы объявляете строковую переменную как массив символов, увеличьте размер массива на один символ для нуль-символа. Использование строк с конечным нулем также имеет то преимущество, что здесь отсутствуют ограничения, накладываемые реализацией C++. Кроме того, структура очень проста.
Ввод строк
В программах, которые мы рассматривали, операторы потокового вывода выводили строковые константы; C++ поддерживает потоковый вывод для строк как специального не-предопределенного типа данных. (Можно сказать, что это было сделано по требованию масс.) Операции и синтаксис для вывода строковых переменных остаются прежними. При вводе строк операция извлечения из потока » не всегда будет работать так, как вы ожидаете, поскольку строки часто содержат пробелы, которые игнорируются оператором ввода; поэтому вместо оператора ввода вам нужно использовать функцию getline. Эта функция вводит заданное количество символов.
Функция getline
Перегруженная функция getline объявляется следующим образом:
istreams getline( signed char *buffer,
int size,
char delimiter = '\n') ;
istreams getline( unsigned char *buffer,
int size,
char delimiter = '\n') ;
istream& getline( char *buffer,
int size,
char delimiter = '\n') ;
Параметр buffer является указателем на строку, в которую помещаются вводимые символы. Параметр size задает максимальное количество вводимых символов. Параметр delimeter определяет символ-ограничитель, при появлении которого ввод символов прекращается прежде, чем будут введены все size символов. Параметр delimeter имеет аргумент по умолчанию, равный '\n'. В случае ввода символов с клавиатуры этот символ появляется в потоке ввода при нажатии клавиши
Пример
#include <iostream>
int main()
{
char name[80] ;
cout « "Enter your name: ";
cin.getline(name, sizeof(name) - 1);
cout « "Hello " « name « ", how are you?";
return 0;
}