Главная страница
Навигация по странице:

  • 1. Компиляторы и интерпретаторы

  • 5.1 Операторное выражение

  • 5.2 Составной оператор (или блок)

  • 5.12 Помеченный оператор

  • Язык програмирования Си. Титульный лист язык програмирования Си


    Скачать 27.88 Kb.
    НазваниеТитульный лист язык програмирования Си
    Дата05.05.2023
    Размер27.88 Kb.
    Формат файлаdocx
    Имя файлаЯзык програмирования Си.docx
    ТипРеферат
    #1110159

    Титульный лист

    язык програмирования Си

    Содержание



    Введение

    1. Компиляторы и интерпретаторы

    2. Особенности языка Си

    3. Недостатки языка Си

    4. Структура программы

    5. Операторы

    5.1 Операторное выражение

    5.2 Составной оператор (или блок)

    5.3 Условные операторы

    5.4 Оператор while

    5.5 Оператор do

    5.6 Оператор for

    5.7 Оператор switch

    5.8 Оператор break

    5.9 Оператор continue

    5.10 Оператор возврата

    5.11 Оператор goto

    5.12 Помеченный оператор

    5.13 Пустой оператор

    Список литературы

    Введение



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

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

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

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

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

    Он тесно связан с операционной системой "UNIX", так как был развит на этой системе и так как "UNIX" и ее программное обеспечение написано на "C". Сам язык, однако, не связан с какой–либо одной операционной системой или машиной; и хотя его называют языком системного программирования, так как он удобен для написания операционных систем, он с равным успехом использовался при написании больших вычислительных программ, программ для обработки текстов и баз данных.


    1. Компиляторы и интерпретаторы



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

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

    Интерпретатор берет очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет. Только после того, как текущий оператор успешно выполнен, интерпретатор перейдет к следующему. При этом если один и тот же оператор должен выполняться в программе многократно, интерпретатор всякий раз будет выполнять его так, как будто встретил впервые. Вследствие этого, программы, в которых требуется осуществить большой объем повторяющихся вычислений, могут работать медленно. Кроме того, для выполнения такой программы на другом компьютере там также должен быть установлен интерпретатор – ведь без него текст программы является просто набором символов.

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


    2. Особенности языка Си



    Язык Си имеет свои существенные особенности, перечислим некоторые из них.

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

    Си поддерживает указатели на переменные и функции. Указатель на объект программы соответствует машинному адресу этого объекта. Посредством разумного использования указателей можно создавать эффективно-выполняемые программы, так как указатели позволяют ссылаться на объекты тем же самым путем, как это делает машина. Си поддерживает арифметику указателей, и тем самым позволяет осуществлять непосредственный доступ и манипуляции с адресами памяти.

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

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

    3. Недостатки языка Си



    Так же, как и особенностей, в языке Си присутствует масса недостатков. Ведь от них не защищен не один проект, в том числе проект разработки и выполнения программ, на языке Си.

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


    4. Структура программы



    Имя и характеристики каждой функции указываются в файле, именуемым заголовочным файлом, но текущая реализация функций описана отдельно в библиотечном файле. Наименование и возможности заголовочных файлов становятся общими, но организация библиотек по-прежнему остается разнотипной. Стандартная библиотека обычно поставляется вместе с компилятором. Так как компиляторы языка Си часто обеспечивают расширенную функциональность, не определенную стандартом ANSI C, стандартная библиотека одного компилятора несовместима со стандартными библиотеками других компиляторов.

    Большая часть стандартной библиотеки языка Си производит впечатление удачно спроектированной. Некоторые отдельные части, дававшие преимущество в прошлом, могут провоцировать ошибки. Функции строкового ввода gets() (и применение scanf() для считывания вводимых строк) являются источником множества переполнений буфера, поэтому большинство руководств по программированию советуют избегать подобных приемов. Функция strcpy() также весьма печально знаменита. Еще одной неоднозначной функцией является strtok() – функция, разработанная как простейший лексический анализатор, но имеющая множество «подводных камней» и потому весьма трудная в использовании.

    Выбор применения типа size_t вместо int для числа элементов, указанных для fread() и fwrite() является несовместимым с разработанной общей семантикой для size_t (для представления количества байтов).

    Stdio достаточно ограничен (слишком высокий уровень для использования во многих ситуациях) и стандарт не позволяет пользователю самостоятельно переназначать или расширять его свойства. В итоге, для множества приложений разрабатывается собственные библиотеки-обертки вокруг механизмов более низкого уровня и функций, реализуемых ОС, таких как POSIX. Например, stdio не работают с сигналами или асинхронными непакетными режимами ввода-вывода, которые широко используются в сетевых серверах. В итоге, только серверы, использующие модель целого процесса для клиента, могут полностью полагаться на функции stdio для обслуживания их на POSIX-совместимых системах в пакетном режиме ввода-вывода.

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

    5. Операторы



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

    Операции выполняются в строгой последовательности. Величина, определяющая преимущественное право на выполнение той или иной операции, называется приоритетом. Их приоритеты для каждой группы одинаковы. Чем большим преимуществом пользуется соответствующая группа операций, тем выше она расположена в таблице. Порядок выполнения операций может регулироваться с помощью круглых скобок.

    язык программирование компилятор интерпретатор оператор

    5.1 Операторное выражение
    Большинство операторов являются операторными выражениями, которые имеют форму:

    выражение;

    Обычно операторные выражения являются присваиваниями или обращениями к функциям.
    5.2 Составной оператор (или блок)
    С тем, чтобы допустить возможность использования нескольких операторов там, где ожидается присутствие только одного, предусматривается составной оператор (который также называют "блоком"):
    составной оператор:

    {список_описаний список_операторов}

    список_описаний:

    описание

    описание список_описаний

    список_операторов:

    оператор

    оператор список_операторов
    Если какой-либо идентификатор из списка описаний был описан ранее, то во время выполнения блока внешнее описание подавляется и снова вступает в силу после выхода из блока.

    Любая инициализация автоматических и регистровых переменных проводится при каждом входе в блок через его начало. В компиляторе ОС ДЕМОС разрешается (но это плохая практика) передавать управление внутрь блока; в таком случае эти инициализации не выполняются. Инициализации статических переменных проводятся только один раз, когда начинается выполнение программы.

    Находящиеся внутри блока внешние описания не резервируют памяти, так что их инициализация не разрешается.
    5.3 Условные операторы
    Имеются две формы условных операторов:
    if (выражение) оператор

    if (выражение) оператор else оператор
    В обоих случаях вычисляется выражение и, если оно отлично от нуля, то выполняется первый подоператор. Во втором случае, если выражение равно нулю, выполняется второй подоператор. Как обычно, двусмысленность else разрешается связыванием else с последним встречающимся if, у которого нет else.
    5.4 Оператор while
    Оператор while имеет форму:
    while (выражение) оператор
    Подоператор выполняется повторно до тех пор, пока значение выражения остается отличным от нуля. Проверка производится перед каждым выполнением оператора.
    5.5 Оператор do
    Оператор do имеет форму:
    do оператор while (выражение)
    Оператор выполняется повторно до тех пор, пока значение выражения не станет равным нулю. Проверка производится после каждого выполнения оператора.
    5.6 Оператор for
    Оператор for имеет форму:
    (выражение1;выражение2;выражение3)оператор
    Оператор for эквивалентен следующему:
    выражение1;

    while (выражение2) {

    оператор

    выражение3;

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

    Любое выражение или все они могут быть опущены. Если отсутствует второе выражение, то предложение с while считается эквивалентным while(1); другие отсутствующие выражения просто опускаются из приведенного выше расширения.
    5.7 Оператор switch
    Оператор switch (переключатель), вызывает передачу управления к одному из нескольких операторов, в зависимости от значения выражения. Оператор имеет форму:
    switch (выражение) оператор
    В выражении проводятся обычные арифметические преобразования, результат должен иметь тип int.

    Оператор обычно является составным. Любой оператор внутри этого оператора может быть помечен одним или более вариантным префиксом case, имеющим форму:
    case константное выражение.
    Где константное выражение должно иметь тип int. Никакие две вариантные константы в одном и том же переключателе не могут иметь одинаковое значение. Точное определение константного выражения приводится ниже.

    Кроме того, может присутствовать один операторный префикс вида:
    default:
    При выполнении оператора switch вычисляется входящее в него выражение и сравнивается с каждой вариантной константой. Если одна из вариантных констант оказывается равной значению этого выражения, то управление передается оператору, который следует за совпадающим вариантным префиксом.

    Если ни одна из вариантных констант не совпадает со значением выражения и если при этом присутствует префикс default, то управление передается оператору, помеченному этим префиксом. Если ни один из вариантов не подходит и префикс default отсутствует, то ни один из операторов в переключателе не выполняется. Сами по себе префиксы case и default не изменяют выполнения программы, программа выполняется последовательно, пока не встретится явная передача управления. Для выхода из переключателя имеется оператор break. Обычно оператор, который входит в переключатель, является составным. Описания могут появляться в начале этого оператора, но инициализации автоматических и регистровых переменных будут неэффективными.

    Пример:
    switch (regim) {

    case 'x': regx++;

    case 'X': case 'Y': regY++; break;

    case '-': regx = 0; break;

    default: err("Ошибка"); goto next;

    }
    5.8 Оператор break
    Оператор имеет форму: break;

    Он вызывает завершение выполнения наименьшего охватывающего этот оператор оператора while, do, for или switch; управление передается оператору, следующему за завершенным оператором.
    5.9 Оператор continue
    Оператор имеет форму: continue;

    Он приводит к передаче управления на продолжающую цикл часть наименьшего охватывающего этот оператор оператора while, do или for; то есть на конец цикла. Более точно, в каждом из операторов:
    while(...) { | do { | for(...) {

    ... |... |...

    contin:; | contin:; | contin:;

    } | } while(...); | }
    Оператор continue эквивалентен оператору goto contin (за contin: следует пустой оператор).

    5.10 Оператор возврата
    Возвращение из функции в вызывающую программу осуществляется с помощью оператора return, который имеет одну из следующих форм:
    return;

    return выражение;
    В первом случае возвращаемое значение неопределенно. Во втором случае в вызывающую функцию возвращается значение выражения. Если требуется, выражение преобразуется к типу функции, в которой оно появляется, как в случае присваивания. Попадание на конец функции эквивалентно возврату без возвращаемого значения.

    Возвращать можно значение арифметического типа, а также структуру (но не массив).
    5.11 Оператор goto
    Управление можно передавать безусловно с помощью оператора:
    goto идентификатор1
    Идентификатор должен быть меткой, локализованной в данной функции.
    5.12 Помеченный оператор
    Перед любым оператором может стоять метка, имеющая вид: идентификатор:

    Метки используются только для указания места, куда передается управление оператором goto. Областью действия метки является данная функция, за исключением тех подблоков, в которых тот же идентификатор описан снова.
    5.13 Пустой оператор
    Пустой оператор имеет форму: ;

    Пустой оператор оказывается полезным, так как он позволяет поставить метку перед закрывающей скобкой } составного оператора или указать пустое тело в операторах цикла, таких как while.


    Список литературы



    «Наука и техника» – Н. Степанова Е. Иголкина.


    написать администратору сайта