Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
16
Добавлен:
17.04.2015
Размер:
104.24 Кб
Скачать

на d if (d == n) printf("%i - простое число" ,n); else printf("%i - не простое число" ,n); printf("\п\пДля завершения нажмите <Enter>"); getch(); Задача 138 // Игра "Угадай число" linclude <conio.h> #include <stdlib.h> // для доступа к srand linclude <time.h> void mainO { int comp; // задуманное число int igrok; // вариант игрока int n; // количество попыток time_t t; // текущее время - для инициализации // генератора случайных чисел srand((unsigned) time (&t)); comp = randO % 10 +1 ; // число от 1 до 10 clrscrО; cprintf("\п\гКомпьютер \"задумал\" число от 1 до\ 10.\п\г"); cprintf("Вы должны его угадать за три попытки."); п = 0; do { cprintf("\n\r->"); cscanf("%i",&igrok); n++; } while ((igrok != comp)&&(n < 3)); if (igrok == comp) { 120 C/C-f-+ в задачах и примерах textcolor(RED+BLINK); cprintf("\п\гВЫ ВЫИГРАЛИ!"); } else { textcolor(GREEN); cprintf("\п\гВы проиграли.); cprintf ("Компьютер задумал число %d",coinp); } textcolor(LIGHTGRAY); cprintf("\п\гДля завершения нажмите любую клавишу..."); getch();getch(); } Задача 140 // Выводит таблицу функции #inclucie <stciio.h> #include <conio.h> void main() { float x,dx; // аргумент и его приращение float х1,х2; // диапазон изменения аргумента float у; // значение функции х1 = -4; х2 = 4; dx = 0.5; X = х1; printf (" \п") ; printf (" X I у\п"); printf (" \п") ; while (х < х2) { у = х*х + 2; printf("%3.2f 1 %3.2f\n", X, у); X += dx; } printf (" \n") ; printf("\пДля завершения нажмите <Enter>"); getch (); } Часть II. Решения 121 Задача 141 // Вычисление числа "Пи" #include <stdio.h> #include <conio.h> void main() { float p; // вычисляемое значение ПИ float t; // точность вычисления int n; // номер члена ряда float el; // значение члена ряда р = 0; п = 1; el = 1; // начальное значение printf("ХпЗадайте точность вычисления ПИ -> "); scanf("%f", &t); printf("Вычисление ПИ с точностью %f\n",t); while (el >= t ) { el = (float) 1 / (2*n -1); if ((n % 2) == 0) p -= el; else p += el; n4-f; } p = p*4; printf("ХпЗначение ПИ с точностью %f равно %f\n", t, p); printf ("Просуммировано %i членов рядаЛп", n); printf("\пДля завершения нажмите <Enter>"); getch(); Задача 142 // Вычисление наибольшего общего делителя // двух целых чисел (алгоритм Евклида) iinclude <stdio.h> #include <conio.h> void mainO 122 С/С-*"^ в задачах и примерах int п1,п2; // числа, НОД которых надо вычислить int nod; // наибольший общий делитель int г; // остаток от деления п1 на п2 printf("\пВычисление наибольшего общего делителя "); printf("для двух целых чисел.\п"); printf("Введите в одной строке два числа "); printf("и нажмите <Enter>"); printf("-> "); scanf("%i%i", &nl, &п2); printf("НОД чисел %i и %i - это ", nl, п2); while (nl % п2) { г = nl % п2; // остаток от деления nl = п2; п2 = г; } nod = п2; printf("%i\n", nod); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 143 // Подсчет ненулевых элементов массива // (доступ к элементам по номеру) #include <stdio.h> #include <conio.h> #define SIZE 5 // размер массива void mainO { int a[SIZE]; //массив int n = 0; // кол-во ненулевых эл~тов int i; // индекс printf("\пВведите массив целых чисел.\n"); printf("После ввода каждого числа "); printf("нажимайте <Enter>\n"); Часть Л. Решения 123^ for (i = 0; i < SIZE; i++) { printf("a[%i] ->",i+l); scanf("%i", &a[i]); if (a[i] != 0) n++; } printf("B массиве %i ненулевых элемента.\n", n); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 144 // Поиск минимального элемента массива #include <stdio.h> #include <conio.h> #define HB 5 // размер массива void mainO { int a[HB]; // массив int min; // номер минимального элемента int i; // индекс массива printf("ХпПоиск минимального элемента массиваХп"); printf("Введите в одной строке элементы массиваЛп"); printf("%i целых чисел, и нажмите <Enter>\n", НВ); printf("-> "); for (i = 0; i < HB; i4-+) scanf("%i",&a[i]); min = 0; // предположим, что первый эл-т минимальный // cpaBHPiM оставшиеся эл-ты массива с минимальным for (i = 1; i < HB; i++) if (a[i] < a[min]) min = i; printf("Минимальный элемент массива: "); printf("a[%i]=%i ", min+1, a[min]); printf("\пДля завершения нажмите <Enter>"); getch(); 124 C/C-t-^ в задачах и примерах Задача 145 // Поиск минимального элемента массива // (доступ к элементам при помощи указателя) #include <stdio.h> #include <conio.h> #define HB 5 // размер массива void mainO { int a[HB]; // массив int *min; // номер минимального элемента int *p; // указатель на элемент массива int i; printf("\пПоиск минимального элемента массиваХп"); printf("Введите в одной строке элементы массива,\п"); printf("%i целых чисел, и нажмите <Enter>\n", НВ); printf("-> "); р = а; for (i = 1; i <= НВ; 1++) scanf("%i", Р++); min = a; // пусть первый элемент минимальный р = а + 1; // теперь р содержит адрес второго элемента // сравним оставшиеся эл-ты массива с минимал^>ным for (i = 2; i <= НВ; i++) { if (*p < *min) min = p; P++; //к следующему элементу } printf("Минимальный элемент массива: %i\n", *min); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 148 // Вычисление средней (за неделю) температуры воздуха #include <stdio.h> #include <conio.h> Часть //. Решений 125 voi d main О { // названия дней недели - массив строковых констант char *day[] = {"Понедельник","Вторник","Среда", "Четверг","Пятница","Суббота","Воскресенье"}; float t[7]; // температура float sum; // сумма температур за неделю float sred; // средняя температура за неделю int i; printf("ХпВведите температуру воздуха:\п"); for (i = 0; i <= 6; i++) { printf("%s->", day[i]); scanf("%f", &t[ij); sum += t[i]; } sred = sum / 7; printf("ХпСредняя температура за неделю: %2.1f", sred); printf("\пДля завершения работы нажмите <Enter>"); getch(); } Задача 149 // Поиск в массиве методом перебора элементов tinclude <stdio.h> #include <conio.h> tdefine HB 5 void mainO { int m[HB]; // массив целых int obr; // образец для поиска int found; // признак совпадения с образцом int i; printf("ХпПоиск в массиве методом перебораХп"); printf("Введите в одной строке %i целыхХп", НВ); printf("чисел и нажмите <Enter>\n"); printf("->"); 126 С/С-*-*- в задачах и примерах f or (i = 0; i < НВ; i++) scanf("%i", &m[i]); printf("Введите образец для поиска (целое число)->"); scanf("%i", &obr); // поиск простым перебором found = 0; i == 0; // проверяем с первого элемента массива do { if (m[i] == obr ) found = 1; // совпадение с образцом else i++; // переход к следующему элементу } while (!found && i < НВ); if ( found ) printf("Совпадение с элементом номер %i", i+1); else printf("Совпадений с образцом нет"); printf("\пДля завершения работы нажмите <Enter>"); getch(); } Задача 150 // Проверяет, отсортрфован ли массив по возрастанию #include <stdio.h> #include <conio.h> #define НВ 5 void mainO { int a[HB]; // массив int k; // индекс int ok; // 1 - последовательность неубывающая printf("Проверка, упорядочен ли массив\n"); printf("по возрастанию\п"); printf("Введите массив (%i целых чисел ", НВ); printf("в одной строке) и нажмите <Enter>\n"); for (к = 0; к < НВ; k-f+) scanf("%i", &а[к]); Часть 11. Решения f£7 к = 0; ok = 1; do { if (a[k] > a[k+l]) ok = 0; k++; } while ( к < HB-1 && ok); printf("Элементы массива "); if ( !ok ) printf("не упорядочены "); printf("по возрастаниюХп"); printf("\пДля завершения работы нажмите <Enter>"); getch(); Задача 151 // Проверяет, сколько раз число встречается в массиве #include <stdio.h> tinclude <conio.h> #define HB 5 // размер массива void mainO { int a[HE]; // массив int obr; // искомое число (образец) int n; // кол-во элементов массива, // значение которых равно образцу int i; // индекс printf("Введите массив (%i ", НВ); printf("целых чисел в одной строке)\п"); printf("->"); for (i = 0; i < HB; i++) scanf("%i",&a[i3); printf("Введите образец для сравнения ->"); scanf("%i", &obr); n = 0; for (i « 0; i < HB; i++) if (a[i] == obr) n++; 128 C/C-^-f- в задачах и примерах if ( п ) printf("Число %i встречается в массиве %i раз", оЬг, п); else printf("Ни один элемент массива не равен образцу"); printf("ХпДля завершения работы нажмите <Enter>"); getch(); } Задача 153 // Сортировка массива методом прямого выбора #include <stdio.h> #include <conio.h> #define SZ 5 // размер массива void main 0 { int a[SZ]; // массив of integer; int i; // номер элемента, от которого ведется поиск // минимального эл-та int min; // номер минимального элемента в части // массива от i до верхней границы массива int j; // номер эл-та, сравниваемого с минимальным int buf; // используется при обмене эл-тов массива int к; // индекс для ввода и вывода printf("ХпСортировка массиваХп"); printf("Введите массив (в одной строке %i", SZ); printf("целых чисел) и нажмите <Enter>\n"); printf("->"); for (к = 0; к < SZ; к++) scanf("%i", &а[к]); printf("Сортировка..Лп"); for (i = 0; i < SZ-1; i++) { // поиск минимального эл~та //в части массива от a[i] до последнего эл-та min = i; for (j == i+1; j < SZ; j++) if (a[j] < a[min]) min = j; // поменяем местами a [min] и a[i] Часть Ik Решения 129 buf = а[i]; a[i] = a[min]; a[itiin] = buf; // цикл сортировки закончен // отладочная печать // выведем промежуточное состояние массива for (к = 0; к < SZ; к++) printf ("%i ", ,а[к]); printf("\п"); } // выведем отсортированный массив printf("Массив отсортирован\п"); for (к = 0; к < SZ; к++) printf("%i ", а[к]); printf("\п"); printf("\пДля завершения работы нажмите <Enter>"); getch(); Задача 154 // Сортировка массива методом "пузырька" #include <stdio.h> #include <conio.h> #define SZ 5 void main() { int a[SZ]; int i; // счетчик циклов dint к; // текущий индекс элемента

