Опубликован: 02.02.2011 | Уровень: для всех | Доступ: платный
Лекция 11:

Массивы: одномерные массивы

< Лекция 10 || Лекция 11: 1234 || Лекция 12 >

Использование элементов массивов в выражениях (операции с элементами массивов)

С элементами объявленного массива можно выполнять все действия, допустимые для обычных переменных этого типа (выше был приведен пример целочисленного массива, т.е. типа int ). Например, возможны операторы присваивания:

hours[4] = 34;
hours[5] = hours[4]/2;

или логические выражения с участием элементов массива:

if (number < 4 && hours[number] >= 40) { ... }

Присвоить значения набору элементов массива часто бывает удобно с помощью циклов for или while. Для массивов не допустима операция прямого присваивания.

Генерация одномерных массивов

Задачи по программированию с использованием массивов решаются, как правило, по следующему алгоритму: объявление массива, генерация или инициализация, обработка значений элементов, вывод. При этом, если в процессе обработки значения элементов массива изменяются, то вывод осуществляется дважды: до и после обработки.

Перед использованием значений элементов массива их необходимо сформировать. Задать значения элементам массива можно на этапе объявления, т.е. выполнить инициализацию, а также непосредственным выполнением присваивания.

В большинстве задач с использованием массивов целесообразно выполнять генерацию массивов – автоматическое формирование значений элементов. Генерацию массива (массивов) в программе оформляют в виде отдельной функции.

Стандартными способами генерация массивов являются:

  • ввод данных с клавиатуры,
  • формирование значений через генератор случайных чисел,
  • вычисление значений по формуле,
  • ввод данных из файла.

При этом при формировании значений элементов используют цикл по индексам элементов или арифметические операции с указателем на массив. В данной работе рассмотрим первые три способа генерации массивов ( Примеры 3, 4, 6 ).

Вывод одномерных массивов

Вывод массивов также целесообразно оформлять в виде отдельной функции. Так как функция вывода не изменяет значения элементов массива, то в качестве одного из параметров такой функции выступает сам массив или указатель на массив. Одномерные массивы удобно выводить в строку или в столбец в зависимости от задачи ( Пример 3 и 4 ). Для организации вывода также используют цикл по индексам элементов или арифметические операции с указателем на массив.

Пример 3.

/*Генерация целочисленного массива числами с клавиатуры и вывод массива в строку*/
#include "stdafx.h"
#include <iostream>
using namespace std;
#define max 20

void gen (int k,int *pp);//прототип функции генерации массива
void out (int k,int x[max]);//прототип функции вывода массива

int _tmain(int argc, _TCHAR* argv[]){
  int a[max],n,*p; 
  do {
    printf("\nВведите количество элементов массива n (n<=20):");
    scanf ("%d",&n); 
    }
  while (n>max); //проверка выхода за границы массива
  p=a;
  gen(n,p);
  out(n,a);
  system("pause");
  return 0;
}

//Описание функции генерации массива с клавиатуры
void gen(int k,int *pp){     
/*передача указателя как параметра позволяет вернуть 
  сформированный массив в основную программу*/
  int i;
  printf("\nВведите значения %d элементов массива: \n",k); 
  for (i=0;i<k;i++){
    printf("x[%d]= ",i);
    scanf("%d",pp++);
  }
}

//Описание функции вывода массива в строку
void out (int k,int x[max]){
  int i;
  printf("\nВывод значений %d элементов массива в строку: \n",k); 
  for (i=0;i<k;i++)
    printf("%d\t",x[i]);
}

Пример 4.

/*Описание функции генерации массива значениями элементов арифметической прогрессии*/
void gen(int k,int x[max]) {
  int i,d;
  printf ("\nВведите нулевой элемент прогрессии: ");
  scanf("%d",&x[0]); 
  printf ("\nВведите разность прогрессии: ");
  scanf("%d",&d);
  for (i=1;i<k;i++)
     x[i]=x[i-1]+d;
}

Пример 5.

