Введение в программирование
Лекция 8.
Примеры решения задач
0 && y 0) if (x y) x = x - y; else y = y - x; if (y == 0) printf ("%d", x); else printf ("%d", y); } " width="640"
Примеры решения задач
- Задание З_1. Составить схему и трассировочную таблицу для данной программы.
Входной тест имеет вид: 24 60
/* Программа З_1 */ #include void main (void)
{ int x, y;
scanf ("%d %d", &x, &y);
while (x 0 && y 0)
if (x y) x = x - y;
else y = y - x;
if (y == 0) printf ("%d", x);
else printf ("%d", y); }
Примеры решения задач
Решение задания З_1.
Схема программы З_1 приведена на рис. 8.1.
0 &&y0 да да нет да да да xy нет нет нет y==0 да Результат: 12 Вывод " width="640"
Примеры решения задач
Табл.8.1. Трассировочная таблица программы З_1
x=
24
12
y=
0
12
36
60
x0 &&y0
да
да
нет
да
да
да
xy
нет
нет
нет
y==0
да
Результат: 12
Вывод
Примеры решения задач
Задание З_2. Вычислить объем памяти для данных, определенных следующим образом:
int r[100];
float x[10], z;
char t[] = “KGTU"; char *s;
Решение задания З_2.
объем = sizeof(r) + sizeof(x) + sizeof(z) + sizeof(t) + sizeof(s) = = (2*100 + 4*10 + 4 + 5 + 4) байт = 253 байт Значением операции sizeof (тип) или sizeof выражение является количество байтов, необходимое для хранения в памяти данного типа или данного выражения.
Примеры решения задач
- Задание З_3. Дана последовательность из целых чисел - количество очков каждого из 500 участников соревнований.
Определить порядковые номера участников, набравших максимальное количество очков. Составить схему и C-программу.
Решение задания З_3 - программа З_3 и схема программы на рис. 8.2.
КГТ (КАИ), кафедра АСОИУ
max нет да r[n]=max да max=r[n] Выв. n+1 Конец Рис. 8.2. Схема программы З_3 7 " width="640"
Примеры решения задач
Схема программы на рис. 8.2.
З_3
Ввод max
r[0] = max
n = 1, 499, 1
Вывод заголов.
Ввод r[n]
n=0,499,1
нет
r[n]max
нет
да
r[n]=max
да
max=r[n]
Выв. n+1
Конец
Рис. 8.2. Схема программы З_3
7
max) max = r[n]; } 7 7 " width="640"
Примеры решения задач
/* Программа З_3. */ /* Получение номеров с максимальным результатом */
#include #define K 500 /* Количество участников */
void main (void)
{ int r[K]; /* результаты участников */ int max; /* максимальный результат */ int n; /* текущий номер участника */
/* Ввод и определение максимального результата */ printf ("\nВведите результаты\n");
scanf ("%d", &max); r[0] = max;
for (n=1; n
if (r[n] max) max = r[n]; }
7
7
Примеры решения задач
/* Определение номеров победителей */ printf ("\nНомера победителей:\n");
for (n=0; n
if (r[n] == max) printf (" %d", n+1); /* 1..K */ }
- Задание З_4. Составить подпрограмму подсчета количества повторений заданного символа в данной строке. Привести пример ее вызова.
- Решение А. Результат - возвращаемое значение, s – массив символов строки.
7
7
Примеры решения задач
/* Программа З_4а */ /* Функция: количество повторений символа c в строке s */
int kol_simv (int c, char s[])
{ int kol; /* Значение функции */ int i; /* Индекс текущего символа строки */
kol = 0;
for (i = 0; s[i] != '\0'; i++) if (s[i] == c) kol++;
return kol; }
7
7
Примеры решения задач
- Решение Б. Результат - выходной параметр kol, s - адрес строки.
/* Программа З_4б */ /* Подпрограмма: kol = кол-во повторений символа c в строке s */
void p_kol_simv (int c, char *s, int *kol)
{ char *i; /* Адрес текущего символа строки */
*kol = 0;
for (i = s; *i != '\0'; i++) if (*i == c) (*kol)++;
return; }
7
7
Примеры решения задач
- Пример вызова подпрограмм kol_simv и p_kol_simv. void main (void)
{ int k;
p_kol_simv ('а', "клавиатура", &k);
printf ("\nКол. символов 'а' в слове ' клавиатура '
= %d = %d ", kol_simv ('а', " клавиатура "), k); }
Результаты тестирования: Кол. символов 'а' в слове " клавиатура " = 3 = 3
7
7
Примеры решения задач
- Задача 8.2. Составить подпрограмму удаления букв ‘ы’ из данной строки. Подсчитать количество удаленных букв.
- Тест. Входные данные: Выходы Выходные данные: Вход
int ud ( char s[ ] )
{ int i, /* индекс чтения */ j=0; /* индекс записи */
for ( i = 0; s[i] != ‘\0’; i++)
if ( s[i] != ‘ы’ ) s[j++] = s[i];
s[j] = ‘\0’;
return i – j; }
7
7
Примеры решения задач
/* Драйвер для проверки работы подпрограммы */ /* удаления заданного символа в данной строке */
void main (void) { int st[80]; int k=0;
gets(st);
k=ud(‘ ы ’, st);
puts(st);
printf(“\n Количество удаленных букв = %d”, k); }
7
7