Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Типы, операции, выраженияСтр 1 из 21Следующая ⇒
Руденко Т.В.
Сборник задач и упражнений по языку Си.
(учебное пособие для студентов II курса)
Москва 1999 УДК 519.682
Представлены задачи и упражнения по языку Си и программированию на нем. Рассматриваемая версия Си соответствует международному и ANSI-стандарту этого языка.
Сборник составлен как дополнение к учебнику Б. Кернигана, Д. Ритчи «Язык программирования Си» (М., «Финансы и статистика», 1992) и с учетом опыта преподавания программирования на факультете вычислительной математики и кибернетики МГУ.
Для студентов факультета ВМК в поддержку основного лекционного курса “Системное программное обеспечение” и для преподавателей, ведущих практические занятия по этому курсу.
Автор выражает благодарность сотрудникам кафедры алгоритмических языков за помощь и поддержку при создании этого сборника.
Рецензенты: доц. Машечкин И.В. доц. Терехин А.Н.
Руденко Т.В. “Сборник задач и упражнений по языку Си (учебное пособие для студентов II курса)”.
Издательский отдел факультета ВМиК МГУ (лицензия ЛР №040777 от 23.07.96), 1999.-80 с.
Печатается по решению Редакционно-издательского Совета факультета вычислительной математики и кибернетики МГУ им. М.В. Ломоносова
ISBN 5-89407-048-1
Ó Издательский отдел факультета вычислительной математики и кибернетики МГУ им. М.В.Ломоносова, 1999 ПРЕДИСЛОВИЕ
Сборник задач составлен как дополнение к учебнику Б. Кернигана и Д. Ритчи «Язык программирования Си» [1], поэтому в нем сохранен такой же порядок разделов. Однако предполагается, что некоторое минимальное представление о структуре программы на Си и простейшем вводе-выводе у читателя имеется (в объеме разделов 1.7 и 1.8 первой главы учебника по Си [1]). Сборник может быть использован и независимо от учебника Б. Кернигана и Д. Ритчи; рассматриваемая версия Си соответствует стандарту ANSI (X3.159 - 1989) [2]. Кроме того, в сборнике приведено краткое описание заданий практикума, которые рекомендуется выполнить для закрепления пройденного материала и получения навыков в написании законченных программ. Значительную часть сборника составляют приложения, где описана библиотека стандартных функций языка Си, некоторые системные функции ОС UNIX и фрагменты стандарта языка Си, связанные с правилами приведения типов и адресной арифметикой.
ТИПЫ, ОПЕРАЦИИ, ВЫРАЖЕНИЯ
2.1. Верно ли записаны константы, представляющие целочисленные значения? Для верно записанных констант определить их значение, тип. 123 1E6 123456789LU -5 0XFUL ‘0’ 058 ‘\x7’ 0X-1AD ‘\122’ 00123 0xffffffL 01A -‘x’ ² x² ‘a’U 0731UL ‘\n’ +0xaf 0X0
2.2. Верно ли записаны константы с плавающей точкой? Для верно записанных констант определить их значение, тип. 1.71 1E-6 0.314159E1F.005 0051E-04 5.E+2 0e0 0x1A1.5 05.5 0 0X1E6 0F 1234.56789L 1.0E-10D 3.1415U 1e-2f -12.3E-6 +10e6 123456L E-6
2.3. Верно ли записаны выражения? Для верно записанных выражений вычислить их значения (операции + - * / % =): int a, b, c, d, e; a = 2; b = 13; c = 7; d = 19; e = -4; b / a / c d / a % c c % d-e -e % a + b / a *-5+5 b % e 7-d%+(3-a) b % - e * c 9 / c - - 20 / d
2.4. Верно ли решена задача: «значение целочисленной переменной с увеличить на 1; целочисленной переменной а присвоить значение, равное удвоенному значению переменной с». int a, c; c = 5; a). c ++; b). a = 2 * c++; c). c += 1; d). a = c++ + c; a = 2 * c; a = c + c;
e). ++c; f). a = ++ c + c; g). a = c += 1 + c; h). a = (c+=1)+c; a = c + c;
2.5. Верно ли решена задача: «значение целочисленной переменной с уменьшить на 1; целочисленной переменной а присвоить значение, равное частному от деления переменной с на 2». int a, c; c = 5; a). -- c; b). a = -- c / 2; c). c -= 1; d). a = c -- / 2; a = c / 2; a = c % 2;
e). a = c -= 1/2; f). a = (c = c - 1)/2; g). a = (c -= 1)/2; h). a=(c-= 1)/2.0;
2.6. Эквивалентны ли выражения? a) E1 op= E2 и E1 = E1 op E2 b) E1 op= E2 и E1 = E1 op (E2) Замечание: здесь E1, E2 - выражения допустимого в этом случае типа; op - операция (одна из + - * / % > > < < & ^ |).
2.7. Верно ли записаны выражения? Для верно записанных выражений вычислить их значения (операции + - * / ++ - - операции присваивания): int a, b, c; a = 2; b = 6; c = 3; - - - a -- - a b-- - a a += a ++ ++ b / a ++ * --c a --- b - a-- -b a ++ = b a = a ++ b++ / ++a * c -- - --a a- --c a ++ = a ++ a = b a = (b + 1) ++
2.8. Верно ли записаны выражения? Для верно записанных выражений вычислить их значения, определить тип результата (операции + - * / % ++ операции отношения, операции присваивания): int i, j, k, m; char c, d; i = 1; j = 2; k = -7; m = 0; c = ‘w’; d = ’a’+1 < c m = - i - 5 * j > = k+1 i + j++ + k = = -2*j m = 3 < j < 5 m = 3 = = j < 5 m = = c = ’w’ m = c! = 87 m = c =! 87 m =! c = 87 m =! c+87! m = =c + 87 m! = c + 87 k = = j - 9 = = i k *= 3 + j i + j =! k i += ++ j + 3 k %= m = 1 + n / 2 1 + 3 * n += 7 / 5 1 + 3 * (n += 7) / 5 c + i < c - ‘x’+10 i - k = = ‘0’+9 < 10
2.9. В логике справедливы утверждения: not (not x) = x x and true = x Верны ли соответствующие утверждения для операций! и & & в Си? Ответ обосновать.
2.10. При любом вещественном y > 0 x < x + y математически верно. Верно ли подобное утверждение для выражения на Си?
2.11. Написать эквивалентное выражение, не содержащее операции! ! (a> b)! (2*a == b+4)! (a< b & & c< d) ! (a< 2 || a> 5)! (a< 1 || b< 2 & & c< 3)
2.12. Пусть char c; short s; int i; unsigned u; signed char sc; float f; double d; long lng; unsigned short us; long double ld; Определить тип выражений: c - s / i u * 3 - 3.0 * u - i u - us * i (sc + d) * ld (5 * lng - ‘a’) * (s + u / 2) (f + 3) / (2.5f - s * 3.14)
2.13. Допустимо ли в Си? Если " да" - опишите семантику этих действий; если " нет" - объясните почему. а). ... b). ... int i; int a, b, m, n, z; i = (1 || 2) % (1 | 2); m = n = 5; printf (² i = %d\n², i); z = a = b = 0; z--, (a = b) = z + (m! = n); printf (² %d %d %d %d %d\n², a, b, m, n, z); с). ... d). ... int i = 1; double x = 1.9; int a; i = i < < i | i; double b = 3.7; printf (² i = %d\n², i); a = b += (1 & & 2 || 3)! = (int)x; printf (² %f %d %f\n², x, a, b); e). ... f).. .. int x; int i, x, y; x = 5; y = 10; i = 15; x = 5; ++ x =10; x = (y = 0, i = 1); printf (" %d\n", x); printf(" %d %d %d\n", i, x, y); (x = y == 0), i=1; printf(" %d %d %d\n", i, x, y); g). ... h). ... int x, y; int x = 2, y, z; x = 5; y = x & & ++ x; x *= 3+2; x *= y = z = 4; printf(" %d %d\n", x, y); printf (" %d %d %d\n", x, y, z); x = y == z; x == (y = z); printf (" %d %d %d\n", x, y, z); i). ... j). ... int x = 2, y = 1, z = 0; int x = 03, y = 02, z = 01; y = x & & y || z; printf(" %d\n", x | y & -z); x = x ||! y & & z; printf(" %d\n", x ^ y & -z); z = x / ++x; printf(" %d\n", x & y & & z); printf(" %d %d %d\n", x, y, z); printf(" %d\n", x< < 3); k). ... l). ... int x, y, z; x = y = z = 1; int x, y, z, i; x = y = z = 1; x += y += z; i = ++x || ++y & & ++z; printf(" %d\n", x < y? y++: x++); printf(" %d%d%d%d\n", x, y, z, i); printf(" %d\n", z+=x< y? ++x: y--); i = x++ < = --y || ++z > = i; printf(" %d %d %d\n", x, y, z); printf(" %d%d%d%d\n", x, y, z, i); printf(" %d\n", z> =y & & y> =x);
2.14. Что будет напечатано в результате выполнения следующего фрагмента программы? ... double d; float f; long lng; int i; short s; s = i = lng = f = d = 100/3; printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d); d = f = lng = i = s =100/3; printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d); s = i = lng = f = d = 1000000/3; printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d); d = f = lng = i = s =1000000/3; printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d); lng = s = f = i = d =100/3; printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d); f = s = d = lng = i = (double)100/3; printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d); s = i = lng = f = d = 100/(double)3; printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d); f = s = d = lng = i = (double)100/3; printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d); i = s = lng = d = f = (double)(100/3); printf(" s = %hd i = %d lng = %ld f = %f d = %f\n", s, i, lng, f, d);
2.15. Что будет напечатано в результате выполнения следующего фрагмента программы? double d = 3.2, x; int i = 2, y; x = (y = d / i) * 2; printf (" x = %f; y = %d\n", x, y); x = (y = d / i) * 2; printf (" x = %d; y = %f\n", x, y); y = (x = d / i) * 2; printf (" x = %f; y = %d\n", x, y); y = d * (x = 2.5 / d); printf (" x = %f; y = %d\n", x, y); x = d * (y = ((int)2.9 + 1.1) / d; printf (" x = %d y = %f\n", x, y);
2.16. Дано вещественное число x. Не пользуясь никакими операциями, кроме умножения, сложения и вычитания, вычислить 2x4-3x3+4x2-5x+6. Разрешается использовать не более четырех умножений и четырех сложений и вычитаний.
2.17. Целой переменной k присвоить значение, равное третьей от конца цифре в записи целого положительного числа x.
2.18. Целой переменной k присвоить значение, равное сумме цифр в записи целого положительного трехзначного числа x.
2.19. Целой переменной k присвоить значение, равное первой цифре дробной части в записи вещественного положительного числа x.
2.20. Определить число, полученное выписыванием в обратном порядке цифр заданного целого трехзначного числа.
2.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, их комбинации; запись констант в восьмеричной и шестнадцатиричной системах счисления) · вещественных (обычная форма записи, в экспоненциальном виде, f/F, l/L, e/E) · символьных (обычная форма записи, с помощью эскейп-последовательности) и строковых (в частности, происходит ли конкатенация рядом расположенных строковых констант) d) выяснить, как упорядочены коды символов '0' - '9', 'a' - 'z', 'A' - 'Z', пробел (между собой и относительно друг друга); e) проконтролировать, происходит ли инициализация переменных по умолчанию; f) проверить, реагирует ли транслятор на попытку изменить константу; g) исследовать особенности выполнения операции % с отрицательными операндами; h) проверьте, действительно ли операции отношения == и! = имеют более низкий приоритет, чем все другие операции отношения; i) проверьте, действительно ли выполняется правило " ленивых вычислений" выражений в Си, т.е. прекращается ли вычисление выражений с логическими операциями, если возможно " досрочно" установить значение результата; j) проверьте, все ли виды операнда операции sizeof (X), определяемые стандартом для арифметических типов, допускаются компилятором; действительно ли выражение X не вычисляется.
|