ЗНАЕТЕ ЛИ ВЫ?

Оператор безусловного перехода goto.



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

Синтаксис: goto m1;

Метка с программе записывается в начале строки и отделяется от операторов двоеточием. Например:

{

func1();

goto m1;

func2(); // Никогда не выполняется

m1: func3();

}

В сочетании с оператором if (рассмотренным ниже) оператор goto может осуществлять условный переход на определённую метку:

if(a==5)

goto m2;

В соответствии с принципами структурного программирования, применение оператора goto считается дурным тоном. Тем не менее в исключительных случаях (в программах со множественным вложением условных операторов) его применение может значительно сократить размер кода и улучшить его читаемость.

Множественный выбор. Операторы switch-case.

 

Операция условия и конструкция if-else облегчают написание программ, в которых осуществляется выбор между двумя вариантами.

Однако иногда в программе необходимо произвести выбор одного из нескольких вариантов. Мы можем это сделать, используя конструкцию if-else if-else, и т.д., но во многих случаях оказывается более удобным применять оператор switch.

Синтаксис:

switch (целое выражение)

{

case метка1:

[Операторы;] (необязат.)

case метка2:

[Операторы;] (необязат.)

… . . . .

[default: операторы;]

}

Оператор switch вычисляет целое выражение в круглых скобках и сравнивает это значение со всеми значениями (метками), перечисленными с помощью ключевых слов case. Каждая метка должна быть либо целой константой, либо символьной константой, либо константным выражением. Как только значение вычисляемого выражения совпадает с какой-либо меткой, управление передаётся на оператор, следующий за меткой.

Если ни одна из меток не подходит, то управление передается оператору с меткой default (если такой имеется). В противном случае управление передается оператору, следующему за оператором switch.

Как выражения, так и метки должны иметь значения целого типа (включая тип char).

Пример:

switch (letter)

{

case ‘a’:

case ‘A’: printf (“Это буква a (большая или маленькая)”, letter);

break;

case 66: // 66 – код буквы B

printf (“Это буква B (большая)”, letter);

break;

case 0x30+2: //0x30+2 – код цифры 2

printf (“Это цифра 2”, letter);

break;

default: printf (“А вот не знаю я что это за символ”);

}

В отличие от других языков (например Pascal) в С в операторе switch-case после выполнения оператора или группы операторов, следующих за соответствующим условию case выполнение оператора не прекращается, а продолжается до конца оператора switch, выполняя все инструкции, написанные для других case. Это позволяет записывать несколько последовательных меток для одной и той же группы операторов. В этом случае она будет выполняться если значение выражения равно хотя бы одной из меток (см. пример выше).

Если же в программе не требуется выполнение последующих операторов, то прервать выполнение можно с помощью оператора break. Оператор break прерывает выполнение программы внутри тела оператора switch (а также for, while и do) и передаёт управление следующему после switch оператору:

switch (l)

{

case ‘a’: func1(); // Эта функция вызывается только в случае l=’a’

case ‘b’: func2(); // А эта - в случае l=’a’ или l=’b’

break;

case ‘c’: func3(); // Эта функция вызывается только в случае l=’c’

}

 

Поскольку в большинстве случаев требуется выполнение только одной группы операторов для каждого case, то тело оператора switch обычно состоит из набора блоков начинающихся с выражения “case XX:” и заканчивающегося оператором break.

Как и в других блоках операторов, внутри switch можно определять переменные:

switch (letter)

{

int l;

case ‘a’: l=

printf(“%d”,l);

break;

case ‘A’: l=2;

printf(“%d”,l);

break;

}

Обычно этого не делают, т.к. это ухудшает удобочитаемость программы.

Каковы ограничения использования оператора switch. Его нельзя использовать для работы со стрингами, значениями с плавающей точкой. В метках case нельзя использовать переменные, а также в них нельзя применять интервалы (как это можно сделать, например в Basic). В этих случаях нужно применять конструкции if-else:

if (f==3.5)

printf(“f=3.5”);

else

if(f>4 && f<6)

printf(“4<f<6”) ;


БИЛЕТ

OLE и DDE. Связывание и внедрение данных в документы.

Лекция оле

Функции. Определение (описание) функции. Прототип (декларирование) функции. Параметры функции. Передача аргументов в функцию.

 

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

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

 

<тип возвращаемого значения> <имя функции> ( [список аргументов] );

Под типом возвращаемого значения подразумевается тип данных результата, который функция возвращает по завершении своей работы. Если функция не должна возвращать результат, то указывается тип возвращаемого значения void.

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

Список аргументов в объявлении функции описывает входные данные и их типы. Список аргументов состоит из пар вида:

<Тип аргумента> <имя аргумента>

перечисленных через запятую.

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

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

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

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

 

Определение функции содержит заголовок функции (её имя, тип, класс памяти, список аргументов) и тело функции с её реализацией.

Имя функции и список её аргументов всегда должны быть известны до первого её вызова в модуле. Поэтому в любом модуле до первого вызова функции она должна быть либо определена, либо объявлена (продекларирована).

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

 

Любая программа, написанная на языке C состоит из одной или более функций, являющимися основными модулями, из которых она собирается. Имена для собственных функций выбираются произвольно, но одна из функций программы непременно называется main( ). Это особое имя: именно с функции main( ) начинается выполнение программы.

Имя любой функции состоит из идентификатора, за которым следует открывающая и закрывающая круглые скобки, заключающие в себе список параметров. Если параметры в функцию не передаются, то внутри скобок ничего не пишется.

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

Обращение к функции осуществляется следующим образом: указывается имя функции и в круглых скобках ее параметры.

Любая функция, кроме функции типа void (пустой), должна возвращать какое-либо значение. Это делается с помощью оператора return, который прерывает выполнение функции, и возвращает как результат вызова функции свой аргумент. Оператор return в функции main() означает окончание выполнения программы.Функция может возвращать некоторое (одно !) значение.


Билет





Последнее изменение этой страницы: 2016-08-16; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.216.79.60 (0.022 с.)