fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Изучение программирования на языке Си

Изучение программирования на языке Си

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

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

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

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

В этой главе будут рассмотрены следующие темы:

  • Знакомство со строительными блоками программ – операторами и блоками
  • Знакомство с различными видами операторов языка Си
  • Понимание разделителей
  • Использование пробельных символов для облегчения чтения программы человеком
  • Знакомство с функциями и их частями
  • Изучение того, как компьютер читает программу на языке Си во время ее выполнения
  • Создание различных видов функций с параметрами и возвращаемыми значениями
  • Обучение.

Технические требования

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

  • Редактор обычного текста по вашему выбору
  • консоль, терминал или окно командной строки (в зависимости от вашей ОС)
  • Компилятор – либо GNU Compiler Collection (GCC), либо Clang (clang) для вашей конкретной ОС.

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

Исходный код этой главы можно найти по адресуhttps://github.com/PacktPublishing/Learn-C-Programming. Продолжайте набирать исходный код полностью самостоятельно и добивайтесь правильной работы вашей версии программ.

Знакомство с операторами и блоками

Прежде чем мы начнем изучать детали утверждений, давайте вернемся к различным вариантам использования пунктуации, с которыми мы столкнулись в нашей программе Hello, world! Вот программа для справки; комментарии были удалены, чтобы мы могли сосредоточиться на деталях самого кода:

Сначала я хотел бы обратить ваше внимание на парную пунктуацию – пунктуацию, которая встречается с начальным знаком и очень похожим конечным знаком. Просматривая строку за строкой, мы видим следующие пары – < and >, ( и ) (которые встречаются дважды),< and >, и, наконец, ” и ” . Мы также видим некоторые другие знаки препинания, которые могут быть вам знакомы или нет. Это # , . , ; , , и . Это знаки препинания, которые имеют большое значение в языке Си.

Когда мы внимательно посмотрим на наше “Hello, world!

&quot.

Экспериментирование с утверждениями и блоками

Что произойдет в вашей системе, если вы замените

.

на ? Наиболее вероятным результатом будет то, что это будет выглядеть так, как будто никакого приветствия вообще не было напечатано. Если это так, то на самом деле произошло то, что фокус печати текста вернулся в начало строки, но строка не была продвинута вперед; консольная подсказка написала поверх нее, стерев наше приветствие. Если вы хотите перейти на следующую строку без возврата в начало строки, попробуйте использовать символ или v .
a Диграфы, которые появляются в строках, также называются убегающими последовательностями, потому что они уходят от обычного значения каждого отдельного символа. Все они начинаются с символа обратной косой черты ( ). В следующей таблице приведены допустимые диграфы языка Си:

Понимание разделителей

Значение

Предупреждение

Понимание разделителей

Разделители – это символы, используемые для отделения небольших частей программы друг от друга. Эти меньшие части называются лексемами. Токен – это наименьший полный элемент языка Си. Токен – это либо один символ, либо последовательность символов, предопределенных языком Си, например, int или return, либо последовательность символов/слов, определенных нами, о которых мы узнаем позже. Когда лексема предопределена языком Си, она не может быть использована иначе, чем предписанным образом. Такие маркеры называются ключевыми словами. Мы уже встречали четыре ключевых слова: include, int, main и return. В течение этой главы мы встретим много других.

Для справки снова приведем программу Hello, world!

Существует три типа разделителей, которые мы рассмотрим в этой главе:

Понимание пробельных символов

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

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

Пробел означает начало новой строки, что имеет тот же эффект, что и нажатие клавиши Enter на клавиатуре. Аналогично, это то же самое, что нажатие клавиши пробела в нижней части клавиатуры.

  • Существует множество мнений столь же многочисленных программистов о том, как эффективно использовать пробельные символы. Некоторые программисты убеждены, что нужно использовать два пробела для отступа от строки, в то время как другие настаивают на использовании четырех пробелов. Другие.
  • Знакомство с операторами< and end with >Выражения в языке Си – это основные строительные блоки программ; каждое выражение образует полную единицу вычислительной логики. Существует много типов утверждений, и они состоят из самых разных элементов:< … > Простые утверждения : End with ; . return 0; – это простое утверждение.
  • Блочные утверждения : Begin wi

Сложные утверждения : С другой стороны, они состоят из ключевого слова и одного или нескольких блочных операторов. main() – это сложный оператор; в нем есть ключевое слово main и другие предопределенные элементы, включая блочный оператор. К сложным операторам относятся функции (которые рассматриваются в этой главе), управляющие операторы (рассматриваются в главе 6, Изучение условного потока программы) и циклические операторы (рассматриваются в главе 7, Изучение циклов и итераций).

Знакомство с функциями

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

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

Понимание определений функций

  • Функции, таким образом, являются неотъемлемой частью любой программы на языке Си. Каждая функция, которую вы будете создавать, состоит из следующих частей:
  • Идентификатор функции: Это имя функции. Имя функции должно соответствовать тому, что она делает на самом деле.
  • Тип результата функции или тип возвращаемого значения: Функции могут возвращать значение вызывающей стороне; вызывающая сторона может игнорировать результат. Если указан тип возвращаемого значения, функция должна вернуть вызывающей стороне значение этого типа.
  • Блок функции : Блок, непосредственно связанный с именем функции и списком параметров, в который добавляются дополнительные утверждения для выполнения работы функции.
  • Оператор возврата : Основной механизм возврата значения указанного типа из вызываемой функции ее вызывающему пользователю.

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

Изучение идентификаторов функций

[…] […] […] […] […]

[…] […] […] […] […]

[…] […]

[…]

[…]

Внутри функционального блока находится одно или несколько утверждений. В нашей функции Hello, world! main есть только два утверждения. В следующей программе, main.c, есть только один – оператор return 0;:

Хотя не существует идеального размера, большого или маленького, для количества утверждений в функциональном блоке, обычно функции, которые не длиннее либо количества строк в терминале, 25 строк, либо печатной страницы, скажем, 60 строк, предпочтительнее намного более длинных функций. Цель Златовласки – при наличии нескольких вариантов, тот, который выбрала бы Златовласка в сказке “Златовласка и три медведя”, в данном случае будет где-то между 25 и 50 строками. Чаще всего предпочтение отдается более коротким функциям, чем более длинным.

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

Изучение возвращаемых значений функций

Оператор функции может возвращать значение своему вызывающему пользователю. Он делает это внутри своего функционального блока. Вызывающая функция не обязана использовать возвращаемое значение и может его игнорировать. В программе Hello, world! вызов функции printf() действительно возвращает значение, но мы его игнорируем.

  • Когда оператор функции задан типом возврата, то он должен возвращать значение этого типа. Такая спецификация состоит из двух частей:
  • Тип возврата функции, указанный перед именем функции.

возвращаемое значение, которое имеет тот же тип, что и возвращаемый тип.

В файле main.c , int – сокращение от integer или целое число – является указанным типом, который функция main() должна вернуть своему вызывающему пользователю. Непосредственно перед закрывающей скобкой находится оператор return 0;, который возвращает целочисленное значение 0. В большинстве системных вызовов ОС (таких как Unix, Linux, macOS и Windows) возвращаемое значение 0 по традиции обычно означает отсутствие ошибки.

Передача значений с помощью параметров функции

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

Мы уже сталкивались с функцией, которая принимает параметр – вызов функции printf(“Hello, world!

” );. Здесь параметром является строка со значением “Hello, world!

“. Это может быть практически любая строка, если она разделена символом “” .

  1. Параметры функции указываются в определении функции между разделителями ( … ). Многоточие указывает на то, что параметров функции может быть ноль или больше.
  2. Порядок выполнения
  1. Execution continues until either a return statement is encountered or the end of the block is encountered (the closing > ).
  2. Когда программа выполняется, она сначала находит main() и начинает выполнять утверждения в блоке функций main(). Каждый раз, когда встречается оператор вызова функции, происходит ряд действий:

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

Понимание объявлений функций

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

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

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

Резюме

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

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

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

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

Джефф Сзухей – главный разработчик в компании QuarterTil2, которая специализируется на программных хронографах с богатой графикой для настольных сред. За свою более чем 35-летнюю карьеру в области программного обеспечения он занимался полным спектром разработок, начиная с системного анализа и настройки производительности систем и заканчивая проектированием приложений, от первоначальной разработки до полного тестирования и окончательной поставки. На протяжении всего этого времени он преподавал компьютерные приложения и языки программирования на различных уровнях образования – от учеников начальной школы до студентов университетов, а также разрабатывал и представлял профессиональное обучение на местах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *