Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Представление информации в языке Си: имена, типы данных, переменные и константы, массивы и строки.



Имена переменных или констант могут состоять из букв латинского алфавита, цифр и символа подчеркивания ( _ ), который считается буквой. Первый символ имени обязательно должен быть буквой или символом подчеркивания. Строчные и заглавные буквы различаются, т. е. 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’.

 

11. Арифметические операции в языке mikroC. Виды операций, примеры их использования в программах.

 

Язык mikroC включает стандартный набор арифметических операций, обозначаемых значками: сложение “ + ”, вычитание “ - “, умножение “ * ”, деление “ / “, которые не требуют особого пояснения. Специфичными для mikroC являются операции определения остатка от деления, а также инкремента и декремента.

Операцию определения остатка от деления, обозначаемую значком

“ % “, поясняет следующий пример:

 

int a = 5, b = 2, c;

c = a % b; // c = 1 – остаток от деления 5 / 2

c = b % a; // c = 2

 

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

Операции инкремента (обозначается как “ ++ “) и декремента (обозначается как “-- “) могут применяться только к переменным. Существуют две формы их записи: префиксная, когда операнд располагается справа от знака операции (например, ++i, --j), и постфиксная, когда операнд располагается слева от знака операции (i++, j--).

В префиксной форме (для инкремента) сначала выполняется увеличение операнда на 1, и увеличенное значение используется в выражении. В постфиксной форме (для инкремента) сначала используется в выражении значение операнда и только после этого его значение увеличивается на 1. Например:

int a = 0, b = 1, c;

c = a++; // c = 0, а = 1

c = ++a; // c = 2, a = 2

c = ++b; // c = 2, b = 2

 

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

/***************************************************************

arifm.c –программа для исследования арифметических операций

****************************************************************/

int i, k = 6, n, m; // объявления переменных

void main( )

{

i = 10 * (k++); // i = 60, k = 7

k--; // k = 6

i = 10 * (++k); // i = 70, k = 7

k--; // k = 6

n = i / k; // n = 11

m = i % k; // m = 4

}

 

Операция присваивания

 

Операция присваивания в языке Си обозначается как “=”. Обычно она используется в виде:

переменная = выражение;

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

x = 10;

x = x + y;

x = x + y + 50;

При программировании часто используются операторы вида:

x = x + 4;

x = x – y; и т.п.

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

Таблица 1

Арифметические составные операторы присваивания

Оператор присваивания Длинная форма Пример
x += y; x = x + y; x += 12;
x -= y; x = x – y; x -= 34 + y;
x *= y; x = x * y; x *= 10;
x /= y; x = x / y; x /= 5;
x %= y; x = x % y; x %=2;

 

Примечание. В составном операторе присваивания между знаком арифметической операции (+, -, *, /, %) и знаком присваивания “=” пробел не допускается!

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

 

/**********************************************************

arifm_2.c – вторая программа для исследования

арифметических операций

********************************************************* */

int i = 5, j = 6;

float x = 2.5, y = 4.6;

void main( )

{

i += j; // i = 11

j -= 2; // j = 4

i *= 4; // i = 44

j /= 3; // j = 1

i %= 2; // i = 0

i++; // i = 1

j--; // j = 0

x += y; // x = 7.1

y -= 4.0; // y = 0.6

x *= 4.0; // x = 28.4

y /= 3.0; // y = 0.2

}

12. Операции отношения и логические в языке mikroC. Виды операций, примеры их использования в программах.

 

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

В формальной логике ключевым понятием являются ЛОЖЬ и ИСТИНА. В языке Си лжи соответствует 0, а истине – любое значение, отличное от 0. Выражения, использующие операции отношения или логические, возвращают 0 для лжи и 1 для истины. В таблице 1 приведены обозначения логических и операций отношения, применяемых в языке mikroC.

Таблица 1

Логические операции и операции отношения

Знак операции Выполняемое действие Пример
& & Логическое И if ( k > 1 & & k < 10)
|| Логическое ИЛИ if ( c == 0 || c == 9 )
! Логическое НЕ if (! ( c > 1 & & c < 9 ))
< Меньше if ( j < 0 )
< = Меньше или равно if ( j < = 0 )
> Больше if ( j > 10 )
> = Больше или равно if ( x > = 8.2 )
== Равно if (c == b)
! = Не равно if (c! = b )

 

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

/************************************************************

log_op.c –программа для исследования операций

отношения и логических

***********************************************************/

char var1 = 10, var2 = 20;

char res1, res2, res3, res4, res5, res6, res7, res8;

void main( )

{

res1 = var1 > var2; // res1 = 0

res2 = var1 < var2; // res2 = 1

res3 = var1 == var2; // res3 = 0

res4 = var1! = var2; // res4 = 1

res5 = var1 & & var2; // res5 = 1

res6 = var1 || var2; // res6 = 1

res7 =! var1; // res7 = 0

res8 =! var2; // res8 = 0

}

 

13. Поразрядные операции в языке mikroC. Виды операций, примеры их использования в программах.

 

В языке mikroC, как и в классическом Си, широко используются поразрядные (побитовые) операции, с помощью которых можно выполнять тестирование, установку, сброс, инвертирование и сдвиг отдельных битов операндов. Поразрядные операции могут выполняться только с целыми типами данных, т.е. char, int, long. В таблице 1 приведены поразрядные операции языка mikroC.

Таблица 1

Поразрядные операции в языке mikroC

Знак операции Выполняемое действие Пример
& Поразрядное И i & 0x25
| Поразрядное ИЛИ j | 64
^ Поразрядное исключающее ИЛИ k ^ 0x0F
~ Поразрядное НЕ (инверсия) ~ m
< < Поразрядный сдвиг влево i < < 2
> > Поразрядный сдвиг вправо j > > 3

 

Рассмотрим программу bit_op.c, в которой используются различные поразрядные операции.

/***********************************************************

bit_op.c –программа для исследования поразрядных операций

***********************************************************/

char i = 0x0F, j = 0x1A, k1, k2, k3, k4, k5, k6, k7;

void main( )

{

k1 = i & j; // k1 = 0b00001010 = 0x0A

k2 = i | j; // k2 = 0b00011111 = 0x1F

k3 = i ^ j; // k3 = 0b00010101 = 0x15

k4 = ~ i; // k4 = 0b11110000 = 0xF0

k5 = ~ j; // k5 = 0b11100101 = 0xE5

k6 = i < < 2; // k6 = 0b00111100 = 0x3C

k7 = j > > 3; // k7 = 0b00000011 = 0x03

}

Для сокращения текста программ в языке mikroC широко используются поразрядные составные операторы присваивания, которые являются комбинацией поразрядных операций и присваивания. В таблице 2 приведены составные поразрядные операции присваивания.

 

Таблица 2

Составные поразрядные операторы присваивания

Оператор Длинная форма Пример
x & = y; x = x & y; i & = 0x0F;
x |= y; x = x | y; j |= 64;
x ^= y; x = x ^ y; k ^= 0x80;
x < < = n; x = x < < n; j < < = 2;
x > > = n; x = x > > n; k > > = 3;

 

Примечание. В составных операторах присваивания между знаком поразрядной операции (&, |, ^, > >, < < ) и знаком присваивания “=“ пробел не допускается!

 

Поразрядные операции очень часто используются для управления отдельными разрядами портов микроконтроллеров. В этом случае первым операндом в операции является регистр данных порта (PORTA, PORTB, PORTC и т.п.), а вторым операндом служит однобайтное число, называемое маской.

Для сброса битов в 0 порта используется поразрядная операция И ( & ), при этом в соответствующих разрядах числа-маски должны быть нули.

Для установки битов в 1 порта используется поразрядная операция ИЛИ ( | ), при этом в соответствующих разрядах числа-маски должны быть единицы.

Для инвертирования битов порта используется поразрядная операция Исключающее ИЛИ (^), при этом в соответствующих разрядах числа-маски должны быть единицы.

Предположим, что в порт В, настроенного на вывод, нужно:

1) установить в единицу 0-й и 7-й разряды порта.

Определим маску для установки битов с помощью поразрядной операции ИЛИ. Это будет число 0b10000001 = 0x81.

На mikroC эту операцию можно выполнить как

PORTB = PORTB | 0b10000001;

или в сокращенной форме

PORTB |= 0b10000001;

2) сбросить в нуль 3-й и 4-й разряды порта В.

Определим маску для сброса этих битов с помощью поразрядной операции И. Это будет число 0b11100111 = 0xE7.

На mikroC эту операцию можно выполнить как

PORTB = PORTB & 0b11100111;

или в сокращенной форме

PORTB & = 0b11100111;

3) инвертировать 7-й, 5-й, 3-й, 1-й разряды порта В.

Определим маску для инвертирования этих битов с помощью поразрядной операции Исключающее ИЛИ. Это будет число 0b10101010 = 0xAA.

На mikroC эту операцию можно выполнить как

PORTB = PORTB ^ 0b10101010;

или в сокращенной форме

PORTB ^= 0b10101010;

Программа для выполнения рассматриваемых действий с портом В может иметь вид:

void main( )

{

TRISB = 0; // настроить все линии порта В на вывод

PORTB |= 0b10000001; // вывести 1 на выводы RB7 и RB0

PORTB & = 0b11100111; // вывести 0 на выводы RB4 и RB3

POTRB ^= 0b10101010; // инвертировать состояния выводов RB7, RB5, RB3, RB1

}

 

14. Оператор выбора if в языке mikroC. Выполняемые функции, примеры его использования в программах.

 

Язык mikroC поддерживает два типа операторов выбора: if (если) и switch (переключатель). Эти операторы позволяют проверять выполнение определенных условий и выбирать возможное продолжение вычислительного процесса. Возможны следующие конструкции этих операторов:

1) оператор if единственного выбора;

2) оператор if … else двойного выбора;

3) оператор if … else множественного выбора;

4) оператор switch множественного выбора.

 

Оператор if единственного выбора

 

Оператор if единственного выбора для одного выполняемого оператора имеет вид:

if ( условие )

оператор;

 

для блока выполняемых операторов:

