- •И.А. Васюткина основы алгоритмизации и программирования.
- •Содержание
- •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.Модели памяти
- •Список литературы
3.1. Внутренняя структура программы
Исполняемая программа на Си состоит из 4 частей: область команд, область статических данных, область динамических данных, область стека см. Рис.2.
Область команд содержит машинные команды;
Стек используется для временного хранения данных и адресов возврата при вызовах подпрограмм;
Область статических данных для хранения переменных программы;
Область динамических данных для размещения дополнительных данных, которые появляются в процессе работы программы.
3.2. Пример программы на си
заголовок
# include < stdio.h > //включение файла
void main (void) /*пример*/- имя функции и комментарии
{
тело функции
int num;
num = 1;
printf("пример программы"); // вывод на экран
printf("на Си");
} // конец тела функции
Программа Си всегда имеет функцию main(). С нее начинается выполнение программы.
Рис.2. Внутренняя структура программы на Си.
4.Базовые элементы языка си
Комментарии – используются для документирования программы.
// - далее все игнорируется до конца строки.
/* Текст */ - в любом месте программы
/* Строка 1 - для комментария любой длины
строка 2
строка 3
*/
Идентификатор - это имя, которое присваивается какому-либо объекту (переменной). Используются строчные и прописные английские буквы, цифры и знак подчёркивания. Строчные и прописные буквы различаются. Начинаются с буквы или знака подчеркивания. Длина не ограничена.
В современном программировании часто используется для создания идентификаторов Венгерская нотация. Например: WordParametrFormat или Word_Parametr_Format.
Служебные слова – это слова, с которыми в языке жестко сопоставлены определённые смысловые значения и которые не могут быть использованы для других целей. Это имена операторов, команды препроцессора и так далее.
5.Данные в программе на си
Каждая программа оперирует в программе с данными. Они присутствуют в программе в виде переменных и констант.
Данные, которые могут изменяться или которым может присваиваться значения во время выполнения программы, называются переменными.
Данные, которым устанавливаются определенные значения и они сохраняют свои значения на всем протяжении работы программы, называются константами.
5.1. Константы
Константы - это фиксированные значения. Значение, будучи установлено, больше не меняется.
Типы констант:
Целые и длинные целые. Записываются в десятичной, восьмеричной и шестнадцатеричной системе счисления.
Десятичная система:
Размер: Диапазон чисел:
16 битов 32768 знаковое
0 – 65535u беззнаковое - (unsigned)
32 бита 2147483648l знаковое длинное – (long)
0 – 4294967295ul беззнаковое длинное - (unsigned long )
Пример: 12, 12567, 24u, 135l, 4567ul
Восьмеричная система:
Если число начинается с цифры 0, оно интерпретируется как восьмиричное число
16 битов 0 077777
0100000 0177777u
32 бита 0200000 01777777777l
020000000000 037777777777ul
Пример: 0674
Шестнадцатеричная система:
Если число начинается с символа 0х, то оно интерпретируется как шестнадцатиричное
16 битов 0x0000 0x7FFF
0x8000 0xEFFFu
32 бита 0x10000 0x7FFFFFFFl
0x80000000 0xFFFFFFFFul
Пример: 0х3D4
b) Вещественные константы. Это числа с плавающей точкой. Значение имеет дробную часть. По умолчанию все вещественные константы имеют тип двойной точности double. Занимают в памяти 8 байт. Диапазон значений 1 e 308.
Принудительно можно задать формат одинарной точности. Число будет занимать 4 байта. (5.75 f)
А также расширенной точности – 10 байт. (3.14L)
Знак + можно не писать. Разрешается опускать либо десятичную точку, либо экспоненциальную часть, но не одновременно (.2; 4е16). Можно не писать дробную либо целую часть, но не одновременно (100.; .8е-5)
c) Символьные константы. Это набор символов, используемых в ЭВМ.
Делятся на 2 группы: печатные и непечатные (управляющие коды). Символьная константа включает в себя только 1 символ, который необходимо заключить в апострофы и занимает 1 байт памяти.
Любой символ имеет своё двойное представление в таблице ASCII
Символ 'А' 'a' ' ' '\n'
Его код 65 97 32 10
Как целый тип данных 'A'=01018, 010000012, 4116, 6510.
Управляющие коды начинаются с символа \ и тоже заключаются в апострофы. Наиболее распространенные управляющие коды:
\n – переход на новую строку
\t – табуляция (сдвиг курсора на некоторое фиксированное значение)
\b – шаг назад (сдвиг на одну позицию назад)
\r – возврат каретки (возврат к началу строки)
\f – подача бланка (протяжка бумаги на 1 страницу)
\\ - слеш
\’ - апостроф
\” - кавычки
Последние три знака могут выступать символьными константами, а также применяться в функции вывода на экран printf() , поэтому применение их в качестве символов может привести к ошибке. Например, если мы хотим вывести строку «Символ \ называется слеш», то оператор должен выглядеть так:
рrintf( «Символ \\ называется слеш»
Строковые константы - содержат последовательность из 1 и более символов,
заключённых в " ". Расходуется по 1 байту на любой символ + 1байт на так называемый ноль-символ - признак конца строки. Ноль-символ – не цифра ноль, он означает, что количество символов в строке (N) должно быть на 1 байт больше (N+1), чтобы обозначать конец строки.