- •Ответы по дисциплине «Основы алгоритмизации и программирования»
 - •Запись алгоритма Евклида на языке с
 - •Int main() {
 - •Эвристический алгоритм «ближайшего соседа»
 - •Эвристический алгоритм «ближайших пар»
 - •«Правильный» алгоритм поиска маршрута
 - •Эволюция языка с bcpl → b → c → k&r c → ansi c → c99 → c1x
 - •#Define имя текст_для_подстановки
 - •123, 67543, 037, 07777, 0Xabf7, 0xffff, …
 - •123456789L, 0xful (это просто число 15).
 - •Определение символических констант в limits.H
 - •Int lower, upper, step;
 - •Int main() {
 - •Int main() {
 - •Int main() {
 - •Всего операций: 47
 - •If (условие) оператор
 - •If (условие) оператор1 else оператор2
 - •Int main() {
 - •Int main() {
 - •Int main() {
 - •Int main() {
 - •If (found)
 - •Адресация памяти
 - •Адреса объектов программы
 - •Int fact(int n) {
 - •О размерах участков памяти, выделяемых объектам
 - •Правила адресной арифметики
 - •Никакие другие операции к адресам неприменимы, т.Е. Адреса нельзя умножать, делить, складывать между собой и пр.
 - •Имя массива – это константный указатель на его начало.
 - •T X[] эквивалентно t *X
 - •Int main() {
 - •Void *calloc(size_t n, size_t r)
 - •Void free(void *p)
 - •Int main() {
 - •Void *p;
 - •Void swaps(char** a, char** b) {
 - •Int main(void) {
 - •Int main() {
 - •Правило «право-лево»
 - •Int pt_in_rect(struct point p, struct rect r) {
 - •Int main() {
 - •Int main() {
 - •Int ival;
 - •Void init(Vector*);
 - •Void resize(Vector*, int);
 - •Void push_back(Vector*, double);
 - •Void push_s(Stack *st, double d) {
 - •Void init_q(Queue *q) {
 - •Void enqueue(Queue *q, double d) {
 - •Int dequeue(Queue *q, double *d) {
 - •Typedef struct Heap {Vector V;} Heap;
 - •Void init_h(Heap *hp) {
 - •Int Heap_Maximum(Heap *hp, double *z) {
 - •Void Max_Heap_Insert(Heap *hp, double X){
 - •Void Max_Heapify(Heap *hp, int I) {
 - •Int l, r, largest;
 - •Int Heap_Extract_Max(Heap *hp, double *z) {
 - •Void Build_Max_Heap(Heap *hp) {
 - •Void Insert_head_l1(List1 *l, double z) {
 - •Void Insert_back_l1(List1 *l, double z) {
 - •Int Extract_head_l1(List1 *l, double *z) {
 - •Int Extract_back_l1(List1 *l, double *z) {
 - •Void reverse_l1(List1 *l) {
 - •Исходный код функции sort_l1
 - •Void sort_l1(List1 *l) {
 - •Void visit(List1* l) {
 - •Void traverse(List1* l) {
 - •Void Print_l1(List1 *l) {
 - •Void Insert_l2(List2 *l, double z, int direction) {
 - •Прямой обход (сверху вниз), при котором мы посещаем узел, а затем левое и правое поддеревья
 - •Поперечный обход (слева направо), при котором мы посещаем левое поддерево, затем узел, а затем правое поддерево
 - •Обратный обход (снизу вверх), при котором мы посещаем левое и правое поддеревья, а затем узел.
 - •Простой метод сортировки массива
 - •Задача о взвешивании монет
 - •1) Очевидно, что на последнем шаге процедуры взвешивания мы должны иметь дело максимум с 3 монетами, чтобы в при любом исходе взвешивания получить результат.
 - •2) Задача предпоследнего шага – отобрать группу из 3-х монет. Это можно сделать, если в нашем распоряжении будет не более 9 монет (3 группы по 3 монеты).
 - •3) Наконец, если у нас будет от 10 до 27 монет, мы сможем отобрать из них не более 9
 - •Void mov(int n, char a, char c, char b) {
 - •Int main() {
 
#Define имя текст_для_подстановки
Например: #define STEP 20
Вопрос №10. Понятие «тип данных». Базовые типы данных и модификаторы типов (на примере типа int).
Каждая переменная относится к определенному типу данных. Такая принадлежность устанавливается при объявлении переменной: int k;
Все переменные одного типа данных имеют одинаковый размер, одинаковое «внутреннее устройство» и одинаковый набор операций, которые можно к ним применить.
В языке С определены 4 базовых типа данных:
char - один байт, содержащий один символ,
int - целое число стандартной длины (для данной системы),
float - вещественное число одинарной точности с плавающей точкой,
double - вещественное число двойной точности с плавающей точкой.
Кроме того, имеется 4 модификатора:
short - «короткий»: short int,
long - «длинный»: long int, long double,
signed - «со знаком», т.е. величина имеет знаковый разряд,
unsigned - «без знака», т.е. величина не имеет знакового разряда.
	32
Пусть для конкретной вычислительной платформы переменные типа int имеют длину 4 байта и текущее значение некоторой переменной таково:
или в формате шестнадцатеричной константы: 0xffffffff
Тогда, если считать эти байты значением переменной типа signed int, будем иметь значение -1 .
	32
Другой пример:
или в формате шестнадцатеричной константы: 0x80000000
Для переменной типа signed int имеем значение -2 147 483 648 .
А для переменной типа unsigned int: 231 = 2 147 483 648.
Вопрос №11. Определение понятия «константа». Числовые константы. Определение символических числовых констант в файле limits.h
Фундаментальные объекты данных, с которыми работает программа – это переменные и константы. Константы, в отличие от переменных, не имеют имён.
Запись константы в виде цепочки символов одновременно является и значением этой константы.
Для каждого типа данных существуют свои правила записи констант.
Целочисленные константы записывают, как правило, с помощью десятичных цифр, хотя возможна их запись в восьмеричной и шестнадцатеричной системах:
123, 67543, 037, 07777, 0Xabf7, 0xffff, …
Допускается использование суффиксов l или L (long), а также u или U (unsigned):
123456789L, 0xful (это просто число 15).
Вещественные константы содержат десятичную точку, а также степенную часть (экспоненту) или и то, и другое:
1234.5, 1e-2, 12.3E1, …
Такие константы имеют тип double, однако имеется возможность записи констант float и long double :
1.2f, 23.45F, 1e-1L, …
Определение символических констант в limits.H
#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 255
#define CHAR_MIN SCHAR_MIN
#define CHAR_MAX SCHAR_MAX
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)
#define UINT_MAX 0xffffffff
#define SHRT_MAX 32767
#define SHRT_MIN (-SHRT_MAX-1)
#define USHRT_MAX 0xffff
#define LONG_MAX 2147483647L
#define LONG_MIN (-LONG_MAX-1)
#define ULONG_MAX 0xffffffffUL
Вопрос №12. Символьные константы. Управляющие последовательности.
Символьная константа – это целое число, записываемое в форме одиночного символа в одинарных кавычках: ‘x’, ‘0’ и т.п.
Значением символьной константы является числовое значение кода символа. Например, значением константы ‘0’ является число 48. Символьные константы могут участвовать в арифметических операциях.
Для записи «неграфических» символов используют управляющие последовательности:
\a – подача звукового сигнала, \b – возврат назад и затирание
\f – прогон страницы, \n – конец строки
\r – возврат каретки, \t – горизонтальная табуляция
\v – вертикальная табуляция, \\ - обратная косая черта
\? – вопросительный знак, \’ – одинарная кавычка
\” – двойная кавычка \000 – восьмеричное число
\xhh – шестнадцатеричное число \0 – нулевой байт
Лекция 3. Типы данных, операции и выражения.
Вопрос №13. Строковые константы. Длина строковой константы. Строковые константы и массивы символов.
Строковая константа – это последовательность из нескольких символов, заключенная в кавычки:
“Это строка”, “” (а это – пустая строка)
Фактически строковая константа является массивом символов (массивом типа char), причем в конце массива автоматически добавляется нулевой байт (признак конца строки) и поэтому длина массива всегда на 1 больше размера строки.
Пустая строка имеет нулевую длину и занимает в памяти 1 байт!
Внимание! Нельзя путать символьные константы и строковые константы из одного символа: ‘x’ и “x” – это совершенно разные вещи!
Вопрос №14. Перечисления и константы перечислимого типа. Анонимные перечисления. Переменные перечислимого типа.
Средства языка С позволяют программисту создавать собственные типы данных с фиксированным множеством целочисленных значений, причем для каждого из значений должно быть задано некоторое имя, которое будет играть роль константы данного типа.
Такие типы называются перечислениями.
Например:
enum boolean {FALSE, TRUE};
enum months {JAN=1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};
enum escapes {BELL=‘\a’, BACKSPACE=‘\b’, TAB=‘\t’, NEWLINE=‘\n’, RETURN=‘\r’};
Числовые значения таким константам задаются либо явно путем их инициализации, либо автоматически – значение текущей константы на 1 больше значения предыдущей (первая константа в списке получает значение 0)
Перечислимая константа – это просто целая константа!
Допустимы анонимные перечисления: enum {FALSE, TRUE};
Можно описывать переменные перечислимого типа: enum months x;
Вопрос №15. Объявления переменных. Инициализация. Модификатор const.
Любая переменная в программе на языке С должна быть объявлена до первого обращения к ней. При объявлении переменной указывается её тип, имя и, возможно, начальное значение. Переменные одно типа можно объявлять списком:
