
- •1. Среда программирования. Трансляция, компоновка и отладка программ
- •2. Виды и характеристики языков программирования
- •3. Виды программных ошибок.
- •4. Описание языка Си (используемые символы, константы, идентификаторы, ключевые слова, комментарии). Используемые символы
- •Константы
- •Ключевые слова
- •Использование комментариев в тексте программы
- •5. Идентификаторы и ключевые слова языка Си. Идентификаторы и ключевые слова
- •6. Структура программы на языке Си.
- •7. Категории типов данных (символьные, целые, с плавающей точкой).
- •Целый тип данных
- •Данные плавающего типа
- •8. Символьные и целые типы данных. Данные целого типа (integer)
- •Данные символьного типа (char)
- •9. Вещественные типы данных (с плавающей точкой). Данные вещественного типа (float, double)
- •10. Преобразование типов (явное и неявное).
- •11. Использование модификаторов при декларации типов данных.
- •12. Кодовая таблица ascii. Системы счисления. Классификация и преобразование символов. Классификация и преобразование символов
- •13. Константы. Целые константы. Константы с плавающей точкой. Символьные константы. Строки. Null.
- •1 Целые Константы
- •2 Константы с Плавающей Точкой
- •3 Символьные Константы
- •4 Строки
- •14. Условный оператор if.
- •15. Тернарная условная операция ?:.
- •16. Оператор выбора альтернатив switch.
- •17. Составление циклических алгоритмов. Операторы цикла с предусловием и с постусловием. Оператор while
- •Оператор do while
- •18. Оператор цикла с предусловием и коррекцией for. Оператор for
- •19. Операторы перехода (break, continue, return, goto). Оператор break
- •Оператор continue
- •Оператор return
- •Оператор goto
- •20. Унарные операции.
- •21. Аддитивные и мультипликативные операции.
- •22. Операции сдвига.
- •23. Поразрядные операции.
- •24. Операции отношения.
- •25. Логические операции.
- •26. Операция присваивания.
- •27. Сокращенная запись операции присваивания.
- •28. Стандартная библиотека языка Си. Математические функции.
- •29. Стандартная библиотека языка Си. Функции работы со строками.
- •Int strcmp(const char *s1, const char *s2);
- •Integer atoi(const char *nptr);
- •30. Стандартная библиотека языка Си. Ввод данных.
- •31. Стандартная библиотека языка Си. Вывод данных.
- •32. Управляющая строка функций ввода/вывода.
- •33. Препроцессор. Директивы #include, #define.
- •Директивы препроцессора и указания компилятору
- •34. Графический режим. Функции черчения и заполнения.
- •35. Графический режим. Функции вывода текста, функции управления цветом. (outtext, outtextxy, setbkcolor, setcolor, settextjustify, settextstyle, textheight, textwidth)
- •Цвет фона и вычерчивания
- •36. Одномерные массивы. Инициализация одномерных массивов. Ввод и инициализация массива символов.
- •37. Многомерные массивы. Инициализация многомерных массивов.
- •38. Структуры
- •Пример 5
- •39. Объединения.
- •Пример 2
- •40. Перечисления.
- •41. Работа с файлами. Типы открытия файлов (текстовый и бинарный). Дескриптор файла ("указатель на файл"). Режимы работы с файлами.
- •42. Работа с файлами. Открытие файла в различных режимах и закрытие файла.
- •Int feof(file *stream);
- •Int fclose(file *stream);
- •Коды, устанавливающие режимы доступа к открываемым файлам
- •Void rewind(file *stream);
- •Int fsetpos(file *stream, const fpos_t *pos);
- •45. Указатели. Указатели и адреса объектов. Указатели и массивы. Указатели.
- •Указатели и адреса объектов
- •Указатели и массивы
- •46. Операции с указателями: присваивание адреса, определение значения по адресу, присваивание указателей
- •1. Присваивание адреса.
- •3. Сравнение указателей.
- •48. Работа с динамической памятью. Динамические массивы.
- •49. Функции. Определение функции, объявление функции и вызов функции. Возвращаемое значение функции.
- •3. Вызов функции
- •50. Функции. Типы передачи параметров функции (по значению, по адресу).
- •Передача переменных
- •Передача векторных параметров
- •51. Функции. Переменные в качестве параметров функций.
- •52. Функции. Массивы в качестве параметров функций.
- •53. Указатели на функции.
- •1. Среда программирования. Трансляция, компоновка и отладка программ
- •2. Виды и характеристики языков программирования
46. Операции с указателями: присваивание адреса, определение значения по адресу, присваивание указателей
1. Присваивание адреса.
int а;
int *pa;
pa=&a; // адрес переменной a присваиваем указателю pa
Операцию & можно применять только к переменным и элементам массива.
Следующие операции неверны : &5 &(k+1)
Операция & применима к объектам, имеющим имя и размещенным в памяти. Ее нельзя применять к выражениям, неименованным константам ,битовым полям структур и объединений, к регистровым переменным и внешним объектам (файлам).
2. Определение значения.
int а=1,b;
int *pa;
pa=&a; // адрес переменной a присваиваем указателю pa
b=*pa; // значение b=1
b=*pa+5; // значение b=6
Операцию * можно использовать в выражениях. Эта операция более приоритетна, Операцию * можно использовать в выражениях. Эта операция более приоритетна,
3. Присваивание указателей.
int а;
int *pa,*padr;
pa=&a;
padr=pa; // копирование адреса
47. Операции с указателями: сложение и вычитание, инкремент и декремент, сравнение указателей
1. Инкремент и декремент
При выполнении операций ++ и -- значение указателя увеличивается или уменьшается на длину типа, на который ссылается используемый указатель.
int *ptr, a[10];
ptr=&a[5];
ptr++; // равно адресу элемента a[6]
ptr--; // равно адресу элемента a[5]
2. Сложение и вычитание
В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int. При этом результатом операции будет указатель на исходный тип, а его значение будет на указанное число элементов больше или меньше исходного.
В операциях вычитания могут участвовать два указателя на один и тот же тип. Результат такой операции имеет тип int и равен числу элементов исходного типа между уменьшаемым и вычитаемым, причем если первый адрес младше, то результат имеет отрицательное значение.
3. Сравнение указателей.
Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, !=, <, <=, >, >= при этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (ложь) или 1 (истина).
int *ptr1, *ptr2, a[10];
ptr1=a+5; // равно адресу элемента a5
ptr2=a+7; // равно адресу элемента a7
if (prt1>ptr2) a[3]=4; // ptr1 меньше значения ptr2,
// поэтому оператор a[3]=4 не будет выполнен
48. Работа с динамической памятью. Динамические массивы.
При объявлении динамических массивов указывается тип и размерность.
double n = 15;
double* a= new double[n];
Отводится область памяти для 15 элементов типа double. Адрес начальной ячейки записывается в указатель a.
Динамические массивы не обнуляются и не инициализируются при создании.
Доступ к элементам массива осуществляется либо непосредственно, либо через указатель.
int b=a[10];
int c=*(a+10);
Освобождение памяти осуществляется оператором delete[].
Одномерный массив
int n = 5;
int* a; // одномерный массив
a = new int[n]; // резервируем память
// присвоение значений
for(int i=0; i<n; i++)
{
a[i]=i;
}
// распечатываем
for (int i=0; i<n; i++) cout << a[i]);
// освобождаем память
delete a;
}
Двумерный массив:
...
int nstr, nstb;
cout << “Введите кол-во строк и столбцов”;
cin>>nstr>>nstb;
int** a = new int*[nstr]; // массив указателей на строки
for (int i=0; i<nstr; i++)
{
a[i] =new int[nstb]; // для строки столбцы
}
// заполнение значениями
for (int i=0; i<nstr; i++)
{
for (int j=0; j<nstb; j++)
a[i][j]=1;
}
// уничтожение массива
for (int i = 0; i < nstr; i++) delete a[i]; //столбцы для строки
delete[] a; //cтроки
}