Light-electric.com

IT Журнал
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

Введение в язык программирования C

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

Его живучесть можно объяснить тем, что принципы работы операционных систем относительно универсальны, они не подвержены тому прогрессу и разнообразию, которые можно наблюдать в среде десктопного и мобильного ПО, Web-приложений. C не является языком достаточно высокого уровня, он ближе к архитектуре компьютера. В результате программы на C получаются компактными и быстрыми.

C не поддерживает объектно-ориентированного программирования. Поддержка ООП реализована в C++. Хотя последний возник на основе языка C, он не является его «продолжением», а представляет собой отдельный язык, который можно изучать, не зная C. Однако изучение C полезно перед знакомством с его «продвинутым младшим братом», т.к. синтаксис языков похож, C не перегружает мозг начинающего программиста сверхвозможностями и приучает к пониманию сути происходящего.

Подходит ли C для первого знакомства с программированием? Если вы не обучаетесь в вузе по специальности, связанной с IT, то нет. C предполагает понимание организации и принципов работы аппаратного обеспечения, в частности – памяти. Здесь многое делается с помощью указателей, они играют ключевую роль; эта тема достаточно сложная для понимания и обычно не изучается в школе.

Конечно, с помощью C можно изучать основы программирования и не изучать при этом указатели. Однако человек будет думать, что знает C, мало зная о нем по существу. Язык C был создан разбирающимися в устройстве «железа» профессиональными программистами для написания операционной системы UNIX. Его не задумывали как язык для обучения начинающих.

Среды и компиляторы для программирования на C

Если вы пользуетесь одним из дистрибутивов GNU/Linux, вам подойдет любой текстовый редактор с подсветкой синтаксиса, также понадобятся GCC и терминал.

Существуют редакторы для программистов, включающие различные дополнения, в том числе терминал, просмотр каталогов и др. Например, Geany или Atom.

C – компилируемый язык программирования. В GNU/Linux для получения исполняемых файлов используется GCC – набор компиляторов, включающий в том числе компилятор для C. Чтобы из исходного файла (обычно таким файлам дают расширение *.с) получить исполняемый, надо выполнить в терминале команду примерно следующего вида:

, где gcc — команда, запускающая программу, выполняющую компиляцию и иные действия; -o – ключ, сообщающий, что мы вручную указываем имя исполняемого файла; hello – имя получаемого исполняемого файла; hello.c – имя файла с исходным кодом. Имя исполняемого файла можно не указывать:

В этом случае исполняемый файл будет иметь имя по умолчанию a.out.

Для Windows существует свой набор компиляторов – MinGW. Его можно использовать самостоятельно, однако он входит в состав простой среды разработки Dev-C++, которая может оказаться хорошим выбором для обучения программированию на языках C и С++.

При сохранении выбирайте тип файла «C source files (*.c)». Компиляция и запуск программы выполняется при нажатии клавиши F9. После исполнения программа сразу закрывается и результат невозможно увидеть. Чтобы этого не происходило, прописывают две дополнительные строки: #include и getch(). (Возможно это не актуально для более новой версии Dev-C++.)

«Hello World» в GNU/Linux:

«Hello World» в Windows:

С другой стороны, существует большое количество кроссплатформенных сред разработки. Например, Eclipse + модуль CDT, KDevelop, CLion. Последняя платна, выпускается компанией JetBrains – лидером в разработке IDE, однако имеет 30-ти дневный триальный период, чего может быть достаточно для обучения. CLion удобнее других IDE.

«Hello World» на C

На примере простейшей программы сразу отметим некоторые особенности языка программирования C.

В языке C роль основной ветки программы берет на себя функция main(). Эта функция всегда должна присутствовать в законченной программе на языке C, и исполнение программы начинается именно с нее. Однако объявленные внутри нее переменные не являются глобальными, их область видимости простирается только на main(). Тем не менее в языке программирования C почти весь программный код заключается в функции, и функция main() является главной и обязательной.

По умолчанию функция main() возвращает тип данных int, поэтому можно не указывать тип возвращаемых данных. Однако компилятор в этом случае выносит предупреждение.

