Конструкция if else
Синтаксис оператора if else таков:
if ( выражение )
оператор1;
else
оператор2;
Если значение выражения не равно нулю, то выполняется оператор1, в противном случае - оператор2. Пример:
#include <stdio.h> // подключение библиотеки stdio.h
void main(void) // основная функция main
{ int a; // объявление переменных a
scanf ( "%d", &a);// ввод значений переменных a с клавиатуры
if(a==3) // сравнение переменной а с 3
printf( "a равно 3"); // вывод сообщения на экран в случае
// выполнения условия
else printf( "a не равно 3"); // вывод сообщения на экран в случае
// не выполнение условия
}
4.5.3.Условная операция ?
Условная операция ? может с успехом использоваться вместо конструкции if else там, где входящие в нее операторы являются простыми выражениями. Синтаксис условной операции таков:
результат = выражение ? выражение1 : выражение2;
Для примера рассмотрим программу. Переменной result при ее инициализации будет присвоено значение b, если выражение ( a < 0 ) истинно, и a, если выражение ( a < 0 ) ложно. В примере значение переменной result зависит от введенного значения переменной a.
#include <stdio.h> // подключение библиотеки // stdio.h
void main(void) // основная функция main
{ int a,b=0; // объявление переменных a
scanf ( "%d", &a); // ввод значений переменных a с // клавиатуры
int result = ( a < 0 ) ? b : a; // объявление переменной result // по условию
printf( "a = %d b = %d result = %d\n", a, b ); // вывод значений
// переменных a,b, result
}
Оператор switch
Конструкция switch заменяет разветвленный многократный оператор if else. Синтаксис оператора switch таков:
switch ( выражение ) {
case константное_выражение_1 :
оператор(ы) case константное_выражение_2 :
оператор(ы)
case константаое_выражение_3 :
оператор(ы) default:
оператор(ы)
}
После вычисления выражения в заголовке оператора его результат последовательно сравнивается с константными выражениями, начиная с самого верхнего, пока не будет установлено их соответствие. Тогда выполняются операторы внутри соответствующего case, управление переходит на следующее константное выражение, и проверки продолжаются. Именно поэтому в конце каждой последовательности операторов должен присутствовать оператор break. После выполнения последовательности операторов внутри одной ветки case, завершающейся оператором break, происходит выход из оператора switch. Обычно оператор switch используется тогда, когда программист хочет, чтобы была выполнена только одна последовательность операторов из нескольких возможных.
Каждая последовательность операторов может содержать нуль или более отдельных операторов. Фигурные скобки в этом случае не требуются.
Ветка, называемая default (умолчание), может отсутствовать. Если она есть, то последовательность операторов, стоящая непосредственно за словом default и двоеточием, выполняется только тогда, когда сравнение «выражение» ни с одним из стоящих выше константных выражений (в case)не истинно. Пример:
#include <stdio.h> // подключение библиотеки stdio.h
void main(void) // основная функция main
{ int a; // объявление переменных a
scanf ( "%d", &a); // ввод значений переменных
// a и с клавиатуры
Switch(a)
{ case 3: printf( "a равно 3"); // вывод сообщения на экран в случае a=3
case 4: printf( "a равно 4"); // вывод сообщения на экран в случае a=4
default:
printf( "a = %d\n", a); // вывод значения переменной a
}
}
Оператор goto
Оператор goto используется для безусловной передачи управления внутри функции от одного оператора к другому. Синтаксис оператора goto:
goto идентификатор;
Управление передается на оператор в теле функции, помеченной указанным идентификатором. Пример:
#include <stdio.h>// подключение библиотеки stdio.h
void main(void)// основная функция main
{ int a;// объявление переменных a
scanf ( "%d", &a); // ввод значений переменной a с клавиатуры
if(a>=0) goto label1; // переход на метку label1, если а>=0
a=0;// присвоение переменной а значения 0
label1:printf( "a = %d\n", a); // вывод значения переменной a
}
Хотя в языке С и разрешена передача управления на любой оператор в теле функции, опыт показывает, что следует пользоваться этой возможностью как можно реже или вовсе от нее отказаться. В соответствии с теорией структурного и объектно-ориентированного программирования использование оператора goto нежелательно, так как может затруднить возможности и свести на нет усилия компилятора по оптимизации программы.
Если все-таки применяется оператор goto, то целесообразно придерживаться следующих рекомендаций:
- не входите внутрь блока извне;
- не входите внутрь оператора if или else конструкции if else или оператора switch;
- не входите внутрь итерационной структуры (оператора цикла) извне этой структуры.
Циклы
Циклы, или итерационные структуры, позволяют повторять выполнение отдельных операторов или групп операторов. Число повторений в некоторых случаях фиксировано, а в других определяется в процессе счета на основе одной или нескольких проверок условий.
Циклы завершаются в следующих случаях:
- обратилось в нуль условное выражение в заголовке цикла.;
- в теле цикла выполнился оператор break;
- в теле цикла выполнился оператор return.
В первых двух случаях управление передается на оператор, располагающийся непосредственно за циклом. В третьем случае происходит возврат из функции (завершение работы данной функции).
Бывают циклы с проверкой условия перед началом выполнения тела цикла (top-testing), по окончании выполнения тела (bottom-testing) или внутри тела (middle-testing). Ниже рассмотрены все указанные типы циклов.
Цикл while
Синтаксис цикла while (пока):
while ( условное_выражение ) оператор
Ясно, что в цикле типа while проверка условия производится перед выполнением тела цикла (оператор). Если результат вычисления условного выражения не равен нулю, то выполняется оператор (или группа операторов). Перед входом в цикл while в первый раз обычно инициализируют одну или несколько переменных для того, чтобы условное выражение имело какое-либо значение. Оператор или группа операторов, составляющих тело цикла, должны, как правило, изменять значения одной или нескольких переменных, входящих в условное выражение, чтобы в конце концов выражение обратилось в нуль, и цикл завершился.
Потенциальной ошибкой при программировании цикла while, как, впрочем, и цикла любого другого типа, является запись такого условного выражения, которое никогда не прекратит выполнение цикла. Такой цикл называется бесконечным (например цикл: while (a) printf(“Circle”), где а - любое число, отличное от 0. Цикл будет бесконечно выводить на экран дисплея текст Circle) . Пример:
#include <stdio.h> // подключение библиотеки stdio.h
void main(void)// основная функция main
{ int a;// объявление переменных a
scanf ( "%d", &a); // ввод значений переменных a и с клавиатуры
while(a>=0) // цикл повторяется пока а>=0
{ printf( "a = %d\n", a); // вывод значения переменной a
a--; // уменьшение значения переменной а на один
}
}
Цикл do while
В цикле do while проверка условия осуществляется после выполнения тела цикла. Синтаксис цикла:
do оператор;
//тело цикла
while ( условное_выражение )
В языке Си вместо одиночного оператора (например в теле рассматриваемого цикла) может быть подставлена группа операторов (блок). Цикл while прекращает выполняться, когда условное выражение обращается в нуль (становится ложным). Пример:
#include <stdio.h>// подключение библиотеки stdio.h
void main(void)// основная функция main
{ int a;// объявление переменных a
scanf ( "%d", &a);// ввод значений переменных a и с клавиатуры
do{// начало цикла
printf( "a = %d\n", a);// вывод значения переменной a
a--;// уменьшение значения переменной а на 1
} while(a>=0); // цикл повторяется пока а>=0
}
Цикл for
Наиболее общей формой цикла в языке С является цикл for. Цикл for - это более общая и более мощная форма, чем аналогичный цикл в языках Паскаль и Бейсик.
Конструкция for выглядит следующим образом:
for (выражение1; выражение2; выражение З) оператор;
Каждое из трех выражений можно опускать. Хотя в принципе каждое из этих выражений может быть использовано программистом как угодно, обычно первое выражение служит для инициализации индекса, второе -для выполнения проверки на окончание цикла, а третье выражение - для изменения значения индекса.
Формально это правило можно описать так:
1. Если первое выражение присутствует, то оно вычисляется.
2. Вычисляется второе выражение (если оно присутствует). Если вырабатывается значение 0, то цикл прекращается, в противном случае цикл будет продолжен.
3. Исполняется тело цикла.
4. Вычисляется третье выражение (если оно присутствует).
5. Выполняется переход к п.2.
Выполнение в любом месте тела цикла оператора continue приводит к немедленному переходу к шагу 4. Пример:
#include <stdio.h>//подключение библиотеки stdio.h
void main(void)//основная функция main
{ int a;//объявление переменных a
for(a=0; a<10; a++) //цикл от 0 до 9 -й переменной по
printf( "a = %d\n", a); // вывод значения переменной a
}
Цикл for можно свести к циклу while следующим образом:
Цикл for:
for ( выражение1; выражение2; выражениеЗ ) оператор;
переводится в:
выражение1;
while ( выражение2 ) {
оператор;
выражениеЗ; }
Функции
Процесс разработки программного обеспечения предполагает расчленение сложной задачи на набор более простых подзадач. В Языке С поддерживаются функции как логические единицы (поименованные блоки текста программы), служащие для реализации отдельных подзадач.
Функции в С должны иметь уникальные имена. Существенное значение имеет тип функции, точнее тип возвращаемого значения (функция может возвращать только одно значение) и принимает ли функция параметры (список формальных параметров функции объявляется в круглых скобках после имени функции и содержать 0, 1, или несколько параметров).
Простейшим примером использования функций является функция main (головная), которая должна присутствовать в любой программе, разрабатываемой на С. С нее начинается выполнение программы. Чаще всего main функция не имеет принимаемых параметров и не возвращает значения. В этом случае вместо отсутствующих типов указывается ключевое слово void (если тип возвращаемого параметра не указан, то по умолчанию тип возвращаемого значения такой функции является int). Пример: void main(void).
Если функция возвращает значение, то это значение передается вызвавшему фрагменту при помощи записываемого в операторе «return» выражения. Return вызывает завершение работы данной функции, передачу значения в функцию, вызвавшую данную, и возврат управления на оператор, следующий после вызова функции.
При вызове функции указываются фактические параметры вызова, их количество должно соответствовать числу и типу формальных параметров в заголовке вызываемой функции. Если функция не возвращает значения (т.е. возвращает void), то оператор return может использоваться в варианте «return;» (без следующего за ним выражения). Пример:
#include <dos.h>
#include <stdio.h>
#include <conio.h>
Float pi(void)
{ // функция только возвращает значение константы ПИ
return 3.14159265359; // возвращаемое значение
}
Дата добавления: 2016-04-14; просмотров: 819;