Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Синтаксис и семантика операторов языка СиСодержание книги
Поиск на нашем сайте
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) в Си 3.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 - выражение допустимого в этом случае типа;
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); for (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 может не выполниться ни разу, а тело цикла do-while выполнится хотя бы один раз.» 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; case 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.17. Для данных чисел a, b и c определить, сколько корней имеет уравнение ax2+bx+c = 0, и распечатать их. Если уравнение имеет комплексные корни, то распечатать их в виде v ± iw.
3.18. Подсчитать количество натуральных чисел n (111 £ n £ 999), в записи которых есть две одинаковые цифры.
3.19. Подсчитать количество натуральных чисел n (102 £ n £ 987), в которых все три цифры различны.
3.20. Подсчитать количество натуральных чисел n (11 £ n £ 999), являющихся палиндромами, и распечатать их.
3.21. Подсчитать количество цифр в десятичной записи целого неотрицательного числа n.
3.22. Определить, верно ли, что куб суммы цифр натурального числа n равен n2.
3.23. Определить, является ли натуральное число n степенью числа 3.
3.24. Для данного вещественного числа a среди чисел 1, 1 + (1/2), 1 + (1/2) + (1/3),... найти первое, большее a.
3.25. Для данного вещественного положительного числа a найти наименьшее целое положительное n такое, что 1 + 1/2 +1/3+... + 1/n > a.
3.26. Даны натуральное число n и вещественное число x. Среди чисел exp(cos(x2k))sin(x3k) (k = 1, 2,..., n) найти ближайшее к какому-нибудь целому.
3.27. Дано натуральное число n. Найти значение числа, полученного следующим образом: из записи числа n выбросить цифры 0 и 5, оставив прежним порядок остальных цифр.
3.28. Дано натуральное число n. Получить все такие натуральные q, что n делится на q2 и не делится на q3.
3.29. Дано натуральное число n. Получить все его натуральные делители.
3.30. Дано целое число m > 1.Получить наибольшее целое k, при котором 4k < m.
3.31. Дано натуральное число n. Получить наименьшее число вида 2r, превосходящее n.
3.32. Распечатать первые n простых чисел (p - простое число, если
3.33. Даны вещественные числа x и y (x > 0, y > 1). Получить целое число k (положительное, отрицательное или равное нулю), удовлетворяющее условию yk-1 £ x < yk.
3.34. Распечатать первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk+1 = fk-1+ fk;
3.35. Вычислить с точностью eps > 0 значение «золотого сечения» - 0.5*(1+Ö5) - предел последовательности { qi }при i ® ¥ qi = fi / fi-1, i = 2, 3,...где fi - числа Фибоначчи (см. предыдущую задачу). Считать, что требуемая точность достигнута, если | qi-qi+1| < eps. 3.36. Распечатать числа Фибоначчи (см. задачу 3.34), являющиеся простыми числами со значениями меньше n.
3.37. Вычислить с точностью eps > 0 значение числа e - предел последовательности { xi }при i ® ¥ xi = (1+1/i)i, i = 1, 2,... Считать, что требуемая точность достигнута, если | xi-xi+1| < eps.
3.38. Вычислить значение å i! для i, изменяющихся от 1 до n. Воспользоваться соотношением å i! = 1 + 1*2 + 1*2*3 +...+ 1*2*3*...*n = 1+2*(1+3*(1+ +n*(1)...)).
3.39. Пусть a0 и b0 - положительные вещественные числа. Соотношениями an+1 = Ö(anbn); bn+1 = (an+bn) / 2 при n = 0, 1, 2,... задаются две бесконечные числовые последовательности {an}и {bn}, которые сходятся к общему пределу M(a0,b0), называемому арифметико-геометрическим средним чисел a0 и b0. Найти приближенное значение M(a0,b0) с точностью eps > 0. Поскольку при
3.40. Вычислить квадратные корни вещественных чисел x = 2.0, 3.0,..., 100.0. Распечатать значения x, Öx, количество итераций, необходимых для вычисления корня с точностью eps > 0. Для a > 0 величина Öa вычисляется следующим образом: a0 = 1; ai+1 = 0.5*(ai+a/ai ) i = 0, 1, 2,... Считать, что требуемая точность достигнута, если | ai-ai+1| < eps.
3.41. Найти приближенное значение числа p с точностью eps > 0. Для этого можно использовать представление числа 2/p в виде произведения корней Ö(1/2) *Ö(1/2+1/2Ö(1/2))*Ö(1/2+ 1/2Ö(1/2+1/2Ö(1/2)))*.... Вычисления прекращаются, когда два следующих друг за другом приближения для числа p будут отличаться меньше, чем на eps.
3.42. Для данного вещественного числа x и натурального n вычислить: a) sin x + sin2x +... + sinnx b) sin x + sinx2 +... + sinxn c) sin x + sin(sin x) +... + sin (sin (... sin(sin x)...))
3.43. Алгоритм Евклида нахождения наибольшего общего делителя (НОД) неотрицательных целых чисел основан на следующих свойствах этой величины: пусть m и n - одновременно не равные нулю целые неотрицательные числа и m ³ n. Тогда, если n = 0, то НОД(n, m) = m, а если n ¹ 0, то для чисел m, n, и r, где r - остаток от деления m на n, выполняется равенство НОД(m, n) = НОД(n, r). Используя алгоритм Евклида, определить наибольший общий делитель неотрицательных целых чисел a и b.
3.44. Вычислить 1 - 1/2 + 1/3 - 1/4 +...+1/9999 - 1/10000 следующими способами: a). последовательно слева направо; b). последовательно справа налево; c). последовательно слева направо вычисляются 1 +1/3 + 1/5 +... + 1/9999 и 1/2 + 1/4 +... + 1/10000, затем второе значение вычитается из первого; d). последовательно справа налево вычисляются 1 +1/3 + 1/5 +... + 1/9999 и 1/2 + 1/4 +... + 1/10000, затем второе значение вычитается из первого. Сравнить и объяснить полученные результаты.
3.45. Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением самого себя. Дано натуральное чис-
3.46. Определить, является ли число простых чисел, меньших 10000, простым числом.
3.47. Если p и q - простые числа и q = p+2, то они называются простыми сдвоенными числами или “близнецами” (twin primes). Например, 3 и 5 - такие простые числа. Распечатать все простые сдвоенные числа, меньшие N.
Обработка символьных данных
Замечание: при решении некоторых задач этого раздела необходимы минимальные знания о «стандартном» вводе и выводе литер.
3.48. Пусть во входном потоке находится последовательность литер, заканчивающаяся точкой (кодировка ASCII): a) определить, сколько раз в этой последовательности встречается символ ‘a’; b) определить, сколько символов ‘e’ предшествует первому вхождению символа ‘u’ (либо сколько всего символов ‘e’ в этой последовательности, если она не содержит символа ‘u’); c) выяснить, есть ли в данной последовательности хотя бы одна пара символов-соседей ‘n’ и ‘o’, т.е. образующих сочетание ‘n’ ‘o’ либо ‘o’ ‘n’; d) выяснить, чередуются ли в данной последовательности символы ‘+’ и ‘-‘, и сколько раз каждый из этих символов входит в эту последовательность; e) выяснить, сколько раз в данную последовательность входит группа подряд идущих символов, образующих слово С++; f) выяснить, есть ли среди символов этой последовательности символы, образующие слово char; g) выяснить, есть ли в данной последовательности фрагмент из подряд идущих литер, образующий начало латинского алфавита (строчные буквы), и какова его длина. Если таких фрагментов несколько, найти длину наибольшего из них. Если такого фрагмента нет, то считать длину равной нулю; h) выяснить, есть ли в данной последовательности фрагменты из подряд идущих цифр, изображающие целые числа без знака. Найти значение наибольшего из этих чисел. Если в этой последовательности нет ни одной цифры, то считать, что это значение равно нулю; i) определить, имеет ли данная последовательность символов структуру, которая может быть описана с помощью следующих правил: последовательность::= слагаемое + последовательность | слагаемое слагаемое::= идентификатор | целое идентификатор::= буква | идентификатор буква | идентификатор цифра буква::= A | B | C | D | E | F | G | H | I | J | K цифра::= 0 | 1 | 2 | 3 | 4 | 5 целое::= цифра | целое цифра
3.49. Пусть во входном потоке находится последовательность литер, заканчивающаяся точкой (кодировка ASCII). Вывести в выходной поток последовательность литер, измененную следующим образом: a) заменить все символы ‘?’ на’!’; b) удалить все символы ‘-‘ и удвоить все символы ‘&’; c) удалить все символы, не являющиеся строчными латинскими буквами; d) заменить все прописные латинские буквы строчными (другие символы копировать в выходной поток без изменения); e) заменить все строчные латинские буквы прописными (другие символы копировать в выходной поток без изменения); f) каждую группу рядом стоящих символов ‘+’ заменить одним таким символом; g) каждую группу из n рядом стоящих символов ‘*’ заменить группой из n/2 рядом стоящих символов ‘+’ (n >= 2); одиночные ‘*’ копировать в выходной поток без изменения; h) удалить из каждой группы подряд идущих цифр все начальные незначащие нули (если группа состоит только из нулей, то заменить эту группу одним нулем); i) удалить все комбинации символов the; j) оставить только те группы цифр, которые составлены из подряд идущих цифр с возрастающими значениями; все остальные цифры и группы цифр удалить (другие символы копировать в выходной поток без изменения); k) заменить все комбинации символов child комбинациями символов children; l) удалить группы символов, расположенные между фигурными скобками { и }. Скобки тоже должны быть удалены. Предполагается, что скобки сбалансированы, и внутри каждой пары скобок других фигурных скобок нет.
3.50. Пусть во входном потоке находится последовательность литер, заканчивающаяся маркером конца $ (кодировка ASCII). Вывести в выходной поток последовательность литер, измененную следующим образом: a) удалить из каждой группы подряд идущих цифр, в которой более двух цифр и которой предшествует точка, все цифры, начиная с третьей (например, a+12.3456-b-0.456789+1.3-45678 преобразуется в a+12.34-b-0.45+1.3-45678); b) удалить из каждой группы цифр, которой не предшествует точка, все начальные нули (кроме последнего, если за ним идет точка либо в этой группе нет других цифр, кроме нулей; например, a-000123+bc+0000.0008-0000+0001.07 преобразуется в a-123+bc+0.0008-0+1.07).
|
||
|
Последнее изменение этой страницы: 2017-02-05; просмотров: 737; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.10 (0.011 с.) |