- •4.Элементы языка Си. Символы, лексемы, знаки операций.
- •1.Символы языка
- •2.Лексемы
- •5.Элементы языка Си. Константы, идентификаторы, ключевые слова, комментарии.
- •6.Типы данных.
- •7.1,Объявление переменных. Массивы.
- •7.2,Объявление переменных. Массивы.
- •9.1,Операции и выражения. Арифметические операции
- •11. Логические операции и операции отношения. Операции присваивания
- •12.Условное выражение. Операция Sizeof. Операции приведения типов type.
- •13.1,Преобразование типов в выражения. Правила приведения типов.
- •13.2,Преобразование типов в выражения. Правила приведения типов.
- •14.1, Управление вычислительными процессами. Конструкции if-else, else-if.
- •14.2, Управление вычислительными процессами. Конструкции if-else, else-if.
- •15.Переключатель
- •16. Операторы цикла.
- •17.1.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •17.2.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •Пустой оператор
- •18.1.Классы памяти.
- •18.2.Классы памяти.
- •19.1. Функции. Определение ф-ций.
- •Определение ф-ции
- •19.2. Функции. Определение ф-ций.
- •21. Структура программы на языке Си
- •22. Директивы #define и # undef.
- •24,Директивы препроцессора. Препроцессорные операции.
- •Препроцессорные операции
- •25.1, Указатели.Операции &,*.
- •25.2, Указатели.Операции &,*.
- •26. Указатель на неопределенный тип.
- •27.1,Выражения и операции с указателями. Присваивание указателей
- •Сравнение указателей
- •27.2,Выражения и операции с указателями. Применение арифметических операций к указателям
- •29. Массивы и указатели.
- •30.Операции с указателями на массив. Адресная арифметика.
- •32.Массивы указателей. Указатели на указатели.
- •33.Массивы указателей на строки.
- •34.1,Передача параметров из операционной среды.
- •34.2,Передача параметров из операционной среды.
- •36.1,Динамичное распределение памяти.
- •36.2,Динамичное распределение памяти.
- •37,1,Структуры. Операции над структурами
- •37,2,Структуры. Операции над структурами
- •38.Массив структур. Правило выравнивания структурных переменных в памяти
- •39.1,Переименование типов. Средство typedef.
- •39.2,Переименование типов. Средство typedef.
- •40.Поля битов.
- •41.1,Объединения
- •41.2,Объединения
- •42.Ввод, вывод потока.
- •43.Доступ к файлам через поток ввода/вывода.Открытие потока.Закрытие потока.
- •44.1,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •44.2,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •45,Последовательный и прямой доступ в поток.
7.1,Объявление переменных. Массивы.
[спецификатор_класса_ памяти] спецификатор_типа
описатель [=инициатор] [,описатель [= инициатоор]]…;
Спецификатор бывает : auto, register , static , extern
Инициатор задает начальные значения для переменных, присваиваемые при объявлении.
Int a,b,c
Char c1 = ‘y’;
Если спецификатор опущен, то по умолчанию переме6нная считается auto. Переменная класса auto явным способом не инициализирована .
К любой переменной в объявлении может быть применен квалификатор const.
Ключевое слово void означает отсутствие типа или позволяет отложить определение типа.
Массив- это группа элементов одинакового типа, объединенных под одним именем. Из объявления массива компилятор получает информацию о числе элементов и об их типе.
Спецификатор_типа описатель [константное выражение]
7.2,Объявление переменных. Массивы.
Константное выражение задает кол-во элементов массива. Оно может быть опущено в следующих случаях:
1)если при объявлении массив инициализируется (задаются начальные значения)
2)если массив объявлен как формальный параметр функции
3)массив объявлен как ссылка на массив, явно определенный в другом файле
Массив можно инициализировать при его объявлении с помощью заключенного в {} списка инициализаторов, разделенных запятыми. Каждый инициализатор – это либо константное выражение, либо список инициализаторов. Если кол-во элементов массива, указанное в определении, больше числа инициализатора, то для переменных с классом памяти auto, static, extern будут первые.
Т.к. строка определяется как массив, последним элементом к-рого является символ ‘\0’ , то можно записать
Char str [ ] = “это массив”
Допускается использование многомерных массивов. Они объявляются :
Int a [ ] [ ] ;
Пример программы, копирующей исходную строку в результирующую:
#include<stdio.h>
main()
{char ish_str[ ]=”Hello”;
char res_str [20] ;
int I=0;
while ((res_str[I]=ish_str[I])!=’\0’)
I++;
printf (“%s\n”, res_str);
}
если переменная может рпинимать одно значение из определенного набора значений, то можно использовать перечисление
enum [имя_типа_перечислителя]{список переменных}
[описатель[,описатель]]
Переменная перичисления принимает одно значение из списка. Список имеет следующий формат : идентефикатор[= конст_выр]
[,идентефикатор[= конст_выр]]…
пр: enum boolean{no,yes};
По умолчанию первому значению списка соответствует 0, второму-1,и.т.д. если не все значения из списка специфицированы, то они продолжают прогрессию. Имена идентефикаторров списка должны быть уникальны, а вот значения могут повторяться
9.1,Операции и выражения. Арифметические операции
Выражения в языке Си – это последовательность операций, операторов и разделителей. Операции по операндов, участвующих в ней , делятся на: унарные(1), бинарные(2), тернарные.
По типу выполняемой операции на: арифметические, поразрядные логические, сдвигов, логические, отношения , присваивания, и т.д.
Арифметические операции
бинарные + - * / %
операция деления целых (/) сопровождается отбрасыванием дробной части.
Операция взятия модуля (%) дает остаток деления первого операнда на второй. Эта операция не применима для типов float и double.
Специфичными для Си являются операция инкремента (++) и операция декремента (--). Они могут быть префексными ( знак операции перед операндом) и посфиксными ( знак операции после операнда). В обоих случаях значение операнда увеличивается(уменьшается) на 1. Но в первом случае значение
9.2,Операции и выражения. Арифметические операции
сначала будет увеличено(уменьшено), а потом использовано, а во втором – наоборот,сначало использовано, а потом увеличено или уменьшено.
10. Побитовые операции: поразрядные логические операции и операции сдвигов.
В Си имеется 6 операций для манипуляции с битами. Их можно применять только к целочисленным операндам (int, char, short, long).
Они делятся на две группы:
1)поразрядные логические операции
&-побитовая и
| - побитовая или
^ - побитовая исключающая или
~ - порозрядная инверсия
2)операции сдвигов
>> - сдвиг вправо
<< - сдвиг влево
Операция & часто используется для обнуления нек-рой группы разрядов n=n&077 – обнуляет в n все разряды ,кроме младших семи Операция | часто используется для установки разрядов.
x=x|SET_ON- устанавливает 1 в тех разрядах х, в к-рых она есть в SET_ON Операция ^ дает 0, если операнды совпадают, и 1- если они различны
Операция ~- унарная. Инвертирует биты.
Операторы << >> выполняют сдвиг влево или вправо левого операнда на число разрядов, задаваемых правым операндом, к-рый должен быть целым. Выдвигаемые биты теряются, а вдвигаемые нулевые биты. Сдвиг влево на 1,2,3…разрядов явл наиболее быстрым способом умножения на 2,4,8,.., сдвиг вправо- наиболее быстрым способом деления.