Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по программированию.doc
Скачиваний:
37
Добавлен:
29.02.2016
Размер:
1.78 Mб
Скачать

Лабораторная работа № 5

Тема «Оператор цикла for. Логические и поразрядные операции.»

  1. Цель работы

    1. Получение навыков в использовании оператора цикла for.

    2. Знакомство с итерационными процессами.

  1. Техническое обеспечение

    1. Персональная ЭВМ IBM PC/286 и более поздних моделей.

    2. Клавиатура.

    3. Дисплей.

    4. Печатающее устройство.

  1. Программное обеспечение

    1. Операционная система Windows

    2. Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.

  2. Постановка задачи

Составить таблицу значений функции. Результат вывести на экран.

  1. Содержание отчета

5.1. Тема и цель работы.

5.2. Схема алгоритма решения задачи.

5.3. Текст программы.

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

  1. Общие сведения

В С и других современных языках программирования циклы позволяют выполнять набор операторов, пока не выполнится некоторое условие.

    1. Оператор for

Стандартный вид цикла for следующий:

for (инициализация; условие; увеличение) оператор;

Оператор for имеет три главные части:

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

  2. Условие – это место, где находится выражение, определяющее условие работы цикла.

  3. Увеличение – это место, где определяется характер изменения переменной цикла на каждой итерации.

Эти три важные части должны разделяться точкой с запятой. Цикл for работает до тех пор, пока условие истинно. Когда условие становится ложным, выполнение программы продолжается с оператора, за циклом for.

В нижеприведенном примере осуществляется вывод чисел от 1 до 100 включительно:

#include <stdio.h>

main()

{

int x;

for (x=1; x<=100; x++) printf(“%d “, x); }

В данной программе переменная х изначально установлена в 1. Поскольку х меньше 100, вызывается printf(), после чего х увеличивается на 1 и проверяется условие: по-прежнему ли х меньше либо рано 100. Данный процесс продолжается до тех пор, пока х не станет больше 100, и в этот момент цикл прервется. В данном примере х является переменной цикла, которая изменяется и проверяется на каждой итерации цикла.

Ниже приведен пример цикла for, повторяющего сразу несколько операторов:

for (x=100; x!=65; x=5) {

z = sqrt(x);

printf(“%d, %f”, x, z);

}

Как sqrt(), так и printf(), вызываются и выполняются, пока х не равно 65. Обратим внимание, что в цикле переменная х уменьшается: сначала она получает значение 100 и на каждой итерации цикла происходит уменьшение на 5.

Важно понять, что в цикле for проверка условия выполняется в самом начале. Это означает, что код в цикле может вообще не выполняться, если условие изначально ложно. Например:

x = 10;

For (y=10; y!=x; ++y) printf(“%d”, y);

printf(“%d”, y);

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

    1. Вариации цикла for

Имеется еще несколько вариаций оператора for, увеличивающие его мощь и гибкость в некоторых ситуациях.

Одна из наиболее типичных вариаций достигается с использованием оператора «запятая», тем самым позволяя две или более переменных цикла. Оператор «запятая» используется для объединения нескольких выражений. Например, данный цикл использует переменные х и у для управления циклом и обе эти переменные инициализируются в операторе for:

for (x = 0, y = 0; x +y < 10; ++x) {

scanf(“%d”, y);

. . .

}

Здесь оператор «запятая» разделяет два инициализационных оператора. При каждом увеличении хцикл повторяется и значениеувводится с клавиатуры. Какх, так и у должны иметь корректное значение для окончания цикла. Необходимо инициализировать переменнуюунулем, поэтому ее значение определяется перед первым вычислением выражения условия. Если быу не была определена, то имелся бы шанс, что в результате предыдущей работы программы она содержала 10, делая тем самым условие проверки ложным и запрещая выполнение тела цикла.

Другой пример использования нескольких переменных цикла можно найти в показанной ниже функции reverse(). Она предназначена для копирования значения первого строкового аргумента в второй строковый аргумент в обратном порядке. Например, если функция вызывается с параметром “hello” дляs, то после окончания работы функцииr получит “olleh”:

/* Копирование sвrв обратном порядке */

reverse(char *s, char *r)

{

int i, j;

for (i = strlen(s) – 1, j = 0; i >= 0; j++, i) r[i] = s[j];

r[j] = ‘\0’; /* присоединение завершающего символа */

}

Не обязательно в качестве условия использовать простое сравнение переменной цикла с некоторым целевым значением. Фактически условием может выступать оператор отношения или логический оператор. Например, данная функция может быть использована для регистрации пользователя на удаленной системе. Пользователю предоставляется три шанса ввести пароль. Цикл оканчивается в случае использования всех трех возможностей или введения правильного пароля:

sign_on()

{

char str[20];

int x;

for (x = 0; x <3 && strcmp(str, “password”); ++x) {

printf(“Введите пароль: “);

gets(str);

}

if (x= =3) hang_up();

}

Надо помнить, что strcmp()– это стандартная библиотечная функция, выполняющая сравнение двух строк и возвращающая 0 в случае совпадения.

Другая интересная вариация цикла forоснована на том, что любая из трех частей цикла может содержать любое корректное выражение. Эти выражения могут и не выполнять действий, характерных для данной части. Рассмотрим следующий пример:

#include <stdio.h>

int readnum(), prompt();

int sqrnum(int num);

main()

{

int t;

for (prompt(); t = readnum(); prompt()) sqrnum(t);

}

int prompt()

{

printf(“: “);

}

int readnum()

{

int t;

scanf(“%d”, &t)

return t;

}

int sqrnum(int num)

{

printf(“%d\n”, num*num);

}

Если внимательно посмотреть на цикл forвmain(), то можно увидеть, что каждая часть цикла содержит вызовы функций, которые осуществляют подсказку и чтение вводимого с клавиатуры числа. Если введенное число равно нулю, цикл оканчивается, поскольку условие ложно, иначе число возводится в квадрат. Следовательно, в данном цикле части инициализации и увеличения используются не традиционно, но абсолютно корректно.

Еще один интересный момент цикла for– это необязательность наличия какой-либо части. Практически можно опустить любую часть. Например, следующий цикл работает до тех пор, пока не будет введено число 123:

for (x = 0; x != 123; ) scanf(“%d”, &x);

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

Часто можно видеть часть инициализации вне оператора for. Это встречается, когда начальное состояние переменной цикла вычисляется неким сложным образом. Например:

gets(s); /* чтение строки вs*/

if(*s)x=strlen(s); /* вычисление длины строки */

for ( ; x < 10; ) {

printf(“%d”, x);

++x;

}

Здесь инициализация пуста и х инициализируется до входа в цикл.

    1. Бесконечный цикл

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

for ( ; ; ) printf(“ this loop will run forever. \n”);

Хотя можно использовать части инициализации и увеличения, наиболее типично использование for ( ; ; )без выражений для создания бесконечного цикла.

На самом деле конструкция for ( ; ; )не обязательно создает бесконечный цикл, поскольку в теле цикла может присутствовать операторbreak, при достижении которого цикл заканчивает работу. Ниже приведенная программа контролирует нажатие клавиш и, в случае достижения необходимого условия, бесконечный цикл прерывается:

for ( ; ; ) {

ch = getchar() ; /* ввод символа */

If(ch= = ‘A’)break; /* выход из цикла */

}

printf(“Введен символA”);

Цикл будет работать до тех пор, пока на клавиатуре не будет набран символ «А».

    1. Циклы for без тела

Операторв цикле может быть пустым. Это означает, что тело циклаforможет быть пустым. Это можно использовать для улучшения эффективности некоторых алгоритмов, а также для создания задержек в программах.

Одной из наиболее типичных задач программирования является удаление побелов из потока ввода. Например, база данных может допускать запрос типа «покажите весь баланс меньше, чем 400». Базе данных необходимо иметь каждое слово запроса отдельно, без пробелов. То есть процессор ввода в базу данных распознает команду «покажите», но не распознает « покажите». Следующий цикл удаляет все пробелы из потока, на который указывает str:

for ( ; *str = = ‘ ‘ ; str++) ;

Как видно, в цикле отсутствует тело.

В программах также часто используют циклы задержек. Следующий пример показывает, как создать задержку с помощью for:

for (t = 0; t < SOME_VALUE; t++) ;

Вариант 1

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИЛИ Вц) И (Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И и ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 2

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац И Вц) ИЛИ (Вц И Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И и ИЛИ — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

ВариантЗ

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

Ац И (Вц ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И и ИЛИ — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант4

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

Ац ИЛИ Вц ИЛИ Сц

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операция ИЛИ — поразрядная. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 5

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИЛИ Вц) И Сц

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И и ИЛИ — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 6

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац И Вц) ИЛИ (Ац И Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И и ИЛИ — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 7

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИЛИ Вц) МОД2 (Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 8

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац МОД2 Вц) И НЕ(Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 9

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

НЕ(Ац ИЛИ Вц) И (Вц ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции НЕ, И и ИЛИ — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 10

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, 0, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

НЕ(Ац ИЛИ Вц) И (Ац МОД2 Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции НЕ, И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 11

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где о, 6, с — действительные числа.

Функция F должна принимать действительное значение, если выражение (Ац И Вц) МОД2 Сц

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И и МОД2 (сложение по модулю 2) — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 12

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где я, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИЛИ Вц) И Сц

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений о, b, с, операции И и ИЛИ - поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 13

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИЛИ Вц) МОД2 (Вц И Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 14

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац МОД2 Вц) ИЛИ (Ац МОД2 Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 15

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, t>, с — действительные числа.

Функция F должна принимать действительное значение, если выражение НЕ(Ац ИЛИ Вц ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции НЕ и ИЛИ — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант16

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение (Ац МОД2 Вц) И НЕ(Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции НЕ, И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 17

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение (Ац ИЛИ Вц) И HE(Au ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции НЕ, И и ИЛИ — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 18

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

НЕ(Ац И Вц И Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции НЕ и И — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 19

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с, dдействительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац МОД2 Вц) ИЛИ (Ац МОД2 Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения a, b, с, d, Хнач., Хкон., dX ввести с клавиатуры.

Вариант 20

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение НЕ(Ац ИЛИ Вц) И НЕ(Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a, b, с, операции НЕ, И и ИЛИ — поразрядные. Значения a, b, с, Хнач., Хкон., dX ввести с клавиатуры.