Т.В. Руденко - Сборник задач и упражнений по языку Си (1114664), страница 2
Текст из файла (страница 2)
Не пользуясь никакими операциями,кроме умножения, сложения и вычитания, вычислить2x4-3x3+4x2-5x+6.Разрешается использовать не более четырех умножений и четырех сложений и вычитаний.2.17. Целой переменной k присвоить значение, равное третьей от концацифре в записи целого положительного числа x.2.18. Целой переменной k присвоить значение, равное сумме цифр в записи целого положительного трехзначного числа x.2.19.
Целой переменной k присвоить значение, равное первой цифредробной части в записи вещественного положительного числа x.2.20. Определить число, полученное выписыванием в обратном порядкецифр заданного целого трехзначного числа.62.21. Идет n-ая секунда суток. Определить, сколько полных часов иполных минут прошло к этому моменту.2.22. Дано вещественное число x . Не пользуясь никакими операциями,кроме умножения, получитьa) x21 за шесть операцийb) x3 и x10 за четыре операцииc) x5 и x13 за пять операцийd) x2, x5 и x17 за шесть операцийe) x4, x12 и x28 за шесть операций2.23. Выражения, соединенные операциями && и || , по правилам Сивычисляются слева направо; вычисления прекращаются, как только становитсяизвестна истинность или ложность результата.
В других языках программирования, например в Паскале, вычисляются все части выражения в любом случае.Приведите «за» и «против» каждого из этих решений.2.24. Почему в Си не допускается, чтобы один и тот же литералперечислитель входил в два различных перечислимых типа? Могут ли совпадать имена литералов-перечислителей и имена обычных переменных в однойобласти видимости? Могут ли разные литералы-перечислители иметь одинаковые значения?2.25. «Упаковать» четыре символа в беззнаковое целое. Длина беззнакового целого равна 4.2.26. «Распаковать» беззнаковое целое число в четыре символа.
Длинабеззнакового целого равна 4.2.27. Заменить в целочисленной переменной x n бит, начиная с позицииp, n старшими инвертированными битами целочисленной переменной y.2.28. Циклически сдвинуть значение целочисленной величины на n позиций вправо.2.29. Циклически сдвинуть значение целочисленной величины на n позиций влево.2.30.
Выясните некоторые свойства и особенности поведения доступного Вам транслятора Си:a) выяснить, сколько байт отведено для хранения данных типа short,int, long, float, double и long double;b) выяснить способ представления типа char ( signed- или unsignedвариант );c) проконтролировать, все ли способы записи констант допустимы:• целых ( обычная форма записи, u/U, l/L, их комбинации; запись констант в восьмеричной и шестнадцатиричной системах счисления )7• вещественных ( обычная форма записи, в экспоненциальномвиде, f/F, l/L, e/E )• символьных ( обычная форма записи, с помощью эскейппоследовательности ) и строковых ( в частности, происходит ли конкатенация рядом расположенных строковых констант )d) выяснить, как упорядочены коды символов '0' - '9', 'a' - 'z', 'A' - 'Z',пробел (между собой и относительно друг друга);e) проконтролировать, происходит ли инициализация переменных поумолчанию;f) проверить, реагирует ли транслятор на попытку изменить константу;g) исследовать особенности выполнения операции % с отрицательнымиоперандами;h) проверьте, действительно ли операции отношения == и != имеютболее низкий приоритет, чем все другие операции отношения;i) проверьте, действительно ли выполняется правило "ленивых вычислений" выражений в Си, т.е.
прекращается ли вычисление выражений с логическими операциями, если возможно "досрочно" установить значение результата;j) проверьте, все ли виды операнда операции sizeof (X), определяемыестандартом для арифметических типов, допускаются компилятором; действительно ли выражение X не вычисляется.3. УПРАВЛЕНИЕ3.1Синтаксис и семантика операторов языка Си3.1. Перечислить все ситуации, когда в программах на Си используетсясоставной оператор.3.2. В Си точка с запятой используется в качестве признака конца оператора; в Паскале - в качестве разделителя операторов. Сравните эти решения,сформулируйте возможные «за» и «против».3.3.
Эквивалентны ли следующие фрагменты программы:if (e1) if (e2) S1; else S2;if (e1) { if (e2) S1; else S2; }if (e1) { if (e2) S1; } else S2;if (e1) if (e2) S1; else ; else S2;if (e1) if (e2) S1; else S2; else ;Замечание: здесь e1 и e2 - выражения допустимого в этом случае типа;S1 и S2 - произвольные операторы.3.4. Описать в виде блок-схемы семантику каждого оператора цикла вСи (с учетом операторов break и continue, которые, возможно, содержатся втеле цикла ).3.5. Может ли быть определено число итераций цикла for до начала еговыполнения?a) в Паскалеb) в Си83.6. Верно ли решена задача: «найти сумму первых 100 натуральныхчисел»?a) i = 1; sum = 0;for ( ; i <= 100; i++) sum += i;b) sum = 0;for ( i = 1; i <= 100;) sum += i++;c) for ( i = 1, sum = 0; i <= 100; sum += i+, i++);d) for ( i = 1, sum = 0; i <= 100; sum += i++);e) for ( i = 0, sum = 0; i++, i <= 100; sum += i);3.7.
Выразить семантику цикла for с помощью цикла while. Эквивалентны ли полученные фрагменты программ?3.8. Эквивалентны ли следующие фрагменты программы:a) for ( ; e2 ; ) S;иwhile ( e2 ) S;b) for ( ; ; ) S;иwhile (1) S;Замечание: здесь e2 - выражение допустимого в этом случае типа;S - произвольный оператор.3.9. Можно ли написать фрагмент программы на Си, эквивалентныйданному, используя один оператор цикла for с пустым оператором в качестветела цикла?i = 0; c = getchar();while (c != ’ ’ && c != ’\n’ && c !=’ \t’ && c != EOF){ i++; c = getchar(); }3.10.
Сравнить семантику операторов repeat в Паскале и do-while в Си.3.11. Улучшить стиль (структуру) следующих фрагментов программына Си:a) while ( E1 ){ if ( E2 ) continue; S; }b) do { if ( E1 ) continue; else S1; S2; }while ( E2 );Замечание: здесь E1, E2 - выражения допустимого в этом случае типа;S, S1, S2 - произвольные операторы.3.12. Что напечатает следующая программа?# include <stdio.h>main(){ int x, y, z;x = y = 0;while ( y < 10 ) ++y; x += y;printf ("x = %d y = %d\n", x, y);x = y = 0;while ( y < 10 ) x += ++ y;printf (" x= %d y = %d\n", x, y);y = 1;while ( y < 10 ) { x = y ++; z = ++y;}printf ("x = %d y = %d z = %d\n", x, y, z);9for ( y =1; y < 10; y++ ) x = y;printf (" x= %d y = %d\n", x, y);for ( y = 1; ( x = y ) < 10; y++ );printf ("x = %d y = %d\n", x, y);for ( x = 0, y = 1000; y > 1; x++, y /= 10 )printf ("x = %d y = %d\n", x, y);}3.13. Сравнить семантику операторов case в Паскале и switch в Си.3.14.
Верны ли следующие утверждения:a) «любое выражение в Си может быть преобразовано в оператор добавлением к нему точки с запятой ( ; ) »b) «пустой оператор в Си - это отсутствие каких-либо символов в томместе конструкции, где по синтаксису может находиться оператор»c) «составной оператор ( блок ) в Си - это совокупность операторов,заключенная в фигурные скобки { }»d) «оператор присваивания в Си - это выражение видапеременная = выражение»e) «тип выражения в условии в операторе if , в условии завершения цикла в операторах цикла может быть скалярным (т.е. любым целочисленным, любым вещественным либо указателем )»f) «в блоке описания/объявления и операторы могут располагаться влюбом порядке; единственное требование - использование не должно предшествовать описанию/объявлению»e) «цикл for ( ; ; ) является бесконечным циклом, и поэтому его использование в Си запрещено»f) «семантика операторов цикла while и do-while в Си различается только тем, что тело цикла while может не выполниться ни разу, а тело цикла dowhile выполнится хотя бы один раз.»g) «каждая ветвь в операторе switch должна быть помечена одной илинесколькими различными целочисленными константами или константнымивыражениями»h) «если в операторе switch нет ветви default, то значение выражениявыбора должно совпадать с одной из констант ветвей case»i) «в операторе switch ветви case и ветвь default можно располагать влюбом порядке»3.15.
Верно ли утверждение: « действие оператора continue; в приведенных ниже примерах эквивалентно действию оператора go to next; ».a) while ( E ) { S; ... continue; ... S; next: ; }b) do { S; ... continue; ... S; } while ( E ); next: ; ...c) for ( E1; E2; E3) { S; ... continue; ... S; next: ; }d) while ( E) { S; ... for (E1;E2;E3) { S; ... continue; ... S; } ... S; next:; }e) while ( E) { S; ... for (E1;E2;E3) { S; ...
continue; ... S; next: ; } ... S;}f) switch ( E ) { case C1: S;case C2: S; continue;case C3: S; }next:; ...g) switch ( E ) { case C1: S;case C2: S; continue;10case C3: next: S; }h) next: switch ( E ) { case C1: S;case C2: S; continue;case C3: S; }Замечание: здесь E, E1, E2, E3 - выражения допустимого в этом случае типа ; S - произвольный оператор; C1, C2 C3 - константы подходящего типа.3.16. Верно ли утверждение: « действие оператора break; в приведенных ниже примерах эквивалентно действию оператора go to next; ».a) while ( E ) { S; ... break; ...
S; next: ; }b) while ( E ) { S; ... break; ... S; } next: ; ...c) do { S; ... break; ... S; } while ( E ); next: ; ...d) for ( E1; E2; E3) { S; ... break; ... S; next: ; }e) while ( E) { S; ... for ( E1; E2; E3) { S; ... break; ... S; } next: ; ... S; }f) while ( E ) { S; ... for ( E1; E2; E3) { S; ... break; ... S; } ...
S; next: ; }g) while ( E) { S; ... for ( E1; E2; E3) { S; ... break; ... S; } ... S; } next: ;h) switch ( E ) { case C1: S;case C2: S; break;case C3: S; }next:; ...i) switch ( E ) { case C1: S;case C2: S; break; S;case C3: next: S; }Замечание: здесь E, E1, E2, E3 - выражения допустимого в этом случае типа; S - произвольный оператор; C1, C2 C3 - константы подходящего типа.3.2Обработка числовых данныхЗамечание: при решении некоторых задач этого раздела необходимыминимальные знания о «стандартном» вводе и выводе целых и вещественныхчисел.3.17. Для данных чисел a, b и c определить, сколько корней имеет уравнение ax2+bx+c = 0, и распечатать их.