Стандартные алгоритмы работы с одномерными массивами
Пример 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).
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Почему стероиды повышают давление?: Основных причин три... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ![]() ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (455)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |