Представление информации в языке Си: имена, типы данных, переменные и константы, массивы и строки
Имена переменных или констант могут состоять из букв латинского алфавита, цифр и символа подчеркивания ( _ ), который считается буквой. Первый символ имени обязательно должен быть буквой или символом подчеркивания. Строчные и заглавные буквы различаются, т. е. Beta, beta и BETA – это различные имена. Число символов в имени не ограничено, но значимыми (для компилятора) являются только первые 32 символа. Остальные символы имени игнорируются. Для удобства чтения программ рекомендуется в качестве имен переменных использовать только строчные буквы. Символ подчеркивания обычно используется для разделения слов, чтобы сделать имя более понятным, например, city_tax вместо citytax.
В качестве имен переменных и констант нельзя использовать зарезервированные в Си слова (ключевые слова), например: if , else, for, const, char и т.д.
Простые типы данных. В Си можно использовать различные типы данных для представления хранимой и обрабатываемой информации. Все типы можно разбить на две группы: целые и с плавающей точкой. Данные каждого типа занимают определенное количество байт памяти и могут принимать значения в известном диапазоне. Наиболее часто в программах на языке mikroC применяются следующие типы:
char – однобайтное целое без знака, диапазон чисел (десятичный формат) от 0 до 255;
signed char – однобайтное целое со знаком, диапазон чисел от -128 до 127;
int – двухбайтное целое со знаком, диапазон от -32768 до 32767;
unsigned int – двухбайтное целое без знака, диапазон от 0 до 65535;
long – четырехбайтное целое со знаком, диапазон от -2147483648 до 2147483647;
unsigned long – четырехбайтное целое без знака, диапазон от 0 до 42949667295;
float – четырехбайтное число в формате с плавающей точкой.
Основные объекты, с которыми работает программа на языке Си – переменные и константы
Константы. Термин константа, в общем случае, относится к значению, которое не может быть изменено в ходе выполнения программы. В языке mikroC константы могут быть строковыми, символьными, целыми и вещественными (с плавающей точкой). Табл. 1 описывает форматы, соответствующие каждому виду констант.
Таблица 1
Константа | Формат | Примеры |
символьная | Символ, заключенный в апострофы | ‘A’ , ’!’ |
целая | Десятичный: последовательность цифр, не начинающаяся с нуля Шестнадцатеричный: префикс 0x, за которым следуют шестнадцатеричные цифры Двоичный: префикс 0b, за которым следуют двоичные цифры | 23 , 69 , 789 0x57 , 0xA5 0b10101010 |
вещественная | Десятичный: [цифры].[ цифры ] Экспоненциальный: [цифры]Е(е)+(-)[цифры ] | 1. , 2.54 5е6, 2.3Е-8, 5.67е-5 |
строковая | Символы, заключенные в кавычки | “hello” |
Переменные. Чтобы выделить память для данных конкретного типа, нужно определить (объявить) переменную. Сначала указывается тип данных, а затем имя переменной, как указано ниже:
int i; // объявление целой двухбайтовой переменной со знаком
char counter; // объявление однобайтной беззнаковой переменной
Объявляя (определяя) переменную, можно присвоить ей начальное значение. Можно также определить несколько переменных одного типа, перечисляя их через запятую:
char counter = 0;
float num1 = 12.34, num2 = 56.78, num3;
Для объявления констант необходимо использовать ключевое слово const. Также рекомендуется имена констант записывать заглавными буквами. Константам следует присвоить значение при объявлении. Например:
const int DAYS_IN_WEEK = 7;
const char CLIENT = “Ivanov”;
Массивы и строки
Многие программы требуют использования многочисленных данных, которые имеют одинаковые характеристики. В таких случаях удобно поместить данные в массив, где они получат одно и то же имя. Формат объявления массива:
тип_данных имя_массива[количество_элементов];
Количество элементов в массиве называют также размерностью массива.
Например:
char array[5]; // массив из 5 целых однобайтных чисел
Доступ к элементам массива реализуется с помощью индекса – порядкового номера элемента, начинающегося с 0.
Так, в рассматриваемом примере array[0] является 1-м элементом массива, а array[4] – это последний 5-й элемент массива.
Массив хранится в памяти в последовательных ячейках следующим образом:
Адрес Содержимое
0x100 | array[0] |
0x101 | array[1] |
0x102 | array[2] |
0x103 | array[3] |
0x104 | array[4] |
Данные могут быть записаны в массив путем указания имени массива и индекса. Например, для записи числа 25 во второй элемент массива мы должны записать:
array[1] = 25;
Похожим образом содержимое массива может быть прочитано с указанием имени массива и его индекса. Например, для копирования третьего элемента массива в переменную vrem мы должны записать:
char vrem;
…………….
vrem = array[2];
Содержимое массива может быть инициализировано во время объявления массива. Например:
int digits[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
При инициализации массива можно его объявлять без указания его размера:
int digits[ ] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Компилятор сам определит размерность массива по количеству его элементов.
В mikroC (как и в стандартном Си) могут использоваться многомерные массивы. Многомерный массив – это множество одномерных массивов.
Двумерный массив объявляется следующим образом:
тип_данных имя_массива[размер_1] [размер_2];
Здесь размер_1 – это число строк, а размер_2 – это число столбцов.
Например:
int mas[10] [2]; // двумерный массив 10 × 2
Двумерный массив обычно называют матрицей, а одномерный – вектором.
В языке mikroC (как и в стандартном Си) отсутствует строковый тип данных. Вместо этого используется массив, состоящий из символов в коде ASCII. Конечным элементом такого массива является нулевой символ, обозначаемый как ‘\0’. Иногда этот символ называют нуль-терминатором. Следует отметить, что ASCII-код символа ‘\0’ равен 0x00 = 0, в отличие от кода цифры 0, который равен значению 0x30 = 48.
Строки могут быть объявлены двумя способами:
1) с указанием каждого символа, заключенного в одинарные кавычки (апострофы), и в конце строки помещается нулевой символ:
char mystring[ ] = {‘C’, ‘O’, ‘M’, ‘P’, ‘\0’};
2) путем заключения строки в двойные кавычки:
char mystring[ ] = “COMP”;
При размещении такой строки в памяти компилятор автоматически в конце добавит нулевой символ ‘\0’.