Практическая работа №3. Условный оператор и циклы



Цель работы: изучение синтаксиса условного оператора и циклов в С++.

Задачи:

1. Изучить теоретический материал

2. Написать программу согласно индивидуальному варианту задания.

3. Ответить на контрольные вопросы.

4. Оформить отчет.

 

Теоретический материал

Оператор if

if (выражение) оператор_1; [else оператор_2;]

Если выражение истинно, выполняется оператор_1, в противном случае – оператор_2. Если оператор_1 или оператор_2 – составные, то они заключаются с {}.

Пример:

if (a>0) x=1.5;

else x=2.3;

или

x=(a>0)?1.5:2.3;

 

Оператор switch

Оператор switch (переключатель) – оператор выбора варианта.

switch (выражение) {

case метка1: [оператор1]

case метка2: [оператор2]

.....

[default: оператор n]

}

Работа оператора:

- вычисляется значение выражения (ключа):

- это значение последовательно сравнивается в каждой меткой:

- если значение ключа = значению метки, то выполняется оператор, соответствующий этой метке.

Как выражения, так и метки должны иметь значения целого типа (включая тип char); метки должны быть константами или константными выражениями. Если некоторому значению выражения не соответствует никакая метка, управление передается оператору с меткой default (если такой имеется). В противном случае управление передается оператору, следующему за оператором switch.

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

К операторам цикла с предусловием в Си относится оператор while, с постусловием - do-while, к операторам цикла с параметром - оператор for.

Оператор while

while (выражение) оператор

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

Приведенная ниже программа подсчитывает сумму цифр введенного числа N. Цикл while последовательно выделяет и суммирует каждую цифру исходного числа, начиная с последней; для выделения применяется операция взятия остатка (%) от деления целых чисел. При делении целых чисел любая дробная часть отбрасывается, поэтому после оператора N=N/10; исходное число уменьшается в 10 раз при каждом "обороте” цикла, пока, наконец, не станет равным нулю, после чего цикл завершается и на экран дисплея выдается значение переменной S, в которой накоплена сумма цифр числа.

#inciude <stdio.h>

