Все операторы языка СИ могут быть условно разделены на следующие категории:
— условные операторы, к которым относятся оператор условия if и оператор выбора switch;
— операторы цикла (for,while,do while);
— операторы перехода (break, continue, return, goto);
— другие операторы (оператор «выражение», пустой оператор).
Операторы в программе могут объединяться в составные операторы с помощью фигурных скобок. Любой оператор в программе может быть помечен меткой, состоящей из имени и следующего за ним двоеточия.
Все операторы языка СИ, кроме составных операторов, заканчиваются точкой с запятой «;».
1.4.1. Оператор выражение
Любое выражение, которое заканчивается точкой с запятой, является оператором.
Выполнение оператора выражение заключается в вычислении выражения. Полученное значение выражения никак не используется, поэтому, как правило, такие выражения вызывают побочные эффекты. Заметим, что вызвать функцию, невозвращающую значения можно только при помощи оператора выражения. Правила вычисления выражений были сформулированы выше.
Язык Си — Как создать и открыть окно с помощью функций WinAPI.
Этот оператор представляет выражение, которое увеличивает значение переменной i на единицу.
Этот оператор представляет выражение, включающее в себя операции присваивания и вызова функции.
Этот оператор представляет выражение состоящее из вызова функции.
1.4.2. Пустой оператор
Пустой оператор состоит только из точки с запятой. При выполнении этого оператора ничего не происходит. Он обычно используется в следующих случаях:
— в операторах do, for, while, if в строках, когда место оператора не требуется, но по синтаксису требуется хотя бы один оператор;
— при необходимости пометить фигурную скобку.
Синтаксис языка СИ требует, чтобы после метки обязательно следовал оператор. Фигурная же скобка оператором не является. Поэтому, если надо передать управление на фигурную скобку, необходимо использовать пустой оператор.
int main ( ) < : < if (. ) goto a; /* переход на скобку */ < . >a:; > return 0; >
1.4.3. Составной оператор
Составной оператор представляет собой несколько операторов и объявлений, заключенных в фигурные скобки:
Заметим, что в конце составного оператора точка с запятой не ставится.
Выполнение составного оператора заключается в последовательном выполнении составляющих его операторов.
int main () < int q,b; double t,d; : if (. ) < int e,g; double f,q; : >: return (0); >
Переменные e,g,f,q будут уничтожены после выполнения составного оператора. Отметим, что переменная q является локальной в составном операторе, т.е. она никоим образом не связана с переменной q объявленной в начале функции main с типом int. Отметим также, что выражение стоящее после return может быть заключено в круглые скобки, хотя наличие последних необязательно.
1.4.4. Оператор if
if (выражение) оператор-1; [else оператор-2;]
Выполнение оператора if начинается с вычисления выражения.
Язык C за 100 секунд [перевод на русский]
Далее выполнение осуществляется по следующей схеме:
— если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.
— если выражение ложно (т.е. равно 0),то выполняется оператор-2.
— если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.
После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.
if (i int t=2, b=7, r=3; if (t>b) < if (b >else r=t; return (0); >
В результате выполнения этой программы r станет равным 2.
Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:
int main ( ) < int t=2,b=7,r=3; if ( a>b ) if ( b else r=t; return (0); >
В этом случае r получит значение равное 3, так как ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if.
Следующий фрагмент иллюстрирует вложенные операторы if:
char ZNAC; int x,y,z; : if (ZNAC == ‘-‘) x = y — z; else if (ZNAC == ‘+’) x = y + z; else if (ZNAC == ‘*’) x = y * z; else if (ZNAC == ‘/’) x = y / z; else .
Из рассмотрения этого примера можно сделать вывод, что конструкции использующие вложенные операторы if, являются довольно громоздкими и не всегда достаточно надежными. Другим способом организации выбора из множества различных вариантов является использование специального оператора выбора switch.
1.4.5. Оператор switch
Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:
switch ( выражение )
Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке СИ, значение которого должно быть целым. Отметим, что можно использовать явное приведение к целому типу, однако необходимо помнить о тех ограничениях и рекомендациях, о которых говорилось выше.
Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора smitch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору.
Так как константное выражение вычисляется во время трансляции, оно не может содержать переменные или вызовы функций. Обычно в качестве константного выражения используются целые или символьные константы.
Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент помеченный ключевым словом default.
Список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.
Отметим также, что в операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.
Схема выполнения оператора switch следующая:
— вычисляется выражение в круглых скобках;
— вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;
— если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;
— если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.
Отметим интересную особенность использования оператора switch: конструкция со словом default может быть не последней в теле оператора switch. Ключевые слова case и default в теле оператора switch существенны только при начальной проверке, когда определяется начальная точка выполнения тела оператора switch. Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.
Для того, чтобы выполнить одни и те же действия для различных значений выражения, можно пометить один и тот же оператор несколькими ключевыми словами case.
int i=2; switch (i) < case 1: i += 2; case 2: i *= 3; case 0: i /= 2; case 4: i -= 5; default: ; >
Выполнение оператора switch начинается с оператора, помеченного case 2. Таким образом, переменная i получает значение, равное 6, далее выполняется оператор, помеченный ключевым словом case 0, а затем case 4, переменная i примет значение 3, а затем значение -2. Оператор, помеченный ключевым словом default, не изменяет значения переменной.
Рассмотрим ранее приведенный пример, в котором иллюстрировалось использование вложенных операторов if, переписанной теперь с использованием оператора switch.
char ZNAC; int x,y,z; switch (ZNAC) < case ‘+’: x = y + z; break; case ‘-‘: x = y — z; break; case ‘*’: x = y * z; break; case ‘/’: x = u / z; break; default : ; >
Использование оператора break позволяет в необходимый момент прервать последовательность выполняемых операторов в теле оператора switch, путем передачи управления оператору, следующему за switch.
Отметим, что в теле оператора switch можно использовать вложенные операторы switch, при этом в ключевых словах case можно использовать одинаковые константные выражения.
: switch (a) < case 1: b=c; break; case 2: switch (d) < case 0: f=s; break; case 1: f=9; break; case 2: f-=9; break; >case 3: b-=c; break; : >
1.4.6. Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.
1.4.7. Оператор for
Оператор for — это наиболее общий способ организации цикла. Он имеет следующий формат:
for ( выражение 1 ; выражение 2 ; выражение 3 ) тело
Выражение 1 обычно используется для установления начального значения переменных, управляющих циклом. Выражение 2 — это выражение, определяющее условие, при котором тело цикла будет выполняться. Выражение 3 определяет изменение переменных, управляющих циклом после каждого выполнения тела цикла.
Схема выполнения оператора for:
1. Вычисляется выражение 1.
2. Вычисляется выражение 2.
3. Если значения выражения 2 отлично от нуля (истина), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.
Существенно то, что проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным.
int main()
В этом примере вычисляются квадраты чисел от 1 до 9.
Некоторые варианты использования оператора for повышают его гибкость за счет возможности использования нескольких переменных, управляющих циклом.
int main() < int top, bot; char string[100], temp; for ( top=0, bot=100 ; top top++, bot—) < temp=string[top]; string[bot]=temp; >return 0; >
В этом примере, реализующем запись строки символов в обратном порядке, для управления циклом используются две переменные top и bot. Отметим, что на месте выражение 1 и выражение 3 здесь используются несколько выражений, записанных через запятую, и выполняемых последовательно.
Другим вариантом использования оператора for является бесконечный цикл. Для организации такого цикла можно использовать пустое условное выражение, а для выхода из цикла обычно используют дополнительное условие и оператор break.
Так как согласно синтаксису языка Си оператор может быть пустым, тело оператора for также может быть пустым. Такая форма оператора может быть использована для организации поиска.
Источник: citforum.ru
Правила записи программы на языке Си
Язык «C» − это универсальный язык программирования, для которого характерны экономичность выражения, современный поток управления и структуры данных, богатый набор операторов. Язык «C» не является ни языком «очень высокого уровня», ни «большим» языком, и не предназначается для некоторой специальной области применения. Но отсутствие ограничений и общность языка делают его более удобным и эффективным для многих задач, чем языки, предположительно более мощные.
Язык Си наряду с тем, что он позволяет освоить хороший стиль программирования, так же как более простые и менее мощные языки высокого уровня (Бейсик, Паскаль), даёт возможность программисту осуществлять непосредственный доступ к ячейкам памяти и регистрам компьютера, требуя при этом знания особенностей функционирования ЭВМ. В этом Си схож с языком низкого уровня — ассемблером. Поэтому язык Си иногда называют ассемблером высокого уровня, хотя на самом деле он представляет собой гораздо более мощное средство решения трудных задач и создания сложных программных систем.
Выбор С в качестве базового языка для С++ объясняется следующими его достоинствами:
– универсальность, краткость и относительно низкий уровень;
– адекватность большинству задач системного программирования;
– он идет в любой системе и на любой машине;
– полностью подходит для программной среды UNIX.
В Си существуют свои проблемы, но в языке, разрабатываемом «с нуля» они появились бы тоже, а проблемы Си, по крайней мере, хорошо известны. Более важно то, что ориентация на Си позволила использовать язык «Си с классами» как полезный (хотя и не очень удобный) инструмент в течение первых месяцев раздумий о введении в Си классов в стиле Симулы.
С++ стал использоваться шире, но по мере роста его возможностей, выходящих за пределы Си, вновь и вновь возникала проблема совместимости. Ясно, что отказавшись от части наследства Си, можно избежать некоторых проблем. Это не было сделано по следующим причинам:
– существуют миллионы строк программ на С, которые можно улучшить с помощью С++, но при условии, что полной переписи их на язык С++ не потребуется;
– существуют миллионы строк библиотечных функций и служебных программ на С, которые можно было бы использовать в С++ при условиях совместимости обоих языков на стадии связывания и их большого синтаксического сходства;
– существуют сотни тысяч программистов, знающих С; им достаточно овладеть только новыми средствами С++ и не надо изучать основ языка;
– поскольку С и С++ будут использоваться одними и теми же людьми на одних и тех же системах многие годы, различия между языками должны быть либо минимальными, либо максимальными, чтобы свести к минимуму количество ошибок и недоразумений. Описание С++ было переработано так, чтобы гарантировать, что любая допустимая в обоих языках конструкция означала в них одно и то же.
Практически все используемые в мире ключевые программные средства, в том числе компиляторы, операционные системы, СУБД, системы телекоммуникаций написаны на Си++. Не вызывает сомнений подавляющее превосходство Си++ в области встроенных систем и индустрии компьютерных игр (Doom III, StarCraft и др.). На Си++ реализованы ведущие поисковые Web-системы и крупнейшие Web-порталы: Google, Yahoo, Amazon и др. Создатель Си++ Бьерн Страустроп приводит следующие аргументы в пользу языка: «Си++ является наилучшим языком для многих приложений, где требуется системное программирование, имеются определенные ограничения по ресурсам и выдвигаются серьезные требования к производительности. Одним из примеров служит Google, другим — встроенные системы для миниатюрных устройств».
Язык Си был разработан американцем Деннисом Ритчи в исследовательском центре Computer Science Research Center of Bell Laboratories корпорации AT /* описание типов данных */
num=2.345; /*Присвоим переменной num значение 2.345 */
printf(«sin(%f)=%fn», num, sin(num)); /* Вывод на экран */
Любой файл начинается с директив #include, вставляющих в текст программы так называемые заголовочные файлы, которые содержат описания функций, используемых в этом файле. В нашем примере это описания стандартных функций ввода-вывода и математических функций .
Далее следует заголовок главной функции программы main, операторы описания типов данных и исполняемые операторы.
При выполнении программы, созданной на языке Си, операционная система компьютера всегда передаёт управление в программу на функцию с именем main. Обычно, хотя это не обязательно, функция main стоит первой в тексте программы. Следующие за именем функции круглые скобки играют важную роль. В них указываются параметры (аргументы), которые передаются в функцию при обращении к ней.
В данном случае операционная система не передаёт в функцию main никаких параметров, поэтому список аргументов в круглых скобках пустой. В фигурные скобки < >заключены описания и операторы, которые обеспечивают вывод на экран компьютера сообщения «Здравствуй, язык Си!».
В общем случае программа содержит несколько функций. Пример программы из нескольких функций:
Функция main может вызывать для выполнения любую другую функцию. Функции function_1, function_2. function_nмогут вызвать любую функцию, кроме функции main. Функцию main нельзя вызывать изнутри программы, она является управляющей.
Директивы #include должны всегда начинаться с новой строки, остальные же операторы программы могут иметь произвольное положение в файле вплоть до записи в одну строку. При записи не допускается разрывать слова, числа, двухсимвольные операции.
Пробелы используются для отделения слов друг от друга и для придания тексту большей выразительности и могут использоваться везде, за исключением случаев, описанных в предыдущем абзаце. Там, где допускается один пробел, можно поставить любое их количество.
В любом месте программы, там, где может стоять пробел, допускается записывать комментарии.
// Это тоже комментарии.
Пара символов //, отмечающих начало однострочного комментария, при выполнении программы игнорируется текст до конца строки, начиная с этих символов.
Комментарии должны помогать понять смысл выполняемых программой действий и являются обязательной ее частью. При написании комментариев следует придерживаться ряда простых истин:
– программы читаются людьми, компьютеру комментарии не нужны;
– всегда необходимы вводные комментарии, в которых указывается назначение программы, ее автор, дата написания и изменения, краткое описание алгоритма, входных и выходных данных, основных переменных и вызываемых функций;
– комментарии должны содержать дополнительную информацию, а не перефразировать программу;
– комментарии должны быть расположены так, чтобы программа не была менее наглядной;
– неправильные комментарии хуже, чем их отсутствие.
Стиль программирования, расположение операторов в строках, использование пробелов, выбор имен переменных и т.д. должны быть направлены на то, чтобы сделать программу более понятной людям, ее читающим.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Прямо сейчас студенты читают про:
Качество сырья. Влияние качества сырья и материалов на качество продукции Классификация сырья Сырьем называют природные и искусственные материалы, используемые в промышленности для производства продукции.
Профессиональные заболевания медицинских работников и их профилактика Труд медиков принадлежит к числу наиболее сложных и ответственных видов деятельности человека.
Понятие, формы и виды гражданско-правовой ответственности. Условия наступления гражданско-правовой ответственности Понятие и признаки гражданско-правовой ответственности. Гражданско-правовая ответственность является видом юридической ответственности.
Пример решения задачи по тушению пожара Задача 5.1. Характеристика здания: Здание общежития трехэтажное коридорного типа.
Подсчет частоты дыхания у детей раннего возраста Цель: диагностика. Показания: наблюдение. Приготовьте: часы с секундомером.
Источник: studopedia.ru
Какие программы пишутся на языке Си?
Практически весь софт, который используется каждый день, имеет в своей основе код на языке Си.
1. Операционные системы
Язык Си был разработан специально для написания операционной системы Unix. Первые версии Unix были написаны на ассемблере. Язык Си был разработан именно как высокоуровневый язык для разработки больших программных систем. В 1972 году Деннис Ритчи создал язык Си и Unix была переписана на этом языке.
В 1985 году появилась операционная система Windows. Она также была написана на Си.
Компьютеры Apple работают на операционной системе macOS. Ядро этой операционной было написано на Си.
В 1991 на Си была написано ОС Linux. Около 97 процентов из 500 самых мощных суперкомпьютеров мира используют ядро Linux.
Операционные системы для мобильных устройств: iOS , Android и Windows Phone — имеют в своей основе ядра систем macOS, Linux и Windows.
То есть язык Си лежит в основе работы всего программного обеспечения от мобильных телефонов до суперкомпьютеров.
2. Программы с открытым исходным кодом
Язык Си — это язык общения программистов. Для коллективной работы создаются проекты с открытым исходным кодом (Open Source), в которых принимают участие множество программистов.
По данным крупнейшего каталога программ с открытым исходным кодом « Черная утка » более 45% этих программ написано на языке Си.
Источник: dzen.ru