Т.В. Руденко - Сборник задач и упражнений по языку Си
Описание файла
PDF-файл из архива "Т.В. Руденко - Сборник задач и упражнений по языку Си", который расположен в категории "". Всё это находится в предмете "операционные системы" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Московский государственный университет им. М.В. ЛомоносоваФакультет вычислительной математики и кибернетикиРуденко Т.В.Сборник задач и упражнений по языку Си.( учебное пособие для студентов II курса )Москва1999УДК 519.682Представлены задачи и упражнения по языку Си и программированию нанем. Рассматриваемая версия Си соответствует международному и ANSIстандарту этого языка.Сборник составлен как дополнение к учебнику Б. Кернигана, Д. Ритчи«Язык программирования Си» (М., «Финансы и статистика», 1992) и с учетомопыта преподавания программирования на факультете вычислительной математики и кибернетики МГУ.Для студентов факультета ВМК в поддержку основного лекционного курса “Системное программное обеспечение” и для преподавателей, ведущихпрактические занятия по этому курсу.Автор выражает благодарность сотрудникам кафедры алгоритмическихязыков за помощь и поддержку при создании этого сборника.Рецензенты:доц.
Машечкин И.В.доц. Терехин А.Н.Руденко Т.В. “Сборник задач и упражнений по языку Си (учебное пособие для студентов II курса)”.Издательский отдел факультета ВМиК МГУ(лицензия ЛР №040777 от 23.07.96), 1999.-80 с.Печатается по решению Редакционно-издательского Совета факультетавычислительной математики и кибернетики МГУ им. М.В. ЛомоносоваISBN 5-89407-048-1© Издательский отдел факультета вычислительной математики и кибернетики МГУ им. М.В.Ломоносова, 199921.
ПРЕДИСЛОВИЕСборник задач составлен как дополнение к учебнику Б. Кернигана и Д.Ритчи «Язык программирования Си» [1], поэтому в нем сохранен такой же порядок разделов. Однако предполагается, что некоторое минимальное представление о структуре программы на Си и простейшем вводе-выводе у читателяимеется (в объеме разделов 1.7 и 1.8 первой главы учебника по Си [1]). Сборникможет быть использован и независимо от учебника Б. Кернигана и Д.
Ритчи;рассматриваемая версия Си соответствует стандарту ANSI (X3.159 - 1989) [2].Кроме того, в сборнике приведено краткое описание заданий практикума, которые рекомендуется выполнить для закрепления пройденного материалаи получения навыков в написании законченных программ.Значительную часть сборника составляют приложения, где описанабиблиотека стандартных функций языка Си, некоторые системные функции ОСUNIX и фрагменты стандарта языка Си, связанные с правилами приведения типов и адресной арифметикой.2.
ТИПЫ, ОПЕРАЦИИ, ВЫРАЖЕНИЯ2.1. Верно ли записаны константы, представляющие целочисленныезначения? Для верно записанных констант определить их значение, тип.1231E6123456789LU-50XFUL‘0’058‘\x7’0X-1AD‘\122’001230xffffffL01A-‘x’″x″‘a’U0731UL‘\n’+0xaf0X02.2. Верно ли записаны константы с плавающей точкой? Для верно записанных констант определить их значение, тип.1.711E-60.314159E1F.0050051E-045.E+20e00x1A1.505.500X1E60F1234.56789L1.0E-10D3.1415U1e-2f-12.3E-6+10e6123456LE-62.3. Верно ли записаны выражения? Для верно записанных выраженийвычислить их значения ( операции + - * / % = ):int a, b, c, d, e;a = 2; b = 13; c = 7; d = 19; e = -4;b/a/cd/a%cc % d-e-e % a + b / a ∗-5+5b%e7-d%+(3-a)b % - e ∗ c 9 / c - - 20 / d2.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;3e). ++c;a = c + c;f). a = ++ c + c;g). a = c += 1 + c;h). a = (c+=1)+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 E2b) E1 op= E2иE1 = E1 op (E2)Замечание: здесь E1, E2 - выражения допустимого в этом случае типа ;op - операция (одна из + - * / % >> << & ^ | ).2.7. Верно ли записаны выражения? Для верно записанных выраженийвычислить их значения ( операции + - * / ++ - - операции присваивания ):int a, b, c; a = 2; b = 6; c = 3;- - -a-- - ab-- - aa += a ++++ b / a ++ ∗ --ca --- b- a-- -ba ++ = ba = a ++b++ / ++a ∗ c -- --aa- --ca ++ = a++ a = ba = ( 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 < cm = - i - 5 ∗ j >= k+1i + j++ + k = = -2∗jm=3<j<5m=3==j<5m = = c = ’w’m = c != 87m = c = ! 87m = ! c = 87m = !c+87! m = =c + 87m ! = c + 87k==j-9==ik ∗= 3 + ji + j = !ki += ++ j + 3k %= m = 1 + n / 21 + 3 ∗ n += 7 / 51 + 3 ∗ (n += 7) / 5 c + i < c - ‘x’+10i - k = = ‘0’+9 < 102.9.
В логике справедливы утверждения:not (not x) = xx and true = xВерны ли соответствующие утверждения для операций ! и && в Си?Ответ обосновать.2.10. При любом вещественном y > 0 x < x + y математически верно.Верно ли подобное утверждение для выражения на Си?2.11. Написать эквивалентное выражение, не содержащее операции !! ( a>b )! ( 2∗a == b+4 )! ( a<b && c<d )4! ( 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/iu ∗ 3 - 3.0 ∗ u - iu - us ∗ i( sc + d ) ∗ ld(5 ∗ lng - ‘a’ ) ∗ ( s + u / 2 )( f + 3 ) / ( 2.5f - s ∗ 3.14 )2.13.
Допустимо ли в Си? Если "да" вий; если "нет" - объясните почему.а). . . .b).int i;i = (1 || 2) % (1 | 2 );printf ( ″ i = %d\n″, i);опишите семантику этих дейст-...int a, b, m, n, z;m = n = 5;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);52.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 .