main() {

int N,S,Z;

S=0;

printf (“BBEДИ N \n");

scanf("%d",&N);

while (N != 0) {

   Z=N%10; // Остаток от деления числа N на 10

   N=N/10;

   S=S+Z;

}

printf(”Сумма цифр=%d\n”,S);

}

ВВЕДИ N 32767 СУММА ЦИФР=25

 

Оператор do while

В языке Си имеется также конструкция цикла с постусловием (условием на выходе), где истинность условия проверяется после выполнения каждой итерации цикла. Этот подход реализуется с помощью цикла do while

do оператор

while (выражение);

Выполнение оператора повторяется до тех пор, пока выражение не станет ложным или равным нулю.

Например:

do scanf("%d", &number);

while (number != 20);

do {

ch = getchar();

putchar(ch);

} while (ch!='\n');

Тело цикла do while всегда выполняется по крайней мере один раз, поскольку проверка осуществляется только после его завершения.

Оператор for

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

В операторе for используются три выражения, управляющие работой цикла; они разделены символами "точка с запятой". Инициализирующее выражение вычисляется только один раз до начала выполнения какого-нибудь выражения цикла. Если проверяемое выражение оказывается истинным (или не равным нулю), то тело цикла выполняется один раз. Затем вычисляется значение корректируемого выражения, и значение проверяемого выражения определяется вновь. Тело цикла выполняется до тех пор, пока проверяемое условие не станет ложным, или равным нулю.

Например:

for (count = 1; count <= NUMBER; count++)

printf("текст");

Пример программы, печатающей таблицу квадратов целых чисел:

main() {

int num;

for (num = 1; num < = 6; num++)

printf("%5d %5d \n", num, num*num):

}

Эта программа выводит на печать числа от 1   до 6 и их квадраты:

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

for(n - 1; n <= 10000; n++);

Этот цикл заставляет машину считать до 10000. Единственный символ «точка с запятой», расположенный во второй строке, информирует о том, что никаких других действий в этом цикле не производится. Такой уединенный символ «точка с запятой» можно представлять себе как «пустой» оператор, т. е. оператор, который не выполняет никаких действий. Можно даже опустить одно или более выражений (но при этом нельзя опустить символы «точка с запятой»). Необходимо только включить в тело цикла несколько операторов, которые в конце концов приведут к завершению его работы.

Тело цикла

for (; ;)

printf(" Я хочу сделать что-нибудь\n ");

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

Первое выражение не обязательно должно инициализировать переменную. Вместо этого, например, там мог бы стоять оператор printf( ). Необходимо помнить только, что первое выражение вычисляется только один раз перед тем, как остальные части цикла начнут выполняться.

for (printf("Запоминайте введенные числа!\n"); num == 6;)

scanf("%d", &num);

В этом фрагменте первое сообщение оказывается выведенным на печать один раз, а затем осуществляется прием вводимых чисел до тех пор, пока не поступит число 6.

Операторы цикла в языке С++ взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае.

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

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

Оператор for предпочтительнее в большинстве остальных случаев. Однозначно - для организации циклов со счетчиками, то есть с целочисленными переменными, которые изменяют свое значение при каждом проходе цикла регулярным образом (например, увеличиваются на 1).

Задача 1.1. Вычисление значения функции, заданной графически

 Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика (рис 1.1)

 

Запишем решение функции в виде формул:y=             0     x<-2

-x-2 -2<=x<-1

x     -1<=x<1

-x+2 1<=x<2

0     x>=2


Запишем первый вариант программы:

 

#include <iostream.h>

 int main(){

float x,y;

cout << "Введите значение аргумента" << endl;

cin>>x;

if (x<-2) y=0;

if (x>=-2 && x<-1) y=-x-2;

if (x>=-1 && x<1) y=x;

if (x>=1 && x<2) y=-x+2;

if (x>=2) y=0;

cout << "Для х=" << x << " значение функции y=" << y << endl;

 }

 

 

Рисунок 1.1 - Функция для задачи 1.1

 

 

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

if (x<-2) y=0;

 else if (x>=-2 && x<-1) y=-x-2;

 else if (x>=-1 && x<1) y=x;

 else if (x>=1 && x<2) y=-x+2;

 else y=0;

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

#include <stdio.h>

 int main(){

float x,y;

printf ("Введите значение аргумента:\n");

scanf("%f", &x);

if (x<-2) y=0;

if (x>=-2 && x<-1) y=-x-2;

if (x>=-1 && x<1) y=x;

if (x>=1 && x<2) y=-x+2;

if (x>=2) y=0;

printf(" Для х=%5.2f значение функции y=%5.2f\n",x,y);

 }

Задача 1.2. Клавиши курсора

 Написать программу, определяющую, какая из курсорных клавиш была нажата.

 

 В составе библиотеки есть функция getch(), возвращающая код нажатой пользователем клавиши. В случае нажатия функциональных или курсорных клавиш эта функция возвращает 0 либо 0хЕ0 (в зависимости от компилятора), а ее повторный вызов позволяет получить расширенный код клавиши.

#include <stdio.h>

 #include <conio.h>

 int main(){

int key;

printf("\n Нажми на одну из курсорных клавиш:\n");

key=getch();

key=getch();

switch(key){

    case 77: printf("стрелка вправо\n"); break;

       case 75: printf("стрелка влево\n"); break;

    case 72: printf("стрелка вверх\n"); break;

    case 80: printf("стрелка вниз\n"); break;

    default: printf("не стрелка \n");

}

return 0;

 }

 

Задача 1.3. Написать программу печати таблицы значений функцииy=        t      x<0

tx    0<=x<10

2t    x>=10

 

для аргумента, изменяющегося в заданных пределах с заданным шагом. Если t>100, должны выводиться целые значения функции.

 

#include <Stdio.h>

 #include <math.h>

 int main(){

double xn,xk,dx,t,y;

printf("Enter xn,xk,dx,t \n");

scanf("%lf %lf %lf %lf",&xn,&xk,&dx,&t);

printf("----------------------------\n");

printf("| x | y \n");

printf("----------------------------\n");

double x=xn;

while (x<=xk) {

    if (x<0) y=t;

    if(x>=0 &&x<10) y=t*x;

    if (x>=10) y=2*t;

    if (t>100) printf ("|%9.2lf |%9d |\n",x,(int)y);

    else printf ("|%9.2lf |%9.2lf |\n",x,y);

    x+=dx;

}

printf("----------------------------\n");

return 0;

 }

 

Вот та же программа с использованием оператора for:

#include <stdio.h>

 #include <math.h>

 int main() {

double xn,xk,dx,t,y;

printf("Enter xn,xk,dx,t \n");

scanf("%lf %lf %lf %lf",&xn,&xk,&dx,&t);

printf("----------------------------\n");

printf("| x | y \n");

printf("----------------------------\n");

for (double x=xn;x<=xk; x+=dx) {

    if (x<0) y=t;

    if(x>=0 && x<10) y=t*x;

    if (x>=10) y=2*t;

    if (t>100) printf ("|%9.2lf |%9d |\n", x, (int)y);

    else printf ("|%9.2lf |%9.2lf |\n", x, y);

}

printf("----------------------------\n");

return 0;

 }


Дата добавления: 2020-04-25; просмотров: 386; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!