
- •Руденко т.В. Сборник задач и упражнений по языку Си. ( учебное пособие для студентов II курса )
- •Предисловие
- •Типы, операции, выражения
- •Управление
- •3.1 Синтаксис и семантика операторов языка Си
- •Обработка числовых данных
- •Обработка символьных данных
- •Функции и структура программы
- •Указатели и массивы
- •Структуры, объединения
- •6.1 Основные сведения
- •6.2 Структуры и функции. Указатели на структуры.
- •6.3 Структуры со сылками на себя
- •Ввод-вывод
- •7.1 Стандартный ввод-вывод
- •7.2 Работа с файлами
- •Интерфейс с системой unix
- •Низкоуровневый ввод-вывод
- •Процессы, сигналы
- •8.2.1 Конвейер, перенаправление ввода-вывода
- •8.2.2 Сигналы. Фоновые процессы.
- •Задания практикума
- •Свойства транслятора
- •Калькулятор
- •Моделирование работы интерпретатора shell
- •Приложения
- •Библиотека стандартных функций языка с
- •Функции работы со строками
- •Функции проверки класса литер
- •Ввод-вывод
- •Операции над файлами
- •Форматный вывод
- •Литеры-спецификаторы и их смысл при выводе
- •Форматный ввод
- •Литеры-спецификаторы и их смысл при вводе
- •Функции ввода-вывода литер
- •Функции позиционирования файла
- •Математические функции
- •Функции общего назначения
- •Дальние переходы
- •10.2 Фрагменты стандарта языка Си
- •10.2.1 Классификация типов
- •10.2.2 Приоритеты и порядок выполнения операций
- •10.2.3 Арифметические преобразования при выполнении арифметических операций вида X op y
- •10.2.4 Арифметические преобразования при выполнении присваивания и явного приведения
- •10.2.6 Явное приведение ( тип т ) X
- •10.2.7 Адресная арифметика
- •10.3 Системные функции unix
- •10.3.1 Базисные средства ввода-вывода
- •10.3.2 Дополнительные средства ввода-вывода
- •10.3.3 Процессы, транспортеры, сигналы
- •Литература
- •Содержание
Интерфейс с системой unix
Низкоуровневый ввод-вывод
Замечание: во всех задачах этого раздела при вводе-выводе использовать низкоуровневые средства системы UNIX.
8.1. Верно ли решена задача: «написать версию функции int getchar(void), которая осуществляет небуферизованный ввод, читая по одной литере из входного потока»
a) int getchar (void)
{ char c;
return ( read (0, &c, 1) == 1) ? c : EOF);
}
b) int getchar (void)
{ int c;
return ( read (0, &c, 1) == 1) ? c : EOF);
}
c) int getchar (void)
{ char c;
return ( read (0, &c, 1) == 1) ? (unsigned char)c : EOF);
}
d) int getchar (void)
{ char c;
return ( read (0, &c, 1) == 1) ? (int)c : EOF);
}
8.2. Написать буферизованный вариант функции int getchar(void), когда функция осуществляет ввод большими порциями, но при каждом обращении к ней выдает только одну литеру.
8.3. Используя низкоуровневый ввод-вывод, реализовать следующие функции:
a) int putchar ( int c)
b) char gets ( char s)
int puts ( const char s)
8.4. Написать программу, копирующую свой стандартный ввод в стандартный вывод.
8.5. Написать программу, создающую файл - копию заданного файла. Имена файлов задаются в командной строке.
a) копирование по одной литере;
b) копирование блоками;
8.6. Программа. Создать файл, являющийся конкатенацией других файлов. Имена файлов задаются в командной строке (см. задачу 7.23).
8.7. Описать функцию, удваивающую в заданном файле каждую очередную четверку байт.
8.8. Программа. В каждом из данных файлов удалить те N–ки байт, в которых первый байт равен коду символа s. Имена файлов, символ s и величина N задаются в командной строке.
8.9. Описать функцию, определяющую количество символов s в тексте, состоящем из нечетных N-ок байт заданного файла. Имя файла, символ s и величина N – параметры функции.
8.10. Программа. Создать файл, содержащий значения функции sin(x)cos(x)exp(x) на отрезке [a,b] в точках xi = a+ih, h = (b-a)/n, i = 0,1,…,n; имя файла и значения a, b, n задаются в командной строке.
8.11. Программа. В файле записана последовательность целых чисел. Создать файл, состоящий из чисел данного файла, значения которых меньше N. Имена файлов и величина N задаются в командной строке.
8.12. Программа. В конец файла f приписать
a) число 1234;
b) строку “end”;
8.13. Программа. В конец файла f приписать содержимое файла g.
8.14. Написать программу, приписывающую в конец файла f его содержимое.
8.15. Описать функцию char get (char f, int n, int pos), читающую n байт из файла f, начиная с позиции pos.
8.16. Программа. Содержимое файлов, длина которых меньше N байт, переписать в новый файл-результат и удалить такие файлы. Файлы, длина которых больше либо равна N байт, не изменяются и не удаляются. Имена файлов и величина N задаются в командной строке: fres f1 f2 …, где fres - имя файла-результата, f1, f2, … - файлы, содержимое которых должно быть проанализировано.
8.17. Написать программу слияния двух файлов в третий. Файл -результат формируется чередованием N-ок символов первого и второго файлов (если один из файлов длиннее другого, то его оставшаяся часть приписывается в конец файла-результата). Имена файлов и величина N задаются в командной строке.