Переменные в c: объявление, инициализация, типы, представление и область видимости.
Переменные в языке C
Переменные в языке C
Переменная в С — именованная область памяти, имеющая определенный тип. Данные, находящиеся в переменной (то есть по ее адресу в памяти), называются значением этой переменной.
Все переменные в языке С должны быть объявлены перед использованием. При использовании в программе ранее не объявленной переменной компилятор выдаст сообщение об ошибке вроде
test.c: In function ‘main’:
test.c:7: error: ‘x’ undeclared (first use in this function)
test.c:7: error: (Each undeclared identifier is reported only once
test.c:7: error: for each function it appears in.)
В этом сообщении указывается имя файла и номер строки, в которой обнаружена ошибка (test.c:5), а также описание ошибки (`x‘ undeclared — объект с именем x не объявлен).
При объявлении переменной мы должны указать ее тип. Существует несколько стандартных типов, но программист может создавать и собственные типы данных.
Как правило, для хранения целых чисел следует использовать тип int, а для действительных чисел — double.
Объявление переменной имеет следующий вид:
<тип переменой> <один или несколько идентификаторов переменных через запятую>;
Например, переменные n и m типа int можно объявить такой строкой:
Переменную x типа double можно объявить такой строкой:
Значения переменных сразу после объявления не определены и являются произвольными.
Предположение о том, что все переменные первоначально имеют нулевые значения, является ошибочным.
Идентификатор переменной — это ее имя, которое должно быть последовательностью букв латинского алфавита, символа подчеркивания и цифр, начинающейся с буквы. Примеры правильных идентификаторов: а, n, Year, CaMeL. Пример неправильного идентификатора: 100ege. Имена переменных чувствительны к регистру букв, то есть Number, number, NUMBER и nUMbeR — это четыре разные переменные.
Допустимо инициализировать переменную прямо в конструкции ее объявления: int n = 10, m = 2;
Переменной можно присвоить новой значение при помощи операции присваивания, например, так:
или
(в последнем примере переменной m записано
Переменные в C++ | Уроки С++
Обновл. 29 Авг 2020 |
Программируя на языке C++, мы создаем, обрабатываем и уничтожаем объекты. Объект — это часть памяти, которая может хранить значение. В качестве аналогии мы можем использовать почтовый ящик, куда мы помещаем информацию и откуда её извлекаем. Все компьютеры имеют оперативную память, которую используют программы. При создании объекта, часть оперативной памяти выделяется для этого объекта. Большинство объектов, с которыми мы будем работать в языке C++, являются переменными.
Переменные
Cтейтмент a = 8;
выглядит довольно простым: мы присваиваем значение 8
переменной a
. Но что такое a
? a
— это переменная, объект с именем.
На этом уроке мы рассмотрим только целочисленные переменные. Целое число — это число, которое можно записать без дроби, например: -11, -2, 0, 5 или 34.
Для создания переменной используется стейтмент объявления (разницу между объявлением и определением переменной мы рассмотрим несколько позже). Вот пример объявления целочисленной переменной a
(которая может содержать только целые числа):
При выполнении этой инструкции центральным процессором часть оперативной памяти выделяется под этот объект. Например, предположим, что переменной a
присваивается ячейка памяти под номером 150. Когда программа видит переменную a
в выражении или в стейтменте, то она понимает, что для того, чтобы получить значение этой переменной, нужно заглянуть в ячейку памяти под номером 150.
Одной из наиболее распространенных операций с переменными является операция присваивания, например:
Когда процессор выполняет эту инструкцию, он понимает её как «поместить значение 8 в ячейку памяти под номером 150».
Затем мы сможем вывести это значение на экран с помощью std::cout:
std::cout << a; // выводим значение переменной a (ячейка памяти под номером 150) на экран
| std::cout << a; // выводим значение переменной a (ячейка памяти под номером 150) на экран |
l-values и r-values
В языке C++ все переменные являются l-values. l-value (в переводе «л-значение», произносится как «ел-валью») — это значение, которое имеет свой собственный адрес в памяти. Поскольку все переменные имеют адреса, то они все являются l-values (например, переменные a
, b
, c
— все они являются l-values). l от слова «left», так как только значения l-values могут находиться в левой стороне в операциях присваивания (в противном случае, мы получим ошибку). Например, стейтмент 9 = 10;
вызовет ошибку компилятора, так как 9 не является l-value. Число 9 не имеет своего адреса в памяти и, таким образом, мы ничего не можем ему присвоить (9 = 9 и ничего здесь не изменить).
Противоположностью l-value является r-value (в переводе «р-значение», произносится как «ер-валью»). r-value — это значение, которое не имеет постоянного адреса в памяти. Примерами могут быть единичные числа (например, 7
, которое имеет значение 7
) или выражения (например, 3 + х
, которое имеет значение х плюс 3
).
Вот несколько примеров операций присваивания с использованием r-values:
int a; // объявляем целочисленную переменную a
a = 5; // 5 имеет значение 5, которое затем присваивается переменной а
a = 4 + 6; // 4 + 6 имеет значение 10, которое затем присваивается переменной а
int b; // объявляем целочисленную переменную b
b = a; // a имеет значение 10 (исходя из предыдущих операций), которое затем присваивается переменной b
b = b; // b имеет значение 10, которое затем присваивается переменной b (ничего не происходит)
b = b + 2; // b + 2 имеет значение 12, которое затем присваивается переменной b
| int a; // объявляем целочисленную переменную a a = 5; // 5 имеет значение 5, которое затем присваивается переменной а a = 4 + 6; // 4 + 6 имеет значение 10, которое затем присваивается переменной а
int b; // объявляем целочисленную переменную b b = a; // a имеет значение 10 (исходя из предыдущих операций), которое затем присваивается переменной b b = b; // b имеет значение 10, которое затем присваивается переменной b (ничего не происходит) b = b + 2; // b + 2 имеет значение 12, которое затем присваивается переменной b |
Давайте детально рассмотрим последнюю операцию присваивания:
Здесь переменная b
используется в двух различных контекстах. Слева b
используется как l-value (переменная с адресом в памяти), а справа b
используется как r-value и имеет отдельное значение (в данном случае, 12
). При выполнении этого стейтмента, компилятор видит следующее:
И здесь уже понятно, какое значение присваивается переменной b
.
Сильно беспокоиться о l-values или r-values сейчас не нужно, так как мы еще вернемся к этой теме на следующих уроках. Всё, что вам нужно сейчас запомнить — это то, что в левой стороне операции присваивания всегда должно находиться l-value (которое имеет свой собственный адрес в памяти), а в правой стороне операции присваивания — r-value (которое имеет какое-то значение).
Инициализация vs. Присваивание
В языке C++ есть две похожие концепции, которые новички часто путают: присваивание и инициализация.
После объявления переменной, ей можно присвоить значение с помощью оператора присваивания (знак равенства =
):
int a; // это объявление переменной
a = 8; // а это присваивание переменной a значения 8
| int a; // это объявление переменной a = 8; // а это присваивание переменной a значения 8 |
В языке C++ вы можете объявить переменную и присвоить ей значение одновременно. Это называется инициализацией (или «определением»).
int a = 8; // инициализируем переменную a значением 8
| int a = 8; // инициализируем переменную a значением 8 |
Переменная может быть инициализирована только после операции объявления.
Хотя эти два понятия близки по своей сути и часто могут использоваться для достижения одних и тех же целей, все же в некоторых случаях следует использовать инициализацию, вместо присваивания, а в некоторых — присваивание вместо инициализации.
Правило: Если у вас изначально имеется значение для переменной, то используйте инициализацию, вместо присваивания.
Неинициализированные переменные
В отличие от других языков программирования, языки Cи и C++ не инициализируют переменные определенными значениями (например, нулем) по умолчанию. Поэтому, при создании переменной, ей присваивается ячейка в памяти, в которой уже может находиться какой-нибудь мусор! Переменная без значения (со стороны программиста или пользователя) называется неинициализированной переменной.
Использование неинициализированных переменных может привести к ошибкам, например:
#include <iostream>
int main()
{
// Объявляем целочисленную переменную a
int a;
// Выводим значение переменной a на экран (a — это неинициализированная переменная)
std::cout << a;
return 0;
}
| #include <iostream>
int main() { // Объявляем целочисленную переменную a int a;
// Выводим значение переменной a на экран (a — это неинициализированная переменная) std::cout << a;
return 0; } |
В этом случае компилятор присваивает переменной a
ячейку в памяти, которая в данный момент свободна (не используется). Затем значение переменной a
отправляется на вывод. Но что мы увидим на экране? Ничего, так как компилятор это не пропустит — выведется ошибка, что переменная a
является неинициализированной. В более старых версиях Visual Studio компилятор вообще мог бы вывести какое-то некорректное значение (например, 7177728
, т.е. мусор), которое было бы содержимым той ячейки памяти, которую он присвоил нашей переменной.
Использование неинициализированных переменных является одной из самых распространенных ошибок начинающих программистов, но, к счастью, большинство современных компиляторов выдадут ошибку во время компиляции, если обнаружат неинициализированную переменную.
Хорошей практикой считается всегда инициализировать свои переменные. Это будет гарантией того, что ваша переменная всегда имеет определенное значение и вы не получите ошибку от компилятора.
Правило: Убедитесь, что все ваши переменные в программе имеют значения (либо через инициализацию, либо через операцию присваивания).
Тест
Какой результат выполнения следующих стейтментов?
int a = 6;
a = a — 3;
std::cout << a << std::endl; // №1
int b = a;
std::cout << b << std::endl; // №2
// В этом случае a + b является r-value
std::cout << a + b << std::endl; // №3
std::cout << a << std::endl; // №4
int c;
std::cout << c << std::endl; // №5
| int a = 6; a = a — 3; std::cout << a << std::endl; // №1 int b = a; std::cout << b << std::endl; // №2 // В этом случае a + b является r-value std::cout << a + b << std::endl; // №3 std::cout << a << std::endl; // №4 int c; std::cout << c << std::endl; // №5 |
Ответы
Чтобы просмотреть ответ, кликните на него мышкой.
Ответ №1
Программа выведет 3
: a – 3 = 3
, что и присваивается переменной a
.
Ответ №2
Программа выведет 3
: переменной b
присваивается значение переменной a
(3
).
Ответ №3
Программа выведет 6
: a + b = 6
. Здесь не используется операция присваивания.
Ответ №4
Программа выведет 3
: значением переменной a
до сих пор является 3
.
Ответ №5
Результатом будет ошибка, так как c
— это неинициализированная переменная.
Оценить статью:
Загрузка…
Поделиться в социальных сетях:
Константы и переменные
Константа, переменная — это базовые понятия в любом языке
программирования. Дадим им определения.
Константа — это величина, которая при
выполнении программы остаётся неизменной.
Переменная — это ячейка памяти для временного
хранения данных. Предполагается, что в процессе выполнения программы
значения переменных могут изменяться.
Описание и инициализация переменных
Прежде чем использовать в программе какую-то переменную, надо дать
ей описание, то есть сказать, какое имя имеет
переменная и каков её тип. Вначале указывается тип переменной, а
затем её имя. Например:
int k; // это
переменная целого типа int
double x; // это
переменная вещественного типа удвоенной точности
Если имеется
несколько переменных одного типа, то допускается их описание через
запятую в одном операторе, например:
double a, b, c;
После описания
переменной её можно использовать, но возникает вопрос: а какое
значение имеет переменная сразу же после её описания? Ответ
таков: в программе на языке C или C++
переменная после описания имеет произвольное значение,
то есть ей просто выделяется свободный участок памяти и на этом всё
заканчивается. В переменной хранится та последовательность двоичных
цифр, которая была там до выделения памяти под эту переменную. Такой
подход таит определённую опасность: можно по ошибке использовать в
выражении переменную, которой не было присвоено ни какое значение:
double x, y;
y = 2 * x;
Так как
переменная x
ни как не была определена, т. е. имела произвольное
значение (чаще всего — это очень большое число или наоборот —
очень маленькое), то и переменная y
получит явно не то значение, на которое рассчитывал
пользователь.
Чтобы избежать такой ошибки, Бьерн Страуструп рекомендует
инициализировать
переменные, то есть не просто выделять память под
переменные, но и задавать им при этом необходимые значения. Например:
double a=3, b=4, c=5;
Инициализация
переменных выполняется один раз на этапе компиляции, она не снижает
скорость работы программы, но при этом уменьшает риск использования
переменной, которая не получила ни какого значения.
Задание и использование констант
Выше было дано определение констант. Теперь рассмотрим работу с
константами более подробно.
Все константы вне зависимости от типа данных можно подразделить на
две категории: именованные константы и константы, которые не имеют
собственного имени. Например:
25
— константа целого
типа;
3.14
— вещественная константа;
‘A’
— символьная
константа.
Все три приведённые здесь константы не имеют имени, они заданы
своим внешним представлением и используются в программе
непосредственно, например так:
int k=25; // переменная
k инициализирована константой — целым
числом 25.
В ряде случаев
константе удобнее дать имя и использовать её далее по имени. Обычно
это делается для математических или физических констант.
В языке C был
единственный способ создания именованных
констант — с помощью
директивы препроцессора #define,
например:
#define PI 3.14
……………
double t;
t = PI * 2; // здесь
использована именованная константа PI, заданная
выше
В
языке C++ появился ещё один способ —
использование константных переменных,
то есть переменных, которые нельзя изменять после инициализации.
Рассмотрим на том же примере:
const double PI=3.14; // здесь
PI —
константная переменная
double t;
t=PI * 2;
В
чём преимущество от использования константных переменных вместо
задания констант с помощью директивы препроцессора #define?
Всё очень просто: при использовании константной переменной компилятор
проверяет правильность задания константы, и если она будет задана
неверно, то будет выдана ошибка именно в операторе, в котором дано
определение константной переменной.
Если использована именованная
константа, заданная директивой препроцессора #define,
то ошибка будет показана только там, где используется константа.
Например:
// в директиве
препроцессора сделаем ошибку:
#define PI ююю
…………..
double t;
t = PI * 2; // в этой строке
компилятор выдаст ошибку,
//
хотя на самом деле ошибка допущена гораздо раньше!
Понятие переменных в программировании на C
Добавлено 25 мая 2019 в 18:54
Сохранить или поделиться
В данной статье обсуждается суть и использование переменных в языке C в контексте встраиваемых приложений.
Многие из нас слышали слово «переменная» на уроках математики задолго до того, как узнали многое о компьютерном программировании. Математическая переменная – это величина, значение которой неизвестно или не ограничено одним числом. Это использование похоже, хотя и не идентично, понятию переменной в C. Два важных различия: во-первых, в математике для представления переменной мы обычно используем букву, такую как x или y, тогда как в C мы часто используем описательное слово или фразу, такую как temperature, MaxValue или Number_of_Samples. Во-вторых, существуют ситуации, в которых мы используем переменную C для определения величины, которая известна и не предназначена для того, чтобы когда-либо отличаться от исходного значения.
Переменные в аппаратном обеспечении
Для программистов переменные удобны и интуитивно понятны. С другой стороны, для вычислительной техники они не имеют реального значения. Микропроцессоры хранят данные в регистрах и ячейках памяти. Это фундаментальное различие между людьми, которые пишут прошивку, и машинами, которые выполняют прошивку, преодолевается языками высокого уровня, такими как C, который обрабатывает различные детали, связанные с переводом между текстовыми переменными и физической реальностью процессора.
Разработчики встраиваемых систем часто работают с 8-разрядными процессорами. В этих устройствах основной размер данных всегда составляет один байт. Память организована в соответствии с байтами, размер регистров составляет один байт, а сам CPU предназначен для обработки 8-разрядных данных. Это довольно неудобное ограничение, поскольку во многих ситуациях значение переменной будет превышать максимальное значение 8-разрядного числа.
В итоге все ваши тщательно определенные, грамотно названные переменные на C заканчиваются битами в памяти (или в регистрах)
Язык C не ограничивает размер переменной до 8 бит, даже когда вы работаете с 8-разрядным процессором. Это означает, что одна переменная в вашей прошивке может соответствовать нескольким регистрам или ячейкам памяти в аппаратном обеспечении. «Ручное» управление многобайтовыми переменными (т.е. через язык ассемблера) не является моей забавой, но компиляторы не возражают против этого, и они выполняют свою работу очень хорошо.
Определение переменных
Первым шагом в использовании переменной является определение этой переменной. Основными компонентами определения переменной являются тип и имя.
Существует много типов переменных; полный список, а также подробности аппаратной реализации будут зависеть от того, какой компилятор вы используете. Вот некоторые типы:
char
: однобайтовое целое значение со знаком;int
: двух- или четырехбайтовое целое значение со знаком;long
: четырехбайтовое целое значение со знаком;float
: четырехбайтовое значение, которое может иметь числа после десятичной запятой – другими словами, оно не ограничивается целыми числами;bit
: значение переменной может быть ноль или единица.
Это наглядное представление о том, как последовательность битов интерпретируется по-разному, в зависимости от того, интерпретируется ли переменная как со знаком (с использованием двоичной записи) или без знака.
Следующий код показывает определения переменных, которые состоят только из базового типа и имени (более технический способ ссылка на имя – это «идентификатор»):
int ADC_result;
char ReceivedByte;
float Reference_Voltage;
Инициализация переменной
Во многих случаях хорошей идеей является присвоение переменной начального значения. Это облегчает отладку, и это обязательно, если переменная будет использоваться до того, как ей будет присвоено известное значение. Вы можете инициализировать переменную в определении или в другом месте вашего кода, но включение начального значения в определение – это хороший способ сохранить ваш код организованным и выработать привычку последовательной инициализации, когда это необходимо.
Вот примеры определений переменных, которые включают в себя инициализацию:
int ADC_result = 0;
char ReceivedByte = 0x00;
float Reference_Voltage = 2.4;
Настраиваемые определения переменных
Существуют другие различные ключевые слова, которые могут быть включены в определение переменной. Они используются для более точного определения характера переменной или для инструкций компилятору о том, как реализовать переменную в аппаратном обеспечении.
Следующие ключевые слова могут оказаться полезными в ваших проектах по разработке прошивок:
unsigned
: Как вы могли догадаться, это говорит компилятору интерпретировать переменную как значение без знака, а не как значение со знаком. Я определяю большинство переменных как беззнаковые, потому что мне редко нужны отрицательные числа.const
: Классификатор типаconst
указывает компилятору, что значение переменной не должно изменяться. Как я уже упоминал в начале статьи, иногда значение «переменной» в C не является переменной. Если вы допустите ошибку в своем коде и попытаетесь изменить значение переменнойconst
, компилятор выдаст ошибку.volatile
: Сложные компиляторы не просто берут исходный код и напрямую переводят его в собранную прошивку. Они также пытаются заставить код работать более эффективно, и этот процесс называется «оптимизацией». Однако время от времени это может испортить ваш день, потому что компилятор оптимизирует только на основе кода и не может учитывать аппаратные события, которые взаимодействуют с вашим кодом. Когда переменная имеет спецификатор типаvolatile
, компилятор знает, что он должен быть осторожен с оптимизациями, которые связаны с этой переменной.
Прерывание может привести к изменению значения переменной так, как этого не ожидает компилятор, и это может привести к проблемной оптимизации- типы памяти, такие как
xdata
,idata
иcode
: Эти ключевые слова заставляют компилятор размещать переменную в определенной части памяти микропроцессора. Тип памятиcode
особенно удобен: ресурсы оперативной памяти RAM часто гораздо более ограничены, чем энергонезависимая память программы, а тип памятиcode
позволяет использовать дополнительную память программы для хранения данных, которые используются в вашей программе, но никогда не изменяются.
Вот некоторые примеры:
// переменная принимает значения в диапазоне от 0 до 255
unsigned char UART_byte;
const float PI = 3.14159;
// содержимое регистра может изменяться аппаратным обеспечением,
// поэтому мы используем квалификатор volatile, чтобы избежать
// оптимизаций, которые могли бы заставить программу игнорировать
// события, генерируемые аппаратным обеспечением.
volatile unsigned char ADC_Register;
unsigned char code CalibrationValue = 78;
Использование своих переменных
О том, как использовать переменные после того, как они были определены, можно сказать немного. На самом деле, что касается самой переменной, определение является большей частью работы. После этого вы просто включаете идентификатор переменной в математические операции, циклы, вызовы функций и так далее. Хороший компилятор будет не только обрабатывать детали аппаратной реализации, но и искать способы оптимизации кода с учетом скорости выполнения или размера программы.
Возможно, самая распространенная ошибка, связанная с использованием переменных, – это переполнение. Это относится к ситуации, в которой значение, присвоенное переменной, находится за пределами числового диапазона, связанного с типом данных переменной. Вы должны подумать обо всех возможных сценариях, связанных с данной переменной, а затем выбрать соответствующий тип данных.
Заключение
Основные возможности переменных, предоставляемые языком C, интуитивно понятны и просты, но есть немало деталей, которые помогут вам сделать встраиваемое приложение более надежным и эффективным. Если у вас есть какие-либо вопросы, связанные с переменными C, не стесняйтесь задавать их в комментариях, и мы постараемся включить соответствующую информацию в будущие статьи.
Оригинал статьи:
Теги
MCUВысокоуровневые языки программированияВычисления во встраиваемых системахМикроконтроллерРазработка ПО для встраиваемых системЯзык C
Сохранить или поделиться
Работа с переменными на Си. Часть 2
Сегодня мы продолжаем говорить о работе с переменными на языке Си и знакомится с примерами будем в уже привычном вам формате «марафон» =). Особое внимание уделим работе с файлами. Что же, вперёд!
Для двух целых и одной дробной переменной задать случайные значения из диапазона [-72; -63]. Вывести переменные и их значения в файл output.txt в строчку.
И вот код:
#include <stdio.h> #include <stdlib.h> int main(void) { int x, y; double z; x = -72 + rand() % (-63 + 72 + 1); y = -72 + rand() % (-63 + 72 + 1); z = -72 + rand() % (-63 + 72 + 1); FILE * output; output = fopen("output.txt", "w"); fprintf(output, "%d,%d,%lf", x, y, z); fclose(output); return EXIT_SUCCESS; }
Новые команды и выражения:
-72 + rand() % (-63 + 72 + 1) — выражения для задания «рандомного» значения в промежутке от -72 до -63. Что бы лучше понять как задаётся период, советую самим поэкспериментировать.
FILE * output; — если точно, то создаётся ссылка на файл, тип ссылки FILE, но проще — объявим переменную, которой назовём рабочий файл.
fopen(,) — с помощью этой команды (как вы догадались) открываем файл, который у нас называется «output.txt». Через запятую указывается параметр (в нашем случае «w»). «w» и «r» — два основных параметра, один для записи, другой для чтения. Более детально о функции и параметрах тут.
fclose() — команда закрытия файла, не забывайте её прописывать после работы с файлом.
Побежали дальше!
В файле data.txt на первой строке записаны пять символов, на второй строке — три целых числа. Объявить необходимое количество переменных и записать в них значения из файла. Вывести на экран в строчку все переменные и их значения. Найти и вывести на экран среднее арифметическое значение всех целых переменных.
Код:
#include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void) { SetConsoleCP(1251); SetConsoleOutputCP(1251); FILE * data; data=fopen("data.txt", "r"); char sim1, sim2, sim3, sim4, sim5; int ch2, ch3, ch4, arf; fscanf(data, "%c%c%c%c%c%d%d%d", &sim1, &sim2, &sim3, &sim4, &sim5, &ch2, &ch3, &ch4); printf("%c\t%c\t%c\t%c\t%c\t%d\t%d\t%d\n", sim1, sim2, sim3, sim4, sim5, ch2, ch3, ch4); arf= (ch2+ch3+ch4)/3; printf("Среднее арифметическое равно %d", arf); fclose(data); return EXIT_SUCCESS; }
Сразу скажу что команды SetConsoleCP(1251) и SetConsoleOutputCP(1251) из библиотеки нужны только для того, чтобы консоль поняла кириллицу и вывела не «абра-кадабру», а читабельный текст.
Больше тут нет ничего нового. И алгоритм банален: открываем файл, считываем последовательно символьные переменные, затем считываем числа. Далее выводим в консоль их среднее арифметическое значение. Следует отметить, что среднее арифметическое у нас имеет тип integer (целочисленный).
Файл, из которого выводим, выглядит так:
Следующий пример.
В файле data.txt на первой строке записаны два целых числа, на второй строке — три дробных числа. Прочитав файл, с помощью тернарных операций найти наибольшее из целых чисел и наименьшее из дробных. Результаты вывести на экран.
Код:
#include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void) { SetConsoleCP(1251); SetConsoleOutputCP(1251); FILE*data; data = fopen("data.txt", "r"); int max, a, b; double min, c, d, e; fscanf(data, "%d%d%lf%lf%lf", &a, &b, &c, &d, &e); max=(a > b) ? a : b; min=(d < e) ? d : e; min=(min < c) ? min : c; printf("Максимально среди целых равно %d\nМинимально среди дробных равно %lf", max, min); fclose(data); return EXIT_SUCCESS; }
Тернарные операции — это своего рода замена условия if
Форма записи тернарной операции в Си : «условие» ? «выражение 1» : «выражение 2». Если условие истинно, то выполняется выражение 1, иначе (условие ложно) выполняется выражение 2. Более говорить об этом примере нечего.
Бежим дальше.
Объявить необходимое количество переменных и задать им начальные значения с клавиатуры. Вычислить результат выражения и вывести его на экран. Учесть допустимости значений переменных.
= * ( −10) / ( −10) + ( / ( +1))
Код:
#include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { int d, z, b, x, y; double l; scanf("%d%d%d", &d, &z, &b); x = (z * (d + 10)) / (abs(b - 10)); y = (log(b)) / (z = 1); l = x + y; printf("%.4lf", l); return EXIT_SUCCESS; }
В этом примере мы познакомимся с библиотекой math. h и её двумя командами log() и abs(). log() — натуральный логарифм, abs() — модуль числа. Не думаю, что здесь требуется какое либо объяснение действий. Только замечу что d, z, и b мы задаём в integer, а l в double.
И последнее на сегодня:
Установить соответствия между символами и чувствами. Ввести с клавиатуры символ и вывести на экран соответствующее чувство. ‘%’ — зрение, ‘#’ — осязание, ‘*’ — обоняние, ‘&’ — слух, ‘@’ — вкус. Выполнить программу с использованием оператора switch.
Код:
#include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void) { SetConsoleCP(1251); SetConsoleOutputCP(1251); char x; scanf("%c", &x); switch(x) { case ('#'): printf("осязание"); break; case ('@'): printf("вкус"); break; case ('*'): printf("обоняние"); break; case ('%'): printf("зрение"); break; case ('&'): printf("слух"); break; default : ;break; } return EXIT_SUCCESS; }
Тут всё тоже несложно. Switch — по результату схож с if else. То есть мы предоставляем ему переменную (x), он её сравнивает с каждым пунктом и выводит, если находит совпадение. default — подразумевает все остальные случаи, кроме описанных выше в case. break — сама по себе эта команда позволяет выйти из цикла, и в данном случае, благодаря ей мы выходим из switch.
Советую вам посмотреть еще и 1 урок по работе с переменными в Си.
Вот и всё. Пишите вопросы, комментируйте, всем ответим.
Все исходники без файлов txt.
Скачать исходники задачи — 1
Скачать исходники задачи — 2
Скачать исходники задачи — 3
Скачать исходники задачи — 4
Скачать исходники задачи — 5
Поделиться ссылкой:
Похожее
НОУ ИНТУИТ | Лекция | Основы языка Си: структура Си-программы, базовые типы и конструирование новых типов, операции и выражения
Аннотация: Лекция посвящена введению в язык Си. Объясняются общие принципы построения Си-программы: разбиение проекта на h- и c-файлы, т.е. разделение интерфейса и реализации, использование препроцессора. Приводятся базовые типы языка Си, конструкции массива и указателя, позволяющие строить новые типы, а также модификаторы типов. Рассматриваются всевозможные операции и выражения языка Си.
Основы языка Си
В настоящее время язык Си и объектно-ориентированные языки
его группы (прежде всего C++, а также Java и C#) являются основными
в практическом программировании. Достоинство языка Си — это,
прежде всего, его простота и лаконичность. Язык Си легко учится.
Главные понятия языка Си, такие, как статические и локальные
переменные, массивы, указатели, функции и т.д., максимально приближены
к архитектуре реальных компьютеров. Так, указатель — это просто адрес
памяти, массив — непрерывная область памяти, локальные переменные — это
переменные, расположенные в аппаратном стеке,
статические — в статической памяти. Программист,
пишущий на Си, всегда достаточно точно представляет себе, как
созданная им программа будет работать на любой конкретной архитектуре.
Другими словами, язык Си предоставляет программисту
полный контроль над компьютером.
Первоначально язык Си задумывался как заменитель Ассемблера
для написания операционных систем. Поскольку Си — это язык
высокого уровня, не зависящий от конкретной архитектуры, текст
операционной системы оказывался легко переносимым с одной платформы на
другую. Первой операционной системой, написанной практически целиком на
Си, была система Unix. В настоящее время почти все используемые операционные системы написаны на Си. Кроме того, средства программирования, которые операционная система
предоставляет разработчикам прикладных программ (так называемый API —
Application Program Interface), — это наборы системных функций на языке Си.
Тем не менее, область применения языка Си не ограничилась
разработкой операционных систем. Язык Си оказался очень удобен
в программах обработки текстов и изображений, в научных и инженерных расчетах.
Объектно-ориентированные языки на основе Си
отлично подходят для программирования в оконных средах.
В данном разделе будут приведены лишь основные понятия языка
Си (и частично C++). Это не заменяет чтения полного учебника по
Си или C++, например, книг [6] и [8].
Мы будем использовать компилятор C++ вместо Cи. Дело в том,
что язык Си почти целиком входит в C++, т.е. нормальная программа,
написанная на Си, является корректной C++ программой. Слово
«нормальная» означает, что она не содержит неудачных конструкций,
оставшихся от ранних версий Си и не используемых в настоящее
время. Компилятор C++ предпочтительнее, чем компилятор Си, т.к.
он имеет более строгий контроль ошибок. Кроме того, некоторые
конструкции C++, не связанные с объектно-ориентированным программированием,
очень удобны и фактически являются улучшением
языка Си. Это, прежде всего, комментарии //, возможность описывать
локальные переменные в любой точке программы, а не только в начале блока,
и также задание констант без использования оператора #define препроцесора.
Мы будем использовать эти возможности
C++, оставаясь по существу в рамках языка Си.
Структура Си-программы
Любая достаточно большая программа на Си (программисты используют термин проект ) состоит из файлов. Файлы транслируются Си-компилятором независимо друг от друга и затем объединяются программой-построителем задач, в результате чего создается файл с программой, готовой к выполнению. Файлы, содержащие тексты Си-программы, называются исходными.
В языке Си исходные файлы бывают двух типов:
- заголовочные, или h-файлы;
- файлы реализации, или Cи-файлы.
Имена заголовочных файлов имеют расширение » .h «. Имена файлов реализации имеют расширения » .c » для языка Си и » .cpp «, » .cxx » или » .cc » для языка C++.
К сожалению, в отличие от языка Си, программисты не сумели договориться о едином расширении имен для файлов, содержащих программы на C++. Мы будем использовать расширение » .h » для заголовочных файлов и расширение » .cpp » для файлов реализации.
Заголовочные файлы содержат только описания. Прежде всего, это прототипы функций. Прототип функции описывает имя функции, тип возвращаемого значения, число и типы ее аргументов. Сам текст функции в h-файле не содержится. Также в h-файлах описываются имена и типы внешних переменных, константы, новые типы, структуры и т.п. В общем, h-файлы содержат лишь интерфейсы, т.е. информацию, необходимую для использования программ, уже написанных другими программистами (или тем же программистом раньше). Заголовочные файлы лишь сообщают информацию о других программах. При трансляции заголовочных файлов, как правило, никакие объекты не создаются. Например, в заголовочном файле нельзя определить глобальную переменную. Строка описания
определяющая целочисленную переменную x, является ошибкой. Вместо этого следует использовать описание
означающее, что переменная x определена где-то в файле реализации (в каком — неизвестно). Слово extern (внешняя) лишь сообщает информацию о внешней переменной, но не определяет эту переменную.
Файлы реализации, или Cи-файлы, содержат тексты функций и определения глобальных переменных. Говоря упрощенно, Си-файлы содержат сами программы, а h-файлы — лишь информацию о программах.
Представление исходных текстов в виде заголовочных файлов и файлов реализации необходимо для создания больших проектов, имеющих модульную структуру. Заголовочные файлы служат для передачи информации между модулями. Файлы реализации — это отдельные модули, которые разрабатываются и транслируются независимо друг от друга и объединяются при создании выполняемой программы.
Файлы реализации могут подключать описания, содержащиеся в заголовочных файлах. Сами заголовочные файлы также могут использовать другие заголовочные файлы. Заголовочный файл подключается с помощью директивы препроцессора #include. Например, описания стандартных функций ввода-вывода включаются с помощью строки
(stdio — от слов standard input/output). Имя h-файла записывается в угловых скобках, если этот h-файл является частью стандартной Си-библиотеки и расположен в одном из системных каталогов. Имена h-файлов, созданных самим программистом в рамках разрабатываемого проекта и расположенных в текущем каталоге, указываются в двойных кавычках, например,
Препроцессор — это программа предварительной обработки текста
непосредственно перед трансляцией. Команды препроцессора называются директивами. Директивы препроцессора содержат символ диез # в начале
строки. Препроцессор используется в основном для подключения h-файлов.
В Си также очень часто используется директива #define для задания
символических имен констант. Так, строка
задает символическое имя PI для константы 3.14159265. После этого
имя PI можно использовать вместо числового значения. Препроцессор
находит все вхождения слова PI в текст и заменяет их на константу.
Таким образом, препроцессор осуществляет подмену одного текста другим.
Необходимость использования препроцессора всегда свидетельствует о
недостаточной выразительности языка. Так, в любом Ассемблере средства
препроцессирования используются довольно интенсивно. В Си по возможности
следует избегать чрезмерного увлечения командами препроцессора — это
затрудняет понимание текста программы и зачастую ведет к трудно
исправляемым ошибкам. В C++ можно обойтись без использования директив #define для задания констант. Например, в C++ константу PI можно задать
с помощью нормального описания
const double PI = 3.14159265;
Это является одним из аргументов в пользу применения компилятора
C++ вместо Си даже при трансляции программ, не содержащих конструкции
класса.
Типы переменных, используемых в Быстрых командах
В программе «Быстрые команды» переменные можно создавать автоматически или вручную.
Волшебные переменные
В ходе выполнения любой быстрой команды выходные данные каждого действия автоматически доступны в качестве Волшебной переменной. В отличие от создаваемых вручную переменных, для использования Волшебных переменных не требуется сохранять выходные данные действия для последующего использования. Просто коснитесь кнопки «Волшебная переменная» и выберите выходные действия любого действия для использования в качестве переменной.
Работая с Волшебными переменными, Вы можете перейти в режим редактора быстрой команды: он отображает выходные данные всех действий, составляющих команду, как доступные для выбора переменные. Последующее действие может получать входные данные из выходных данных предыдущего действия. Значки Волшебных переменных содержат значки тех действий, в результате которых они были сгенерированы, что упрощает понимание структуры быстрой команды.
Однако по-настоящему волшебными эти переменные делает то, что Вы можете менять их тип. Просто коснитесь Волшебной переменной, чтобы изменить ее формат и указать, какие из содержащихся в ней сведений требуется использовать. Дополнительные сведения см. в разделе Настройка переменных в программе «Быстрые команды».
В большинстве случаев использование Волшебных переменных упрощает создание быстрой команды, являясь предпочитаемым способом работы с переменными по сравнению с их созданием вручную.
Создание переменных вручную
Можно добавлять созданные вручную переменные в быструю команду, используя действия «Задать переменную» или «Добавить в переменную».
Действие «Задать переменную» позволяет задать новую переменную с нуля или перезаписать содержимое ранее сохраненной переменной.
Действие «Добавить в переменную» позволяет добавить несколько элементов содержимого в одну переменную путем последовательного добавления данных по мере выполнения команды. При этом данные сохраняются в виде упорядоченного списка.
При задании переменных вручную они обычно получаются более длинными, вследствие чего их труднее читать. Обычно создавать переменные вручную не требуется, так как Волшебные переменные обладают практически такой же функциональностью и при этом — большей емкостью. Например, Вы можете воспроизвести большую часть возможностей, предоставляемых действием «Добавить в переменную», поместив переменные в действие «Список», а затем использовав их для извлечения требуемого содержимого.
Пошаговые инструкции о том, как добавлять переменные в быстрые команды, см. в разделе Использование переменных в программе «Быстрые команды».
Некоторые приложения, службы и контент доступны не во всех странах и регионах.
C Переменные, константы и литералы
Переменные
В программировании переменная — это контейнер (область хранения) для хранения данных.
Для обозначения области хранения каждой переменной должно быть присвоено уникальное имя (идентификатор). Имена переменных — это просто символическое представление области памяти. Например:
int playerScore = 95;
Здесь playerScore — это переменная типа int
. Здесь переменной присвоено целочисленное значение 95
.
Значение переменной можно изменить, отсюда и имя переменной.
char ch = 'а';
// какой-то код
ch = 'l';
Правила присвоения имени переменной
- Имя переменной может содержать только буквы (как прописные, так и строчные), цифры и символ подчеркивания.
- Первая буква переменной должна быть буквой или знаком подчеркивания.
- Нет правила относительно длины имени (идентификатора) переменной. Однако в некоторых компиляторах могут возникнуть проблемы, если имя переменной длиннее 31 символа.
Примечание: Вы всегда должны пытаться давать значащие имена переменным. Например: firstName
— лучшее имя переменной, чем fn
.
C — язык со строгой типизацией. Это означает, что тип переменной не может быть изменен после того, как он объявлен. Например:
int number = 5; // целочисленная переменная
число = 5,5; // ошибка
двойной номер; // ошибка
Здесь тип переменной number — int
.Этой переменной нельзя присвоить значение с плавающей точкой (десятичное) 5.5 . Кроме того, вы не можете переопределить тип данных переменной на double
. Кстати, чтобы хранить десятичные значения в C, вам нужно объявить его тип либо double
, либо float
.
Посетите эту страницу, чтобы узнать больше о различных типах данных, которые может хранить переменная.
Литералы
Литералы — это данные, используемые для представления фиксированных значений. Их можно использовать прямо в коде.Например: 1 , 2,5 , ‘c’ и т. Д.
Здесь 1 , 2,5
и ‘c’ — литералы. Почему? Вы не можете присвоить этим условиям разные значения.
1. Целые числа
Целое число — это числовой литерал (связанный с числами) без дробной или экспоненциальной части. В программировании на C есть три типа целочисленных литералов:
- десятичное (основание 10)
- восьмеричный (основание 8)
- шестнадцатеричный (основание 16)
Например:
Десятичный: 0, -9, 22 и т. Д. Восьмеричный: 021, 077, 033 и т. Д. Шестнадцатеричный: 0x7f, 0x2a, 0x521 и т. Д.
В программировании на C восьмеричное начинается с 0 , а шестнадцатеричное — с 0x .
2. Литералы с плавающей запятой
Литерал с плавающей запятой — это числовой литерал, имеющий либо дробную, либо экспоненциальную форму. Например:
-2,0 0,0000234 -0,22E-5
Примечание: E-5 = 10
-5
3. Персонажи
Символьный литерал создается заключением одного символа в одинарные кавычки. Например: ‘a’ , ‘m’ , ‘F’ , ‘2’ , ‘}’ и т. Д.
4. Последовательность побега
Иногда необходимо использовать символы, которые нельзя ввести или которые имеют особое значение в программировании на C. Например: новая строка (ввод), табуляция, вопросительный знак и т. Д.
Для использования этих символов используются escape-последовательности.
Последовательности побега | Персонаж |
---|---|
\ b | Backspace |
\ f | Подача формы |
\ п | Новая строка |
| Возврат |
\ т | Горизонтальный выступ |
\ v | Вертикальный язычок |
\ | Обратная косая черта |
\ ' | Одинарные кавычки |
\ " | Двойные кавычки |
\? | Вопросительный знак |
\ 0 | Пустой символ |
Например: \ n
используется для новой строки.Обратная косая черта \
вызывает переход от обычного способа обработки символов компилятором.
5. Строковые литералы
Строковый литерал — это последовательность символов, заключенная в двойные кавычки. Например:
"хорошо" // строковая константа "" // константа пустой строки "" // строковая константа из шести пробелов "x" // строковая константа, состоящая из одного символа. "Земля круглая \ n" // выводит строку с новой строкой
Константы
Если вы хотите определить переменную, значение которой нельзя изменить, вы можете использовать ключевое слово const
.Это создаст константу. Например,
const двойной PI = 3,14;
Обратите внимание, мы добавили ключевое слово const
.
Здесь PI — символическая константа; его значение не может быть изменено.
const двойной PI = 3,14;
PI = 2,9; // Ошибка
Вы также можете определить константу с помощью директивы препроцессора #define
. Мы узнаем об этом в руководстве по макросам C.
Переменные в C ++
Переменная — это имя, связанное со значением, которое можно изменить.Например, когда я пишу int num = 20;
здесь имя переменной — num, которое связано со значением 20, int — это тип данных, который представляет, что эта переменная может содержать целочисленные значения. Мы рассмотрим типы данных в следующем уроке. В этом уроке мы обсудим переменные.
Синтаксис объявления переменной в C ++
тип_данных имя_переменной = значение1, имя_переменной = значение2;
Например:
int num1 = 20, num2 = 100;
Мы также можем записать это так:
int num1, num2; число1 = 20; число2 = 100;
Типы переменных
Переменные можно разделить на категории в зависимости от их типа данных.Например, в приведенном выше примере мы видели переменные целочисленного типа. Ниже приведены типы переменных, доступные в C ++.
int : Этот тип переменных содержит целочисленное значение.
char : содержит символьные значения, такие как «c», «F», «B», «p», «q» и т. Д.
bool : содержит логическое значение true или false.
double : значение с плавающей запятой двойной точности.
с плавающей запятой : значение с плавающей запятой одинарной точности.
Типы переменных в зависимости от их области действия
Прежде чем идти дальше, давайте сначала обсудим, что такое область действия. Когда мы обсуждали программу Hello World, мы видели фигурные скобки в программе следующим образом:
int main { // Какой-то код }
Любая переменная, объявленная внутри этих фигурных скобок, имеет область действия, ограниченную этими фигурными скобками. Если вы объявите переменную в функции main () и попытаетесь использовать эту переменную вне функции main (), вы получите ошибку компиляции.
Теперь, когда мы поняли, что такое область действия. Перейдем к типам переменных в зависимости от области видимости.
1. Глобальная переменная
2. Локальная переменная
Глобальная переменная
Переменная, объявленная вне какой-либо функции (включая основную), называется глобальной переменной. Глобальные переменные имеют свою область действия по всей программе, к ним можно получить доступ в любом месте программы, в основном, в пользовательской функции, где угодно.
Давайте рассмотрим пример, чтобы понять это:
Пример глобальной переменной
Здесь у нас есть глобальная переменная myVar
, объявленная вне main.Мы дважды обращались к переменной в функции main () без каких-либо проблем.
#includeиспользуя пространство имен std; // Это глобальная переменная char myVar = 'A'; int main () { cout << "Значение myVar:" << myVar << endl; myVar = 'Z'; cout << "Значение myVar:" << myVar; возврат 0; }
Выход:
Значение myVar: A Значение myVar: Z
Локальная переменная
Локальные переменные объявляются в фигурных скобках любой пользовательской функции, основной функции, циклов или любых управляющих операторов (if, if-else и т. Д.), И их область действия ограничена этими фигурными скобками.
Пример локальной переменной
#includeиспользуя пространство имен std; char myFuncn () { // Это локальная переменная char myVar = 'A'; } int main () { cout << "Значение myVar:" << myVar << endl; myVar = 'Z'; cout << "Значение myVar:" << myVar; возврат 0; }
Вывод:
Ошибка времени компиляции, потому что мы пытаемся получить доступ к переменной myVar
вне ее области.Область действия myVar
ограничена телом функции myFuncn ()
внутри этих фигурных скобок.
Могут ли глобальная и локальная переменные иметь одинаковое имя в C ++?
Давайте посмотрим пример с одинаковыми именами глобальной и локальной переменной.
#includeиспользуя пространство имен std; // Это глобальная переменная char myVar = 'A'; char myFuncn () { // Это локальная переменная char myVar = 'B'; return myVar; } int main () { cout << "Вызов функции:" << myFuncn () << endl; cout << "Значение myVar:" << myVar << endl; myVar = 'Z'; cout << "Вызов функции:" << myFuncn () << endl; cout << "Значение myVar:" << myVar << endl; возврат 0; }
Выход:
Функциональный вызов: B Значение myVar: A Функциональный вызов: B Значение myVar: Z
Как видите, когда я изменил значение myVar
в основной функции, он изменил только значение глобальной переменной myVar
, потому что область действия локальной переменной myVar
ограничена функцией myFuncn ()
.
переменных C
Резюме : в этом руководстве вы узнаете о переменных C , которые позволяют вам манипулировать данными в вашей программе.
Что такое переменная?
Переменная - это значимое имя места хранения данных в памяти компьютера. При использовании переменной вы ссылаетесь на адрес памяти компьютера.
Именование переменных
У каждой переменной есть имя, которое называется именем переменной. Имя переменной также называется идентификатором.В языке C имя переменной должно соответствовать следующим правилам:
- Имя переменной может содержать буквы, цифры и знак подчеркивания (
_
). Первым символом имени переменной должна быть буква или знак подчеркивания (_
). Однако вам следует избегать использования подчеркивания (_
) в качестве первой буквы, потому что это может противоречить стандартным системным переменным. - Длина имени переменной в Visual C ++ может составлять до 247 символов, но обычно достаточно 31 символа.
- Имя переменной не должно совпадать с зарезервированными словами или ключевыми словами C.
В следующей таблице показаны ключевые слова в C:
auto | break | int | return | ||
char16 | регистр | подписанный | |||
const | продолжить | короткий | статический | ||
по умолчанию | |||||
по умолчанию | 9 размер9 | ||||
двойной | еще | struct | штуцер | ||
enum | extern | extern | для | без знака | в то время как |
goto | если | изменчивые | летучие условные обозначения |
общие соглашения об именах переменных:
- Используйте описательное имя переменной.
- Начинается со строчной буквы.
- Разделите слова в имени переменной подчеркиванием (
_
), например,min_height
или смешайте нижний и верхний регистры, например,minHeight.
Обратите внимание, что переменная C чувствительна к регистру, поэтому min_height
и Min_height
- разные переменные.
Объявление переменных C
Перед использованием переменной ее необходимо объявить. Чтобы объявить переменную, вы указываете ее тип данных и ее имя.Оператор объявления переменной всегда заканчивается точкой с запятой (;
). Например:
Если несколько переменных используют один и тот же тип данных, вы можете объявить их в одном операторе следующим образом:
Когда вы объявляете переменную:
- C резервирует место в памяти для хранения значения переменной . Объем памяти зависит от типа данных, связанных с переменной.
- C также выделяет пробелы, которые связаны с именем переменной и уникальным адресом.
Переменная может быть объявлена в любой точке программы перед ее использованием. Рекомендуется объявлять переменную ближе всего к ее первому месту использования. В C объявление переменной также означает ее определение.
Инициализация переменных C
Для удобства C позволяет инициализировать переменную при ее объявлении, например:
int x = 10; char ch = 'а'; |
Рекомендуется поместить инициализированные переменные в отдельную строку и, если возможно, добавить описательный комментарий, чтобы объяснить, почему переменная инициализируется определенным значением.Например:
int speed = 50; / * минимальная скорость на шоссе * / |
Не делайте этого:
int speed = 50, limit, x, y; |
Назначение переменных C
Чтобы присвоить значение переменной, вы можете либо инициализировать ее с помощью объявления, либо использовать оператор присваивания ( =
), чтобы присвоить ей значение. См. Следующий пример:
int x = 10; int y; х = 20; у = х; |
Сначала мы объявили переменную x
и инициализировали ее значение 10
.Затем мы присвоили 20
x
. Затем мы присвоили x
y
, поэтому значение y
равно 20
.
Обратите внимание, что оператор присваивания (=) означает присвоение значения правой части переменной слева. Это не означает равенство.
регистровых переменных
Доступ к регистрам осуществляется быстрее, чем к основной памяти. Поэтому, если у вас есть наиболее часто используемая переменная и требуется быстрый доступ, вы можете поместить переменную в регистры, используя ключевое слово register
.Например:
регистр int i; for (i = 0; i <1000; i ++) { // ... } |
Обратите внимание, что ключевое слово register
работает как директива, т. Е. Не гарантирует выделение регистра для хранения значения переменной. Это выбор компилятора.
внешние переменные
Когда вы разрабатываете программу на C, вы обычно организуете код в файлы заголовков с .h
и файлы исходного кода с расширением .c
.
В файле заголовка у вас может быть следующая строка кода:
Поскольку мы использовали модификатор extern
, мы сообщаем компилятору, что существует целочисленная переменная counter
, определенная где-то еще, чтобы компилятор не выделить память для переменной счетчика . Этот оператор только объявляет переменную
counter .
Каждый раз, когда компилятор видит следующий код в файле исходного кода:
Он выделяет память для переменной counter .Этот оператор определяет переменную счетчика.
В этом руководстве мы познакомили вас с концепцией переменных C, включая объявление, инициализацию и назначение переменных.
- Было ли это руководство полезным?
- Да Нет
Переменные в C - C Programming Tutorial
- Дом
- Учебное пособие по программированию на C
- Переменные в C
Последнее обновление 27 июля 2020 г.
Переменные используются для хранения данных, они названы так, потому что их содержимое может изменяться.C - это строго типизированный язык, это просто означает, что после того, как вы объявите переменную определенного типа данных, вы не сможете изменить тип переменной позже в программе. Напомним, что C предоставляет 4 основных типа:
-
внутренний
-
поплавок
-
двойной
-
символ
Объявление переменных
Прежде чем вы сможете использовать переменную, вы должны сначала ее объявить. Объявление переменной включает в себя указание типа и имени переменной.Всегда помните, что правила именования переменных такие же, как и для именования идентификаторов. Тип и диапазон значений, которые может принимать переменная, зависят от типа переменной. Вот синтаксис объявления переменной.
Синтаксис: тип данных имя_переменной;
Создадим объявленную переменную i
.
int i; // объявление переменной типа int
Здесь i
объявлен как переменная типа int
, поэтому она может принимать только целые значения, вы не можете использовать i
для хранения строковой константы.В 16-битной системной переменной i
может принимать значения от -32768
до 32767
, а в 32-битной системе i
может принимать значения от -2147483648
до 2147483647
.
При желании вы можете объявить несколько переменных одного типа следующим образом:
int x, y, z; // объявление трех переменных x, y и z типа int
Здесь x
, y
и z
относятся к типу int
.
Инициализация переменной
Когда объявлена переменная, она содержит неопределенное значение, также известное как значение мусора.Если вы хотите, вы можете присвоить переменной какое-то начальное значение с помощью оператора присваивания, т.е. ( =
). Присвоение значения переменной называется инициализацией переменной. Вот несколько примеров инициализации переменных:
int a = 12, b = 100; поплавок f = 1,2; char ch = 'а'; двойной d1, d2, d3 = 1,2; |
Примечание: В последнем операторе инициализируется только переменная d3
, переменные d1
и d2
содержат значение мусора.
Пожалуйста, включите JavaScript, чтобы просматривать комментарии от Disqus.
пожаловаться на это объявление
Программируемые переменные и константы C
В этом руководстве вы познакомитесь с программными переменными c и константами .
Переменные программирования C
Фактически переменная - это место в памяти компьютера, где хранятся данные. Проще говоря, мы можем сказать, что переменная - это ящик, в котором мы можем хранить данные.
Каждой переменной дается уникальное имя, которое называется Идентификатор . Таким образом, такие переменные, как num1
, num2
и другие, фактически соответствуют месту в памяти компьютера.
Например:
int num1;
Здесь num1
- переменная целого типа.
Она называется переменной , потому что она может содержать разные значения в разное время.
Например, предположим, что мы присвоили значение 3 num1
, тогда ячейка памяти с именем num1
будет содержать 3, и как только мы присвоим другое значение 5 num1
, значение в ячейке памяти num1
будет перезаписано на 5.
Правила именования переменных
- Первая буква имени переменной должна быть алфавитной (также допускается подчеркивание).
- Переменная может содержать только буквы, цифры и символы подчеркивания.
- Пробелы недопустимы.
- Ключевые слова не могут использоваться в качестве идентификатора для именования переменных.
- Так как C чувствителен к регистру, имя языковой переменной, написанное в верхнем регистре, будет отличаться от нижнего регистра.
Разница между переменной и постоянной
Константы программирования на C
Константы - это выражения с фиксированными значениями, которые не меняются во время выполнения программы.Выражение просто постоянным означает, значение которого нельзя изменить.
Ниже приведены различных типов констант, которые мы можем использовать в C .
1. Целочисленные константы
Целочисленные константы относятся к последовательности цифр без десятичных знаков. Три вида целочисленных констант:
- Десятичные числа, константа: Десятичные числа представляют собой цифры от 0 до 9 со знаком + ve или -ve. Например: 11, -11 и т. Д.
- Восьмеричная константа: Восьмеричные числа - это любая комбинация цифр от 0 до 7 с ведущим 0.Например: 0213, 0123 и т. Д.
- Шестнадцатеричная константа: Шестнадцатеричные числа - это последовательность цифр, предшествующая 0x или 0X. Например: 0xBD23, OX543 и т. Д.
Правила построения целочисленных констант
- Имя целочисленной константы должно состоять как минимум из одной цифры.
- Запятая или пробелы в имени целочисленной константы не допускаются.
- Не должно иметь десятичной точки.
2. Константы с вещественной или плавающей запятой
Это числовые константы с десятичной точкой.Реальные константы далее классифицируются как:
- Дробное число Действительная постоянная: Это набор цифр от 0 до 9 с десятичными точками. Например: 123,3, 0,765 и т. Д.
- Экспоненциальная Действительная постоянная: В экспоненциальной форме константы представлены в двух формах:
Мантисса Показатель E: , где Мантисса является либо целым числом, либо действительной константой, но показатель степени всегда находится в целочисленной форме.
Например, 12345.67 = 1,234567 E4, где E4 = 10 4 .
Правила построения констант с вещественной или плавающей запятой
- Имя действительной константы должно состоять как минимум из одной цифры.
- Запятая или пробелы в имени реальной константы не допускаются.
- Должен иметь десятичную точку.
3. Символьная константа
Символьные константы - это набор букв, заключенный в одинарные кавычки. Например: «A», «f», «i» и т. Д.
Например: «A», «f», «i» и т. Д.
Правила построения символьной константы
- Максимальная длина символьной константы может составлять один символ.
4. Заявленная константа
Так же, как объявление переменной с использованием префикса const, мы можем создавать новые константы, значения которых нельзя изменить после определения.
Например:
const int b = 100;
Это означает, что b
будет иметь постоянное целочисленное значение 100 . Не только целое число, используя префикс, мы также можем объявить символьную константу и строковую константу.
5. Строковая константа
Строковые константы - это последовательность символов, заключенная в двойные кавычки ("").
Например: «Привет»
6. Нумерованная константа
Перечислимая константа создает набор констант из одной строки с использованием ключевого слова enum
.
Синтаксис
перечисление имя_типа {var1, var2, var3};
Здесь var1
, var2
и var3
- это значения перечислимого типа данных type_name
.
По умолчанию var1
, var2
и var3
будут иметь значения 0, 1 и 2.
Используя операторы присваивания, мы можем присвоить любое значение var1
, var2
и var3
.
Посетите операторы программирования C, чтобы узнать о различных операторах, используемых в C.
Например:
перечисление COLOR {КРАСНЫЙ = 5, ЗЕЛЕНЫЙ, БЕЛЫЙ = 8};
Этот код устанавливает красный на 5 и белый на 8.
Элемент без присвоенного значения будет иметь на 1 большее значение, чем предыдущий.В этом случае зеленый будет установлен на 6.
Переменные, константы и ключевые слова в C
В этом руководстве вы узнаете о переменных, константах и ключевых словах в C.
Переменные в C
В типичной программе на C нам приходится выполнять много вычислений. Конечно, некоторые данные будут храниться в разных местах памяти компьютера. Эти ячейки памяти идентифицируются своим адресом, например 56234. Предположим, если программист хочет получить доступ к определенным местоположениям, например, 10 раз в программе, чтобы сохранить другое значение в этом месте.
Так что программисту придется запоминать числовое адресное имя утомительной работой. Итак, чтобы упростить эту работу, мы используем переменные.
Таким образом, переменные - это не что иное, как имена ячеек или адресов памяти, заданные программистом.
Константы в C
Как следует из названия, константы - это значения, которые никогда не изменятся во время выполнения программы. Это сбивает с толку? Попробуем прояснить ситуацию на простом примере.
На рисунке выше (1-й) мы сохранили постоянное значение 3 в позиции x. Имя этого места - x. Это переменная. Мы также можем сохранить другое значение в месте x.
Здесь X = переменная (имя ячейки или адреса памяти)
3 = константа
Попытайтесь разобраться во втором примере самостоятельно, если у вас есть сомнения, оставьте комментарий ниже.
Есть два типа констант
- Первичные константы
- Вторичные константы (мы узнаем их позже)
На этом этапе мы обсудим только первичные константы.Первичные константы бывают трех типов.
- Целочисленные константы
- Действительные константы
- Символьные константы
Давайте обсудим их по порядку.
Целочисленная константа
Да, он будет содержать только целые числа. Помните, что целочисленная константа никогда не будет содержать десятичной точки. Например: 1, 2, -43 и т. Д.
Символьная константа
Это одиночный (запоминающийся) алфавит, число или любой специальный символ, заключенный в кавычки.Например: «+», «1», «а» и т. Д.
Действительная константа или константа с плавающей запятой
Действительная константа может иметь любую цифру, но должна содержать одну десятичную точку. Например: 1,22, -54,5, 3432,13
Типы переменных
Как я сказал ранее, переменная - это имя места в памяти. В этом месте мы можем хранить любую константу, например целое число, символ или вещественное число. Но есть некоторый предел, что целочисленная переменная может хранить только целочисленную константу, символьная переменная может хранить только символьную константу, а реальная переменная может хранить только реальную константу.
Так что вполне очевидные типы переменных аналогичны типам констант. Например: int x = 1;
Здесь «int» - ключевое слово, «x» - целочисленная переменная и может хранить только целочисленную константу, «1» - целочисленная константа.
Правила записи имен переменных
- Имя переменной может содержать буквы, числа и символы подчеркивания.
- Никакой другой специальный символ (кроме подчеркивания) не может использоваться для записи имени переменной.
- Имя переменной должно начинаться либо с подчеркивания, либо с букв.
- Нет места при записи переменных.
Ключевые слова в C
Ключевые слова - это слова, значение которых уже объяснено компилятору. Их нельзя использовать в качестве имени переменной.
У вас может возникнуть вопрос, как компьютер узнает, что это его целочисленная переменная, символьная переменная или что-то еще?
Простой ответ с помощью ключевых слов. В одном из приведенных выше примеров я использовал ключевое слово int.Например: int x = 1
В этом примере «int» - это ключевое слово, которое сообщит компьютеру, что «x» будет целочисленной переменной и будет хранить только целочисленную константу.
В языке C используются 32 ключевых слова, которые приведены ниже. Мы обсудим их в следующих уроках.
Ключевые слова в C |
Видеоурок
Посмотрите видеоурок ниже, чтобы узнать больше о переменных и ключевых словах в C.
Константы и переменные - основы программирования
Кеннет Лерой Басби и Дэйв Брауншвейг
Обзор
Константа - это значение, которое не может быть изменено программой во время нормального выполнения, т. Е. Значение является постоянным. Когда константа связана с идентификатором, она называется «именованной», хотя термины «константа» и «именованная константа» часто используются взаимозаменяемо. Это контрастирует с переменной , которая является идентификатором со значением, которое может быть изменено во время нормального выполнения, т.е.е., значение переменное.
Обсуждение
Понимание констант
Константа - это элемент данных, значение которого не может измениться во время выполнения программы. Таким образом, как следует из названия - значение постоянно.
Переменная - это элемент данных, значение которого может изменяться во время выполнения программы. Таким образом, как следует из названия - значение может варьироваться.
Константы используются двумя способами. Их:
- буквальная постоянная
- определенная константа
Литеральная константа - это значение , которое вы вводите в свою программу везде, где это необходимо.Примеры включают константы, используемые для инициализации переменной, и константы, используемые в строках кода:
21 12,34 'А' "Привет мир!" ложный нулевой
В дополнение к буквальным константам в большинстве учебников символьные константы или именованные константы упоминаются как константа, представленная именем. Многие языки программирования используют ВСЕ ЗАГЛАВНЫЕ буквы для определения именованных констант.
Язык | Пример |
---|---|
C ++ | #define PI 3.14159 или const double PI = 3,14159; |
C # | const двойной PI = 3,14159; |
Ява | const двойной PI = 3,14159; |
JavaScript | const PI = 3,14159; |
Питон | PI = 3,14159 |
Swift | пусть pi = 3,14159 |
Технически Python не поддерживает именованные константы, а это означает, что можно (но не рекомендуется) изменить значение константы позже.