close

Вход

Забыли?

вход по аккаунту

?

Лаба 4

код для вставкиСкачать
 Лабораторная работа № 4
Составление программ с использованием
масс
и
вов
Цель работы:
1) изучить описание массивов на языке С; 2) освоить обработку массивов с использованием вложе
н
ных циклов.
Теоретические сведения
Массив
-
это совокупность переменных одно
го типа, к которым обращаются с помощью общего имени. Доступ к отдельному элементу массива может осуществляться с помощью инде
к-
са. В С все массивы состоят из соприкасающихся участков памяти. Наименьший адрес соотве
т-
ствует первому элементу. Наибольший адрес
соответствует последнему элементу. Массивы м
о-
гут иметь одну или несколько размерностей.
Одномерный массив
Стандартный вид объявления одномерного массива следующий:
тип имя_массива [размер];
В С массивы должны определяться однозначно, чтобы компилятор мог выделить для них место в памяти. Здесь тип
определяет базовый тип массива и является типом каждого элемента масс
и-
ва. Параметр размер
определяет, сколько элементов содержит массив. У всех массивов первый элемент имеет индекс 0.
Пример 1. Следующая программ
а загружает целочисленный массив числами от 0 до 9 и выводит его:
#include <stdio.h>
int main(void)
{
int x[10];
int t;
for(t=0;t<10;t++) x[t]=t;
for(t=0;t<10;t++) printf("%d ",x[t]);
return 0;
}
В С отсутствует проверка границ массивов. Можно в
ыйти за один конец массива и зап
и-
сать значение в какую
-
либо переменную, не относящуюся к массиву, или даже в код программы. Работа по проверке границ возлагаются на программиста.
Пример 2
. Ввод массива с клавиатуры.
. . .
#define M 30
. .
.
int main ( )
{double x[M];
. . .
for (int i=0; i< M; i++)
{ cout << "
\
n x[" << i << "%d ]=";
cin >> x[i];
}
return
0;
}
M
ожно организовать ввод массива, пользуясь генератором случа
й
ных чисел.
Пример 3
. Ввод масс
ива с помощью генератора случайных чисел.
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main( void )
{
int i;
int a[10];
/* Seed the random
-
number generator with current time so that
* the numbers will be different every tim
e we run.
*/
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
a[i]=rand() ;
return 0;
}
Для инициализации массивов формируют список начальных значений, заключенных в ф
и-
гурные скобки.
Пример 4. Инициализация одномерного массив
а
#define M 10
. . .
main ( )
{ double x[M]= {12.2, 45.4, 67.2, 12.2, 34.6, 87.4, 83.6, 12.3, 14.8, 55.5};
. . .
}
Если начальных значений задано меньше, чем элементов в массиве, компилятор присвоит оставшимся элементам масс
ива значение 0. Если количество начальных значений больше, чем число в ква
д
ратных скобках, компилятор выдаст сообщение об ошибке.
Точное число начальных значений можно не указывать, так как язык С позволяет зад
а
вать размер массива автоматически, используя количество элементов в соответствующем списке н
а
чальных значений. Следовательно, число в квадратных скобках при описании массива может отсутствовать. В этом случае размер массива определит компилятор, например, double x[ ]= {1,2,3};
Двумерные массивы
С поз
воляет создавать многомерные массивы. Простейшим видом многомерного массива является двумерный массив. Двумерный массив это массив одномерных массивов. Двумерный массив объявляется следующим образом: тип имя_массива
[
размер_2
] [
размер_1
];
Как и в одн
омерных массивах, каждый индекс имеет нижнюю границу, равную 0, а число элементов для каждого уровня индекса определяется при объявлении многоме
р
ного массива.
Пример 5. Объявление многомерных массивов
double matrix A [100][10];
char table [41][22][3];
int
index [7][12];
Большинство компиляторов хранит элементы многомерного массива друг за другом, т.е. как длинный одномерный массив. Исполняемый модуль вычисляет, где расположен искомый элемент в этом ма
с
сиве. Однако заполнение и обработку многомерных массив
ов чаще всего производят пользуясь вложенными цикл
а
ми.
С дает возможность инициализировать многомерный массив способом, аналогичным ин
и-
циализации одномерных массивов. Для этого нужно использовать список значений, распол
о-
женных в той же последовательности, в которой элементы многомерного массива хранятся в памяти ЭВМ.
Пример 6. Инициализация матрицы
#
define
MAX
_
COL
4
#define MAX_ROW 3
. . .
int main ( )
{ double x[MAX_ROW][MAX_COL]= {{ 1, 2, 3, 4}, // строка
# 1
{ 5, 6, 7, 8}, // строка
# 2
{ 9,10,11,12}};
// строка
# 3
. . .
return 0;
}
Пример 7.
Ввод многомерных массивов с клави
а
туры.
. . .
for (i=0; i<MAX_ROW; i++)
{ for (j=0; j<MAX_COL; j++)
{ cout << "x[" << i <<"][" << j<<"]";
cin >> x[i][ j]; }
}
. . .
Вывод массивов так
же осуществляется с помощью циклов, одиночных для одномерных ма
с-
сивов или вложенных для мног
о
мерных массивов.
Пример 7. Вывод матриц
. . .
for (i=0; i<MAX_ROW; i++)
{ for (j=0; j<MAX_COL; j++)
{ cout << setw(5) <<
x[i][ j];
}
cout
<< endl
;
}
При обработке матриц чаще всего встречаются следующие типы задач:
1)
работа с матрицей в целом;
2)
работа со строкой (столбцом) матрицы;
3)
работа с диагональными элементами.
При работе с матрице
й в целом, в качестве объекта для сравнения выбирают элемент с и
н-
дексами (0,0), затем, последовательно перебирая все элементы матрицы, выполняют необход
и-
мые действия. Перебор элементов происходит с использованием вложе
н
ных циклов.
Пример 8.
Определить сред
нее арифметическое значение элементов матрицы x[6][7] цел
о-
го типа.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define MAX_COL 6
#define MAX_ROW 7
int main()
{ int x[MAX_ROW][MAX_COL];
int i,j,sum=0;
float sred;
srand
( (
unsigned
)
time
( NULL
) ); // Инициализация генератора сл
у
чайных чисел
for(i=0; i<MAX_ROW; i++) //
Заполнение
массива
случайными
числами
for(j=0; j<MAX_COL; j++)
x[i][j]=rand()%11;
for(i=0; i<MAX_ROW; i++) // Вывод матрицы на экран
{ printf("
\
n");
for(j=0; j<MAX_COL; j++)
{ printf
(" %6
d
", x
[
i
][
j
]);
// и вычисление суммы ее элементов
sum+=x[i][j];
}
}
sred= (float) sum/(MAX_ROW*MAX_COL);
printf("
\
nSumma=%d Meandr=%f
\
n",sum,sred);
return 0
;
}
Для поиска элемента строки (столбца) объектом сравнения является первый элемент стр
о-
ки с индексами i,0 или столбца с индексами 0,j и обработка идет до конца строки (столбца). Обычно результатом такой обрабо
т
ки массива является вектор
-
столбец или вектор
-
строка.
Пример 9.
Определить минимальный элемент каждой строки действительной матрицы matr[4][8].
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define COL 4
#define ROW 8
int main()
{ int matr[ROW][COL];
int i,j;
int min[ROW];
srand( (unsigned)time( NULL ) );
for
(
i
=0; i
<
ROW
; i
++) // заполнение и вывод матрицы
{ for (j=0; j<COL; j++) // на экран
{ matr[i][j]=rand()%101;
printf(" %3d", matr[i][j]);
}
printf("
\
n");
}
for
(
i
=0; i
<
ROW
; i
++) // формирование вектора
-
столбца
{ min
[
i
]=
matr
[
i
][0]; // из минимальных элементов строк
for (j=0; j< COL; j++)
if (matr[i][j]<min[i]) mi
n[i]=matr[i][j];
printf(" %3d", min[i]);
} printf("
\
n");
for (i=0; i< ROW; i++) printf("%3d ",min[i]);
printf("
\
n");
return 0;
}
При работе с диагональными элементами учитывают, что индексы элементов, стоящих на главной диагонали, уд
овлетворяют усл
о
вию i = j. Элементы
, стоящие
на побочной диагонали, имеют индексы, удовлетворяющие у
с
ловию i=n -
j -
1,
если n -
порядок матрицы (предполагается, что матрица -
квадра
т
ная).
Контрольные вопросы
1.
Позволяет ли С изменять размер массива?
2.
Как р
асположены в памяти элементы многомерных масс
и
вов?
3.
Необходимо ли использовать для массивов только пред
о
пределенные типы?
4.
Как объявить одномерный и двумерный массивы?
5.
Укажите, допустимы ли объявления:
int hats [3]= {10,20,30};
int caps [ ] = {5,7,9}
Лаборат
орное задание
Составить программу на языке С для своего варианта задания. На экран вывести исхо
д
ную матрицу и результаты вычислений. Для поиска ошибок в программе использовать встрое
н
ный отладчик ИСР.
Порядок выполнения работы
1.
При подготовке к лабораторн
ой работе составить программу, указанную в лабораторном зад
а
нии.
2.
Подготовить файл с программой вычисления указанных в задании величин и ма
с
сивов.
3.
Выполнить компиляцию программы и исправить имеющиеся в ней синтаксические ошибки.
4.
Отладить программу и показат
ь результаты преподавателю. 5.
Оформить отчет.
Требования
к отчету
Отчет должен содержать:
1) название и цель работы;
2) краткие теоретические сведения; 3) блок
-
схему алгоритма;
4)
текст программы для варианта задания, соответствующего номеру фамилии студента в группе (если студент закреплен за определенной ЭВМ, имеющей номер, то н
о
меру ЭВМ);
5)
результаты выполнения программы.
Варианты заданий
Номер вар
и-
анта
Задание
1, 16
Дана целочисленная матрица размера 6x9, содержащая как положител
ь-
ные, так и отрицате
льные элементы. Сформировать одномерные массивы, состоящие из сумм элементов четных строк и нечетных столбцов. Определить значения и местоположение максимального и минимального элементов ма
т-
рицы, а также минимальное и максимальное ее значения по абсолютно
й в
е-
личине.
2, 17
m
k
Дана целочисленная матрица 8x12. Найти сумму элементов заштрихованной области. Определить значения и местоп
о-
ложение максимального элемента из правой верхней четве
р-
ти матрицы и минимального элемент
а из левой нижней че
т-
верти. Сформировать новую матрицу путем прибавления п
о-
лученной суммы к каждому элементу исходной матр
и
цы.
3, 18
m
m
Дана целочисленная матрица 8x8. Найти сумму элементов заштрихованной области. Сформировать одномерный ма
с-
сив, содержащий минимальные элементы каждой стр
о
ки.
4, 19
k
k
Дана целочисленная матрица 11x11. Найти сумму элеме
н-
тов заштрихованной области. Сформировать одномерный массив, содержащий максимальные элементы каждого стол
бца.
5, 20
k
m
Дана целочисленная матрица mxk. Найти минимальное значение для верхней половины матрицы и максимальное значение для нижней половины. Сформировать новую ма
т-
рицу путем прибавления к каждому элементу верхней пол
о-
вины исходной матрицы определенного для нее минимальн
о-
го значения и к каждому элементу ее нижней половины о
п
ределенного для нее максимального знач
е
ния.
6, 21
Дана целочисленная матрица mxm. Найти максимальное значение для ее первой четверти и
минимальное -
для третьей четверти. Сформировать одномерный массив, содержащий произведения элементов каждого столбца матрицы.
7, 22
Дана матрица 5х7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий ко
личество символов m в каждом из ее столбцов. Подсчитать количество символов а над третьей стр
о-
кой матрицы и общее количество символов b и z под третьей стр
о
кой.
8, 23
Дана целочисленная матрица 9x9. Определить количество нулевых элементов в заштр
ихованной области. Сформир
о-
вать одномерный массив, содержащий количество отриц
а-
тельных элементов каждого столбца ма
т
рицы.
9, 24
Дана действительная матрица 7x7. Найти минимальное значение среди элементов, стоящих над главной диагональю, и максима
льное среди элеме
н-
тов, находящихся ниже главной диагонали, а также их местоположение. Сформировать одномерный массив, содержащий сумму элементов четных строк и произведение элементов н
е
четных строк.
10, 25
k
m
Дана действительна
я матрица 6x8. Найти сумму элементов каждой строки верхней половины матрицы и произведение элементов каждой строки ее нижней половины. Определить значение и местоположение максимального элемента вер
х-
ней половины матрицы и минимального элемента ее нижней п
оловины.
11, 26
Дана действительная матрица 7x7. Найти сумму элементов в заштрихованной области. Сформировать новую матрицу путем прибавления полученного значения к каждому элеме
н-
ту из незаштрихованной области исходной матр
и
цы.
12, 2
7
Дана матрица 4х5, элементами которой являются значения символьного типа. Заменить на о значения символов, больших, чем о. Сформировать о
д-
номерный массив, содержащий количество элементов о в каждом четном столбце матрицы и количество символов, отли
чных от о, в каждом нечетном стол
б
це.
13, 28
Дана целочисленная матрица 4x7. Определить минимальное и максимал
ь-
ное значения матрицы и их местоположение. Найти среднее арифметическое значение положительных элементов и модулей отрицательных элементов в
каждом столбце матрицы. Результаты вычислений записать в одномерные массивы. 14, 29
Дана целочисленная матрица размером 5x5. Получить новую матрицу п
у-
тем умножения всех элементов на наименьший по модулю элемент. Сформ
и-
ровать одномерный массив из максимальных элементов каждой строки пол
у-
ченной матр
и
цы.
15, 30
Дана вещественная квадратная матрица порядка 5. Получить новую ма
т-
рицу путем прибавления к элементам каждой строки матрицы наименьшего значения элементов этой строки. Сформировать одно
мерный массив, соде
р-
жащий количество четных элементов в четных столбцах полученной матрицы и количество нечетных элементов в нечетных стол
б
цах.
Приложение: Отладка приложений в ИСР Borland
C
++ Builder
и MS
Visual
C
++.
В ИСР Borland
C
++ для отладки испол
ьзуются следующие «горячие» клавиши:
F4
Run to cursor
Выполнить до текущего места
葉
Установить точку прерывания программы
ﹴ
Выполнить строку программы с заходом в код вызываемых функций
カ
Выполнить строку программы
без захода в код вызываемых фун
к
ций
Выполнить
⁴@﹥
﹥
Выполнить до следующей строки с исполняемым кодом
ﰫ
ﱯﰠ
來
Показать окно значений локальных переменных
ﰫ
Показать окно
слежения за переменными
ﰫ
שּׂ
葉
Показать окно точек прерывания
Остановка отладки
В ИСР Visual
C
++ для отладки используются следующие «горячие» клавиши:
Ctrl+F10
Run to cursor
Выполнить до текущего места
葉
Установить точку прерывания программы
ﹴ
Выполнить строку программы с заходом в код вызываемых фун
к
ций
カ
Выполнить строку программы без захода в код вызываемых фун
к
ций
Выполнить
ﰫ
Выполнить с учто
м изменений
Остановить отладку
При отладке следуйте следующим правилам:
o
введите в критические места программы точки прерываний;
o
на критическом участке выполняйте программу по шагам;
o
если вызывается ваша функция –
используйте отладку с зах
одом в функции, если же в текущей строке программы вызываются только библиотечные функции –
испол
ь-
зуйте отладку без захода в функции;
o
для слежения за значениями переменных внутри функции используйте окно знач
е-
ний л
о
кальных переменных;
o
для слежения за выбра
нными переменными используйте окно слежения за переме
н-
ными;
o
в окне слежения за переменными используйте Ins
для добавления переменной и Del
для удаления.
Отладка приложений позволяет выявить ошибки алгоритма и ошибки программиста, кот
о-
рые комп
и
лятор самосто
ятельно выявить не может.
Автор
maximrazor
Документ
Категория
Без категории
Просмотров
613
Размер файла
94 Кб
Теги
лаба
1/--страниц
Пожаловаться на содержимое документа