При выборе цикла необходимо оценить необходимость проверки yсловия при входе в цикл или по завершении прохождения цикла. Если цикл ориентирован на работу с параметром, который меняется в заданных пределах с заданным шагом, то более предпочтительным является параметрический цикл.
Операторы break и continue
В теле любого цикла можно использовать операторы break и continue. Оператор breakпозволяет выйти из цикла, не завершая его. Оператор continue позволяет пропустить часть операторов тела цикла и начать новую итерацию.
Пример: Вывести числа от 0 до 99 ниже главной диагонали
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int i,j;
for(i=0; i<10; i++) {
for(j=0; j<10; j++) {
if(j>i)
break;
printf("%2d ",i*10+j);
}
printf("\n");
}
getchar();
return 0;
}
Результат выполнения программы
Пример: Вывести числа от 0 до 99 исключая числа, оканчивающиеся на 5 или 8
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int i,j;
for(i=0; i<10; i++) {
for(j=0; j<10; j++) {
if((j==8) || (j==5)))
continue;
printf("%2d ",i*10+j);
}
printf("\n");
}
getchar();
return 0;
}
Результатвыполнения
При вложенных циклах действия оператов break и continue распространяется только на самую внутреннюю структуру, в которой они содержатся.
Оператор безусловного перехода goto
Общая форма записи
goto метка;
метка: операция;
Выполнение оператора goto вызывает передачу управления в программе операции, помеченной меткой. По сути метка является идентификатором адреса операции, которой должно быть передано управление. Для отделения метки от оператора используется двоеточие (:). Метка может располагаться в программе как до оператора goto, так и после. Имена меток образуются по тем же правилам, что и имена переменных.
Пример
#include <stdio.h>
int main()
{
int k=5;
M1: if(k<0)
goto M2;
printf("%d ",k);
k--;
goto M1;
M2: getchar();
return 0;
}
Результат выполнения
Функции в языке Си
Функция — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи. Функция является подпрограммой, которая может содержаться в основной программе, а может быть создана отдельно (в библиотеке). Каждая функция выполняет в программе определенные действия.
Сигнатура функции определяет правила использования функции. Обычно сигнатура представляет собой описание функции, включающее имя функции, перечень формальных параметров с их типами и тип возвращаемого значения.
Семантика функции определяет способ реализации функции. Обычно представляет собой тело функции.
Определение функции
Каждая функция в языке Си должна быть определена, то есть должны быть указаны:
· тип возвращаемого значения;
· имя функции;
· информация о формальных аргументах;
· тело функции.
Определение функции имеет следующий синтаксис:
Тип Возвращаемого Значения Имя Функции (Список Формальных Аргументов)
{
Тело Функции;
...
Return (Возвращаемое Значение);
}
Пример
float function(float x, float z)
{
float y;
y=x+z;
return(y);
}
В указанном примере возвращаемое значение имеет тип float. В качестве возвращаемого значения в вызывающую функцию передается значение переменной y. Формальными аргументами являются значения переменных x и z.
Если функция не возвращает значения, то тип возвращаемого значения для нее указывается как void. При этом операция return может быть опущена. Если функция не принимает аргументов, в круглых скобках также указывается void.
Различают системные (в составе систем программирования) и собственные функции.
Системные функции хранятся в стандартных библиотеках, и пользователю не нужно вдаваться в подробности их реализации. Достаточно знать лишь их сигнатуру. Примером системных функций, используемых ранее, являются функции printf() и scanf().
Собственные функции - это функции, написанные пользователем для решения конкретной подзадачи.
Разбиение программ на функции дает следующие преимущества:
· Функцию можно вызвать из различных мест программы, что позволяет избежать повторения программного кода.
· Одну и ту же функцию можно использовать в разных программах.
· Функции повышают уровень модульности программы и облегают ее проектирование.
· Использование функций облегчает чтение и понимание программы и ускоряет поиск и исправление ошибок.
С точки зрения вызывающей программы функцию можно представить как некий "черный ящик", у которого есть несколько входов и один выход. С точки зрения вызывающей программы неважно, каким образом производится обработка информации внутри функции. Для корректного использования функции достаточно знать лишь ее сигнатуру.
Вызов функции
Общий вид вызова функции
переменная = Имя Функции (Список Фактических Аргументов);
Фактический аргумент — это величина, которая присваивается формальному аргументу при вызове функции. Таким образом, формальный аргумент — это переменная в вызываемой функции, а фактический аргумент — это конкретное значение, присвоенное этой переменной вызывающей функцией. Фактический аргумент может быть константой, переменной или выражением. Если фактический аргумент представлен в виде выражения, то его значение сначала вычисляется, а затем передается в вызываемую функцию. Если в функцию требуется передать несколько значений, то они записываются через запятую. При этом формальные параметры заменяются значениями фактических параметров в порядке их следования в сигнатуре функции.