//Описание функции вывода массива в столбец
void out (int k,int x[max]){
  int i;
  printf("\nВывод значений %d элементов массива в столбец: \n",k); 
  for (i=0;i<k;i++)
    printf("x[%i]= %d\n",i,x[i]);
}

Для использования функции генерации случайных чисел необходимо подключить библиотеку <time.h>.

Для написания кода генерации массива случайными целыми числами используется:

  1. Функция srand(). Синтаксис:
    void srand(unsigned seed);
    – функция устанавливает свой аргумент как основу ( seed ) для новой последовательности псевдослучайных целых чисел, возвращаемых функцией rand(). Сформированную последовательность можно воспроизвести. Для этого необходимо вызвать srand() с соответствующей величиной seed.

    Для использования данной функции необходимо подключить библиотечный файл <stdlib.h>.

  2. Функция rand(). Синтаксис:
    int rand(void);
    – функция возвращает псевдослучайное число в диапазоне от нуля до RAND_MAX. Для использования данной функции необходимо подключить библиотечный файл <stdlib.h>.
  3. Константа RAND_MAX определяет максимальное значение случайного числа, которое может быть возвращено функцией rand(). Значение RAND_MAX – это максимальное положительное целое число.
  4. Часто в задачах требуется выполнить генерацию массива на произвольном промежутке [a,b). Для этого используются следующие выражения:
    //генерация случайных целых чисел на [a,b)
       x[i]=rand()%(b-a)+a;
    //генерация случайных вещественных чисел на [a,b)
       y[i]= rand()*1.0/(RAND_MAX)*(b-a)+a;

Пример 6.

/*Описание функции генерации массива случайными вещественными числами на[a,b)*/
void gen(int k,int a, int b, float x[max]){ 
  int i;
  srand(time(NULL)*1000); 
  //устанавливает начальную точку генерации случайных чисел
  for (i=0;i<k;i++){
   x[i]=(rand()*1.0/(RAND_MAX)*(b-a)+a); 
   //функция генерации случайных чисел на [a,b)
   }
}

Ключевые термины

Генерация массива – это автоматическое формирование значений его элементов.

Значение элемента массива – это значение, хранящееся по адресу, который соответствует данному элементу.

Измерение массива – это количество индексов в определении массива.

Имя массиваидентификатор, именующий выделенную под массив область памяти.

Индекс элемента массива – это порядковый номер элемента в последовательности.

Инициализация массива – это формирование значений его элементов.

Массив – это именованная последовательность областей памяти, хранящих однотипные элементы.

Одномерный массив – это массив, измерение которого равно единице.

Размер массива – это количество элементов в массиве.

Тип массива – это тип элементов массива.

Указатель на массив – это адрес области памяти, выделенной под массив.

Элемент массива – это каждая область памяти из последовательности областей, выделенных под массив.

Краткие итоги

  1. Массив является представителем структурированного типа данных в языке С++.
  2. Элементы массива имеют одинаковые имя, тип и располагаются в памяти последовательно.
  3. Элементы массива характеризуются индексами, значениями и адресуемой памятью.
  4. Существует две основные формы объявления массивов: с указанием и без указания размера. Безразмерный массив объявляется, если: он инициализируется при объявлении, является формальным параметром функции, объявлен как ссылка на массив.
  5. Инициализация массива заключается в присваивании начальных значений его элементам. В программах часто используется генерация массивов.
  6. Для массивов нельзя выполнить операцию прямого присваивания.
  7. Адресация элементов массива осуществляется с помощью индексированного имени. Обращаться к элементам массива можно также посредством механизма указателей.
  8. Размер памяти, занимаемой массивом, зависит от реализации и вычисляется с помощью операции sizeof.
  9. Массивы используются для решения прикладных задач.
< Лекция 10 || Лекция 11: 1234 || Лекция 12 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Ольга Замятина
Ольга Замятина
Россия, Калиниград, РГУ им. И. Канта, 2009
Эдуард Санин
Эдуард Санин
Украина, Харьков, ХАИ