Объектно-ориентированное программирование. Лектор – к.т.н., доцент Петренко Т.Г. Лабораторные работы. 2012 -2013 уч.год.
Срок сдачи студентами лабораторной работы – последняя неделя сентября 2012 г.
Лабораторная работа № 1 ТЕМА: Введение в структурное программирование на С++
ЦЕЛЬ: Изучение основ синтаксиса и семантики языка С++, получение навыков разработки, отладки и выполнения консольной программы в среде Visual C++ 2010, изучение возможностей побитовой обработки информации с помощью операций языка С++.
1 Теоретические вопросы подготовки к работе:
1.Алфавит языка С++. Операции и операторы языка. Базовые типы данных. Выражение. Приоритетность операций.
2.Управляющие операторы языка С++.
3.Особенности языка С++.
4.Структура программы на С++.
5.Команды препроцессора.
6.Этапы разработки консольного приложения в среде Visual C++ 2010.
2 Контрольные вопросы по теме:
1.Понятие проекта и понятие конфигурации проекта в Visual Studio.
2.Возможности рабочего пространства проекта.
3.Этапы построения проекта для консольного приложения.
4.Особенности редактора исходных текстов в Visual Studio.
5.Каково назначение пунктов главного меню в среде Visual C++ 2010?
6.Опишите действия, которые выполняются при выборе пунктов инструментальной панели отладчика в среде Visual C++ 2010.
7.Приведите пример особых возможностей выражения в С++.
8.Какова приоритетность операций и порядок обработки операндов в ANSI С++?
9.Правила преобразований значений операндов из одного типа в другой для операций в С++.
10.Порядок автоматического приведения типов в выражении на С++.
11.Операция явного преобразования типа в С++.
12.Что означает термин «размножение знака»?
13.Особенность использования знака «точка с запятой» ( ; ) в С++.
14.Опишите средства языка С++ для организации разветвляющегося процесса.
15.Особенности организации в С++ цикла for. Как можно записать кратко бесконечный цикл с помощью for?
16.Особенности организации в С++ цикла while. Как можно записать кратко бесконечный цикл с помощью while?
17.Чем отличается цикл do while в С++ от цикла repeat until в языке Pascal?
18.Форма записи и область действия метки при использования оператора GOTO в
С++.
19.Опишите операторы языка С++, которые расширяют возможности безусловной передачи.
20.Назначение команд препроцессора #include, #define, #undef, #ifdef, #else и #ifndef, #if, #else и #elif, #error.
1
Объектно-ориентированное программирование. Лектор – к.т.н., доцент Петренко Т.Г. Лабораторные работы. 2012 -2013 уч.год.
Срок сдачи студентами лабораторной работы – последняя неделя сентября 2012 г.
3 Индивидуальные задания:
3.1 Основные задания:
Даны действительные x,ε(x ≠ 0,ε > 0) и целые k,a,n числа. Вычислить с точностью
ε сумму и указать количество учтенных слагаемых. Считать, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем ε , - это и все последующие слагаемые можно уже не учитывать. Проверить правильность вычислений на тестовых примерах, используя возможности отладчика, проследить изменение значений слагаемых суммы ряда, выполнив отладку цикла. Для каждого
варианта определить диапазон возможных значений аргументов.
|
∞ |
|
k |
2k |
+1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
∞ |
|
|
|
|
|
|
k |
|
|
4k+3 |
|
|
|
|
||||||||||||
|
(−1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(−1) |
|
|
|
|
|
|
||||||||||||||||||||||
1) |
∑ |
x |
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
2) ∑ |
|
x |
|
|
|
|
|
|
|
; |
|||||||||||||||
k!(2k +1) |
|
|
|
|
|
|
|
|
|
(2k +1)(! 4k +3) |
|||||||||||||||||||||||||||||||||||
|
k=0 |
|
|
|
|
|
|
|
|
|
|
|
|
k=0 |
|
||||||||||||||||||||||||||||||
|
∞ |
(−1)k |
|
|
|
|
x 2(k+1) |
|
|
|
∞ |
|
(−1)k +1 x |
4k |
|
|
|
|
|||||||||||||||||||||||||||
3) |
∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
4) |
∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|||||||||
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
(2k)! |
|
3 |
|
|
|
|||||||||||||||||||||||||||||
|
k=0 |
((k +1)!) |
|
|
|
2 |
|
|
|
|
|
|
k =0 |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
∞ |
|
|
k+1 |
|
|
|
2k |
−1 |
|
|
|
|
|
|
|
|
|
∞ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
5) |
∑ |
(−1) |
|
|
x |
|
|
|
|
|
|
|
|
; |
|
|
6)1+ ∑ |
(a −k +1)! |
xk |
; |
|||||||||||||||||||||||||
(2k −1)(2k +1)! |
|
|
k!(2k +1) |
||||||||||||||||||||||||||||||||||||||||||
|
k=0 |
|
|
|
|
|
|
|
k =1 |
|
|
|
|
||||||||||||||||||||||||||||||||
|
∞ |
|
|
xk |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
∞ |
|
(−1)k (k +1)xk |
|
|
||||||||||||||||||
7) |
∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
8) |
∑ |
|
|
|
|
|
k |
|
|
|
|
|
|
|
|
|
|
; |
|
||||
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
= |
k + k |
|
|
x |
+1 |
|
|
|
|
k |
= |
0 |
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
k 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
∞ |
(−1)k |
|
|
|
|
x n+2k |
|
|
|
|
∞ |
(−1)k x4k+1 |
|
|
|
|
|
|||||||||||||||||||||||||||
9) |
∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
10) ∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
(2k)(! 2k +1) |
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||
|
k =0 |
k!(k + n)! |
|
2 |
|
|
|
|
|
k=0 |
|
|
|||||||||||||||||||||||||||||||||
|
∞ |
(−1)k x |
2k+1 |
|
|
|
|
|
∞ |
(−1)k+1 x 4k+2 |
|||||||||||||||||||||||||||||||||||
11) ∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
12) ∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
||||||||||||||
|
k=0 |
k!(k +1)! 2 |
|
|
|
|
|
|
|
|
k=1 |
(2k +1)! |
3 |
|
|
|
|
||||||||||||||||||||||||||||
|
∞ |
|
|
k |
|
k+2 |
|
|
|
|
|
|
|
|
|
|
|
|
∞ |
|
2k |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
13) ∑ |
(−1) |
x |
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
14) ∑ |
x |
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
(k +1)(k |
+ 2)! |
|
|
|
|
k |
k! |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
k=0 |
|
|
|
|
|
|
|
k=0 |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15) ∑∞ (− x)2k . k=0 2k!
3.2 Усложненные задания:
Написать программу, используя только побитовые операции и выполнить на тестовых данных. В отчете представить листинг программы и результатов вычислений. Представить исходные данные и/или результаты в двоичном виде и десятичном виде (см. с. 12):
1)Подсчитать значение а*10 , где а*10 = a*8 + a*2. Операцию сложения реализовать с помощью битовых операций в «столбец».
2)Определить длину самой длинной цепочки единиц в переменной unsigned long a.
2
Объектно-ориентированное программирование. Лектор – к.т.н., доцент Петренко Т.Г. Лабораторные работы. 2012 -2013 уч.год.
Срок сдачи студентами лабораторной работы – последняя неделя сентября 2012 г.
3)Перемножить байтовые переменные a,b (unsigned char a,b) в «столбец». Учесть возможную отрицательность операндов.
4)Осуществить зеркальное отображение байта (unsigned char b).
5)Числа A,B,C хранятся в unsigned long X в виде:
<- |
12 бит-> <- |
10 бит-> <- |
10 бит-> |
|||
<- c |
-> <- |
b |
-> <- |
a |
-> |
|
<- |
|
|
x |
|
|
-> |
Найти значение суммы a + b + c, выполнив операцию сложения «в столбец».
6)Определить соотношение единиц и нулей в байте unsigned char b.
7)Декодировать последовательность битов long c по следующему правилу:
биты |
символ |
00 |
# |
01 |
@ |
10 |
$ |
11 |
& |
Каждые 2 бита заменять соответствующим символом. Получаемые символы последовательности выводить на печать.
8)Реализовать циклический сдвиг влево/вправо на m бит байта (unsigned char b).
9)Дана последовательность из 8 байт:
unsigned char n[8] = {0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80};
Определить байт-статус (unsigned char status), i-й бит которого равен 1, если i-й байт содержит нечетное количество единиц, и равен 0 - в противном случае. Биты в байте нумеруются справа налево от 0 до 7.
10)Напишите программу, с помощью которой вычитается переменная V2, занимающая 2 слова, из переменной V1 той же длины.
11)Напишите программу для нормализации значения переменной unsigned int AX. Содержимое переменной AX надо сдвигать влево до тех пор, пока старший из битов, имевших значение 1, не сместится в бит 31-й. Если значение переменной AX равно 0 или 31-й бит уже содержит 1, то сразу выдать сообщение и закончить программу.
12)Существует простой способ вычисления квадратного корня: квадратный корень из целого числа равен количеству последовательных целых чисел (начиная с 1), которое можно из него вычесть. Например, вычислим корень из 25:
_25
1 |
1-е целое нечетное число; |
|||
--- |
|
|
|
|
_24 |
|
|
|
|
3 |
2-е ----- |
"-------- |
"----- |
; |
--- |
|
|
|
|
_21 |
|
|
|
|
5 |
3-е ----- |
"-------- |
"----- |
; |
--- |
|
|
|
|
_16 |
|
|
|
|
7 |
4-е ----- |
"-------- |
"----- |
; |
3
Объектно-ориентированное программирование. Лектор – к.т.н., доцент Петренко Т.Г. Лабораторные работы. 2012 -2013 уч.год.
Срок сдачи студентами лабораторной работы – последняя неделя сентября 2012 г.
--- |
|
_9 |
|
9 |
5-е -----"--------"-----; |
--- |
|
0 |
|
Итак, квадратный корень из 25 равен 5. Вычислить квадратный корень из целого числа m.
13) Закодируйте любую последовательность символов из множества {A, B, C, D} по следующему правилу:
Символ |
Биты |
A |
0 |
B |
10 |
C |
110 |
D |
111 |
Полученную последовательность битов декодируйте, и результат сравните с исходной последовательностью.
14)Используя лишь побитовые операции и операцию сложения, проверить, делится ли число а (unsigned char a) на 3.
15)Реализовать вычисление целочисленного остатка от деления 2-х чисел а и b (int a,b).
3.3 Дополнительные усложненные задания:
Три программы, приведенные ниже, исполнить в среде и, используя отладчик,
проанализировать значения переменных. Программы и результаты работы программ распечатать на принтер. Уметь объяснить результаты.
Задание № 1
#include <stdio.h>
#define PRINT(format,a) printf(#a" = %"#format"\n",a) int integer = 5;
char character = '5'; char *string = "5"; main()
{
PRINT(d,*string); PRINT(d,character); PRINT(d,integer); PRINT(s,string); PRINT(c,character); PRINT(c,integer=53); PRINT(d,( '5'>5 )); PRINT(d,string);
int sx = -8; unsigned ux = -8;
PRINT(o,sx); PRINT(o,ux); PRINT(o,sx>>3); PRINT(o, ux>>3 ); PRINT(d,sx>>3); PRINT(d, ux>>3 );
return 0;}
4
Объектно-ориентированное программирование. Лектор – к.т.н., доцент Петренко Т.Г. Лабораторные работы. 2012 -2013 уч.год.
Срок сдачи студентами лабораторной работы – последняя неделя сентября 2012 г.
Задание № 2
#include <stdio.h>
#define PR(x) printf(#x"= %.8g\t",(double)x) #define NL putchar('\n')
#define PRINT(x1,x2,x3,x4) PR(x1); PR(x2); PR(x3); PR(x4); NL main()
{double d; float f; long l; int i;
i=l=f=d=100/3; PRINT(i,l,f,d); d=f=l=i=100/3; PRINT(i,l,f,d); l=i=f=d=100/3.; PRINT(i,l,f,d); d=f=l=i=(double)100/3; PRINT(i,l,f,d); i=l=f=d=(double)(100000/3); PRINT(i,l,f,d); d=f=l=i=100000/3; PRINT(i,l,f,d);
return 0; }
Задание № 3
#include <stdio.h>
char input[] = "sstealch1\1\11s\1wllliw1"; main()
{int i,c;
for ( i=2; (c=input[i]) !='\0'; i++) { switch(c) {
case 'a': putchar(c); continue; case '1': break;
case 1 : while( (c=input[++i]) != '\1' && c != '\0'); case 9 : putchar('s');
case 'w':
case 'l': continue;
default : putchar(c); continue;
}
putchar(' '); } putchar('\n'); return 0;}
5