Стандартные алгоритмы работы с одномерными массивами
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

Пример 1.: Нахождения max (min) числа в массиве.

#include <stdio.h>

void main (void) {

int i, num, a[10];

for (num=a[0], i=1; i<10; i++)

                if (num<a[i])

     num=a[i];

printf("Max число в массиве %d\n",num);

}

 

Пример2.: Сортировка по возрастанию методом отбора

#include <stdio.h>

void main (void) {

int i, j, num, k, flag, a[10];

for (i=0; i<9; ++i) {

               num=a[i]; k=i; flag=0;

   for (j=i+1; j<10; ++j){

  if (a[j]<num) { // ищем min, его индекс.

     num=a[j];

       k=j;

       flag=1;

    }

}

if(flag==1){     

               a[k]=a[i];

               a[i]=num;

       }    

}       

}

 

Пример 3.: Сортировка по возрастанию методом «Пузырька»

#include <stdio.h>

void main (void) {

int i, j, a[10], num;

for (i=1; i<10; i++)

for (j=8; j>=i; --j)

       if (a[j-1]<a[j]) {  // ищем min, его индекс.

               num=a[j-1];

            a[j-1]=a[j];

            a[j]=num;

}    

 }

 

Пример 4.: поиск заданного значения

#include <stdio.h>

void main (void) {

int i, k=0, num=10, a[10];

for (i=0; i<10; i++)

       if(a[i]==num)

      printf(«%d»,i);

}

 

Инициализация одномерных массивов

 

Для хранения данных часто используются массивы. Их можно инициализировать.

 

int days[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

 

Если данных меньше, чем 12, то остальные будут инициализированы 0, если массив глобальный, иначе значения неопределенны. Можно не задавать количество элементов в массиве. Оно будет определяться автоматически.

int days []={31, 28, 31, 30, 31, 30, 31, 31, 30, 31};

void main (void){

int i;

for (i=0; i<sizeof days/(sizeof(unt)); i++)

     printf("Месяц %d имеет %d дней\n",i+1, i++);

}

 

Обнуление массива:

 

int array[10] = {0};

 

Многомерные массивы

 

Определяются в программе также как и одномерные с указанием размерности каждого индекса в квадратных скобках.

float rain[5][12];

Количество выделяемой памяти рассчитывается как 4*5*12 байт.

Каждый индекс изменяется от 0 до n-1. В памяти все элементы располагаются последовательно, но индексы меняются следующим образом:

 

 

 

 


//Пример программы ввода кол-ва осадков помесячно за 5 лет и расчета среднего за каждый год и за 5 лет

void main(void){

int i,j;

float mas[5][12], sumyear, sum=0;

for (i=0; i<5; i++){

    printf("Ввести кол-во осадков за %d год помесячно\n", i+1);

sumyear=0;

  for (j=0; j<12; j++){

             scanf ("%f",&mas[i][j]);

                   sumyear+=mas[i][j];

   }

   sum+=sumyear/12;

   printf(Ср. за %d год = %.2f\n”,sumyear/12);

 }

 printf(Ср. за 5 лет = %.2f\n”,sum/5);

       }

 


Инициализация многомерных массивов

1. Инициализируем как одномерный массив.

float rain[2][3]={10.2, 8.1, 6.8, 9.2, 7.8, 4.4};

 

2. Инициализируем каждую строку.

float rain[2][3]={{10.2, 8.1, 6.8},

                              {9.2, 7.8, 4.4}};

 

3. Можно инициализировать в строке не все элементы, а только первые указанные.

int array[2][3]={{2, 8},

                             {9}};

 

4. Можно не задавать количество строк. Оно будет определяться автоматически по заданным инициализаторам. 

int mas[][3]={{10, 8},

           {9, 7, 4}};

 

Стандартные алгоритмы работы с двумерными массивами

 

К стандартным алгоритмам работы с двумерными массивами (матрицами) относятся:

1. Сложение (вычитание) двух матриц;

2. Умножение матрицы на скаляр;

3. Умножение матрицы на вектор;

4. Умножение матрицы на матрицу;

5. Транспонирование матрицы;

6. Вставка (удаление) строк и столбцов матрицы;

7. Вычисление обратной матрицы.

8. Перестановка строк и столбцов.

 

Пример 1. Сложение двух матриц.

void main(void){

int i,j;

float mas1[3][4], mas2[3][4];

for (i=0; i<3; i++)

for (j=0; j<4; j++){

       mas1[i][j]+=mas2[i][j];     

         printf(mas1[%d][%d]=%.2f\n”, i, j, mas1[i][j]);

       }

 }

 

Пример 2. Умножение матрицы на вектор

void main(void){

int i,j;

float mas1[3][4], vec[4], var, mas2[3];

for (i=0; i<3; i++) {

       var = 0;

for (j=0; j<4; j++)

var += mas1[i][j] * vec[j];

       mas2[i] = var; 

       printf(mas2[%d] = %.2f\n”, i, mas2[i]);

}

 }

 

Пример 3. Умножение матрицы на матрицу

void main(void){

int i, j, k;

float mas1[3][4], var, mas2[4][5], mas3[3][5];

for (i=0; i<3; i++) {

               for (j=0; j<5; j++) {

       var = 0;

for (k=0; k<4; k++)

var += mas1[i][k] * mas2[k][j];

       mas3[i][j] = var;          

       printf(mas3[%d][%d] = %.2f\n”, i, j, mas3[i][j]);

   }

}

 }

 

Пример 4. Вставить строку

void main(void){

int i, j;

float mas1[4][4], var=1, vec[4];

for (i=0; i<4; i++)

               for (j=3; j<var; j--)

 mas1[j][i] = mas1[j-1][i];   //сдвиг строк

for (i=0; i<4; i++)

   mas1[var][i] = vec[i];   

}

 

ФУНКЦИИ

 

Функция – это фрагмент программы со своим именем, к которому можно обратиться для выполнения необходимых действий.

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

- они освобождают от повторного программирования, если конкретную задачу нужно решать в программе несколько раз.

- повышают уровень модульности программы, облегчают её чтение, внесение изменений, коррекцию ошибок. Например:

 

void main (void){

float list[50];

read list (list);       // ввод набора чисел

sort list (list);        // сортировка

average (list);       // поиск среднего

bargaph (list);       // печать графика

}

 

- cозданные функции можно использовать и в других программах.

Функции бывают библиотечные и пользовательские. Для использования библиотечных функций нужно указать заголовочный файл, в которых они объявлены (директива #include).

 

Дата: 2018-12-28, просмотров: 385.