массива int buf; printf("ХпСортировка массива методом \"пузырька\"\п"); printf("Введите массив (в одной строке %i ", SZ); printf("целых чисел) и нажмите <Enter>\n"); for (к = 0; к < SZ; k+-f) scanf("%i", &а[к]); printf("Сортировка...\п"); 130 С/С-^-^- в задачах и примерах f or (i = 0; i < SZ-1; i++) ( f or (k = 0; к < SZ-1; k++) { if (a[k] > a[k+l]) { // обменяем к-й и {к+1)-й элементы buf = а[к]; а[к] = а[к+1]; а[к+1] = buf; } } // отладочная печать - состояние // массива после очередного цикла сортировки for (к = 0; к < SZ; к++) printf("%i ",а[к]); printf("\п"); } printf("Массив отсортированХп"); for (к = 0; к < SZ; к++) printf("%i ",а[к]); printf("\п\пДля завершения работы нажмите <Enter>"); getch(); } Задача 155 // Объединение двух упорядоченных массивов в один #include <stdio.h> #include <conio.h> #define SZ 5 // размер исходь1ых массивов void main О { int a[SZ], b[SZ]; // исходные массивы int c[SZ*2]; // массив - результат int k,i,m; // индексы массивов a, b и с printf("Объединение двух упорядоченных "); printf("по возрастанию массивов\п"); printf("Введите первый массив "); Часть II. Решения 131 printf("(%i целых чисел) -> ", SZ); for (к = 0; к < SZ; к++) scanf("%i", &а[к]); printf("Введите второй массив "); printf("(%i целых чисел) -> ", SZ); for (i = 0; i < SZ; i++) scanf("%i", &b[i]); к = i = m = 0; do { if (a[k] < b[i] ) c[m++] = a[k++]; else if (a[k] > b[i]) c[m++] = b[i++]; else { с[ш++] = a[k++]; c[m++] = b[i++] ; } } while ( к < SZ && i < SZ); // один из двух исходных // массивов полностью не переписан в массив С while (к < SZ) // есть эл-ты А, не переписанные в С с[т++] = а[к++]; while (1 < SZ) // есть эл-ты В, не переписанные в С с[т++] = b[i++]; printf("Массив - результат: \п"); for (1 = 0; i < 2 * SZ; i++) printf("%i ", c[i]); printf("Для завершения работы нажмите <Enter>\n"); getch(); } Задача 156 // Бинарный поиск в упорядоченном массиве #include <stdio.h> #include <conio.h> 132 C/C-t"i- в задачах it примерах #define SZ 10 // размер массива void main() { int a[SZ]; // массив целых int obr; // образец для поиска int ok; // 1 - массив упорядочен int verh,niz; // границы части массива, в которой // выполняется поиск int sred; // индекс среднего элемента в области // поиска int found; // 1 - поиск успешен int п; // счетчик сравнений с образцом int i; // ввод массива printf("*** Бинарный поиск "); printf("в упорядоченном массиве * * *\п"); printf("Введите массив (в одной строке %i ", SZ); printf("целых чисел) и нажмите <Enter>\n"); printf("-> "); for (i = 0; i < SZ; i++) scanf("%i", &a[i]); // проверим, упорядочен ли массив по возрастанию ок = 1; // пусть массив упорядочен i = 0; do if (a[i] <= a[i-bl]) i+-»-; else ok = 0; while (ok && i < SZ - 1 ); if ( !ok) { puts("Введенный массив не является"); puts("упорядоченным по возрастаниюХп"); goto bye; } Часть II. Решения 133 printf("Введите образец для поиска (целое число) -> "); scanf("%i", &obr); // бинарный поиск verh = 0; niz =^ SZ - 1; found = 0; n = 0; do { sred = (niz-verh) / 2 + verh; // делим массив пополам n++; if (a[sred] == obr) found = 1; else //в какой части, в верхней или в нижней, // может находиться искомый элемент? if ( obr < а[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> #define SZ 30 //максимальное кол-во учеников void main О { int r; // рост ученика 134 С/С-^"*- в задачах и примерах int rost[SZ]; // рост всех учеников int п = 0; // кол-во учеников, о которых // введены сведения float sred; // средний рост int m = 0; // кол-во учеников, у которых // рост больше среднего int sum = 0; // суммарный рост int i == 0; printf("*** Анализ роста учеников ***\п"); printf("Вводите рост (см) учениковХп"); printf("Для завершения введите О и нажмите <Enter>\n"); do { printf("-> "); scanf("%i", &r); if ( r ) { rost[i++] = r; sum += r; П+-1-; } } 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(); Часть II. Решения 135 Задача 158 // Вычисление суммы элементов массива (по столбцам) #include <stdio.h> #include <conio.h> idefine ROW 3 // кол-во строк #define COL 5 // кол-во столбцов void mainO { int a[ROW][COL]; // массив int s[COL]; // сумма элементов int i,j; printf("\пВведите массивХп"); printf("После ввода элементов каждой строки,"); printf("\n%i целых чисел, нажимайте <Enter>\n", COL); for (i = 0; i < ROW; i-f+) // 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[i3 « 0; // обработка for (j = 0; j < COL; j+-f-) // для каждого столбца for (i = 0; i < ROW; i++) // суммируем эл-ты s[j] += a[i3[j]; 136 C/C++ в задачах и примерах printf (" \п") ; for (i = 0; i < COL; i++) printf("%i ", s[i]); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 160 // Обработка результатов экзамена #include <stciio.h> #include <conio.h> void main() { int n[6]; // количество двоек, ..., пятерок int s = 0; // всего оценок float p[6]; // процент каждой оценки char *mes[6] ={"\0", "\0", "двоекХО","троекХО", "четверокХО","пятерокХО"}; int i; puts("Обработка результатов экзамена"); puts("Введите исходные данные:"); for (i = 5; i >= 2; i—) { printf("%s ->", mes[i]); scanf("%i", &n[i]); s += n[i]; } // вычислим процент каждой оценки for (i = 2; i < 6; i++) p[i] = (float)n[i]/3*100; puts("Результаты экзамена"); puts (" ") ; for (i = 5; i >= 2; i—) printf("%8s %2i %2.0f%\n",mes[i], n[i], p[i]); puts (" ") ; Часть II. Решения /37 puts("Для завершения программы нажмите <Enter>"); getch(); } Задача 162 // Определитель матрицы второго порядка tinclude <stdio.h> tinclude <conio.h> void mainO { float a[2][2]; // матрица float det; // определитель (детерминант) int i,j; // индексы массива printf("ХпВведите матрицу второго порядка.\n"); printf("После ввода элементов строки нажмите <Enter>\n"); for (i = 0; i < 2; i+4-) { printf("->"); scanf("%f%f", &a[ i ] [ 0], &a [ i ] [ l ] ); } det = a[ 0] [ 0] * a [ l ] [ l ] - a[ 0] [ 1] * a [ l ] [ 0 ]; pri nt f("Определитель матрицыХп"); f or ( i = 0; i < 2; i+-i-) pr i nt f ("%f %f\n", a [ i ] [ 0 ], a [ i ] [ l ] ); pr i nt f ("ра ве н %f", d e t ); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 163 // Строка с максимальной суммой элементов #include <stdio.h> #include <conio.h> #define N 3 // размер квадратной матрицы 138 C/C-i'+ в задачах и примерах voi d main () { int m[N][N+1]; // последний столбец используем // для хранения суммы эл-тов строки int max; // строка с максимальной суммой // элементов int i,j; // индексы puts("\nOnpeделение строки с максимальной"); puts ("суммой элементов") ; printf("Введите матрицу %ix%i\n", N, N); for (i = 0; i < N; i++) { printf("Элементы %i-й строки -> ", i+1); for (j = 0; j < N; j++) scanf("%i", &m[i] [j]); } // для каждой строки вычислим сумму эл-тов for (i = 0; i < N; i++) { m[i][N] = 0; for(j = 0; j < N; j++) m[i][N] += m[i] [j]; } // найдем строку с максимальной суммой max = 0; for (i = 1; i < N; i++) if ( m[i] [N] > m[max] [N] ) max = i; printf("\nB %i-й строке сумма элементов", max+1); printf("максимальна и равна %i\n", m[max][N]); printf("\пДля завершения нажмите <Enter>\n"); getch(); Часть II. Решения 139 Задача 164 // Проверяет, является ли матрица "магическим" квадратом #include <stdio.h> #include <conio.h> #define SZ 5 // максимальный размер матрицы void main О { int a[SZ][SZ]; // матрица int n; // размер проверяемой матрицы int ok; // матрица - "магический" квадрат int i,j; // индексы массива int sum; // сумма эл-тов главной диагонали int temp; // сумма элементов текущей строки, // столбца или второй диагонали матрицы printf ("*** МАГР1ЧЕСКШ КВАДРАТ ***\п") ; printf("\пВведите размер матрицы (3..%i) -> ", SZ); scanf{"%i", &n); printf("Введите строки матрицыХп"); printf("После ввода строки, %i целых чисел, ", п); printf("нажимайте <Enter>\n"); for (i = 0; i < n; i++) { printf("->"); for (j = 0; j < n; j++) scanf("%i", &a[i][j]); } ok = 1; // пусть матрица - "магический" квадрат // вычислим сумму элементов главной диагонали sum = 0; for (i = 0; i < n; i++) sum += a[i][i]; // вычисляем суммы по строкам i = 0; do { temp = 0; // сумма эл-тов текущей строки for (j = 0; j < n; j++) temp += a[i][j]; 140 C/C-h-h в задачах и примерах i f (temp != sum) ok = 0; i++; } whi l e (ok && i < n); i f ( ok ) { // здесь сумма элементов каждой строки // равна сумме элементов главной диагонали // вычисляем суммы по столбцам j = 0; do { tertp = 0; // сумма зл-тов текущего столбца for (i = 0; i < n; i++) temp += a[i][j]; if (temp != sum) ok = 0; j++; } while (ok && i < n); } if ( ok ) { // здесь сумма элементов каждой строки // равна сумме элементов каждого столбца и // сумме элементов главной диагонали. // Вычислим сумму элементов второй // главной диагонали temp = 0; 1 - п - 1; for (j = 0; j < n; j++) temp += a[i—] [j] ; if (temp != sum) ok = 0; } printf("Введенная матрица "); if ( !ok ) printf("не "); printf("является \"магическим\"квадратом.\n");

printf("\пДля завершения нажмите <Enter>"); getch(); Часть II. Решения 141 Задача 165 // приветствие #include <stdio.h> #include <conio.h> void main () { char name[15]; // имя char fam[20] ; // фамилия printfC'KaK Вас зовут?\п") ; printf("Введите свое имя и фамилию,"); printf("затем нажмите <Enter>"); printf("-> "); scanf("%s", &name); scanf("%s", &fam); // функция scanf читает из буфера клавиатуры символы //до разделителя - пробела printf("Здравствуйте, %s %s!\n", name, fam); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 166 // Приветствие (посимвольный ввод строки) #include <stdio.h> #include <conio.h> void main() { char name[40]; // иьля и отчество пользователя char cti; int i; printf("Как Вас зовут?\п"); printf("(введите свое имя, отчество и нажмите <Enter>"); printf("-> "); i = 0; while ( (cli=getch() ) != 13 && i < 40) // пока не нажата // клавиша <Enter> 142 C/C+'t- в задачах и примерах { put ch( ch); name[i++] = ch; } naine[i] = 40»; printf("ХпЗдравствуйте, %s!\n", паше); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 167 // Вычисляет длину строки #include <stdio.h> #include <conio.h> void mainO { dtiar St [80]; // введенная строка int i = 0; // длина строки puts("ХпВведите строку и нажмите <Enter>"); printf("->"); gets (st); while( st[i++]) printf("Длина введенной строки: %i\n", i); printf("Для завершения работы нажмите <Enter>"); getch(); } Задача 168 // Посимвольный вывод сообщения #include <stdio.h> #include <conio.h> #include "dos.h" // для доступа к функции delay void main О { char msg[] = "\п\гПриветствую великого программиста!\0"; int i; // номер символа Часть //. Решения 143^ i = 0; while(msg[i]) { putch(msg[i++3); delay(150); } printf("\п\пДля завершения нажмите <Enter>"); getch(); } Задача 169 // Выводит код символа #include <stdio.h> #include <conio.h> void mainO { unsigned char ch; // Если ch объявить как char, то буквам русского // алфавита будут соответствовать отрицательные числа printf("ХпВводите символы.\п"); printf("Для завершения введите точку.\п"); do { ch = getch(); printf("Символ: %c Код: %i\n", ch, ch); } while ( ch !- ».'); printf("\п\пДля завершения нажмите <Enter>"); getch(); Задача 170 // ASCII-таблица кодировки символов #include <stdio.h> #include <conio.h> tdefine SM 128 // 0 - символы с кодами О - 127 // 128 - символы с кодами 128 - 256 144 C/C-f-^- в задачах и примерах void main О { // Если ch объявить как char, то буквам русского // алфавита будут соответствовать отрицательные числа unsigned char ch; // символ int i,j; printf ("ХпАЗСП-таблица кодировки символов\п") ; for (i = 0; i <= 16; i++) // шестнадцать строк { ch = i + SM; for (j = 1; j <== 8; j++) // восемь колонок { if (( ch <7 И ch >= 14) && ch !=26) printf("%3c -%4i", ch, ch); else // символы CR, LF, TAB не отображаются printf("%3c - ", ch, ch); ch += 16; } printf("\n"); } printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 171 // Преобразование прописных букв в строчные #include <stdio.h> #include <conio.h> void mainO { unsigned dtiar st[80]; // строка текста int i; // номер обрабатываемого символа printf("ХпВведите строку текста и нажмите <Enter>"); printf("->"); gets(st); i = 0; Часть II. Решения 145 whi l e ( s t [ i ] ) { i f ( ( s t [ i ] >= 'a» && s t [ i ] <- 'z') | | ( s t [ i ] >= 'a' && s t [ i ] <= 'n') ) s t [ i ] -= 32; e l s e i f ( s t [ i ] >= 'p' && s t [ i ] <= 'я') s t [ i ] -= 80; i++; } pri ntf("\n%s\n", St ); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 172 // Удаление начальных пробелов из строки #include <stdio.h> #include <conio.h> #include "string.h" void mainO { lansigned char sst[80]; // строка unsigned char dst[80]; // буфер int i,j; printf("Удаление начальных пробеловХп"); printf("Введите строку:"); i=0; while ((sst[i] = getchO) != 13) putch(sst[i++]); sst[i] = '\0'; i = 0; j = 0; // найдем первый символ, отличный от пробела while( sst[i] && sst[i] == ' •) i++; // здесь i - номер первого символа, отличного от пробела, // скопрфуем sst в dst 146 C/C-^-i- в задачах и примерах whi l e ( s s t [ i ] ) dst[j++] = sst[i++]; dst[j] = 'NO'; printf("ХпСтрока без начальных пробелов:%s\n",dst); printf("ХпДля завершения нажмите <Enter>")/ getch(); } Задача 173 // проверяет, является ли строка целым числом #include <stdio.h> #include <conio.h> void mainO { char St[40]; // строка int i; // номер проверяемого символа printf("Введите целое число и нажмите <Enter>"); printf("->"); scanf("%s",&st); i = 0; while (st[i] >= '0» && st[i] <- '9') i++; // здесь st[i] *\0', если введены только цифры printf("Введенная строка "); if (st[i]) printf("не "); printf("является целым числом. Xn"}; printf("ХпДля завершения нажмите <Enter>"); getch(); } Задача 175 // Проверяет, является ли введенная строка // шестнадцатеричным числом Часть II. Решения 147 #include <stdio.h> #include <conio.h> #include "string.h" void mainO { char St[20]; // строка int i; // номер проверяемого символа printf("ХпВведите шестнадцатеричное число ->"); scanf("%s", &st); strupr(st); // преобразуем к верхнему регистру i = 0; while ((st[i] >- 'О* && st[i] <= '9') I I (st[i] >= 'A' && st[i] <= 'F')) i++; printf("Строка "); // если st[i] != 'ХОЧ // то i - номер первого ошибочного символа if ( st[i] ) printf("не "); printf ("является шестнадцатеричным числомЛп"); printf("ХпДля завершения нажмите <Enter>"); getch(); } Задача 176 // проверяет, является ли строка // дробным числом без знака #include <stdio.h> #include <conio.h> void main() { char st[20]; // строка int i; // номер проверяемого символа int ok = 0; // пусть строка — не дробное число 14S C/C-f"^ в задачах и примерах printf("Введите дробное число и нажмите <Enter>"); printf("->"); scanf("%s", &st); i = 0; if (st[i] >= '1' && st[i] <='9') // первый символ — цифра { //за цифрой могут быть еще цифры whil# ( st[i] >- '1' && st[i] <-'9' ) i++; //за цифрами должна быть точка if (st[i] — '.') { i+-»-; //за точкой должна быть хотя бы одна цифра if (st[i] >-'l' && st[i] <='9') { //и еще цифры while ( st[i] >= '1' && st[i] <='9' ) i+-f; ok = 1; // похоже строка - дробное число } } } printf("Строка %s ",st); if ( st[i] I I !ok ) printf("не "); printf ("является дробным числом без знакаЛп"); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 177 // Преобразует двоичное число в десятичное tinclude <stdio.h> #include <conio.h> #include "string.h" void mainO { Часть IL Решения 149 char bin[16]; // изображение двоичного числа long int dec; // десятичное число int i; // номер разряда двоичного числа int v; // вес i-го разряда двоичного числа printf("Введите восьмиразрядное двоичное число "); printf("H нажмите <Enter>"); printf("->"); scanf("%s", &bin); dec = 0; V = 1; // вес младшего (0-го) разряда двоичного числа for ( i *= strlen(bin) -1; i >= 0; i—) { if ( bin[i] =='!') dec += v; V *= 2; // вес следующего разряда } printf("Двоичному числу %s", bin); printf("соответствует десятичное %d", dec); printf ("\пДля завершения ная^^^ите <Enter>") ; getch(); Задача 178 // преобразует шестнадцатеричное число в десятичное // разобраться с переполнением! #include <stdio.h> #include <conio.h> #include "string.h" void mainO { char St[5]; // шестнадцатеричное число unsigned int dec;// десятичное число int v; // вес разряда шестнадцатеричного числа int err = 0; // err = 1 - в строке недопустимый символ int i; 150 С/С+-1' в задачах и примерах printf("Введите шестнадцатеричное "); printf("(не более 4-х знаков) число\п"); printf("-> "); scanf("%s",&st); // преобразуем введенную строку к верхнему регистру strupr(st); dec = 0; V = 1; // вес младшего разряда шестнадцатеричного // числа for ( i = strlen(st) -1; i >= 0; i—) { //printf("\n%d\n",v); if (st[i] >= '0' && st[i] <= '9M dec +- V * (st[i]- 48); // (int)'0'=48, (int)»l'=49 // и т.д. •lee if (st[i] >= 'A' && st[i] <= 'FM // (int)'A'=65, (int)'B'=66 и т.д. // A обозначает 10, В - 11 и т.д. dec += V * (st[i3- 55); mlsm // недопустимый символ { err = 1; break; } V *= 16; // вес следующего разряда } if ( !err ) { printf("Шестнадцатеричному числу %s ", st); printf("соответствует десятичное %u\n", dec); } else { printf ("Строка %s не яъляечося ", st); printf("шестнадцатеричным числомХп"); } printf("\пДля завершения нажмите <Enter>"); getch(); Часть II. Решения 151 Задача 179 int osn. n, СП, г; char st[17]; int i; // // // // // // // // Преобразует десятичное число в другую // систему счисления (от 2-х до 10-ти) #include <stdio.h> #include <conio.h> void mainO { основание системы счисления исходное число копия исходного числа остаток от деления числа на основание сист. счисл. представление числа в заданной системе счисления printf("ХВведите целое число ->"); scanf("%d", &n); printf("Введите основание системы счисления ->"); scanf("%d", &osn); СП = n; // делим исходное число на основание системы // счисления до тех пор, пока остаток от деления // больше основания системы счисления. // Остаток от деления на каждом щаге - очередная цифра st[16] ='\0'; i = 15; do { г = n % osn; // очередная цифра п = п / osn; // целая часть деления // printf("цифра:%d остаток:%d\n", r,n); st[i—] = г + 48; // преобразование цифры в сР1мвол } while ( п > 0); // "сдвинем" сформированную строку в начало i++; int j = 0; while(St[i]) st [ j +- f ] = s t [ i ++]; s t [ j ] = 4 0'; 152 С/С+-^ в задачах и примерах s t [ i —] = ' '; printf("Десятичному числу %d соответствует ", сп); printf("число %s по основанию %d\n", st, osn); printf("\пДля завершения нажмите <Enter>"); getch(); Задача 180 // Преобразует десятичное число в шестнадцатеричное

#include <stdio.h> #include <conio.h> void main() { int n; // Исходное число int r; // Остаток от деления числа на основание // системы счисления char st[5]; // Представление числа в заданной // системе счисления int i; printf("ХпПреобразование десятичного числа ); printf (."в шестнадцатеричное\п") ; printf("Введите целое число ->"); scanf("%d", &п); // делим исходное число на 16 до тех пор, // пока остаток от деления больше 16 printf("ХпДесятичному числу %d", п); printf(" соотвествует шестнадцатеричное "); st[5] = 40'; i = 4; do { r = n % 1 6; // очередная цифра n = n/1 6/ // целая часть рез-та деления i f (г < 10) st[i—] = г + 48; // (int) '0'=48, (int) •1»==49 и т. д. el se s t [ i ~ ] = г + 55; // (int)'А'==65, (int)'В»==б6 // и т. д. } while ( п > 0) ; Часть II. Решения 153 // удалим начальные пробелы i++; int j = 0; while( st[i] ) st[j++] = st[i++]; st[j] = 40'; printf("%s\n", St); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 181 // Вычисление значения арифметического выражения iinclude <stdio.h> #include <conio.h> #include "stdlib.h" void main () { char St[40]; // строка char buf[10]; // изображение очередного числа char op; // оператор int rez; // значение выражения int n; // очередное число int i,j; printf("ХпВведите арифметическое выражение,\n"); printf("например, 45+5-3-125+2 и нажмите <Enter>"); printf("(пробелы и другие знаки недопустимы)\п"); printf("->"); scanf("%s", &st); rez == 0; // значение выражения op = ' »; i = j = 0; while( st[i] ) { // выделить число 154 С/С+-^- в задачах и примерах j = 0; while (st[i] >= 'О' && st[i] <= '9М buf[j++] = st[i++]; buf[j] = 40\- n = atoi(buf); // преобразовать строку в целое // выполнить действие switch ( op ) { case ' + ': rez += n; breadt; case '-': rez ~= n; breaks- case ' ': rez = n; break; // первое число примера } // выделить знак операции ор = St [i++]; } printf("Значение введенного выражения: %d", rez); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 182 // Итоги летней Олимпиады 2000 года #include "stdio.h" #include "conio.h" #include "string.h" #define NC 10 //количество стран-участниц void main() { char *strana[] = {"Австрия\0","ГерманияХО", "КанадаХО", "Китай\0", "Кс3рея\0", "НорвегияХО","РоссияХО", "СШАХО","ФранцияХО","ЯпонияХО"}; // таблица результатов int result[NC+1][5]; // NC+1-ая строка используется как буфер // при сортировке таблицы Часть IL Решений 155 int i,j; int max; // номер строки таблицы, в которой // количество очков максимально char buf[9]; // используется при сортировке printf("\п*** Сидней 2000 ***\п"); printf("Введите в одной строке количество золотых,\п"); printf("серебряных и бронзовых медалейХп"); // ввод исходных данных for (i = 0; i < NC; i4-+) { printf("%s ->", strana[i]); scanf("%i%i%i", ^result[i][0], // золотых Sresult [i] [1], // серебряь1ых &result[i][2]); // бронзовых } // вычислим общее количество медалей и очков for (i = 0; i < NC; i++) { result[i] [3] = result[i][0]+result[i][l]+result[i][2]; result[i] [4] = result[i][0]*7+result[i][1]*6+result[i][2]*5; } // сортировка массива в соответствии с количеством очков // методом простого выбора for (i = 0; i < NC-1; i++) { //в части таблицы, начиная со строки i, // найти j-ую строку, в которой элемент // result [j] [5] максимальный max = i; // пусть это строка с номером i for (j = i+1; j < NC; j+-b) if (result[j][4] > result[max][4]) max = j; // обменяем 1~ую строку со строкой с номером max //в качестве буфера используем последнюю // строку таблицы. st r cpy( buf,st r ana[ i ] ); st r cpy( st r ana[ i ],st r ana[ max] ); st rcpy(st rana[max],buf); for (j = 0; j < 5; j++) result[NC][j] = r e s ul t [ i ] [ j ]; for (j = 0; j < 5; j++) r es ul t [ i ] [ j ] = resul t [max][j ]; for (j = 0; j < 5; j4-+) resul t [max][j ] = resul t [NC][j ]; } // здесь таблица упорядочена printf("Итоги летней Олимпиады в Сиднее, 2000 г.\п"); printf("%12s%8s%8s%8s%8s%8s","Страна","Золото", "Серебро","Бронза","Всего","Очков"); for (i = 0; i < NC; i++) { printf("\n%12s", strana[i]); for (j = 0; j < 5; j+4-) printf("%8i", result[i][j]); } printf("\пДля завершения нажмите <Enter>"); getcli () ; } Задача 183 // Игра "Угадай число" #include "stdio.h" #include "conio.li" #include "stdlib.li" #include "time.li" #define N 3 // уровень сложности - количество цифр в числе #define DEBUG // режим отладкам void main() { char igro]c[N]; // комбинация игрока char comp[N]; // комбинация компьютера Часть II. Решения 157 int a[N]; // a[i] == 1, если i-ая цифра // компьютера совпала с одной из цифр игрока int ugad; // угадано чисел int mesto; //из них на своих местах int i,j; // индексы time__t t; printf ("\пКомпьютер задумал трехзначное числоЛп"); printf("Bbi должны его отгадать.\п"); printf("После ввода очередного числа вам будет "); printf("сообщено, сколько цифр угадано, и сколько"); printf ("из них находится на своих местахЛп"); printf("После ввода числа нажимайте <Enter>\n"); srand((unsigned)time(&t) ); for (i = 0; i < N; i++) // компьютер "задумывает" число comp[i] = rand О % 10 + 48; // 48 - код символа 'О* #ifdef DEBUG printf("Компьютер задумал: "); for (i == 0; i < N; i++) printf("%c", comp[i]); printf("\n"); #endif do { printf("\nBam вариант-> "); scanf("%s", &igrok); // массив вводим как строку for (i = 0; i < N; i++) a[i] = 0; // проверим, сколько цифр угадано ugad = 0; for (i = 0; i < N; i++) // каждую цифру игрока for (j = 0; j < N; j++) // сравним с цифрами // компьютера { if ((igrok[i] == comp[j]) && !a[j]) { ugad++; 158 C/C++ в задачах и примерах a[j] = 1; // запретим сравнивать // эту цифру компьютера с оставшимися, // еще не проверенными, цифрами игрока break; } } // проверим, сколько на своих местах mesto = 0; for (i = 0; i < N; i++) if (igrok[i] == comp[i]) inesto++; printf("Угадано: %i. Ha своих местах: %i", \ ugad, mesto); } while ((ugad < N) || (mesto < N)); printf("\n*** ВЫ УГАДАЛИ ЧИСЛО! ***\n"); printf("\пДля завершения нажмите <Enter>"); getch(); } Задача 184 // Телеграф - передача сообщений при помощи азбуки Морзе #include "stdio.h" #include "conio.h" #include "string.h" // strlen #include "dos.h" // delay // параметры передачи #define TONE 100 // частота сигнала (гц) #define LI 50 // длительность (мс) "точки" #define L2 100 // длительность (мс) "тире" #define L3 50 // пауза (мс) между точками и тире одной // буквы #define L4 100 // пауза (мс) между буквами #define L5 150 // пауза (мс) между словами void main О { // кодировка букв русского алфавита char *morse[] = { I» __ I» if_ II II II II II / /7\ •n n T Часть II. Решения 159 fl tl II и п _ « „ ^ 1 1 и П_„ II II II II II II II II II _ | | II II _ II » _" '_ — " 1 II •_ " |__ _ II | _ ^ 1 1 1 II II II II _ II II __ II • • / II __ II II II f М _ II / II _ _ 1 | // Д,Е,Ж,3 // И,Й,К,Л // м,н,о,п // Р,С,Т,У // Ф,Х,Ц,Ч // ш,щ,ъ,ы // ь,э,ю,я }; lansigned char mes[80]; // сообщение char sim[4]; // символ в кодировке Морзе - // последовательность точек и тире char znak; // "передаваемый" знак - тире или точка int i,j; // номер символа и знака puts("\n*** Телеграф * * *"); puts("Введите сообщение, которое надо передать"); puts("(используйте только заглавные русские буквы)"); printf("->"); gets(mes); f or ( i = 0; i < s t r l e n( me s ); i++) { i f (mes[i ] >= 'A* &&mes[i] <='ЯМ { // опр>еделим код очередной буквы (ф-я Ord) сообщения //и получим из таблицы кодировки соответствующий // элемент массива - последовательность точек и тире st r cpy( Si m, mor s e[ mes [ i ] - 128] ); j = 0; do i f ( si m[ j ] == '-' 11 si m[ j ] == '.') { put ch( s i m[ j ++] ); sound(1000); if (sim[j] == '.M delay(LI); else delay(L2); nosound; delay(L3); } 160 C/C++ в задачах и примерах while ( sim[j] != »'& & j <4 ) ; delay(L4); // пауза между буквами } else if (mes[i] == ' ») // пробел между словами { printf(" "); // пробел между словами сообщения delay(L5); } } puts("ХпСообщение передано!"); puts("Для завершения работы нажмите <Enter>"); getch(); } Задача 185 #include <stdio.h> #include <conio.h> #include <math.h> // для доступа к M_PI // объем цилиндра float veil(float h, float r) { return(M_PI*r*r*h); } void mainO { float r,h; // высота и радиус основания цилиндра float v; // объем цилиндра puts("Вычисление объема цилиндра"); printf("Введите высоту и радиус основания ->"); scanf("%f%f", &h, &r)/ V = veil (h, r) ; printf("Объем цилиндра %3.2f\n", v); printf("Для завершения нажмите <Enter>"); getch(); } Часть II. Решения 161 Задача 186 // Функция max возвращает максимальное из двух чисел int max(int а, int b) { if (a > b) return(a); else return (b) ; } Задача 187 // Функция compare возвращает результат сравнения чисел //в виде символа отношения tinclude "stdio.h" #include "conio.h" char compare(int a, int b) { char res; if (a > b) res = '>'; else if (a < b) res = *<'; else res = *='; return(res); } void mainO { int xl,x2; // сравниваемые числа cheu: res; // результат сравнения puts("Введите два целых числа и нажмите <Enter>"); printf("->"); scanf("%i%i", &xl, &x2); res = compare(xl,x2); // вызов функции программиста printf("%i %c %i\n", xl, res, x2); puts("\nДля завершения работы программы \ нажмите <Enter>"); getch(); 162 С/С-^+ в задачах и примерах Задача 188 // Вычисляет сопротивление электрической цепи float sopr( float rl, float г2, int t) ( // rl,r2 - величины сопротивлений // t - тип соединения: // 1 - последовательное; // 2 - параллельное. // если тип соединения указан неверно, //то функция возвращает -1 fl oat г; i f ( t==l) г = rl + г2; el se i f (t== 2) г = г1*г2/(г1+г2); el se г = - 1; return(г); }

Соседние файлы в папке Библиотека задач