Задачник и решебник (1087980), страница 15
Текст из файла (страница 15)
Решения/37puts("Для завершения программы нажмите <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 ] ;p r i n t f ( " О п р е д е л и т е л ь матрицыХп");f o r ( i = 0; i < 2 ; i+-i-)p r i n t f ( " % f %f\n", a [ i ] [ 0 ] , a [ i ] [ l ] ) ;p r i n t f ( " р а в е н %f",det);printf("\пДля завершения нажмите <Enter>");getch();}Задача 163// Строка с максимальной суммой элементов#include <stdio.h>#include <conio.h>#define N 3 // размер квадратной матрицы138C/C-i'+ в задачах и примерахv o i 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.
РешенияЗадача 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];139140C/C-h-h в задачах и примерахi f (temp != sum) ok = 0;i++;} w h i l e (ok && i < n ) ;if( 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.
РешенияЗадача 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>141142C/C+'t- в задачах и примерах{putch(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" // для доступа к функции delayvoid main О{char msg[] = "\п\гПриветствую великого программиста!\0";int i;// номер символаЧасть //.
Решения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>tdefineSM 128 // 0 - символы с кодами О - 127// 128 - символы с кодами 128 - 256143^144C/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.
Решения145while ( 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++;}printf("\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 в dst146C/C-^-i- в задачах и примерахwhile ( 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. Решения#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;// пусть строка — не дробное число14714SC/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 " , s t ) ;if ( st[i] I I !ok )printf("не " ) ;printf ("является дробным числом без з н а к а Л п " ) ;printf("\пДля завершения нажмите <Enter>");getch();}Задача 177// Преобразует двоичное число в десятичноеtinclude <stdio.h>#include <conio.h>#include "string.h"void m a i n O{Часть IL Решенияchar bin[16];long int dec;int i;int v;149////////изображение двоичного числадесятичное числономер разряда двоичного числавес 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] <= '9Mdec +- V * (st[i]- 48); // (int)'0'=48, (int)»l'=49// и т.д.•leeif (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.
РешенияЗадача 179// Преобразует десятичное число в другую// систему счисления (от 2-х до 10-ти)#include <stdio.h>#include <conio.h>void mainO{int osn.// основание системы счисленияn,// исходное числоСП,// копия исходного числаг;// остаток от деления числа// на основание сист. счисл.char st[17]; // представление числа в заданной// системе счисленияint i;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 + + ] ;st[j] = 40';151152С/С+-^ в задачах и примерахst[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 до тех пор,// пока остаток от деления больше 16printf("ХпДесятичному числу %d", п ) ;printf(" соотвествует шестнадцатеричное " ) ;st[5] = 4 0 ' ;i = 4;do {r=n%16;// очередная цифраn=n/16// / целая часть рез-та деленияi f (г < 10)st[i—] = г + 48; / / (int) ' 0 ' = 4 8 , (int) •1»==49 и т.