Функция printf() предназначена для вывода данных. Ее назначение аналогично процедуре write() языка Pascal и функции print() в Python. Функция printf() после вывода не выполняет переход на новую строку. Поэтому для перехода используется специальный символ, который обозначается комбинацией n. Законченные выражения на языке C разделяются точкой с запятой.

В языке C функции ввода-вывода не являются частью языка. Например, в Python нам не надо импортировать никакой модуль, чтобы пользоваться функциями print() и input(). В C же мы не можем просто вызвать функцию printf(), т.к. в самом C ее просто нет. Эту функцию, а также ряд других, можно подключить с помощью заголовочного файла stdio.h. Именно для этого в начале программы прописана строка #include . Include с английского переводится как «включить», а stdio есть сокращение от «стандартный ввод-вывод (input-output)».

В заголовочных файлах (они оканчиваются на *.h) обычно содержаться объявления тех или иных функций. Объявление — это просто описание функции: какие параметры она принимает и что возвращает. Сам код функции (определение) находится не в заголовочном файле, а в библиотеках (других файлах), которые могут быть уже скомпилированы и расположены в системных каталогах. Перед компиляцией программы запускается препроцессор языка C. Помимо прочего он включает в начало файла программы содержимое указанных в ней заголовочных файлов.

Практическая работа

Закомментируйте 1 первую строчку кода программы HelloWorld. Попробуйте скомпилировать программу. Удалось ли получить исполняемый файл? Какое предупреждение выдал компилятор?

Читать еще:  Ml язык программирования

1 // — однострочный комментарий на языке C; /* … */ — многострочный комментарий на языке C.

Обзор и описание языка программирования Си

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

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

Языковые особенности Си позволяют делать программы независимыми операционной системы или платформы.

Наиболее важными особенностями языка программирования Си являются:

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

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

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

Синтаксис

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

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

Буквы и цифры

Множество символов Си включает в себя малые и большие буквы английского алфавита и 10 арабских цифр:

  • большие английские буквы: A B C D E F G H I J K L M N O P Q R T U V W X Y Z
  • малые английские буквы: a b c d e f g h i j k l m n o p q r t u v w x y z
  • десятичные арабские цифры: 0 1 2 3 4 5 6 7 8 9

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

Символы пробела

Язык Си включает пробельные символы — пробелы, перевод строки, табуляцию, новую страницу, возврат каретки, вертикальную табуляцию, новую строку. Пробельные символы разделяют символы программного кода друг от друга.

Специальные символы и знаки пунктуации

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

ESC-последовательности

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