if ( условие )

{

оператор1;

…………..

операторN;

}

 

Программа вычисляет условие, заключенное в круглых скобках. Если оно истинно, то выполняется оператор (или блок операторов, заключенный в фигурных скобках). Если условие ложно, то оператор (или блок) не выполняется.

Например:

char a, b;

………….

if(a == 1)

b = a + 10;

………….

Оператор if … else двойного выбора

 

Оператор if … else (если … то) двойного выбора обеспечивает две альтернативы продолжения выполнения программы. Выбор осуществляется исходя из проверяемого условия.

Общий вид оператора if … else двойного выбора для одного выполняемого оператора:

if ( условие )

оператор1;

else

оператор2;

 

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

В случае истинности условия выполняется оператор1, в противном случае – оператор2.

Например:

char a, b;

…………..

if(a == 1)

b = a + 10;

else

b= a * 3;

………….

Оператор if … else множественного выбора

 

Язык mikroC позволяет использовать вложенные операторы if … else для реализации множественного выбора.

Общий вид оператора if … else множественного выбора:

if ( условие1 )

оператор1;

else if ( условие2 )

оператор2;

……………………

else if ( условиеN )

операторN;

else

оператор(N+1);

 

Последняя else-часть в операторе if … else может и отсутствовать.

Оператор if … else множественного выбора выполняет серию последовательных проверок до тех пор, пока не будет установлено следующее:

1. Одно из условий в if-части или в частях else if является истиной. В этом случае выполняются соответствующие ему операторы.

2. Ни одно из вложенных условий не является истиной. Программа выполнит операторы в последней else-части, если она имеется.

 

Например:

char a, b;

………….

if(a == 1)

b = a + 10;

else if(a == 2)

b = a * 3;

else

b = 0;

…………..

 

 

15. Оператор цикла for языка mikroC. Выполняемые функции, примеры использования в программах.

 

Цикл for является универсальным, поскольку компоненты цикла могут быть произвольными выражениями. Общая форма записи оператора цикла for имеет вид:

for(инициализация; условие; увеличение/уменьшение переменной цикла)

{

тело цикла;

}

Оператор for имеет три компонента:

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

2. Условие – это место, где находится выражение, определяющее условие работы цикла.

3. Увеличение/уменьшение переменной цикла – это место, где определяется характер изменения переменной цикла на каждой итерации, т.е. повторения цикла.

Тело цикла – это оператор или группа операторов, которые будут выполняться в цикле. Цикл for работает до тех пор, пока условие истинно. Когда условие становится ложным, выполнение программы продолжается с оператора, следующего за циклом for.

Например, в следующей программе осуществляется вывод чисел от 1 до 100 включительно в порт C микроконтроллера:

 

void main( )

{

char x;

for( x = 1; x < = 100; x++)

PORTC = x;

}

В программе переменная х изначально установлена в 1. Поскольку х меньше 100, выполняется оператор PORTC = x, который выводит х в порт C. После этого х увеличивается на 1 и проверяется условие: по-прежнему ли х меньше либо равен 100. Данный процесс продолжается до тех пор, пока х не станет больше 100, и в этот момент цикл прервется. В данном примере х является переменной цикла, которая изменяется и проверяется на каждой итерации цикла.

Вариации цикла for. Важной особенностью цикла for является то, что все три компонента цикла являются необязательными.

Например, если оставить все три компонента пустыми, то получим бесконечный цикл:

for(; ; );

 

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

for( i = 0; i < 10000; i++);

 

 


Поделиться:



Популярное:

  1. III. Типы и виды лингвистических словарей.
  2. VI.2. Представление отдельных видов текстового материала
  3. А4 Какой показатель даёт владельцу коммерческого предприятия представление об эффективности его работы?
  4. Агглютинирующая и фузионная тенденции в языке.
  5. Английские артикли. Употребление артиклей в английском языке. English Articles
  6. Антонимы. Типы антонимов. Антонимия и полисемия. Стилистические функции антонимов (антитеза, антифразис, амфитеза, астеизм, оксюморон и т.д.). Энантиосемия. Словари антонимов.
  7. Базы данных. Виды БД по характеру хранимой информации, по способу хранения, по структуре организации. Основные типы данных.
  8. Безработица: понятие, типы, последствия, измерение
  9. В речи детей В нормативном языке
  10. В.В. Виноградов. ОБ ОСНОВНЫХ ТИПАХ ФРАЗЕОЛОГИЧЕСКИХ ЕДИНИЦ В РУССКОМ ЯЗЫКЕ. (Виноградов В.В. Лексикология и лексикография: Избранные труды. М., 1977)
  11. Введение 1-3. Предложение. Синтаксический разбор словосочетания и предложения. Основа. Типы сложных предложений. Нормативное построение словосочетания и предложения.
  12. ВЗАИМОДЕЙСТВИЕ ИДЕНТИФИКАЦИИ-ОБОСОБЛЕНИЯ И ТИПЫ ЛИЧНОСТЕЙ


Последнее изменение этой страницы: 2016-03-17; Просмотров: 2022; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.113 с.)
Главная | Случайная страница | Обратная связь