Задание к лабораторной работе №3

Операторы циклов. Массивы

 

Цель работы: Изучить особенности использования операторов цикла while, for и do-while, а также специальных операторов break и continue. Ознакомиться с понятием «массив», получить навыки ввода, вывода и обработки одномерных и двумерных массивов.

Программа работы:

Изучить операторы цикла while, for и do-while, получить навыки составления программ с использовани этих операторов (выполнить два задания из п.1. Методических указаний).

Изучить специальные операторы break и continue.

Ознакомиться с понятием «массив», получить навыки ввода, вывода и обработки одномерных и двумерных массивов. Выполнить индивидуальное задание, согласно выданному преподавателем варианту.

 

Методические указаниия

 

К п.1. Операторы цикла.

Циклы организуются, чтобы выполнить некоторый оператор или группу операторов определенное число раз. В языке Си три оператора цикла: for, while и do - while. Первый из них for формально записывается, в следующем виде:

for (выражение1; выражение2; выражение3) {тело_цикла}

Тело цикла составляет либо один оператор, либо несколько операторов, заключенных в фигурные скобки {... }. В выражениях 1, 2, 3 фигурирует специальная переменная, называемая управляющей. По ее значению устанавливается необходимость повторения цикла или выхода из него.

Выражение1 присваивает начальное значение управляющей переменной, выражениеЗ изменяет его на каждом шаге, а выражение2 проверяет, не достигло ли оно граничного значения, устанавливающего необходимость выхода из цикла.

Например, простейший оператор цикла имеет вид:

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

printf("%d\n",i);

При выполнении этого оператора будут распечатаны в столбик цифры: от 0 до 9.

 

Задание: напишите программу на языке Си для вывода на экран цифр в обратном порядке (от 9 до 0).

 

Любое из трех выражений в цикле for может отсутствовать, однако точка с запятой должна оставаться. Таким образом, for (;;) {...} - это бесконечный цикл.

 

Оператор while формально записывается в таком виде:

while (выражение) тело_цикла

Выражение в скобках может принимать ненулевое (истинное) или нулевое (ложное) значение. Если оно истинно, то выполняется тело цикла и выражение вычисляется снова. Если выражение ложно, то цикл while заканчивается.

Пример программы с циклом while:

...

int n=0;

while(n!=20) // пока n не равно 20

{

printf(" %d \n", 2*n); //вывести произведение n*2

n++; // увеличить n на 1

}

...

 

Рисунок 6. Результаты выполнения программы с циклом while

 

На первом этапе задается n=0. Затем программа осуществляет сравнение числа n c числом 20. Т.к. выражение (n!=20) истинно (т.е. n≠20) – программа начинает выполнение тела цикла - вывод произведения n*2 (произведение=0) и увеличение значения n на единицу. Далее программа снова возвращается к проверке условия цикла, т.е. сравнивает уже новое (увеличенное на единицу) значение n с числом 20 и т.к. условие остается истинным (n≠20) - снова производит вывод произведения n*2 (теперь произведение=2) и увеличение числа n на единицу. Так будет продолжаться до тех пор, пока значение n не станет равным числу 20 – в этом случае программа осуществит выход из цикла.

Оператор do-while формально записывается следующим образом:

do {тело_цикла} while (выражение);

Основным отличием между циклами while и do - while является то, что тело в цикле do - while выполняется по крайней мере один раз. Тело цикла будет выполняться до тех пор, пока выражение в скобках не примет ложное значение. Если оно ложно при входе в цикл, то его тело выполняется ровно один раз.

Приведем пример программы с циклом do – while, результат выполнения которой аналогичен программе с циклом while (см. рисунок 6.)

...

int n=0;

do

{

printf(" %d \n", 2*n);   

n++;

}

while(n!=20);

...

Допускается вложенность одних циклов в другие, т.е. в теле любого цикла могут появляться операторы for, while и do - while.

Задание: Используя оператор while напишите текст программы, которая предлагает пользователю ввести число от 0 до 10. Пока пользователь вводит числа меньше 10 предложение должно повторяться. Как только пользователь введет число больше 10 – программа должна завершить свое выполнение (примерный результат работы программы представлен на рисунке 7.).

 

 

Рисунок 7. Примерный результат работы программы с использованием цикла (задание)

К п.2 .Операторы break и continue.

В теле цикла могут использоваться специальные операторы break и continue. Оператор break обеспечивает немедленный выход из цикла, оператор continue вызывает прекращение очередной и начало следующей итерации. Рассмотрим эти операторы на примере следующей программы:

Пример: нужно вводить числа с клавиатуры, если число больше нуля, то выводим на экран сообщение «number>0», если меньше, то - «number<0». Если, вдруг, оказывается, что мы ввели 0, то продолжаем дальше вводить значения. Условием выхода из цикла будет значение -100.

Решение:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

int number;

for (;;)

{

  printf("Enter number \n");

  scanf ("%d", &number);

  if (number == -100)

     {break;}

  if (number == 0)

     {continue;}

  if (number > 0)

     {printf ("number>0 \n");}

  if (number < 0)

     {printf ("number<0 \n");}

}

system("PAUSE");

return 0;

}

Результат работы данной программы необходимо представить в отчете.

 

