Упражнение 1.19. Напишите функцию reverse(s), которая переписывает свой строковый аргумент s в обратном порядке. Воспользуйтесь ею для написания программы, которая бы выполняла такое обращение над каждой строкой входного потока по очереди.
/* программа, переписывающая строку в обратном порядке */
#include "stdafx.h"
#define MAXLINE 1000 /* максимальная длина строки в потоке */
void reverse(char s[]);
int main()
{
char line[MAXLINE]; /* текущая введенная строка */
char c;
int i;
i = 0;
while ((c = getchar()) != EOF) {
line[i]
...
Читать дальше »
|
Упражнение 1.18. Напишите программу для удаления лишних пробелов и табуляций в хвосте каждой поступающей строки входного потока, которая бы также удаляла полностью пустые строки.
/* программа для удаления лишних пробелов и табуляций */
#include "stdafx.h"
#define MAXLINE 1000 /* максимальная длина строки в потоке */
int getline(char line[], int maxline);
int main()
{
int len; /* длина текущей строки */
int i;
char line[MAXLINE]; /* текущая введенная строка */
while ((len = getline(line, MAXLINE)) > 0) {
...
Читать дальше »
|
Упражнение 1.17. Напишите программу для вывода всех строк входного потока, имеющих длину более 80 символов.
/* программа вывода всех строк входного потока, имеющих длину более 80 символов */
#include "stdafx.h"
#define MAXLINE 1000 /* максимальная длина строки в потоке */
int getline(char line[], int maxline);
int main()
{
int len; /* длина текущей строки */
char line[MAXLINE]; /* текущая введенная строка */
while ((len = getline(line, MAXLINE)) > 0)
/* если количество символов в стро
...
Читать дальше »
|
Упражнение 1.16. Доработайте главный модуль программы определения самой длинной строки так, чтобы она выводила правильное значение для какой угодно длины строк входного потока, насколько это позволяет текст.
В непереведенном варианте задача звучит так: "Revise the main routine of the longest-line program so it will correctly print the length of arbitrarily long input lines, and as much as possible of the text.", а в примере программы есть вывод количества символов в самой длинной строке. То есть надо исправить функцию main, чтобы программа корректно выводила количество символов самой длинной строки и максимально возможное количество текста (ограничение - MAXLINE).
Доработанная программа будет выглядеть так:
/* программа определения самой длинной строки */
#include "stdafx.h"
#define MAXLINE 1000 /* максимальная длин
...
Читать дальше »
|
Упражнение 1.15. Перепишите программу преобразования температур из раздела 1.2 так, чтобы само преобразование выполнялось функцией.
Измененная программа:
/* программа преобразования температур с использованием функции */
#include "stdafx.h"
double conv(double fahr, double celsius);
int main()
{
double fahr, celsius = 0; // температура по Фарингейту и Цельсию
int lower, upper, step;
lower = 0; // нижняя граница температур
upper = 300; // верхняя граница температур
step = 20; // величина шага
fahr = lower; // задаем н
...
Читать дальше »
|
Упражнение 1.14. Напишите программу для вывода гистограммы частот, с которыми встречаются во входном потоке различные символы.
Не очень хорошо сформулированное задание, написал программу, которая считает пять различных символов:
/* вывод гистограммы частот, с которыми встречаются во входном потоке различные символы */
#include "stdafx.h"
int main()
{
int c, j, i;
int characters[5]; // массив количества различных символов
for (i = 0; i < 5; ++i)
characters[i] = 0;
while ((c = getchar()) != EOF) {
if (c == '}')
++characters[0];
<
...
Читать дальше »
|
Упражнение 1.13. Напишите программу для вывода гистограммы длин слов во входном потоке. Построить гистограмму с горизонтальными рядами довольно легко, а вот с вертикальными столбцами труднее.
Программа для вывода гистограммы с горизонтальными рядами:
/* вывод гистограммы длин слов во входном потоке */
#include "stdafx.h"
#define IN 1 /* внутри слова */
#define OUT 0 /* снаружи слова */
int main()
{
int c, j, i, state;
int wordlength[16]; // массив длин слов
for (i = 0; i < 16; ++i)
wordlength[i] = 0;
i = 0;
...
Читать дальше »
|
Упражнение 1.12. Напишите программу для вывода входного потока по одному слову в строке.
За основу берем предыдущую программу, немного убираем и немного дополняем, получаем следующее:
/* вывод входного потока по одному слову в строке */
#include "stdafx.h"
#define IN 1 /* внутри слова */
#define OUT 0 /* снаружи слова */
int main()
{
int c, state; // символ, состояние
state = OUT;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
...
Читать дальше »
|
Упражнение 1.11. Как бы вы протестировали программу подсчета слов? Какого рода входной поток скорее всего выявит ошибки в программе (если таковые есть)?
Дана программа:
/* подсчет строк, слов и символов во входном потоке */
#include "stdafx.h"
#define IN 1 /* внутри слова */
#define OUT 0 /* снаружи слова */
int main()
{
int c, state; // символ, состояние
int nl, nw, nc; // новая строка, новое слово, новый символ
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c
...
Читать дальше »
|
Упражнение 1.10. Напишите программу для копирования входного потока в выходной с заменой знаков табуляции на \t, символов возврата назад (Backspace) на \b, а обратных косых черт - на \\. Это сделает табуляции и символы возврата легко читаемыми в потоке.
/* замена знаков табуляции на \t, символов возврата назад на \b, обратных косых черт на \\ */
#include "stdafx.h"
int main()
{
int c;
while ((c = getchar()) != EOF) {
/* если c - табуляция, печатаем \t */
if(c == '\t')
printf("\\t");
/* если c - символ возврата назад,
...
Читать дальше »
|
|