- •4. Измерение информации. Единицы измерения информации.
- •5. Свойства информации. Приведите примеры.
- •6. Способы классификации информации. Приведите примеры.
- •7. Формы представления информации. Приведите примеры.
- •8. Способы кодирования данных. Приведите примеры.
- •9. Информационная система. Компоненты информационной системы.
- •10. Система счисления. Позиционная система счисления. Привести примеры представления чисел, записанных в этих системах счисления:
- •11. Система счисления. Непозиционная система счисления. Привести примеры представления чисел, записанных в этих системах счисления:
- •12. Системы счисления, применяемые при создании вычислительной техники. Примеры.
- •13. Представление чисел в двоичной системе счисления. Привести примеры.
- •14. Механические вычислительные устройства. Технические характеристики.
- •15. Принципы работы аналоговых вычислительных машин. Приведите примеры авм. Почему авм не нашли широкого применения в вычислительной технике?
- •16. Назовите первые эвм и их авторов. Какие характеристики имели первые эвм?
- •17.Принципы построения эвм, сформулированные Джоном фон Нейманом. Структурная схема эвм. Назначение узлов эвм
- •18. Поколения эвм. Технические характеристики эвм. Смена поколений эвм.
- •19. Персональный компьютер. Причины появления. Основные узлы.
- •20. Основные характеристики микропроцессоров персональных компьютеров.
- •21. Виды памяти. Технические характеристики.
- •22. Устройства визуально вывода информации. Технические характеристики.
- •23. Основные характеристики внешних запоминающих устройств.
- •24. Способы печати. Технические характеристики принтеров.
- •25. Системные шины. Их назначение и характеристики.
- •26. Способы хранения информации на оптических носителях. Их технические характеристики.
- •27. Программное обеспечение. Классификация по.
- •28. Системное по. Назначение. Классификация. Примеры.
- •29. Инструментальное программное обеспечение. Назначение. Классификация. Примеры.
- •30. Прикладное программное обеспечение. Назначение. Классификация. Примеры.
- •31. Операционная система. Назначение. Состав. Технические характеристики. Примеры.
- •32. Файловая система. Назначение. Технические характеристики. Примеры.
- •33. Антивирусное программное обеспечение. Назначение. Классификация. Примеры.
- •34. Приложения для работы с файлами. Понятие файловый менеджер. Примеры.
- •35. Текстовый процессор. Назначение. Основные операции.
- •36. Табличный процессор. Назначение. Основные операции.
- •37. Понятие алгоритма. Способы записи. Виды алгоритмов.
- •38. Блок-схема. Представления различных алгоритмов с помощью блок-схем.
- •39. Теоретические основы сжатия данных.
- •40. История языка программирования Си. Этапы развития. Привести примеры компиляторов.
- •41. Элементы программы, написанной на языке Си.
- •42. Константы языка Си.
- •43. Система типов языка Си.
- •44. Арифметические операции языка Си. Операции инкремента и декремента.
- •45. Операции отношения и логические операции языка Си.
- •46.Побитовые логические операции языка Си. Операции сдвига
- •47. Условный оператор и оператор выбора языка Си.
- •48. Циклические операторы языка Си.
- •49. Указатели языка Си.
- •51. Многомерные массивы языка Си.
- •52. Структуры языка Си.
- •53. Объединения языка Си.
- •54. Функции языка Си.
- •55. Области видимости переменных в языке Си.
- •56. Способы передачи параметров функций в языке Си.
- •57. Рекурсия в языке Си.
- •58. Указатель на функцию в языке Си.
- •59. Классы хранения переменных языка Си.
- •60. Консольный ввод/вывод данных в языке Си.
- •61. Файловый ввод/вывод данных в языке Си.
57. Рекурсия в языке Си.
В языке Си функции могут вызывать сами себя, т.е. обладать свойством рекурсивности. Рекурсивная функция обязательно должна содержать в себе условие окончания рекурсивности, чтобы не вызвать зацикливания программы. При каждом рекурсивном вызове создается новое множество локальных переменных. Т.о. переменные, расположенные вне вызываемой функции, не изменяются.
Пример. Составить рекурсивную функцию, вычисляющую факториал числа n следующим образом: n!= 1 , если n<= 1 и n!= ( n -1 )! · n, если n > 1
long fact( int n)
{ if (n <=1) return l;
else return (n * fact ( n -1 )); // функция fact вызывает саму себя
}
Таким образом, последовательно вызываются функции f(n), f(n-1),f(n-2)…f(1).
Достоинством рекурсий является компактная запись, а недостатком – расход времени и памяти на повторные вызовы функции и передачу ей копий параметров.
58. Указатель на функцию в языке Си.
Возможны только две операции с функциями: вызов и взятие адреса. Указатель, полученный с помощью последней операции, можно впоследствии использовать для вызова функции. Например:
void error(char* p) { /* ... */ } void (*efct)(char*); // указатель на функцию void f() { efct = &error; // efct настроен на функцию error (*efct)("error"); // вызов error через указатель efct }
Для вызова функции с помощью указателя (efct в нашем примере) надо вначале применить операцию косвенности к указателю - *efct. Поскольку приоритет операции вызова () выше, чем приоритет косвенности *, нельзя писать просто *efct("error"). Это будет означать *(efct("error")), что является ошибкой. По той же причине скобки нужны и при описании указателя на функцию. Однако, писать просто efct("error") можно, т.к. транслятор понимает, что efct является указателем на функцию, и создает команды, делающие вызов нужной функции.
Отметим, что формальные параметры в указателях на функцию описываются так же, как и в обычных функциях. При присваивании указателю на функцию требуется точное соответствие типа функции и типа присваиваемого значения.
59. Классы хранения переменных языка Си.
В языке C все переменные и функции должны быть объявлены до их использования. Объявление переменной устанавливает соответствие имени и атрибутов переменной, вызывает выделение памяти для хранения ее значения. Место размещения переменной в памяти программы задается с помощью класса памяти (класса хранения) переменной. В зависимости от места размещения переменной в памяти определяется время жизни и область видимости переменной. Класс памяти задается спецификатором класса памяти.
В языке C имеется 4 класса памяти:
- extern (внешние переменные);
- auto (автоматические переменные);
- register (регистровые переменные);
- static (статические переменные);
Время жизни – это интервал времени выполнения программы, в течение которого программный объект (переменная или функция) существует, что определяется фактом выделения памяти. Время жизни переменной может быть локальным или глобальным. Переменная с глобальным временем жизни имеет выделенную память и определенное значение на протяжении всего времени выполнения программы, начиная с момента объявления этой переменной. Переменная с локальным временем жизни имеет выделенную память и определенное значение только во время выполнения блока, в котором эта переменная объявлена. При каждом входе в блок локальной переменной выделяется новая память, которая освобождается при выходе из блока.
Область видимости – это часть текста программы, в которой может быть использован данный объект. Объект считается видимым в блоке или в исходном файле, если в этом блоке или файле известны имя и тип объекта. Объект может быть видимым в пределах блока, текущего файла или во всех файлах, образующих программу.
Время жизни и область видимости объекта зависят от того, в каком месте объявлен объект. Если объект объявлен на внутреннем уровне, т. е. внутри некоторого блока, то по умолчанию он имеет локальное время жизни и локальную область видимости, т. е. он существует, пока выполняется блок, и видим в этом блоке и во всех внутренних блоках (локальная переменная). Если объект объявлен на внешнем уровне, т. е. вне всех блоков, он имеет глобальное время жизни и глобальную видимость. Такой объект существует до завершения программы и видим от точки его объявления до конца данного исходного файла (глобальная переменная).
Изменить время жизни переменной и область ее видимости можно, если указать для нее класс памяти. Все переменные, которые использовались до сих пор, были известны только содержащим их функциям. В C имеются возможности сделать ряд переменных известными сразу нескольким функциям и быстро обработать переменные путем помещения их значений в регистры и т. д. Эти и другие возможности реализуются при помощи присваивания переменным класса памяти.
Служебное слово, определяющее класс памяти, ставится в описаниях переменных перед служебным словом, задающим тип переменных:
static int i,j;
extern char ch1;
register int k;