- •Базовые типы данных
- •Пример простой программы на языке с
- •Ветвления
- •Последовательная обработка
- •Сумма числовой последовательности
- •Максимум числовой последовательности
- •Последовательная обработка символов
- •Подсчет строк, слов и символов
- •Массивы
- •Статические и динамические массивы
- •Двумерные массивы
- •Структурное программирование сверху вниз
- •Алгоритм сортировки методом обмена (методом пузырька)
- •Подпрограммы
- •Примеры зачетных задач
- •Рекурсия
Максимум числовой последовательности
Задача 4.2. «Максимум числовой последовательности».
Последовательность вещественных чисел продолжается до конца файла. Составить программу нахождения максимального члена последовательности.
Тест. Вход: -5 3.1 2
Выход: Максимум = 3.100000
Используем алгоритм 4.3. для обработки последовательности. Используем следующие переменные:
x – текущий элемент последовательности,
max – максимум просмотренной части последовательности.
Для нахождения максимума используем следующий метод. Начальное значение max равно первому члену последовательности. На каждом шаге цикла вводим одно очередное число и если очередное число оказывается больше max, оно заменяет максимум.
/* Программа 4.2. Определение максимального элемента */
/* числовой последовательности */
#include <stdio.h>
void main(void)
{ float x, max; /* Текущее число, текущий максимум */
int k; /* Количество введенных чисел */
k = scanf("%f", &max); /* 1-е число */
if (k < 1) printf ("\nВходная последовательность пуста\n");
else
{ while ((k = scanf("%f", &x)) > 0)
if (x > max) max = x;
printf ("\nМаксимум= %f\n", max);
}
}
Задача 4.3. Задана непустая числовая последовательность. Определить, является ли последовательность знакочередующейся.
Тест_1. Вход: -5 3.1 -2 1 -7
Выход: Знаки чередуются.
Тест_2. Вход: -5 3.1 -2 -1 7
Выход: Знаки не чередуются.
Используем алгоритм 3.3. для обработки последовательности. Но одного текущего элемента последовательности недостаточно, будем сохранять два соседних текущих элемента:
xpred – предыдущий элемент последовательности,
x – текущий элемент последовательности.
При обработке последовательности необходимо искать нарушение чередования знаков (например, по значению произведения двух соседних элементов). Используем дополнительную переменную flag:
flag = 1 – последовательность знакочередующаяся, 0 – нет, инициализация: flag =1.
/* Программа 4.3. Знакочередование последовательности чисел */
#include <stdio.h>
void main(void)
{ float xpred, x; /* предыдущее и текущее числа */
int flag = 1; /* признак знакочередования */
/* flag=1- знаки чередуются, 0 – нет */
scanf("%f", &xpred) ;
while( scanf("%f", &x)>0)
{ if (xpred * x >= 0) flag = 0;
xpred = x;
}
if (flag) printf ("\n Знаки чередуются.");
else printf ("\n Знаки не чередуются.");
}
Последовательная обработка символов
Задача 5.1. Вывести коды введенных с клавиатуры символов. Последовательность символов завершается нажатием клавиши Esc.
Тест. Вход: Kazan 2007 <Esc>
Выход:
K=82, a=97, z=122, a=97, n= 110, =32, 2=50, 0=48, 0=48, 7=55, = 27
/* Программа 5.1. Коды символов */
#include <stdio.h>
#include <conio.h>
main()
{ int sim;
printf("\n Введи текст, завершающийся клавишей Esc\n");
do
{ sim=getch(); putchar(sim);
printf("=%d, ",sim);
}
while( sim!=27);
puts("Нажми любую клавишу");
getch();
return 0;
}
Пояснения к программе.
1. Очередной символ вводится вызовом функции
sim=getch(); // ввод без эхо вывода на экран.
Объявление функции getch() содержится в заголовочном файле <conio.h>.
2. Вызовы функций putchar() и printf() выводят символ:
putchar(sim); // вывод в виде символа
printf("=%d, ",sim); // вывод числового кода символа
3. Функция puts() выводит строку.