У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 4 Составление программ с использованием массивов Цель работы- 1 изучить описан

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 29.12.2024

Лабораторная работа № 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 time 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(" %6d", 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]) min[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) блок-схему алгоритма;

  1.  текст программы для варианта задания, соответствующего номеру фамилии студента в группе (если студент закреплен за определенной ЭВМ, имеющей номер, то номеру ЭВМ);
  2.  результаты выполнения программы.


Варианты заданий

Номер варианта

Задание

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, 27

     Дана матрица 4х5, элементами которой являются значения символьного типа. Заменить на о значения символов, больших, чем  о. Сформировать одномерный массив, содержащий количество элементов о в каждом четном столбце матрицы и количество символов, отличных от о, в каждом нечетном столбце.

13, 28

   Дана целочисленная матрица 4x7. Определить минимальное и максимальное значения матрицы и их местоположение. Найти среднее арифметическое значение положительных элементов и модулей отрицательных элементов в каждом столбце матрицы. Результаты вычислений записать в одномерные массивы.

14, 29

    Дана целочисленная матрица размером  5x5. Получить новую матрицу путем умножения всех элементов на наименьший по модулю элемент. Сформировать одномерный массив из максимальных элементов каждой строки полученной матрицы.

15, 30

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


Приложение: Отладка приложений в ИСР
Borland C++ Builder и MS Visual C++.

В ИСР Borland C++ для отладки используются следующие «горячие» клавиши:

F4

Run to cursor

Выполнить до текущего места

F5

Set breakpoint

Установить точку прерывания программы

F7

Trace into

Выполнить строку программы с заходом в код вызываемых функций

F8

Step over

Выполнить строку программы без захода в код вызываемых функций

F9

Run

Выполнить

Shift+F7

Trace to next source line

Выполнить до следующей строки с исполняемым кодом

Ctrl+Alt+L

Show local variables

Показать окно значений локальных переменных

Ctrl+Alt+W

Show watches

Показать окно слежения за переменными

Ctrl+Alt+B

Show breakpoints

Показать окно точек прерывания

Ctlr+F2

Stop

Остановка отладки

В ИСР Visual C++ для отладки используются следующие «горячие» клавиши:

Ctrl+F10

Run to cursor

Выполнить до текущего места

F9

Set breakpoint

Установить точку прерывания программы

F11

Trace into

Выполнить строку программы с заходом в код вызываемых функций

F10

Step over

Выполнить строку программы без захода в код вызываемых функций

F5

Run

Выполнить

Ctrl+Shift+F5

Restart

Выполнить с учётом изменений

Shift+F5

Stop

Остановить отладку

При отладке следуйте следующим правилам:

  •  введите в критические места программы точки прерываний;
  •  на критическом участке выполняйте программу по шагам;
  •  если вызывается ваша функция – используйте отладку с заходом в функции, если же в текущей строке программы вызываются только библиотечные функции – используйте отладку без захода в функции;
  •  для слежения за значениями переменных внутри функции используйте окно значений локальных переменных;
  •  для слежения за выбранными переменными используйте окно слежения за переменными;
  •  в окне слежения за переменными используйте Ins для добавления переменной и Del для удаления.

Отладка приложений позволяет выявить ошибки алгоритма и ошибки программиста, которые компилятор самостоятельно выявить не может.




1. 1Кардіологія А в т о р е ф е р а т дисертації на здобуття наукового ступенядоктора медичних наук
2. Петербургского государственного технического университета Кафедра ВТ
3. Является ли социальное природным.html
4. Лекция 1 Сущность и задачи калькулирования
5.  Строение и функции яичников коров
6.  Предмет метод и задачи статистики в условиях рыночной экономики
7. ДОНБАССКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ ЗападноКазахский государственный университет
8. на тему-Фінансові ресурси підприємств Зміст Вступ 1
9. Боротьба зі злочинами, що вчиняються співробітниками Органів Внутрішніх Справ та їх профілактика
10. на тему История и проблемы эвтаназии в разных странах Выполнила- Оюн Урана Михайловна Магистрант ІI
11. Світогляд сучасного юнака
12. правовые стандарты и конституционное законодательство о правовом положении человека и гражданина Вступле.
13. Зимние КаламБУБУрики
14. темах с МП i80х86 Григорьев ~ Билет4 Основные сигналы
15. бакалавриат Музыкальная культура Польши XVIII ~ XIX вв
16. экологической ситуацией Реальная социальноэкологическая ситуация в стране регионе формируется в резул
17. Рынок труда и особенности его функционирования в Республике Беларусь
18. 2012 год Возникновение и развитие биржевой торговли Возникновение и развитие биржи Классификация
19. Канализационная насосная станция
20. 1гравиразведка метод гефиз изуч простанств измен силы тяж 2Как измен свва п от К к УО от К до УО увелич п