Тема 2. Условия в вычислениях. Ветвящиеся и итерационные алгоритмы



Условная операция присваивания. Операторы if ... else и switch.

Операция имеет следующий вид

условие?выражение_если_истина:выражение_если_ложь

Если условие истинно, то результатом операции является выражение_если_истина. В противном случае, результатом является выражение_если_ложь.

Для формирования условий используются операции отношения и логические операции. Они дают нулевой результат, если результат сравнения Ложь (false) и ненулевой результат, если результат сравнения Истина (true).

Операции отношения: = = - равно (не путать с операцией присваивания), != - не равно, > - больше, < - меньше, >= больше или равно, <= - меньше или равно.

Несколько условий могут быть объединены с помощью логических операций И (&&), ИЛИ ( | | ). Также можно использовать логическую операцию НЕ (!).

Оператор if используется для условного выполнения фрагмента кода. Простейший его вид:

if(условное выражение)

       действие_если_истина;

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

if(условное выражение)
{
       действие_если_истина1;
       действие_если_истина2;
       действие_если_истина3;
       …
}

Оператор if - else используется тогда, когда необходимо выполнить разные действия для истинного и для ложного случаев:

if(условное выражение)

       действие_если_истина;

else

       действие_если_ложь;

Допустимо использование блоков:

if(условное выражение)

{

       действие_если_истина1;

       действие_если_истина2;

       действие_если_истина3;
       …

}else

{

       действие_если_ложь1;

       действие_если_ложь2;

       действие_если_ложь3;

       …

}

Обратите внимание, что между } и else нет точки с запятой! Рекомендуется всегда использовать такой вид условного оператора, даже если внутри блока находится только один оператор. Это улучшает читабельность программы и, кроме того, устраняет неоднозначности вложенных операторов if - else.

Оператор switch используется, если необходимо сравнить некоторую переменную с несколькими значениями. Его синтаксис:

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

{

case константа1:

       операторы1;

       break;

case константа2:

       операторы2;

       break;

default:

       операторы;

}

Работает оператор следующим образом. Вычисляется значение выражения. Если оно равно одной из констант, указанных после case, то выполняются операторы, следующие за этой константой. Оператор break; заканчивает выполнение всего оператора. Операторы, записанные после default, выполняются в случае, если значение выражения не совпало ни с одной из констант.

Ветвящиеся алгоритмы.

Описанные условные операторы позволяю создавать достаточно сложные программы. Рассмотрим для примера программу решения линейного уравнения ax+b=0.

//

// Решение линейного уравнения ax+b=0

// ( C ) Демонстрационная программа

// 1999 год.

#include <stdio.h>

int main()

{

       double a,b,x;

       printf(“enter a:”);

       scanf(“%lf”,&a);

       printf(“enter b:”);

       scanf(“%lf”,&b);

       if(a==0)

       {

             if(b==0)

                   printf(“every x is solution.”);

       else

                   printf(“no solution.”);

       }else

       {

             x=-b/a;

             printf(“x=%lf”,x);

       }

       return 0;

}

Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while.

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

Простейший из циклов имеет вид:

while (условие)

{

       операторы;

}

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

Имеется аналогичный вариант цикла, но с проверкой в конце

do

{

операторы;

} while (условие);

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

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

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

В следующем примере складываются первые пять целых чисел:

int sum=0;

for(int i=1;i<5;i++)

{

       sum+=i;

}

Внутри циклов можно использовать оператор break; для принудительного завершения цикла и оператор continue; для пропуска оставшихся в цикле операторов и перехода к повторению цикла.

Практическое задание №2.

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

Вариант 1.

Напишите программу возведения целого числа a в целую степень n. Разработайте интерфейс, позволяющий пользователю вводить а и n  с клавиатуры. Вычислите и распечатайте таблицу степеней числа 2:  при n=0..20.

Вариант 2.

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

             Даны два целых положительных числа x и y.

Шаг 1 : Из большего числа вычесть меньшее. Результат поместить в переменную c.

Шаг 2:  Положить большее число равным c.

Шаг 3:  Если , то повторить шаги 1 и 2.

Шаг 4:  Если , то НОД=x=y.

Разработайте интерфейс, позволяющий ввести два числа с клавиатуры и получить их НОД.

Контрольные примеры:

НОД(30030, 2380) = 70,    НОД(4200, 660) = 60,

НОД(462,819)=21,             НОД(10465, 8778) = 7

Вариант 3.

Разработайте программу решения квадратного уравнения . Пользователь должен иметь возможность ввести с клавиатуры коэффициенты a, b, с и получить корни уравнения  и . Обработайте особые случаи (,  и т.д.).

Контрольные примеры:

;

;   

;

; нет корней

 

Вариант 4.

Вычислите число e путем вычисления следующей суммы:

,              где

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

Вариант 5.

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

Вариант 6.

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

Тема 3. Функции.

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

Определение функции.

В общем случае функция имеет следующий формат:

<возвращаемый тип> ИмяФункции ( параметры)
{

       //Здесь следует тело функции,

       //состоящее из операторов
}

Тип возвращаемого значения может быть одним из рассмотренных нами типов. Тип void означает, что функция не возвращает никакого значения. Кроме того, функция может возвращать и другие типы, например определенные пользователем. Если тип возвращаемого значения не указан, то по умолчанию он предполагается целочисленным (int).

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

Обратите внимание, что знак «точка с запятой» не ставится после списка параметров.

Прототипы функций.

Прежде, чем какая-либо функция будет использоваться в программе, она должна быть описана или определена. Описание (прототип функции) информирует компилятор о существовании функции, о типе параметров и типе возвращаемого значения. Оно имеет вид:

<возвращаемый тип> ИмяФункции ( параметры);

В конце списка параметров стоит знак «точка с запятой», это и указывает на то, что мы имеем дело не с описанием функции, а с ее прототипом.

Функции, которые не используют параметров, обычно описываются прототипом с ключевым словом void на месте списка параметров.


Дата добавления: 2018-02-15; просмотров: 790; Мы поможем в написании вашей работы!

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






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