К п.3. Массивы.

Массивы - это последовательная группа ячеек памяти, имеющих одинаковое имя, при этом обратится к элементу массива можно, указав в квадратных скобках индекс, который указывает на его относительную позицию. Число элементов массива назначается при его определении и в дальнейшем не изменяется. Массивы определяются так же, как и переменные:

int a[100]; char b[20]; float d[50];

В первой строке объявлен массив а из 100 элементов целого типа: а[0], а[1],..., а[99] (индексация всегда начинается с нуля). Во второй строке элементы массива b имеют тип char, а в третьей - float.

Язык Си также позволяет инициализировать массив при его определении. Для этого используется следующая форма:

тип имя_массива[...]... [...] = {список значений};

Примеры:

int a[5] = {0, 1, 2, 3, 4}; char ch[3] = {'d', 'e', '9'}; int b[2][3] = {1, 2, 3, 4, 5, 6};

В последнем случае представлен двумерный массив: b[0][0] = 1, b[0][1] = 2, b[0][2] = 3, b[1][0] = 4, b[1][1] = 5, b[1][2] = 6.

 

Двумерные массивы состоят из строк и столбцов, содержащих элементы одного типа, пример двумерного массива - матрица размерностью nxn. Объявление двумерного массива в программе имеет следующийформат:

тип_данных название_массива[размер_по_у][размер_по_х];

Примеры:

int A[10][10]; /объявление целочисленного массива размерностью 10х10 элементов

float MyArray[5][5]; /матрица из действительных чисел, размерность матрицы 5х5

char An_Array_For_Char_Data[1000][1000]; /это двумерный массив (матрица) из

                                                                     / символов, размерность1000х1000.

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

Обратиться к элементу матрицы можно по его номеру, у элемента матрицы есть два номера – номер строки (i) и номер столбца (j).

Пример1:

A[0][0], A[5][5] – элементы матрицы с номерами (0;0) и (5;5) соответственно.

Пример 2: Присвоить элементу матрицы А с номером (1;4) значение 5.

Решение:

...

A[1][4]=5;

...

Пример 3: Если элемент матрицы MyArray с номером (5;1) равен 8, вывести на экран сообщение “Элемент равен восьми”

Решение:

...

if(MyArray[5][1]==8)

{

printf(“\n Элемент равен восьми”);

}

...

Так же, как и для одномерных массивов, при вводе и выводе значений элементов массивов необходимо перебирать весь диапазон индексов. В случае двумерного массива – два диапазона индексов.

Фрагмент кода, реализующий ввод значений элементов двумерного массива А(5х6):

 ...

int i,j;

int A[5][6]; // Объявляем матрицу из 5 строк и 6 столбцов

for(i=0;i<5;i++) // i от 0 до 5, поскольку матрица содержит 5 строк

{

for(j=0;j<6;j++) // j до 6, поскольку в каждой строке 6 элементов

{

printf("Input please A[%d][%d]: ", i, j); 

scanf("%d", &A[i][j]); // Ввод одного элемента матрицы...        

}

}

...

Фрагмент кода, реализующий вывод значений элементов массива А(5х6) на экран:

...

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

{

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

{

   printf("%5d", A[i][j]);

}

printf("\n");            

...

Пример: Подсчитать количество элементов матрицы, значение которых больше пяти.

Решение:

...

int A[3][2];

int i,j;

printf("Massive A 3x2: \n");

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

{

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

{

printf("Input A[%d][%d]: ", i, j);

scanf("%d", &A[i][j]);

}

 }

int kolichestvo=0;

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

{

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

{

if(A[i][j]>5) 

  {

  kolichestvo++;

  }

}

 }

printf("Bolshe 5 bilo %d elementov \n", kolichestvo);

...

Задание к лабораторной работе №3

1. Осуществите ввод с клавиатуры целочисленные элементы матрицы 3x4. Выведите исходную матрицу на экран. Умножьте каждый отрицательный элемент матрицы на 3 и выведите результат на экран.

2. Осуществите ввод с клавиатуры двумерного массива 4x2. Выведите его на экран. Посчитайте количество нулевых элементов в нечетных столбцах.

3. Осуществите ввод с клавиатуры двумерного массива 3x3. Выведите его на экран. Вычислите сумму всех элементов.

4. Осуществите ввод с клавиатуры двумерного массива 2х4 целочисленных элементов и определите среди них минимальное значение.

5. Создайте двумерный массив X, имеющий четыре строки и три столбца. Найдите в нем максимальный элемент.

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

7. Осуществите ввод с клавиатуры двумерного массива 5x3. Выведите его на экран. Посчитайте количество отрицательных элементов в четных строках.

8. Осуществит ввод с клавиатуры двумерного массива 4x2. Выведите его на экран. Поменяйте местами вторую и четвертую строку. Выведите результат

9. Осуществит ввод с клавиатуры двумерного массива 3x3. Выведите его на экран. Поменяйте местами первый и третий столбец. Выведите результат на экран.

10. Осуществите ввод с клавиатуры целочисленные элементы матрицы 5x2. Выведите исходную матрицу на экран. Если элемент матрицы меньше 10, умножить его на 2. Результат необходимо вывести на экран.

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: