НОУ ИНТУИТ | Лекция | Основы языка Си: структура Си-программы, базовые типы и конструирование новых типов, операции и выражения
< Лекция 12 || Лекция 8: 1234567
Аннотация: Лекция посвящена введению в язык Си. Объясняются общие принципы построения Си-программы: разбиение проекта на h- и c-файлы, т.е. разделение интерфейса и реализации, использование препроцессора. Приводятся базовые типы языка Си, конструкции массива и указателя, позволяющие строить новые типы, а также модификаторы типов. Рассматриваются всевозможные операции и выражения языка Си.
Ключевые слова: Си, Java, указатель, адрес, массив, программа, контроль, операционная система, API, application program, interface, компилятор, слово, оператор DEFINE, файл, прототип функции, имя функции, константы, переменная, представление, standard input, препроцессор, директива, символическое имя, понимание текста, функция, алгоритм, значение, аргумент, вещественное число, вычисленное значение, вызов функции, стандартный поток вывода, логический тип, класс, тело оператора, специальный тип данных, volatility, Intel 80286, операции, сложение, умножение, оператор присваивания, префиксные операции, сумма элементов массива, аргумент операции, эквивалентное выражение, type cast, неявное преобразование
Основы языка Си
intuit.ru/2010/edi»>В настоящее время язык Си и объектно-ориентированные языки его группы (прежде всего C++, а также Java и C#) являются основными в практическом программировании. Достоинство языка Си — это, прежде всего, его простота и лаконичность. Язык Си легко учится. Главные понятия языка Си, такие, как статические и локальные переменные, массивы, указатели, функции и т.д., максимально приближены к архитектуре реальных компьютеров. Так, указатель — это просто адрес памяти, массив — непрерывная область памяти, локальные переменные — это переменные, расположенные в аппаратном стеке, статические — в статической памяти. Программист, пишущий на Си, всегда достаточно точно представляет себе, как созданная им программа будет работать на любой конкретной архитектуре. Другими словами, язык Си предоставляет программисту полный контроль над компьютером.Первоначально язык Си задумывался как заменитель Ассемблера для написания операционных систем.
Тем не менее, область применения языка Си не ограничилась разработкой операционных систем. Язык Си оказался очень удобен в программах обработки текстов и изображений, в научных и инженерных расчетах. Объектно-ориентированные языки на основе Си отлично подходят для программирования в оконных средах.
В данном разделе будут приведены лишь основные понятия языка Си (и частично C++). Это не заменяет чтения полного учебника по Си или C++, например, книг [6] и [8].
Мы будем использовать компилятор C++ вместо Cи. Дело в том, что язык Си почти целиком входит в C++, т.е. нормальная программа, написанная на Си, является корректной C++ программой. Слово «нормальная» означает, что она не содержит неудачных конструкций, оставшихся от ранних версий Си и не используемых в настоящее время. Компилятор C++ предпочтительнее, чем компилятор Си, т.к. он имеет более строгий контроль ошибок. Кроме того, некоторые конструкции C++, не связанные с объектно-ориентированным программированием, очень удобны и фактически являются улучшением языка Си. Это, прежде всего, комментарии //, возможность описывать локальные переменные в любой точке программы, а не только в начале блока, и также задание констант без использования оператора #define препроцесора. Мы будем использовать эти возможности C++, оставаясь по существу в рамках языка Си.
Структура Си-программы
intuit.ru/2010/edi»>Любая достаточно большая программа на Си (программисты используют термин проект ) состоит из файлов. Файлы транслируются Си-компилятором независимо друг от друга и затем объединяются программой-построителем задач, в результате чего создается файл с программой, готовой к выполнению. Файлы, содержащие тексты Си-программы, называются исходными.В языке Си исходные файлы бывают двух типов:
- заголовочные, или h-файлы;
- файлы реализации, или Cи-файлы.
Имена заголовочных файлов имеют расширение » .h «. Имена файлов реализации имеют расширения » .c » для языка Си и » .cpp «, » .cxx » или » .cc » для языка C++.
К сожалению, в отличие от языка Си, программисты не сумели договориться о едином расширении имен для файлов, содержащих программы на C++. Мы будем использовать расширение » .h » для заголовочных файлов и расширение » .cpp » для файлов реализации.
Заголовочные файлы содержат только описания. Прежде всего, это прототипы функций. Прототип функции описывает имя функции, тип возвращаемого значения, число и типы ее аргументов. Сам текст функции в h-файле не содержится. Также в h-файлах описываются имена и типы внешних переменных, константы, новые типы, структуры и т.п. В общем, h-файлы содержат лишь
int x;
определяющая целочисленную переменную x, является ошибкой. Вместо этого следует использовать описание
extern int x;
означающее, что переменная x определена где-то в файле реализации (в каком — неизвестно). Слово extern (внешняя) лишь сообщает информацию о внешней переменной, но не определяет эту переменную.
Файлы реализации, или Cи-файлы, содержат тексты функций и определения глобальных переменных. Говоря упрощенно, Си-файлы содержат сами программы, а h-файлы — лишь информацию о программах.
Представление исходных текстов в виде заголовочных файлов и файлов реализации необходимо для создания больших проектов, имеющих модульную структуру. Заголовочные файлы служат для передачи информации между модулями. Файлы реализации — это отдельные модули, которые разрабатываются и транслируются независимо друг от друга и объединяются при создании выполняемой программы.
intuit.ru/2010/edi»>#include <stdio.h>
(stdio — от слов standard input/output). Имя h-файла записывается в угловых скобках, если этот h-файл является частью стандартной Си-библиотеки и расположен в одном из системных каталогов. Имена h-файлов, созданных самим программистом в рамках разрабатываемого проекта и расположенных в текущем каталоге, указываются в двойных кавычках, например,
#include "abcd.h"
Препроцессор — это программа предварительной обработки текста непосредственно перед трансляцией. Команды препроцессора называются директивами. Директивы препроцессора содержат символ диез # в начале строки.
Препроцессор используется в основном для подключения h-файлов. В Си также очень часто используется директива #define для задания символических имен констант. Так, строка#define PI 3.14159265
задает символическое имя PI для константы 3.14159265. После этого имя PI можно использовать вместо числового значения. Препроцессор находит все вхождения слова PI в текст и заменяет их на константу. Таким образом, препроцессор осуществляет подмену одного текста другим. Необходимость использования препроцессора всегда свидетельствует о недостаточной выразительности языка. Так, в любом Ассемблере средства препроцессирования используются довольно интенсивно. В Си по возможности следует избегать чрезмерного увлечения командами препроцессора — это затрудняет понимание текста программы и зачастую ведет к трудно исправляемым ошибкам. В C++ можно обойтись без использования директив #define для задания констант. Например, в C++ константу PI можно задать с помощью нормального описания
const double PI = 3. 14159265;
Это является одним из аргументов в пользу применения компилятора C++ вместо Си даже при трансляции программ, не содержащих конструкции класса.
Дальше >>
< Лекция 12 || Лекция 8: 1234567
Переменные для языка программирования С++ OTUS
Для того, чтобы писать программные коды, разработчику необходимо знать немало компонентов и составляющих выбранного языка программирования. Огромным спросом пользуется СИ-семейство. С его помощью программист может создавать совершенно разные утилиты – от мелких офисных до крупных игровых проектов.
Некоторые языки СИ-семейства обладают достаточно трудным синтаксисом, а также сложной формой представления итоговой кодификации. Но используют они примерно одни и те же компоненты в своей работе.
Огромную роль для программиста играют так называемые переменные. Они могут быть разного типа. Пример – глобальные и локальные. Далее следует рассмотреть соответствующий компонент более подробно. Информация пригодится и новичкам, и опытным разработчикам.
Определение
Переменная – это место хранение информации в программе. Именованная ячейка памяти устройства. Представлены выделенными «блоками» для определенного типа данных.
Каждая ячейка может быть заполнена разного рода значениями. Они подлежат модификациям (корректировкам), удалению, считыванию. Переменные имеет каждая программа. Она использует оные для тех или иных целей.
Тип данных
Переменные в СИ ++ обладают определенном типом данных. Пример – целочисленный тип не может содержать значения, отличные от целых чисел. Переменные с плавающей запятой – это только дробные.
Тип данных будет присваиваться переменным тогда, когда они будут объявлены в утилите. Возможно определение оного в момент инициализации.
Классификация
Переменные в С ++ могут быть:
- Глобальными. Это переменные, которые «видны» всему приложению. Их нужно объявить в самом начале кодификации.
- Локальными. Объявление такой переменной происходит в конкретном блоке. Код будет «разбирать» соответствующие ячейки памяти только в пределах определенной части утилиты.
Это – основной тип классификации. Его должен знать каждый программер, чтобы составлять приложения.
Стандартные типы
Перед тем, как осуществлять объявление переменной, стоит изучить стандартные их типы. От этого будет зависеть, какой именно «вид» информации хранит в себе именованная ячейка памяти устройства.
Вот основные типы:
- int – целое число;
- float – неточный тип, который позволяет хранить целую и дробные части;
- double – аналог предыдущего, но с большей точностью;
- char – тип данных, отвечающий за запись символов;
- bool – логический тип, который может быть true или false.
Это – база, с которой необходимо познакомиться всем программистам, независимо от того, какой язык выбран для коддинга.
Объявление
В СИ семействе, как и любом другом ЯП, можно использовать разные «именованные ячейки памяти». Только сначала их требуется объявить. Для этого используются уникальные имена – идентификаторы.
Здесь стоит запомнить, что:
- имя не может начинаться с цифр;
- нельзя допускать пробелы и спецсимволы;
- имя должно быть уникальным.
В качестве идентификатора нельзя использовать ключевые слова. Все это – ограничения, которые помогают грамотно объявлять переменные в C.
Форма «задавания» именованных ячеек в памяти для кодификации будет иметь такую запись:
<тип данных> <идентификатор переменной>, …, <имя переменной № n>;
Чтобы присвоить значение, потребуется после объявления переменной поставить знак равенство. Далее – прописать интересующую информацию. Пример – char c = ‘a’. Такая запись будет инициализирована символом, прописанном в кавычках.
О передаче значений
Когда тип электронных данных обозначен, нужно присвоить то или иное значение именованной ячейке в памяти девайса. Иначе в переменной не будет никакого смысла.
Здесь стоит запомнить следующие принципы:
- для целочисленного типа можно указывать через знак равенства только целые числа;
- дробное значение прописывается как целая часть, затем через точку – дробная;
- чтобы передать в символьный тип желаемый параметр, его прописывают в кавычках;
- при работе с типом bool, нужно указывать true или false в значении.
Теперь можно создавать первые проекты на языке Си Плюс-Плюс. При неправильном указании значения для того или иного типа при обработке ячейки памяти будет выдана ошибка. Иногда это приводит к полному краху утилиты.
Глобальный тип
Глобальные переменные – это ячейки памяти, которые будут рассматриваться всем программным кодом. Доступ к ним можно получить из любых частей будущей утилиты. Область видимости здесь определяется всем программным кодом.
Стоит обратить внимание, что при использовании локальных и глобальных переменных нельзя применять одни и те же идентификаторы. Это – прямой путь к ошибкам.
Согласно установленным правилам синтаксиса, переменные в C типа global прописываются в самом начале утилиты. Если нужно использовать идентификаторы одного вида, к подобным «ячейкам» прибавляют префикс g_.
Ключевые слова
Связь переменной – определение, относятся ли несколько упоминаний одного идентификатора к одной и той же «ячейке памяти» или нет. Переменные без связи – локальные. Две с одинаковыми именами, но объявленные в пределах разных функций, не будут связаны между собой. Каждая – это самостоятельная единица. Также стоит запомнить, что:
- Переменные со внутренними связями – статические или внутренние. Они могут применяться в любом месте документа, где определены. К чему-то за пределами соответствующего документа оные не имеют никакого отношения.
- Если у переменной есть внешние связи – это внешние «ячейки памяти». Они применяются как в файле, где определены, так и за их пределами.
- Чтобы сделать глобальную переменную внутренней, используется ключевое слово static.
- Для внешних «ячеек» необходимо применить extern.
Изначально неконстантные «ячейки», которые объявлены вне блока – это внешний тип. Если речь идет о константах, прописанных аналогичным путем, они будут внутренними.
Область видимости
В C++ есть несколько «неофициальных» понятий, которые могут запутать новичка. Это – файловая и глобальная области видимости.
У глобальных переменных в рассматриваемом языке «стандартно» тип области видимости – файловый. Но данное понятие чаще применяется к внутренним глобальным переменным, а «глобальная область видимости» — к внешним global.
Чтобы лучше понимать эти термины, стоит рассмотреть приложение:
Здесь:
- G_y – это файловая область видимости в пределах global.cpp.
- Доступ к g_y за пределами соответствующего документа отсутствует.
- В main.cpp компилятор не увидит оную. Он сможет распознать предварительное объявление g_y.
- Линкер будет отвечать за связь определения g_y в global. cpp с использованием g_y в main.cpp.
Обычно соответствующие понятия встречаются в отношении больших утилит.
Символьные
Глобальные переменные в C ++ могут быть символьными константами. Они определяются так:
Это – хороший вариант для небольших утилит. Каждый раз, когда представленный документ (constants.h) подключается в другой файл, каждая переменная будет туда копироваться. Присоединить удастся до 20 документов. Тогда каждая из переменных продублируется двадцать раз.
Чтобы избежать подобной ситуации, можно превратить предложенные константы в тип констант «глобальные переменные». Далее – изменить заголовочный документ только для хранения предварительных объявлений «ячеек памяти».
Тут определение символьных canst выполняется в constants.cpp один раз. Все корректировки потребуют перекомпиляции одного файла.
Специализированные компьютерные курсы помогут лучше понимать запись variable и другие, связанные с написанием программ на Си ++. Доступные программы, приятные цены, а также море опыта и опытные кураторы сделают процесс учебы предельно комфортным. В конце курсов выдается сертификат, подтверждающий знания и навыки.
переменных в C: все, что вам нужно знать
Именование всегда было важной частью технологии и всего, что с ней связано. Точно так же программирование решения технической проблемы также включает в себя присвоение имен. Стоит ли спрашивать как? Вот где вы должны встретить переменные и типы данных.
В этом руководстве о переменных в программировании на языке C вы узнаете о принятых соглашениях об именах и о том, как именно переменные в языке C работают в режиме реального времени.
Что такое переменные в C?
В языке программирования C переменная — это определяемое пользователем или удобочитаемое пользовательское имя, присвоенное ячейке памяти. Переменные содержат значение, которое можно многократно изменять и повторно использовать во время выполнения программы.
Переменная может быть буквой или цифрой и начинаться со знака подчеркивания, но вы не можете объявить ключевое слово в качестве имени переменной.
Теперь, когда вы поняли основное определение переменных в C, перейдите к части объявления.
Объявление переменных в C
Считается, что несколько простых параметров объявляют переменную в языке программирования C. Эти параметры вместе называются синтаксисом.
Для объявления любой переменной в C строго соблюдается следующий синтаксис:
Синтаксис:
<тип данных> <список-переменных>;
Пример:
инт а, б, сумма;
Итак, вы поняли феномен декларации. Теперь сделайте шаг вперед и узнайте, как инициализировать переменные в C после их объявления.
Инициализация переменных в C
Есть два способа использования переменных в C. Чтобы использовать переменные, вы должны либо объявить их, либо инициализировать их на этапе объявления.
Когда объявляется переменная, компиляторы C сохраняют в объявленной переменной случайное или мусорное значение. Если вы не хотите хранить мусорное значение и намереваетесь сохранить выделенное значение в своей переменной, вы можете рассмотреть возможность инициализации вашей переменной допустимым значением.
Ниже описан процесс подробно, но просто.
Синтаксис:
<тип данных> <имя-переменной = значение>;
Вы также можете объявить и инициализировать несколько переменных одновременно, как указано ниже:
Синтаксис:
<тип данных>
Пример:
int а = 10, б = 20, в;
Вы ознакомились с техническим определением, объявлением и инициализацией переменных в C. Теперь у вас важный этап. Существуют правила и нормы для объявления и инициализации переменных в C.
Теперь вы ознакомитесь с правилами и положениями, чтобы процесс обучения был более удобным.
Правила именования переменных в C
Правила и нормывсегда будут упрощать вещи и устранять хаос в большей степени. Точно так же в программировании на C существуют правила именования переменных в C, как указано ниже.
- Имена переменных в C могут содержать только буквы, буквы алфавита, цифры или символы подчеркивания в первой позиции.
- Ни одна переменная в C не должна начинаться со специального символа, пробела или другого символа, кроме цифры, алфавита или символа подчеркивания.
- Никакие ключевые слова не будут считаться переменными.
- Длина идентификатора ограничена 31 символом.
Вы ознакомитесь с несколькими примерами, которые помогут вам понять допустимые имена переменных и недопустимые имена переменных для лучшего понимания.
Недопустимое объявление имен переменных:
Вывод:
Ошибки для всех недопустимых объявлений переменных показаны на изображении ниже.
Теперь, когда вы поняли правила и положения, а также все технические аспекты, связанные с переменными в языке C, единственное, что осталось упустить, — это типы переменных в языке C. Вы подробно изучите их с надлежащими техническими определениями и примерами следующим образом.
Типы переменных в C
Язык Cпоможет вам предоставить широкий спектр разновидностей переменных для различных целей программирования, как описано ниже.
- Локальные переменные
- Глобальные переменные
- Статические переменные
- Внешние переменные
- Автоматические переменные
Вы подробно ознакомитесь с каждым из них.
1. Локальные переменные
Переменные, объявленные внутри функций с ключевым словом local, называются локальными переменными. Область действия локальной переменной находится внутри функции, в которой она объявлена.
Пример:
Выход:
После локальных переменных вы узнаете все о глобальных переменных.
2. Глобальные переменные
Переменные, объявленные вне функций с ключевым словом global, называются глобальными переменными. Доступ к глобальным переменным можно получить с помощью нескольких функций, определенных в программе.
Пример:
Выход:
После глобальных переменных у вас есть статические переменные.
3. Статические переменные
Переменные, объявленные с помощью ключевого слова static, являются статическими переменными, время жизни которых равно времени выполнения программы.
Пример:
Выход:
- В приведенном выше примере вы объявляете статическую переменную «сумма» и инициализируете ее начальное значение нулем.
- После первого вызова функции значение суммы увеличивается на единицу, оставаясь неизменным на протяжении всего времени выполнения программы.
- Значение суммы будет увеличено на единицу для следующего вызова функции и сохранения/отображения нового значения 2.
За статическими переменными следуют внешние переменные.
4. Внешние переменные
Внешние переменные совместно используют переменные нескольких файлов C. Ключевое слово extern используется в языке программирования C для объявления внешних переменных.
Пример:
Объявить внешние переменные в файле с расширением .h (заголовочный файл demo.h)
В файле 1 (демонстрация c): доступ к внешним переменным x и y для выполнения операций сложения путем включения заголовочного файла (демонстрация h).
Выход:
Чтобы получить доступ к одним и тем же внешним переменным x и y во втором файле (demo1.c) для выполнения операции вычитания, вы включаете заголовочный файл (demo.h).
Выход:
Далее у вас есть автоматические переменные в качестве последней разновидности.
5. Автоматические переменные
Переменные, объявленные с ключевыми словами auto, называются автоматическими переменными. Переменные, объявленные внутри блока функций, по умолчанию являются автоматическими переменными. Область действия автоматических переменных находится внутри блока, в котором они объявлены.
Пример:
Выход:
Продвигайтесь по карьерной лестнице в качестве разработчика стека MEAN с помощью программы Full Stack Web Developer — MEAN Stack Master’s Program. Зарегистрируйтесь сейчас!
Следующие шаги
«Структуры данных в C» может быть вашей следующей темой. Итак, вы изучили переменные языка программирования C. Следующими основами будут структуры данных и разновидности структур данных, используемых для различных целей.
Если вы заинтересованы в построении карьеры в области разработки программного обеспечения, не стесняйтесь изучать курсы Simplilearn, которые предоставят вам готовое обучение разработке программного обеспечения, необходимое для достижения успеха сегодня. Возможно, вы ищете более комплексную программу обучения наиболее востребованным сегодня навыкам, инструментам и языкам разработки программного обеспечения? Если да, то наша программа последипломного образования в области разработки полного стека должна быть подходящей для вашей карьеры. Изучите курс и запишитесь скорее.
Если у вас есть какие-либо вопросы относительно учебника «Переменные в C», сообщите нам об этом в разделе комментариев ниже. Наши специалисты свяжутся с вами как можно скорее.
Как объявлять переменные в C
«Переменная — это просто имя, которое присваивается области хранения, поэтому пользователям будет легко получить к ней доступ или прочитать ее в программе. Размер, структура памяти переменной и диапазон значений или набор различных операций, которые могут быть реализованы с переменной, распознаются типом переменной, и каждая переменная уникальна в языке программирования C. Понятно, что переменную, объявленную в программе, можно редактировать в любом месте кода. Именам переменных можно присвоить любую цифру, букву или символ. Поскольку язык C чувствителен к регистру, символы верхнего и нижнего регистра разделены.
Язык программирования C позволяет нам определять различные типы данных, такие как Integer, float, char, string и т. д., которые мы изучим на различных примерах».
Пример # 01
В этом примере мы увидим, как инициализировать целочисленное значение на языке программирования C.
Переменные, которые инициализируются без какого-либо значения, как в строке 3, не определены. Кроме того, значения, которые инициализируются только с помощью NULL. В объявлении переменные могут быть инициализированы (с заданным базовым значением). Постоянное выражение упоминается после знака равенства при инициализации; как вы можете видеть на изображении выше в 4-й строке, переменная «a» инициализируется значением 10 как целое число.
В 5-й строке вызывается команда печати для отображения строки «value of a:» и значения, хранящегося в переменной «a», как показано ниже.
Другим типом данных в C является число с плавающей запятой, представляющее собой значение с плавающей запятой с точностью до одной единицы.
Во второй строке переменная «a» объявлена типа float без какого-либо значения, что означает, что она не определена, и компилятор установит любое мусорное значение в качестве своего базового значения. В следующей строке переменной «а» присваивается десятичное значение «10,58». В 5-й строке записывается команда печати для отображения значения, хранящегося в переменной «a», как показано ниже.
На изображении выше третья строка «int a, b, c» означает, что компилятору необходимо создать целочисленные переменные с именами a, b и c соответственно. Переменные в приведенном выше выражении определены.
Следующая строка присваивает значение «10» переменной a, а следующая строка присваивает значение «20» переменной b. Шестая строка присваивает арифметическую сумму значений переменных a и b третьей переменной c.
В 7-й строке записана команда печати для отображения строки «value of c:» с целочисленным значением, хранящимся в c.
Теперь мы рассмотрим другой тип переменных, представляющий собой массив целых чисел. Синтаксис для объявления целочисленного массива: int <имя переменной>[размер] = {элементы}, как показано в строке 4 ниже. В следующей строке запускается цикл for с командой печати для отображения всех значений в массиве построчно.
Пример # 02
В этом примере мы узнаем, как объявлять массивы символов со строками, поскольку язык C не поддерживает строковые типы данных.
Здесь в строке 6 тип данных — char, а пустые скобки [] указывают, что размер массива char не определен. Справа от строки ‘=’ создается строка «Привет». Размер строки равен 6, с 5 буквами и нулевым символом в конце (\0), который не виден, чтобы указать конец строки. Эта строка хранится в переменной «a» типа char. В следующей строке вызывается функция печати для отображения строки, результат показан ниже.
В этом примере мы включили размер char как 50, а строковое значение присвоено переменной «a». Поскольку размер строки меньше определенного размера, вся строка отображается, как показано ниже.
Во второй строке «ABC» присваивается значение 20 как глобальное, что означает, что оно останется постоянным на протяжении всей программы. Новая переменная «s» типа данных char создается с неопределенным базовым значением, так как после нее нет знака «=». Здесь мы использовали функцию fgets, которая позволяет пользователю использовать метод fgets() для ввода определенных символов, за которыми следует клавиша ввода. Если вы хотите сделать массив строкой, вам нужно добавить нулевой символ.
Вы можете использовать строку, разделенную пробелами, в программе, использующей функцию fgets(). Функция fgets() используется для возврата строки. Что отличает ее от функции gets(), так это то, что функция fgets() гарантирует, что считывается не больше символов, чем максимальный размер. После чтения ввода он сохраняет его в переменной «s». Функция puts() используется здесь для отображения введенной строки. Эта функция печатает переданное ей значение при добавлении новой строки в конце, поэтому нам не понадобится «/n» для перехода к следующей строке.
Пример № 03
В этих примерах мы обсудим другой способ объявления переменных с помощью метода «extern». Внешние переменные также могут называться глобальными переменными.