Решения (задачи 140-158)
Задача 156.
// Бинарный поиск в упорядоченном массиве #include <stdio.h> #include <conio.h> fine SZ 10 void main() // размер массива int a[SZ]; // массив целых int obr; // образец для поиска int ok; // 1 – массив упорядочен int verh,niz; // границы части массива, в которой // выполняется поиск int sred; // индекс среднего элемента в области // поиска int found; 111 – поиск успешен int n; // счетчик сравнений с образцом int i; // ввод массива printf("*** Бинарный поиск "); printf("в упорядоченном массиве ***\п"); printf("Введите массив (в едной строке %i ", SZ); printf("целых чисел) и нажмите Enter\n"); printf(" › "); for (i = 0; i < SZ; i++) scanf("%i", &a[i]); // проверим, упорядочен ли массив по возрастанию ok = 1; // пусть массив упорядочен i = 0; do if (a[i] <= a[i+l]) i++; else ok = 0; while (ok SS i < SZ -1); if (!ok) { puts("Введенный массив не является"); puts("упорядоченным по возрастаникЛп"); goto bye; printf ("Введите образец для поиска (целое число) › ".); scanf("%i", &obr); // бинарный поиск verh = 0; niz = SZ -1; found = 0; n = 0; do { sred = (niz-verh) / 2 + verh; // делим массив пополам if (a[sred] == obr) found = 1; else // в какой части, в верхней или в нижней, // может находиться искомый элемент? if (obr < a[sred]) niz = sred-1; //в верхней else verh = sred+1; //в нижней } while (verh <= niz &&!found); if (found) { printf("Совпадение с элементом номер %i ", sred); printf("Выполнено %i сравнений", n); else printf("Образец в массиве не найден\п"); bye: printf("\п Для завершения работы нажмите Enter"); getch();
Задача 157.
// Анализ роста учеников #include <stdio.h> #include <conio.h> ttdefine SZ 30 //максимальное кол-во учеников void main() int r; // рост ученика int rost[SZ]; // рост всех учеников int h = 0; // кол-во учеников, о которых // введены сведения float sred; // средний рост int m = 0; // кол-во учеников, у которых // рост больше среднего int sum =0; // суммарный рост int i = 0; printf("*** Анализ роста учеников ***\п"); printf("Вводите рост (см) учеников\п"); printf("Для завершения введите 0 и нажмите Enter\n"); do printf(" › "); scanf ("%i", &r); if (r) rost[i++] = r; sum += r; } while (r && i < SZ); if (n) sred = (float) sum / n; m = 0; // сравним рост каждого со средним for (i = 0; i < n; i++) if (rost[i] > sred) m++; printf("Средний рост: %3.2f см\п", sred); printf("У %i учеников рост превышает среднийХп", m) printf("\п Для завершения нажмите Enter"); getch();
Задача 158.
ш/ Вычисление суммы элементов массива (по столбцам) finclude <stdio.h> #include <conio.h> #define ROW 3 // кол-во строк #define COL 5 // кол-во столбцов void main () int a[ROW][COL]; // массив int s[COL]; // сумма элементов int i,i; printf("Хп Введите массив\п"); printf("После ввода элементов каждой строки,"); printf("\n%i целых чисел, нажимайте Enter\n", COL); for (i = 0; i < ROW; i++) // ROW строк printf(" › "); for (j = 0; j < COL; j++) scanf("%i", &a[i] [j]); printf("Хп Введенный массив\п"); for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) printf("%i ", a[i][j]); printf("\n"); // "очистим" массив s for (i = 0; i < COL; i++) s[i] = 0; // обработка for (j = 0; j < COL; j++) // для каждого столбца for (i = 0; i < ROW; i++) // суммируем эл-ты += a[i] [j]; ntf(" for (i = 0; i < COL; i++) printf("%i ", s [i]); An."); printf("\п Для завершения нажмите Enter"); getch();