Т.В. Руденко - Сборник задач и упражнений по языку Си (1114664), страница 9
Текст из файла (страница 9)
Написать программу, определяющую сколько строк, состоящих изодного, двух, трех и т.д. символов, содержится в данном файле. Считать, чтодлина каждой строки - не более 80 символов. Имя файла задается в команднойстроке.7.18. Программа. Определить, какая строка является самой длинной взаданном файле. Если таких строк несколько, то в качестве результата выдатьпервую из них.
Имя файла задается в командной строке.7.19. Программа. Даны два непустых файла. Определить номер строки иномер символа в этой строке, где встречается первый символ, отличающий содержимое одного файла от другого. Если содержимое файлов полностью совпадает, то результат – 0, 0 и соответствующее сообщение; если один из файловявляется началом другого, то результат - n+1, 1, где n - количество строк в ко40ротком файле, и соответствующее сообщение. Имена файлов задаются в командной строке.7.20. Программа.
В файле записана непустая последовательность целыхчисел (целое число – это непустая последовательность десятичных цифр, возможно начинающаяся знаком + или - ). Имя файла задается в командной строке.a) найти наибольшее из этих чисел;b) определить, сколько четных чисел содержится в файле;c) определить, составляют ли эти числа арифметическую прогрессию;d) определить, образуют ли эти числа возрастающую последовательность;e) определить, сколько чисел этой последовательности являются точными квадратами;7.21.
Написать программу, определяющую, какая из строк чаще другихвстречается в данном файле.7.22. Написать программу, создающую файл - копию заданного файла.Имена файлов задаются в командной строке.7.23. Программа. Создать файл, являющийся конкатенацией другихфайлов. Имена файлов задаются в командной строке: fres f1 f2 …, где fres - имяфайла-результата, f1, f2, … - файлы, содержимое которых должно быть записано в файл-результат.7.24. Программа.
Дан файл f. Создать файл g, полученный из файла fзаменой всех его прописных латинских букв соответствующими строчными.7.25. Программа. Дан файл f. Создать два файла f1 и f2 следующим образом: в файл f1 записать в том же порядке все строки из файла f, состоящиетолько из латинских букв (прописных и строчных);в файл f2 – строки файла f,состоящие только из цифр; все остальные строки файла f не записываются ни водин из этих файлов.7.26. Программа.
В конец файла f приписать строку FINISH.7.27. Программа. В конец файла f приписать содержимое файла g.7.28. Программа. Даны два файла, строки в которых упорядочены поалфавиту. Написать программу, осуществляющую слияние этих двух файлов втретий, строки которого тоже упорядочены по алфавиту. Имена всех трех файлов задаются в командной строке.7.29. Программа.
Дан файл и две строки. Все вхождения первой строкив файл заменить второй строкой (вхождения первой строки в качестве подстроки не рассматривать). Имя файла и строки задаются в командной строке.7.30. Программа. Дан файл и две строки. Все вхождения первой строкив файл (в том числе и в качестве подстроки) заменить второй строкой. Имя файла и строки задаются в командной строке.417.31.
Программа. В данном файле символы каждой строки упорядочитьпо алфавиту. Имя файла задается в командной строке.7.32. Программа. Строки данного файла упорядочить по алфавиту. Имяфайла задается в командной строке.7.33. Программа. В данном файле упорядочить все строки по возрастанию их длин. Имя файла и максимальная длина строки задаются в команднойстроке.7.34. Программа. В файле записана непустая последовательность целыхчисел, являющихся числами Фибоначчи (см. задачу 3.34). Приписать еще одно,очередное число Фибоначчи.7.35..Программа.
В файле записана непустая последовательность целыхчисел ( целое число – это непустая последовательность десятичных цифр, возможно начинающаяся знаком + или - ). Создать новый файл, гдеa) все отрицательные числа заменены нулем;b) минимальный элемент последовательности поставлен в ее начало, амаксимальный – в конец;c) переставлены максимальный и минимальный элементы этой последовательности;d) удалены все числа, являющиеся полными квадратами.Имена файлов задаются в командной строке.8.
ИНТЕРФЕЙС С СИСТЕМОЙ UNIX8.1 Низкоуровневый ввод-выводЗамечание: во всех задачах этого раздела при вводе-выводе использовать низкоуровневые средства системы 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)42{ 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)c) 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+i∗h, 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.438.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 задаются в команднойстроке.8.2 Процессы, сигналы8.2.1Конвейер, перенаправление ввода-вывода8.18.
Написать программу, моделирующую команду SHELL: (здесь pri имена процессов, argj - аргументы процессов, f.dat - файл входных данных, f.res- файл результатов; в каждом из процессов pri использован стандартный вводвывод). Аргументы, необходимые этой программе, задаются в командной строке.a) pr1 | pr2 | pr3b) pr1 | pr2 > f.resc) pr1 arg11 arg12 < f.dat | pr2 arg21 agr22d) pr1 < f.dat > f.rese) pr1 < f.dat | pr2 | pr3 > f.resf) pr1 | pr2 >> f.resg) pr1; pr2 | pr3 > f.resh) ( (pr1 | pr2); pr3) | pr4i) pr1 arg1 < f.dat; pr2 | pr3 >>f.resj) pr1 arg1 < f.dat | pr2 | pr3 >f.res &k) pr1 arg1 > f.res ; pr2 | pr3 >> f.resl) pr1 < f.dat | pr2 arg2 ; pr3 > f.resm) pr1; pr2; ...
; prnn) pr1; pr2; ... ; prn &o) pr1 | pr2 | ... | prnp) pr1 | pr2 | ... | prn &8.19. Написать программу, моделирующую команду SHELL pr1&&pr2(выполнить pr1; в случае успешного завершения pr1 выполнить pr2, иначе завершить работу). Имена процессов задаются в командной строке.448.20. Написать программу, моделирующую команду SHELL pr1 || pr2(выполнить pr1; в случае неудачного завершения pr1 выполнить pr2, иначе завершить работу). Имена процессов задаются в командной строке.8.21.
Написать программу, моделирующую выполнение команды(pr1;pr2) | pr3 > f.res (конкатенация результатов работы процессов pr1 и pr2 передается в качестве входных данных процессу pr3; результаты его работы перенаправляются в файл f.res; в процессах pr1, pr2 и pr3 использован стандартныйввод-вывод).a) аргументы задаются в командной строке в виде pr1 pr2 pr3 f.resb) команда (pr1;pr2) | pr3>f.res вводится как строка во время работыпрограммы.Подсказка: для разбиения строки на лексемы удобно использоватьфункцию strtok из <string.h>8.22. Написать программу, реализующую конвейер из n процессов. Информация, необходимая для запуска каждого процесса, задается в команднойстроке: имя_процесса количество_аргументов аргументыНапример, pr1 3 a1 a2 a3 pr2 0 pr3 2 b1 b2 означает, что программадолжна выполнить команду pr1 a1 a2 a3 | pr2 | pr3 b1 b2.8.23.
Пусть есть исполняемый файл exp_x со стандартным вводомвыводом, вычисляющий значение exp(x). Результат работы exp_x - значения x иexp(x). Написать программу, использующую этот файл для нахождения таблицызначений exp(xi) на отрезке [a,b] в точках xi=a+i*h, i = 0, 1, ..., n; h = (b-a)/n.