Перейти к содержанию

Программирование на языке Си/§5

Материал из Викиверситета

Массивом называется матрица и её частные случаи: вектор-столбец и вектор-строка. Массив определяется по следующем синтаксису: тип имя [размерность] Размерность может быть только целочисленным - это количество элементов массива. Одномерный массив - это матрица столбец или строка. Например: (1 2 3 4). Запись одномерного массива: имя[№ элемента матрицы]. Двухмерный массив - это матрица размерности ». . Запись двухмерного массива: имя[№ элемента m][№ элемента N]. Многомерные массивы - это матрица, элементами которой являются матрицы. Так в массиве mas[2][3][4] элементами являются 2 двухмерных массива размерности 3X4.

Программа 4.1

[править]

Напишем простейшую программу с использованием массива

 
#include <stdio.h>             
int main()                     
{   int i;
    int mas[10]={0,1,2,3,4,5,6,7,8,9}; // производим запись в массив размерностью 10, чисел 0,1,2,3,4,5,6,7,8,9. 
    for(i=0;i<10;i++) // выполняем цикл for, до тех пор пока не распечатаем элементы массива
    {
       printf("элемент массива № %d : %d \n", i,mas[i]);                
    }
}

Распишем пошагово работу программы:

  1. шаг. записываем в матрицу значения матрицы строки: 0,1,2,3,4,5,6,7,8,9.
  2. шаг. i=0
  3. шаг. i<0 выполняем цикл
  4. шаг. i==1
  5. шаг. элемент массива № 0: 0
  6. шаг. i==2
  7. шаг. элемент массива № 1: 1
  8. шаг. i==3
  9. шаг. элемент массива № 2: 2

и т.д. пока i!=10.

Программа 4.2

[править]

Усложним предыдущую задачу таким образом, чтобы элементы массива вводились нами вручную. И сделаем одно нововведение, а именно директиву препроцессора define. define позволяет связать идентификатор с лексемой (возможно, что пустой) или последовательностью лексем (строка символов является лексемой, заключённой в двойные кавычки), которую называют строкой замещения или замещающей частью директивы define.

 
#include <stdio.h>  
#define N 10           
int main()                     
{   int i;
    int mas[N];
    printf("введите N чисел");
    for (i=0;i<5;i++)
    {
      scanf("%d",&mas[i]); 
    }
    for(i=0;i<5;i++) 
    {
       printf("Элемент массива № %d : %d \n", i,mas[i]);                
    }
    getch();
}

Давайте подробно разберём каким образов в данной программе происходит ввод значений в массив, в данной программе мы заполняем одномерный массив матрицей-строкой. каждое значение i, в массиве mas[i], соответствует номеру ячейки в матрице. Так, если в массиве хранятся данные 2, 5, 7, 6, 5, 8, 5, 5... ,то: mas[0]=2, mas[1]=5,..., mas[5]=8... и т.д.

Программа 4.3

[править]

Усложним программу, вместо одномерного массива будем использовать двухмерный массив и распечатку будем проводить в виде матрицы.

 
#include <stdio.h>
#include <stdlib.h>
#define N 10           
int main()                     
{   int i, j;
    int mas[N][N];
    printf("Введите матрицу размерностью 2 на 2\n");
    for (i=0;i<2;i++)
      for (j=0;j<2;j++)
        {
             scanf("%d",&mas[i][j]);
        }
    for(i=0;i<2;i++) 
       {
        for (j=0;j<2;j++)
        {
              printf("%d  ",mas[i][j]);            
        }
        printf("\n"); 
       }
    getch();
}

Обратите внимание, как мы заполняем матрицу значениями:

 for(i=0;i<n;i++)
 for(j=0;j<m;j++)

здесь мы вбиваем значения в матрицу размерности m на n построчно. Здесь j - это столбец, а i - это строка. Для вбивания значений в многомерный массив используется этот же синтаксис. Для трёхмерного массива:

 
for(i=0;i<n;i++)
 for(j=0;j<m;j++)
   for(k=0;k<o;k++)

В каждой ячейке i мы храним двухмерную матрицу размера m на о. Четырёхмерного массива:

 
for(i=0;i<n;i++)
 for(j=0;j<m;j++)
   for(k=0;k<o;k++)
    for(l=0;l<p;l++)

В каждой ячейке i мы храним трехмерную матрицу размера m на о на l. Массив можно забивать и посредством while, так для двумерного массива:

 
i=o;
while(i<n)
 {i++; j=0;
  while (j<0)
  {j++
   scanf("%d",&mas[i][j]);
  }
 }

Программа 4.4

[править]

Напишем программу поиска наименьшего элемента массива:

#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
{
  int mas[N],min,i, k;
  printf("введите количество элементов массива\n");
  scanf("%i",&k); //вводим количество элементов массива
  printf("введите элементы массива\n");
  /*Вбиваем в массив последовательность чисел*/
  for(i=0;i<k;i++) // i=0,до тех пор пока i  меньше количества элементов массива выполняем: i++
    scanf("%i",&mas[i]); // вбиваем в массив числа последовательности по одному до тех пор пока выполняется условие i<k
  
   min=0; 
  /*Поиск минимального значения в массиве*/
   for(i=0;i<k;i++) // i=0,до тех пор пока i  меньше количества элементов массива выполняем: i++
  	if(mas[i]<mas[min]) // если текущий элемент массива меньше минимального, то:
  	  min=i; // присваиваем номер текущего элемента min
  /* вывод результата*/ 
  printf("min=%i",mas[min]);
  getch();
  return 0;
}

Практикум

[править]

Выполните все приведённые выше программы. Напишите программу 4.3 через while. Пошагово просмотрите программу 4.4.

Домашнее задание

[править]
  1. Напишите программу, подсчитывающую среднее арифметическое значение элементов массива.
  2. Напишите программу поиска максимального элемента массива.