Операции

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

  • Логическое НЕ: !
  • Побитовое дополнение:

  • Сложение: +
  • Вычитание, отрицание: —
  • Умножение: *
  • Деление: /
  • Остаток: %
  • Сдвиг влево: >
  • Меньше:
  • Больше или равно: >=
  • Равно: ==
  • Не равно: !=
  • Побитовое И: &
  • Побитовое включающее ИЛИ: |
  • Побитовое исключающее ИЛИ: ^
  • Логическое И: &&
  • Логическое ИЛИ: ||
  • Последовательное выполнение: ,
  • Операция условного выражения: ?:
  • Инкремент: ++
  • Декремент: —
  • Простое присваивание: =
  • Сложение с присваиванием: +=
  • Вычитание с присваиванием: -=
  • Умножение с присваиванием: * =
  • Деление с присваиванием: /=
  • Остаток с присваиванием: %=
  • Сдвиг вправо с присваиванием: >>=
  • Сдвиг влево с присваиванием: 2017-12-09 Программирование

    Языки C и C++. Где их используют и зачем?

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

    Когда и зачем используются C и C++ ?

    1. Операционные системы

    Язык C первоначально создавался для системного программирования, поэтому не удивительно, что его так активно применяют при создании операционных систем и программного обеспечения.

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

    Вот почему он идеален для разработки операционных систем.

    Любая операционная система в первую очередь должна быстро запускаться и эффективно управлять системными ресурсами. Например, Linux, Microsoft Windows, Mac OS полностью написаны на языке C, а Android и iOS — частично.

    Разработчик на языке C может реализовывать все структуры данных самостоятельно, производя тонкую настройку мельчайших деталей операционной системы. Такая высокая гибкость — весомый аргумент в пользу языка.

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

    2. Программирование встроенных систем

    Язык программирования C просто необходим при проектировании встроенных систем.

    Главным образом из-за высокой производительности и простоты использования. Язык C очень экономичен в потреблении ресурсов системы, благодаря чему программа выполняется быстро. В результате встроенные системы работают в реальном времени без замедления.

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

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

    3. Разработка игр и игрового движка

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

    Являясь самым быстрым на сегодняшний день языком программирования, С++ оказывается одним из лучших для игр в 3D, многопользовательских и других.

    Например, Counter-Strike, StarCraft: Brood War, Diablo I, World of Warcraft — все эти игры написаны на C++. Не говоря уже о консолях Xbox и PlayStation, в основе которых лежит программирование C++.

    В ядре игрового движка Unity — самого популярного движка для создания видеоигр под несколько операционных систем одновременно — также использовался C++.

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

    4. Разработка настольных и кроссплатформенных приложений

    C++ также можно использовать для создания настольных приложений. Всё благодаря превосходным кроссплатформенным средствам разработки (иногда называемым фреймворками), таким как Qt. Оно позволяет нацелиться на Windows, Linux, macOS, Android и встроенные системы — все c единой кодовой базой. Так что разработка приложений с помощью Qt оказывается отличным решением для тех, кто хочет сэкономить на времени и стоимости программирования.

    Стоит упомянуть и о библиотеке SDL, нашпигованной функциями, позволяющими создавать приложения одновременно для Windows, Linux, Android, MacOS и iOS.

    Кстати, Photoshop, Illustrator и Adobe Premiere целиком написаны на C++.

    Какие ещё есть приложения?

    В Facebook перевели часть кода из PHP на язык C++, чтобы сократить затраты электроэнергии в расчёте на одного пользователя. Возможно, облачные системы хранения, базы данных, драйверы устройств и другие виды ПО тоже используют C++.

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

    Выводы

    Принимая во внимание всё вышесказанное, будем считать, что языки C/C++ вполне годятся для:

    1. разработки операционных систем,
    2. программирования встроенных систем,
    3. разработки игр,
    4. разработки баз данных,
    5. разработки настольных и кроссплатформенных приложений (с помощью средств C++).

    Также можно отметить, что в проектах, имеющих дело со сложными типами данных, разработка ПО с использованием C++ предотвращает перегрузку данными и похожие проблемы.

    Так что, если вы спросите:

    Почему мы до сих пор используем C/C++?

    Есть короткий ответ: C и C++ гибкие, очень быстрые и эффективные. К тому же они ближе к машинному коду, чем любой другой язык программирования. Именно поэтому в некоторых случаях эти языки просто незаменимы.

    Так что наш прогноз таков: в ближайшем будущем язык C не сойдёт с технологической арены. Особенно по причине роста количества устройств, поддерживающих технологию Интернета вещей, а эти устройства крепко завязаны на управлении машинным кодом и памятью.

    А вы уже в предвкушении будущего?

    Возможно Вам также будет интересно:

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

    практический курс

    Что это такое?

    В свое время (1991-1992 года), выбрав язык Си в качестве основного языка программирования для математических классов, автор столкнулся с проблемой отсутствия нормальных учебников, которые можно было бы рекомендовать школьникам. Это вынудило его написать свой конспект лекций, который можно было бы назвать «Практический курс программирования на Си» — в него вошли те сведения, которые действительно требовались автору на практике. Многолетний опыт преподавания показал, что конспект действительно востребован и широко используется как школьниками, так и выпускниками.

    В качестве среды разработки используется бесплатно распространяемая оболочка Dev-C++ с открытым исходным кодом, включающая компилятор GCC.

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

    Лицензионное соглашение

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

    Скачивание материалов означает, что вы приняли условия этого лицензионного соглашения.

    Скачать

    Конспект распространяется свободно в формате PDF. Для просмотра требуется бесплатный просмотрщик Acrobat Reader. Конспект курса условно разбит на 4 части:

    1. Введение в программирование на языке Си (860 Кб)29.03.2014
      Изучение основных конструкций языка и приемов написания программ.
    2. Xранение и обработка данных (792 Кб)21.11.2013
      Язык Си: массивы, матрицы, структуры, символьные строки, структуры, рекурсия.
    3. Разработка программ на языке Си (937 Кб)01.03.2014
      Приемы проектирования программ, структурное программирование, целочисленные алгоритмы, численные методы, моделирование.
    4. Динамические структуры данных в языке Си (666 Кб)11.06.2009
      Списки, стеки, деревья, графы.

    Презентации

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

    Методика

    В программе предусмотрено изучение языка Си в 7-11 классах:

    Часть I представляет собой расширенный конспект курса 7 класса. Введение в язык Си строится на базе алгоритмической подготовки, которую дети получили в 6 классе, работая с исполнителями.

    Основная задача — познакомить учащихся с основными конструкциями языка Си: циклами, условными операторами, процедурами. Весьма успешно проходит изучение разделов, связанных с графикой, анимацией.

    Для работы с графикой через браузер можно использовать онлайн-сервис Антона Деникина.

    Программа включает следующие разделы (в скобках указана часть конспекта): Массивы (II), Работа с файлами (II), Символьные строки (II), Вращение объектов (III), Моделирование (III). Особое внимание уделяется изучению алгоритмов работы с массивами, в том числе поиска, сортировки и т.п. Дается понятие об эффективности вычислительных методов.

    Основное внимание уделяется изучению методов разработки программ на языке Си. Учащиеся выполняют индивидуальное задание, в ходе которого учатся строить графики на экране, знакомятся с преобразованиями систем координат, изучают методы решения уравнений, знакомятся с численными методами, учатся правильно оформлять программы (разделы 1-2 части III). Одно из заданий посвящено использованию метода Монте-Карло для вычисления площади сложной фигуры. Из новых разделов изучаются также Матрицы (II), Массивы символьных строк (II). Вводится понятие указателей и изучаются простейшие операции с ними.

    Изучения языка Си выходит на более серьезный уровень. Основные темы — Управление памятью (II), Рекурсия (II), Структуры (II). Предусмотрено изучение языка Паскаль в качестве второго языка программирования. С этого момента алгоритмы на теоретических занятиях записываются поочередно на двух языках.

    Изучаются не столько особенности языков, сколько алгоритмы. Основные разделы — Численные методы (III), Моделирование (III), Динамические структуры данных (IV).

    Краткий справочник по языку Си

    Начнём с комментариев…

    // Однострочный комментарий

    /*
    Многострочный комментарий
    */

    Булевые типы

    true — верно
    false — не верно

    Подключение файлов с помощью #include

    Файлы в будут подключаться из стандартной библиотеки.
    Свои файлы необходимо подключать с помощью « двойных кавычек «.

    Функции

    Объявление функций должно происходить в .h-файлах или в начале .c-файла.

    Точка входа в программу – это функция main(). Работа программы начинается с неё, вне зависимости от места расположения в коде.

    Для вывода в консоль используется printf

    %d – означает, что будем выводить целое число

    n переводит указатель на новую строчку

    int обычно имеет длину 4 байта

    short имеет длину 2 байта

    char имеет длину 1 байт

    Одиночные символы заключаются в одинарные кавычки

    long как правило занимает от 4 до 8 байт
    long long занимает как минимум 64 бита

    float это 32-битное число с плавающей точкой (дробное число)

    double это 64-битное число с плавающей точкой

    Целые типы могут быть беззнаковыми

    sizeof(T) возвращает размер переменной типа Т в байтах
    sizeof(object) возвращает размер объекта object в байтах.

    Если аргуметом sizeof будет выражение, то этот аргумент вычисляется во время компиляции кода (кроме динамических массивов)

    size_t это беззнаковый целый тип который использует как минимум 2 байта для записи размера объекта

    Выведет строку «sizeof(a++) = 4, где a = 1» (на 32-битной архитектуре)

    Можно задать размер массива при объявлении

    Можно обнулить массив при объявлении

    Индексация массива происходит также как и в других Си-подобных языках

    Массивы изменяемы, как и другие переменные

    Массив может быть объявлен динамически, размер не обязательно рассчитывать при компиляции

    Вывод программы (в зависимости от архитектуры) будет таким:

    Строка – это просто массив символов, оканчивающийся нулевым (NUL (0x00)) байтом, представляемым в строке специальным символом ‘’. Его не нужно вставлять в строку, компилятор всё сделает сам.

    %s — означает, что будем выводить строку

    напечатает 0
    17, 18, 19 и 20-ый байты, тоже будут равны нулю

    Если между одинарными кавычками есть символ – это символьный литерал, но это тип int, а не char (по историческим причинам).

    Операторы

    Переменные можно объявлять через запятую

    == — равно
    != — не равно (символ ! — отрицание, применяется в разных конструкциях)
    >, = — больше или равно

    В Си, нет булевого типа, вместо него используется int. 0 это false, всё остальное это true.

    ! — отрицание
    && — логическое И
    || — логическое ИЛИ

    Структуры ветвления

    if — если
    else if — иначе если
    else — иначе

    Цикл с предусловием

    while — выполняется пока выражение не примет значение false

    Цикл с постусловием

    do while — код выполнится хотя бы один раз

    Условие проверяется в конце цикла, а не в начале, так что код в теле цикла будет выполнен по крайней мере один раз.

    Цикл со счётчиком

    for — Цикл будет работать до тех пор, пока i

    Форматирование вывода

    Каждое выражение в Си имеет тип, но можно привести один тип к другому.

    Целые типы могут быть приведены к вещественным и наоборот.

    Указатели

    Для того чтобы объявить указатель, который будет ссылаться на переменную, необходимо сначала получить адрес этой переменной. Чтобы получить адрес памяти переменной (её расположение в памяти), нужно использовать знак & перед именем переменной. Это позволяет узнать адрес ячейки памяти, в которой хранится значение переменной. Эта операция называется — операция взятия адреса и выглядит вот так:

    В третьей строке использовалась операция взятия адреса, мы взяли адрес переменной var и присвоили его указателю ptrVar.

    Рассмотрим программу, которая наглядно покажет всю мощь указателей:

    Указатель – это переменная которая хранит адрес в памяти.
    При объявлении указателя указывается тип данных переменной на которую он будет ссылаться.
    Можно получить адрес любой переменной, а потом работать с ним.

    Используйте & для получения адреса переменной.

    Для объявления указателя нужно поставить * перед именем.

    Для того, чтобы получить знаечние по адресу, напечатайте * перед именем.

    Вы также можете изменять значение, на которое указывает указатель.

    Массивы

    Используются для большого количества однотипных данных.

    Строки это массивы символов, но обычно они представляются как указатели на первый элемент массива.
    Хорошей практикой считается использование `const char *’ при объявлении строчного литерала. При таком подходе литерал не может быть изменён.

    Функции

    Синтаксис объявления функции:
    (аргументы)

    Приставка void означает, что функция ничего не возвращает

    Типы и структуры определяемые пользователем

    typedef — используется для задания стандартным типам своих названий

    Структуры — это просто коллекция данных, память для которых выделяется последовательно.

    sizeof(struct rectangle) == sizeof(int) + sizeof(int) – не всегда верно из-за особенностей компиляции.

    Можно применить typedef к структуре, для удобства.

    Если структура большая, то (чтоб не копировать) её можно получить «по указателю».

    Указатели на функции

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

    Пример использования str_reverse по указателю

    Первая программа на Си — «Hello World»

    Создать в любом текстовом редакторе файл hello world.c

    Всё выше описаное, можно смело применять в программировании Arduino.

  • Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector