Тема 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!