Опубликован: 14.12.2010 | Уровень: для всех | Доступ: платный
Лекция 5:

Принятие решений. Условные операторы в языке С

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >

Задание 7

  1. В программу включите действия подсчета суммы четных чисел.
  2. Подсчитайте число итераций оператора цикла.
  3. В программе вместо цикла for примените цикл while. Объясните действие инструкции continue.
  4. В программе вместо цикла for примените цикл do–while. Объясните действие инструкции continue.
  5. Напишите программу вывода четных чисел без оператора continue. Подсчитайте число итераций оператора цикла.
  6. Сделайте вывод четных чисел из интервала от Х до 10*Х, где Х – номер компьютера, за которым выполняется лабораторная работа. Подсчитайте сумму четных чисел.
  7. Измените условие для вывода четных чисел.

Пример 8. Напишите программу подсчета суммы трех чисел из трех вложенных циклов и, если сумма делится без остатка на число 3, то прекратите сравнение чисел и выйдите из циклов с последующей распечаткой этой суммы и слагаемых. Первый цикл начинается с 51 до 1, второй цикл – с 41 до 1, третий цикл – с 1 до 50. Первый цикл изменяется через 7 единиц, второй цикл изменяется на 1, третий цикл изменяется на 7 единиц.

Программный код решения примера с оператором goto:

#include <stdio.h>
#include <conio.h>

int main (void) {
  int a, b, c, i, j, k;
a = b = c = 0;
	
for (i = 51; i >= 1; i -= 7 )
	for (j = 41; j >= 1; --j )
		for (k = 1; k <= 50; k += 7)
		if ( ((i + j + k) % 3 == 0) && (i < 51) && (j < 41))
			{a = i; b = j; c = k;
               goto sum3;
                } 
	sum3: 
printf("\n\t The sum (%d?+?%d?+?%d) is equal %d\n", a, b, c,
 a + b + c);
	
	printf("\n Press any key: ");
	_getch();
	return 0; }

В программе использовано декрементирование (уменьшение на единицу) переменной j в форме --j. Переменная i с каждой итерацией цикла уменьшается на 7 единиц. Переменная k с каждой итерацией цикла увеличивается на 7 единиц. После оператора if включены фигурные скобки для выполнения нескольких действий при выполнении заданного условия оператора if.

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

Итеративный подсчет числовой суммы, делящейся на 3

Рис. 4.8. Итеративный подсчет числовой суммы, делящейся на 3

Примечание. Оператор goto нельзя применять для перехода в тело цикла, т.е. метка не должна быть внутри оператора цикла. Метка может появиться текстуально до или после оператора goto.

Задание 8

  1. В программу включите подсчет числа итераций каждого из циклов.
  2. Вместо оператора безусловного перехода goto примените оператор break. Произвести также подсчет числа итераций каждого из циклов. Сравните с аналогичными результатами предыдущего пункта задания.
  3. В программе вместо операторов for примените операторы while. Выполните действия двух предыдущих пунктов задания.
  4. Напишите программу ввода символа до тех пор, пока не будет введен заранее определенный символ, например 'w'. Используйте оператор goto. Предусмотрите отступ от левого края дисплея.

Пример 9. Напишите программу распечатки на консоль простых чисел из диапазона от 2 до N, где N – число, вводимое пользователем с клавиатуры, которое не превосходит, например, 1000.

Как известно, простое число – это целое положительное число больше единицы, которое не делится без остатка ни на одно другое целое положительное число, кроме единицы и самого себя. Единица не считается простым числом.

Возможный программный код решения примера:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // для exit()

#define Nmax 50

int main (void) {
	int i, j;
	int ok, in;
	int N;

	printf("\n Enter an integer from 2 to %d: ", Nmax);
    in = scanf_s("%d", &N);

     if (in == 0 || N < 2 || N > Nmax)
    {
     printf("\n Error input. Press any key: ");
	_getch();
	exit(1);
    }

     printf("\n Prime numbers from 2 to %d:\n\n", N);

	for ( i = 2; i <= N; i++ ) 
       {
		ok = 1;
		for ( j = 2; j < i; j++ ) 
			if ( (i%j) == 0 )
			ok = 0; 
		if ( ok )
		printf(" %3d", i);
	  }

	printf("\n\n Press any key: ");
	_getch();
	return 0;
}

В программе с помощью оператора if осуществляется проверка правильности ввода данных с клавиатуры. Кроме того, этим же оператором проверяется остаток от деления двух чисел и условной истинности, когда переменная ok не равна нулю. С помощью препроцессорной директивы define определяется верхняя допустимая граница для простых чисел.

Пример выполнения программы показан на рис. 4.9.

Пример вывода на консоль простых чисел

Рис. 4.9. Пример вывода на консоль простых чисел

Задание 9

  1. В программе вместо оператора цикла for примените оператор while.
  2. В программе примите допустимое число Nmax, равное 9999. Предусмотрите при этом форматированный вывод на консоль простых чисел построчно, по 15 чисел в каждой строке. Используйте тернарный оператор ?:.
  3. Предыдущий пункт задания выполните с помощью операторов if, else.

Контрольные вопросы

  1. Как организуются множественные действия в операторе условия if?
  2. Какой формат записи имеет тернарный оператор условия?
  3. Какой оператор условия рекомендуется использовать для программирования меню?
  4. В чем различие и сходство между операторами break и continue?
  5. Как можно обеспечить выход из вложенных циклов?
  6. Как можно организовать переходы в различные точки программы на С?
  7. Какие логические операторы отношения используются в языке С?
  8. Что произойдет, если в операторе switch после метки case не использовать оператор break?
  9. Что произойдет, если в операторе switch не поставить метку default и условие переключения не совпадет ни с одной меткой case?
< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Мухаммадюсуф Курбонов
Мухаммадюсуф Курбонов
Александр Соболев
Александр Соболев
Россия
Артем Полутин
Артем Полутин
Россия, Саранск