Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 662; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.38.176 (0.012 с.) |