- •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. Виды и характеристики языков программирования
3. Вызов функции
Если функция объявлена и определена, то она может быть использована, то есть вызвана.
Пример 1 Работа с функцией, не имеющей параметров
void print(void); // объявление (прототип)
void main()
{
print(); // вызов функции (обязательны круглые скобки)
}
void print(void) // Определение функции
{
printf(”HELLO”); // включает тело функции
}
50. Функции. Типы передачи параметров функции (по значению, по адресу).
Три типа передачи параметров функции:
по значению, когда создается копия параметра и любое изменение этой копии внутри функции не оказывает влияния на исходный аргумент. Возврат значения из функции может производиться только через имя функции.
по адресу, когда передаются адреса
по ссылке, когда задается положение, но не требует оператора *.
Передача переменных
Когда вызывается функция, дополнительно выделяется память под ее формальные параметры, и каждый формальный параметр инициализируется соответствующим ему фактическим параметром. Тип фактического параметра сопоставляется с типом формального параметра, и выполняются все стандартные и определенные пользователем преобразования типов.
void f(int val, int& ref)
{
val++;
ref++;
}
Когда вызывается f(), val++ увеличивает локальную копию первого фактического параметра, тогда как ref++ увеличивает второй фактический параметр. Например:
int i = 1;
int j = 1;
f(i,j);
увеличивает j, но не i.
Первый параметр, i, передается по значению, второй параметр, j, передается по ссылке.
Передача векторных параметров
Если в качестве параметра функции используется вектор, то передается указатель на его первый элемент. Например:
int strlen(const char*);
void main()
{
char v[] = "a vector"
int len=strlen(v);
int len=strlen("HELLO");
};
int strlen(const char* s)
{
int tmp=0;
while (s[tmp++])
return tmp-1;
}
Вектор отличается от всех остальных типов тем, что вектор не передается (и не может передаваться) по значению.
Размер вектора недоступен вызываемой функции.
Это может быть неудобно, но эту сложность можно обойти несколькими способами:
Строки оканчиваются нулем, поэтому их размер можно легко вычислить.
Для других векторов можно передавать второй параметр, который задает размер.
Например:
void print(int n,int a[])
{
for (int i=1; i<n;i++)
printf(“a[%d]=%d \n”, i, a[i]);
}
Так как имя массива есть указатель, связанный с началом массива, то любой массив, используемый в качестве параметра, может быть изменен за счет выполнение операторов тела функции.
void sum(int n,int a[], int b[], int c[])
{
for (int i=1; i<n;i++)
c[i]=a[i]+b[i];
}
void main()
{
int a[]={1,2,3,4};
int b[]={5,6,7,8};
int c[4];
sum(4,a,b,c);
...
}
Начальные значения параметра. В определении функции спецификация параметра может содержать его значение по умолчанию. Это значение используется, если при обращении к функции соответствующий параметр опущен. Существует следующее правило: если параметр имеет значение по умолчанию, то все специфицированные справа от него параметры тоже должны иметь начальные значения.
void write(char * name=”Номер дома = ”, int value=1)
{
printf(“%s %d”, name, value);
}
Вызов функции:
write(); // Номер дома = 1
write(“Номер комнаты = ”, 7); // Номер комнаты = 7
write(“Номер комнаты = ”, ); // Номер комнаты = 1
write(, 7); // ошибка, т.к. можно опускать параметры,
начиная в конца списка.
