- •И.А. Васюткина основы алгоритмизации и программирования.
- •Содержание
- •1.Обзор языКа программирования с
- •2.Этапы создания программы
- •3.Структура программы на языке си
- •3.1. Внутренняя структура программы
- •3.2. Пример программы на си
- •4.Базовые элементы языка си
- •5.Данные в программе на си
- •5.1. Константы
- •5.2. Базовые стандартные типы переменных
- •6.2. Операции отношения
- •6.3. Логические операции
- •6.4. Операции с разрядами
- •6.5. Операции сдвига
- •6.6. Операция условия ?:
- •6.7. Преобразование типов
- •6.8. Операции приведения
- •6.9. Дополнительные операции присваивания
- •7.Операторы языка си
- •Оператор может быть простым и составным. Позволяет пропустить оператор или блок операторов, если условие ложно.
- •1.Схема выполнения оператора
- •8. Оператор множественного выбора
- •9. Операторы цикла while
- •8. Операторы безусловных переходов
- •8.Стандартные функции ввода и вывода
- •8.1. Функция вывода данных на экран printf ()
- •8.2. Модификаторы спецификаций преобразования
- •8.3. Функция ввода данных с клавиатуры sсanf()
- •8.4. Функции ввода/вывода одного символа getchar(), putchar()
- •8.5. Функции небуфиризированного ввода с клавиатуры
- •8.7. Форматирование вывода
- •Заключительная программа
- •9. Массивы
- •9.1. Одномерные массивы
- •Стандартные алгоритмы работы с одномерными массивами
- •Инициализация одномерных массивов
- •9.2. Многомерные массивы
- •Инициализация многомерных массивов
- •9.2.2 Стандартные алгоритмы работы с двумерными массивами
- •10. Функции
- •10.1.Cоздание и использование пользовательских функций
- •10.2.Параметры функции
- •10.3.Возвращение значения функцией
- •10.4.Inline-функции
- •10.5.Значение формальных параметров функции по умолчанию
- •10.6.Перегрузка функций
- •11. Классы памяти и область действия
- •11.1.Глобальные переменные
- •Extern - внешние переменные
- •Статистические внешние переменные - static
- •11.2.Локальные переменные
- •Внутренняя статическая переменная
- •Регистровая переменная
- •Автоматические переменные
- •11.3.Доступ к функциям в многомодульной программе
- •12. Препроцессор языка си
- •12.1. Подстановка имен
- •12.2.Включение файлов
- •12.3.Условная компиляция
- •13. Указатели
- •13.1.Операция косвенной адресации *
- •13.2. Описание указателей
- •13.3.Использование указателей для связи функций
- •13.4.Указатели на одномерные массивы
- •13.5.Указатели на многомерные массивы
- •13.6.Операции над указателями
- •13.7.Передача массива в качестве параметра в функцию
- •13.8.Указатель на void *
- •14. Символьные строки и функции над строками
- •14.1.Массивы символьных строк
- •14.2.Массивы указателей
- •14.3.Указатель как возвращаемое значение функции Передача указателя как параметра функции
- •14.4.Функции, работающие со строками Функции, определеные в заголовочном файле stdio.H
- •14.5. Стандартные библиотечные функции Функции, определеные в заголовочном файле string.H
- •14.6. Преобразование символьных строк
- •Функции, определеные в заголовочном файле ctype.H.
- •15. Ссылки
- •16. Параметры командной строки
- •17. Производные типы данных
- •17.1.Структуры
- •Массивы структур
- •Вложенные структуры
- •17.1.3 Указатели на структуры
- •Операции над структурами
- •Передача структуры в функцию
- •17.2.Объединения
- •17.3. Синоним имени типа
- •17.4.Определение именнованных констант
- •17.5.Перечисления
- •17.6.Битовые поля
- •18. Динамическое выделение памяти
- •2. Функция void* calloc(n,size type);
- •18.2.Операция new с массивами
- •18.3.Инициализаторы с операцией new
- •18.4.Ошибки при использовании динамичской памяти
- •19. Файл
- •19.1.Открытие файла fopen()
- •19.2.Закрытие файла fclose()
- •19.3.Функции ввода/вывода одного символа fgetc(), fputc()
- •19.4.Функции форматированного ввода/вывода в файл
- •Int fprintf(file *stream,”управл.Cтрока”,arg1,…)
- •Int fscanf(file *stream,”управл.Cтрока”,&arg1,…)
- •19.5. Функции ввода/вывода строки символов в файл
- •19.6.Функции управления указателем в файле
- •Int fseek(file *stream, смещение, start)
- •19.7.Ввод/вывод записей фиксированной длины
- •20. Динамические структуры данных
- •20.1.Однонаправленные связные списки
- •Вставка узла
- •Удаление узла из списка
- •20.2.Бинарные деревья
- •21. Размещение данных в памяти
- •22.Модели памяти
- •Список литературы
5.2. Базовые стандартные типы переменных
Если величина является константой, компилятор сам может распознать ее тип по тому виду, в котором она введена. В случае с переменными, обязательно должен быть объявлен ее ТИП. Программа на СИ не будет выполняться, если не описать все используемые переменные. Тип является характеристикой данных. Под типом понимается совокупность информации о данном: сколько ему нужно выделить памяти, какой вид имеет его представление, какие над ним определены операции. Для выполнения вычислений в программе задаются переменные различных типов.
Переменная – это именованный объект, который может принимать различные значения в процессе выполнения программы.
В Си определены следующие стандартные типы данных:
а) для целых чисел
Тип объем диапазон чисел
int 2 байта 32768
signed int 32768 знаковое
unsigned int 0…65535 беззнаковое
chort int короткое целое – тождественно int
long int 4 байта 2147483648 длинное целое
signed long int 2147483648 знаковое
unsigned long int 0…4294967295 беззнаковое
б) с плавающей точкой
float 4 байта 1038
double 8 байт 10308 двойной точности
long double 10 байт 104932 расширенной точности
Существует еще один тип данных - char. Он в основном используется для символов, но может также использоваться для целых чисел
char 1 байт 128
signed char 128
unsigned char 0 ... 255
При описании данных, необходимо ввести тип, за которым должно идти имя переменной (описание). Можно в один оператор объединять несколько имен переменных одного типа, разделенных запятой. Операторы должны заканчиваться точкой с запятой.
Пример:
int num;
int cows, hogs;
Переменным можно присваивать некоторое значение перед началом обработки (инициализировать). В качестве инициализации переменной часто применяются константы.
Пример:
int num;
num=1024;
Можно инициализировать переменную в операторе описания:
int var = 72;
int num=1024, sum=45;
Если присваивается символьное значение переменной типа char , то необходимо не забывать брать символ в апострофы:
char isma=’S’;
т.к. если записать char isma=S, компилятор будет считать, что используется переменная с именем S, которая не описана.
В СИ имеется встроенная операция sizeof, которая позволяет определить размер объектов в байтах.
Пример:
main() {
printf(“данные типа int занимают %d байта.\n”, sizeof(int));
printf(“данные типа char занимают %d байта.\n”, sizeof(char));
printf(“данные типа long занимают %d байта.\n”, sizeof(long));
}
В результате будет выведена информация:
данные типа int занимают 2 байта
данные типа char занимают 1 байта
данные типа long занимают 4 байта
Символ %d указывает куда нужно вставить значение переменной. % - означает, что необходимо напечатать число, а d – что число необходимо печатать в десятичном формате.
6.ОПЕРАЦИИ ЯЗЫКА СИ
Операции в языке Си применяются для представления арифметических выражений. Насчитывается около 40 операций и 16 приоритетов. Величина, над которой выполняется операция, называется операндом. Операции могут быть унарные (один операнд), бинарные (два операнда) и тернарные.
6.1. Арифметические операции
Можно выполнять действия над переменными, переменными и константами, константами.
Самый высокий приоритет у скобок ()
Изменение знака - r = -12; -r (2)
Умножения * сm = 2,54 *in; (3)
Деления / var = 12.0 / 3.0; (3)
У целых чисел при делении дробная часть отбрасывается (происходит усечение)
x = 5 / 3 (х примет значение 1)
% - деление по модулю (3) ( используется только для целых чисел)
х = 5%3 ( в результате получается остаток от деления х примет значение 2)
Сложение + sum = 20+10; sum = 20 + x ; sum = hou + sec; (4)
Вычитание – (4)
Операции автоуменьшения -- и автоувеличения ++ на 1 (2)
Различают 2 формы записи операции ++i - префиксная форма (увеличение переменной i происходит до следующей операции) и i++ - постфиксная форма (после)
++size < 18,5 сначала произойдет увеличение переменной, а затем сравнение с числом 18,5
size++ <18,5 сначала сравнение, а затем увеличение на 1.
Пусть переменным присвоены следующие значения: y=2; n=3;
В результате операции y=n++ сначала переменной y присвоится значение переменной n, а затем n увеличится на 1. y станет равным 3, а n - 4
next=(y+n++)*6; в этом случае сначала произойдет сложение, а затем n увеличится на 1 ( на результате это не отразится) (2+3)*6=30; n=4;
next=(y+(++n))*6; в этом случае сначала n увеличится на 1. А затем уже числа будут складываться (2+4)*6=36; n=4;
8) Операция определения размера sizeof (2)
Можно определять размерность (количество байт) типа sizeof (int); а также размер переменных sizeof x;
9) Операция присваивания = (15)
Знак = не означает в этом случае равенство. Это присваивание некоторого значения.
val = 3,75; PI = 3,14;
i = i+1; математически это неверно, но поскольку = это не знак равенства, то эта запись в СИ верна. Она означает – к значению переменной i прибавить 1 и новое значение присвоить переменной с именем i.
Можно одно значение присваивать нескольким переменным (присваивается справа налево)
y = x = z = 1;
Нельзя присваивать значения константам. Поэтому при присваивании слева от знака = не может быть константы:
3,75 = val не верно
10) Операция следования , (запятая)
х=5, у=24; (16)
Выражения, разделенные запятой, будут выполняться слева направо. Символ запятая может также использоваться как разделитель (в операторах).