Московский институт электронной техники
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Кафедра “Информатика и программное обеспечение вычислительных систем”
Учебная дисциплина “Информатика”
“Утверждаю”
Зав. Кафедрой ИПОВС
_______Шаньгин В.Ф.
“___”__________1998г.
Лабораторная работа
Составление С – программ с
Использованием статических массивов.
Разработала:
к.т.н. Ашарина И.В.
Москва – 1998г.
Лабораторная работа по курсу "Информатика" Составление с - программ с использованием статических массивов.
Цель работы: 1) изучение описания, ввода и вывода статических массивов на языке С;
2) освоение обработки массивов с использованием вложенных циклов.
Массивы являются наиболее широко используемыми структурами данных. Они дают возможность программам сохранять данные для последующей обработки. Язык С (и C++) поддерживает как статические, так и динамические массивы. В данной работе мы познакомимся только со статическими массивами.
Массив - это множество однотипных переменных.
Рассмотрим следующие темы, связанные со статическими массивами:
• объявление одномерных массивов;
• использование одномерных массивов;
• инициализация одномерных массивов;
• объявление многомерных массивов;
• использование многомерных массивов;
• инициализация многомерных массивов.
Одномерный массив или вектор - это множество переменных, совместно использующих одно и то же имя (имя массива). В одномерном массиве доступ к отдельной переменной осуществляется по индексу (порядковому номеру).
Синтаксис для объявления одномерного массива:
тип имя_массива [число_элементов];
Примеры:
int MyArr[10];
char Literal [31];
double х_arr[100];
При объявлении одномерных массивов в C++ необходимо соблюдение двух правил:
-
Индекс первого элемента массива равен 0. Это значение нельзя изменить или переопределить.
-
Объявление массива предполагает точное определение числа его элементов, равное номеру последнего элемента плюс 1.
Доступ к отдельным элементам массива осуществляется по имени массива и индексу элемента.
При работе с массивами рекомендуется проверять допустимость значения индекса массива. Допустимыми являются значения индексов в диапазоне от 0 до <число_элементов-1>.
Ввод элементов массива осуществляется в цикле:
const int MAX = 30;
main()
{ double x[MAX];}
for (int i=0; i< MAX; i++)
{
printf(“\n x[%d]=”,i);
scanf(“%f”,&x[i]);
}
Можно организовать ввод массива, пользуясь генератором случайных чисел:
randmize( ); // инициализировать генератор случайных чисел
for(int i=0;i<MAX;i++)
{
x[i] = raiidom (100);
}
Для инициализации массивов необходимо поместить список начальных значений между фигурными скобками.
Пример:
const int MAX=10;
main()
{
double x[MAX]={12.2, 45.4, 67.2, 12.2, 34.6, 87.4, 83.6, 12.3, 14.8, 55.5};
}
Если число начальных значений меньше числа элементов в массиве, компилятор присвоит оставшимся элементам массива значение 0. Если список начальных значений содержит больше элементов, чем число в квадратных скобках, компьютер генерирует сообщение об ошибке.
Точное число начальных значений можно не указывать, так как C++ позволяет задавать размер массива автоматически, используя число элементов в соответствующем списке начальных значений. Следовательно, число в квадратных ско6ках при описании массива может отсутствовать. В этом случае размер массива определит компилятор. Например, double x[]={1,2,3}.
В многомерном массиве каждый дополнительный индекс обеспечивает дополнительное средство доступа к конкретному элементу. Наиболее распространенным видом многомерного массива являются двумерные массивы или матрицы.
Общий синтаксис для объявления двумерных и трехмерных массивов:
тип массивов [размер 1][размер 2];
тип массивов [размер 1][размер 2][размер 3];
Как и в одномерных массивах, каждый индекс имеет нижнюю границу равную 0, а число элементов для каждого уровня индекса определяется при объявлении многомерного массива.
Примеры:
double matrixA[100][10];
char table[41][22][3];
int index[7][12];
Большинство компиляторов хранит элементы многомерного массива друг за другом, то есть как один длинный массив. Исполняемый модуль вычисляет, где расположен искомый элемент в этом массиве.
Однако заполнение и обработку многомерных массивов чаще всего производят, пользуясь вложенными циклами.
С++ дает возможность инициализировать многомерный массив способом, аналогичным инициализации одномерных массивов. Для этого нужно использовать список значений, расположенных в той же последовательности, в которой хранятся в памяти элементы многомерного массива.
Пример:
const int MAX_COL=4;
const int MAX_ROW=3;
main()
{
double x[MAX_ROW][МАХ_COL] = { {1,2,3,4} // строка # 1
{5,6,7,8} // строка #2
{9,10,11,12} // строка # 3
};
}
Ввод многомерных массивов также может быть осуществлен как с клавиатуры:
for(i=0;i< MAX_ROW;i++)
{
for(j=0;j<MAX_COL;j++)
{
printf(“\n x[%d, %d]”, i, j);
scanf("%f”,&x[i][j]);
}
}
так и с помощью генератора случайных чисел:
randomize();
for(i=0;i< MAX_ROW;i++)
{
for(j=0;j<MAX_COL;j++)
{
x[i][j]=random(10);
}
}
Вывод также осуществляется с помощью циклов, одиночных для векторов массивов: или вложенных для многомерных массивов:
for( i=0;i<MAX_ROW; i++)
{
for(j=0;j<MAX_COL;j++)
{
printf(“x[i][j]”, i, j);
}
printf("\n");
}
Требования к отчету.
Отчет должен содержать:
• наименование и цель работы;
• краткие теоретические сведения;
• схему алгоритма;
• текст программы для варианта задания, соответствующего номеру фамилии студента в группе (если студент закреплен за определенной ЭВМ, имеющей номер, то номеру ЭВМ);
• результаты выполнения программы.
Контрольные вопросы.
-
Позволяет ли C++ наменять размер массива?
-
Как расположены в памяти элементы многомерных массивов?
-
Необходимо ли использовать для массивов только предопределенные типы?
-
Как объявить одномерный и двумерный массив?
-
Допустимы ли объявления:
int hats[3]={ 10,20,30};
int caps[ ]={5,7,9}; ?
Варианты заданий.
№ варианта |
ЗАДАНИЕ |
1, 16 |
Дана целочисленная матрица размера 6х9, содержащая как положительные, так и отрицательные элементы. Сформировать одномерные массивы, состоящие из сумм элементов четных строк и нечетных столбцов. Определить значение и местоположение максимального и минимального элементов матрицы, а также ее минимальное и максимальное значение по абсолютной величине. |
2, 17 |
Дана целочисленная матрица 8х12. Найти сумму элементов заштрихованной области. Определить значение и местоположение максимального элемента из правой верхней четверти матрицы, и минимального элемента из ее нижней левой четверти. Сформировать новую матрицу путем приставления полученной суммы к каждому элементу исходной матрицы. |
3, 18 |
Дана целочисленная матрица 8х8. Найти сумму элементов заштрихованной области. Сформировать одномерный массив, содержащий минимальные элементы каждой строки.
|
4, 19 |
Дана целочисленная матрица 11х11. Найти сумму элементов заштрихованной области. Сформировать одномерный массив, содержащий максимальные элементы каждого столбца.
|
5, 20 |
Дана целочисленная матрица m х k. Найти минимальное значение для верхней половины матрицы и максимальное для ее нижней половины. Сформировать новую матрицу путем прибавления к каждому элементу верхней половины исходной матрицы определенное минимальное значение и каждому элементу ее нижней половины определенного для нее максимального значения. |
6, 21 |
Дана целочисленная матрица m х m. Найти максимальное значение для ее первой четверти и минимальное - для третьей четверти. Сформировать одномерный массив, содержащий произведения элементов каждого столбца матрицы.
|
7, 22 |
Дана матрица 5 х 7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий количество символов 'm' в каждом из ее столбцов. Подсчитать количество символов 'а' над третьей строкой матрицы и общее количество символов 'Ь' и 'z’ под третьей ее строкой. |
8, 23 |
Дана целочисленная матрица 9х9. Определить количество нулевых элементов в заштрихованной области, Сформировать одномерный массив, содержащий количество отрицательных элементов каждого столбца матрицы.
|
9, 24 |
Дана действительная матрица 7х7. Найти минимальное значение среди элементов, стоящих над главной диагональю и максимальное среди элементов, находящихся ниже главной диагонали, а также их местоположение. Сформировать одномерный массив, cодержащий сумму элементов четных строк и произведение элементов нечетных строк. |
10, 25 |
Дана действительная матрица 6х8. Найти сумму элементов каждой строки для верхней половины матрицы и произведение элементов каждой строки для ее нижней половины. Определить значение и местоположение максимального элемента для верхней половины матрицы и минимального элемента для ее нижней половины. |
11, 26 |
Дана действительная матрица 7х7. Найти сумму элементов в заштрихованной области. Сформировать новую матрицу путем прибавления полученного значения к каждому элементу из не заштрихованной области исходной матрицы.
|
12, 27 |
Дана матрица 4х5, элементами которой являются значения символьного типа. Заменить значения символов, больших, чем '0' на '0'. После этого сформировать одномерный массив, содержащий количество элементов '0' в каждом четном столбце матрицы и количества символов, отличных от '0' в каждом нечетном столбце, |
13, 28 |
Дана целочисленная матрица 4х7. Найти среднее арифметическое значение положительных элементов и модулей отрицательных элементов в каждом столбце матрицы. Результаты вычислений записать в одномерные массивы. Определить минимальное и максимальное значение и их местоположение для этой матрицы. |
14, 29 |
Дана целочисленная матрица размером 5х5. Получить новую матрицу путем умножения всех элементов на наименьший по модулю элемент. Сформировать одномерный массив из максимальных элементов каждой строки полученной матрицы. |
15, 30 |
Дана вещественная квадратная матрица порядка 5. Получить новую матрицу прибавления к элементам каждой строки матрицы наименьшего значения элементов этой строки. Сформировать одномерный массив, содержащий количество четных элементов в четных столбцах полученной матрицы и количество нечетных элементов в ее нечетных столбцах. |