Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическое занятие №1234 по си++.docx
Скачиваний:
9
Добавлен:
08.11.2018
Размер:
787.62 Кб
Скачать

5.4. Отладка программы

При отладке программы можно использовать пошаговый режим отладки с отслеживанием значений переменных - тех, которые вводятся. Если возникнут проблемы с вводом переменных, есть смысл вводить каждую переменную отдельным оператором.

Аккуратный формат таблицы достигается несколькими запусками программы с последующим выравниванием столбцов по результатам запуска.

5.5. Результаты работы программы

При работе программы на экран было выдано следующее:

1. Введите: название, школу, количество, площадь > Тодайдзи Т 220 368.8

2. Введите: название, школу, количество, площадь > Якусидзи С 50 54.7

3. Введите: название, школу, количество, площадь > Дайаедзи Д 10 12.2

----------------------------------------------

|Буддийские монастыри Японии периода Нара |

|--------------------------------------------|

| Название | Школа | Количество|Площадь земли|

| | | монахов | (га) |

|----------|-------|-----------|-------------|

| Тодайдзи | Т | 220 | 368.8 |

| Якусидзи | С | 50 | 54.7 |

| Дайаедзи | Д | 10 | 12.2 |

|--------------------------------------------|

| Примечание: Т - Тендай; С - Сингон; |

| Д - Дзедзицу |

----------------------------------------------

5.6. Выводы

При выполнении практического занятия изучены вопросы:

  • типы данных в языке C, объявление переменных в программе

  • ввод и вывод данных, форматизация вывода.

6. Контрольные вопросы

  1. Для каких типов данных используются суффиксы при инициализации переменных?

  2. Чем отличаются функции printf() и puts() при консольном выводе информации?

  3. При использовании функции gets_s() с какими разделителями может происходить считывание информации с консоли?

  4. Какой тип данных возвращает функция gets_s() при считывании информации?

  5. Как осуществляются автоматическое и принудительное приведение типов в языке С(С++)?

Приложение 1. Базовые типы данных языка С++

Название типа

Пояснения

Диапазон значений

short

Краткое целое число

-128 . . . 127

unsigned short

Краткое целое число без знака

0 . . . 255

int

Целое число

-32768 . . . 32767

unsigned int

Целое число

0 . . . 65535

long

Длинное целое число

-230 . . . 230-1

unsigned long

Длинное целое число без знака

0 . . . 231-1

char

Один символ

символы кода ASCII

char[ ]

Строка

float

Число с плавающей точкой

3.4 10-38 . . . 3.4 10+38

double

Число с плавающей точкой двойной точности

1.7 10-308 . . . 1.7 10+308

Приложение 2. Некоторые функции стандартного ввода-вывода

Функции стандартного ввода - вывода описаны в файле stdio.h.

printf() - форматный вывод на экран:

int printf(char *format, <список вывода>);

Первый параметр является символьной строкой, которая задает спецификации формата. Остальные параметры - перечисление переменных и выражений, значения которых выводятся. Каждая спецификация формата имеет вид (параметры в квадратных скобках необязательны):

%[flags][width][.prec][F|N|h|l]type

где:

type -

тип спецификации

d или i

целое десятичное число со знаком

u

десятичное число без знака

x

целое 16-ричное число без знака

f

число с плавающей точкой

e

число в E-форме

g

число с плавающей точкой или в E-форме

c

один символ

s

строка

%

символ %

flags -

признак выравнивания:

+ или пусто

выравнивание по правому краю

-

выравнивание по левому краю

width -

целое число - общая ширина поля. Если это число начинается с цифры 0, вывод дополняется слева нулями до заданной ширины. В заданную ширину входят все символы вывода, включая знак, дробную часть и т.п.

prec -

целое число, количество знаков после точки при выводе чисел с плавающей точкой

F -

соответствующий элемент списка вывода является дальним указателем

N -

соответствующий элемент списка вывода является близким указателем

l -

соответствующий элемент списка вывода является long int или double

scanf() - форматный ввод с клавиатуры:

int scanf(char *format, <список ввода>);

Первый параметр является символьной строкой, которая задает спецификации формата (см. функцию printf()). Остальные параметры - перечисление адресов переменных, в которые вводятся данные. В этом списке перед именами всех переменных, кроме тех, которые вводятся по спецификации типа %s, должен стоять символ &.

В таких средах разработки как MS Visual Studio 2008 и 2010 рекомендуется для безопасной работы применять функцию scanf_s(). Для этой функции при чтении символа следует указать его размер в байтах. Например, scanf_s("%c", &ch, 1). В Visual Studio 2010 тип данных char занимает 1 байт.

putchar() - вывод одного символа на экран:

int putchar(int ch);

Параметр функции - код символа, который выводится. При успешном выполнении функция возвращает этот же код, при неуспешном - EOF.

getchar() - ввод одного символа с клавиатуры:

int getchar(void);

Функция возвращает код введенного символа.

puts() - вывод строки символов на экран:

int puts(char *string);

Параметр функции - указатель на начало той строки, из которой выводятся данные. Функция возвращает количество выведенных символов.

gets() - ввод строки символов с клавиатуры:

char *gets(char *string);

Параметр функции - указатель на начало той строки, в которую вводятся данные. Функция возвращает тот же самый указатель. Функция gets() читает символы (включая пробелы) из стандартного потока stdin и помещает их в массив символов, адресуемый указателем *str (далее это массив символов). Символы читаются до тех пор, пока не встретится разделитель строк или значение EOF. Для реализации EOF на клавиатуре следует набрать одновременно Ctrl+Z. Вместо разделителя строк в конец строки вставляется нулевой символ, свидетельствующий о ее завершении. Следует учесть, что нет способа ограничить количество символов, которое прочитает функция gets(). Поэтому массив, адресуемый указателем *str, может переполниться, и тогда программа выдаст непредсказуемые результаты [23].

В Microsoft Visual Studio 2010 рекомендуется использовать gets_s(), чтобы не было предупреждений.

Практическое занятие №3. Битовые операции

1. Цель работы

Целью практического занятия является получение практических навыков в работе с побитовыми логическими операциями и операциями сдвига языка C.

2. Темы для предварительного изучения

Побитовые логические операции и операции сдвига.

3. Задание для выполнения

Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричное число и выводит значения отдельных ее составных частей.

4. Варианты индивидуальных заданий

Вариант 1

Физический адрес на диске представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

H

H

T

T

T

T

T

T

T

T

T

S

S

S

S

S

где:

HH -

номер головки

T..T -

номер дорожки

S..S -

номер сектора

Вариант 2

Слово состояния программы в вычислительной системе представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

C

C

C

C

E

I

P

0

0

0

K

K

K

0

0

0

где: C..C -

маски каналов 0 - 3

E -

маска внешнего прерывания

I -

маска внутреннего прерывания

P -

маска программного прерывания

KKK -

ключ защиты памяти

Вариант 3

Слово состояния канала в вычислительной системе представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

N

N

N

N

E

C

C

C

C

C

C

C

C

C

0

P

где:

N..N -

номер канала

E -

признак ошибки

C..C -

код причини прерывания

P -

признак завершения программы в канале

Вариант 4

Формат команды загрузки/сохранения в вычислительной системе имеет вид:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

1

1

1

0

0

0

1

D

R

R

R

R

A

A

A

A

где:

D -

направление передачи - в регистр(0)/в память(1)

R..R -

1-й операнд - регистр

A..A -

регистр адреса 2-го операнда

Вариант 5

Слово состояния оборудования для вычислительной системы представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

P

P

P

0

F

F

0

H

H

H

H

0

0

V

V

V

где:

PPP -

количество принтеров

FF -

количество гибких дисков

H..H -

тип жесткого диска

VVV -

тип видеоадаптера

Вариант 6

Формат команды сдвига в вычислительной системе имеет вид:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

1

1

0

1

T

T

D

N

N

N

N

N

N

N

N

N

где:

TT -

тип сдвига

D -

направление сдвига

N..N -

количество разрядов сдвига

Вариант 7

Блок управления буфером кеша в вычислительной системе представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

S

S

S

0

D

0

F

0

B

B

B

B

B

B

B

B

где:

SSS -

код системной области или 000

D -

признак "грязного" буфера

F -

признак свободного буфера

B..B -

номер блока, который отображен в буфере

Вариант 8

Элемент списка безопасности объекта в вычислительной системе представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

U

U

U

U

U

U

U

U

R

W

E

0

0

0

0

X

где:

U..U -

идентификатор пользователя

R -

право читать

W -

право писать

E -

право выполнять программный код

X -

явный запрет доступа

Вариант 9

Формат команды канала в система ввода-вывода имеет вид:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

O

O

O

O

O

C

D

N

N

N

N

N

N

N

N

N

где:

O..O -

код операции

C -

признак цепочки команд

D -

признак цепочки данных

N..N -

количество байтов для передачи

Вариант №10

Элемент профиля пользователя в вычислительной системе представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

G

G

G

G

G

G

G

G

S

S

S

S

P

0

0

0

где:

G..G -

идентификатор группы, к которой принадлежит пользователь

S..S -

код системы, которая загружается для пользователя

P -

признак привилегированного пользователя

Вариант 11

Информация о состоянии устройства в системе ввода-вывода представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

C

C

C

U

U

U

U

U

E

E

E

E

E

E

0

B

где:

CCC -

номер канала

U..U -

номер устройства в канале

E..E -

код состояния

B -

признак занятости устройства

Вариант 12

Формат команды сложения в вычислительной системе имеет вид:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

1

1

0

0

0

1

1

0

D

A

A

A

B

B

B

0

где:

D -

сложение байтов/слов - 0/1

AAA -

регистр - 1-й операнд

BBB -

регистр - 2-й операнд

Вариант 13

Формат представления текущей даты в некоторых системных структурах имеет вид:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

D

D

D

D

D

M

M

M

M

M

Y

Y

Y

Y

Y

Y

где:

D..D -

день

M..M -

месяц

Y..Y -

год после 1980

Вариант 14

Формат представления текущего времени в некоторых системных структурах имеет вид:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

S

S

S

S

S

M

M

M

M

M

M

H

H

H

H

H

где:

S..S -

секунды/2

M..M -

минуты

H..H -

часы

Вариант 15

Дескриптор сегмента для системы виртуальной памяти представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

F

F

F

F

F

F

F

F

R

W

L

L

L

L

L

L

где:

F..F -

номер блока, с которого начинается сегмент

R -

доступ для чтения

W -

доступ для записи

L..L -

размер сегмента в блоках

Вариант 16

Атрибут файла в файловой системе представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

T

T

T

T

A

A

A

0

I

I

I

I

I

I

I

I

где:

T..T -

код типа файла

AAA -

код доступа

I..I -

номер файлового индекса

Вариант 17

Блок управления памятью в операционной системе имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

O

O

O

O

O

O

O

O

0

P

L

L

L

L

L

L

где:

O..O -

идентификатор владельца блока

P -

признак программного блока

L..L -

размер блока

Вариант 18

Точка изображения на 16-цветном дисплее с размером экрана 64х64 описывается в формате:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

X

X

X

X

X

X

Y

Y

Y

Y

Y

Y

C

C

C

C

где:

X..X -

горизонтальная координата

Y..Y -

вертикальная координата

C..C -

цвет

Вариант 19

Управляющее слово программируемого таймера имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

C

C

F

F

D

D

D

D

D

D

D

D

D

D

D

D

где:

CC -

номер канала таймера

FF -

форма сигнала

D..D -

коэффициент деления опорной частоты

Вариант 20

Информация о критической ошибке на диске представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

O

A

A

R

R

R

0

1

D

D

D

D

D

D

D

D

где:

O -

тип операции - чтение/запись (0/1)

AA -

код области диска

RRR -

возможные реакции на ошибку

D..D -

номер диска

Вариант 21

Дескриптор сообщения в системе телекоммуникаций имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

N

N

N

N

0

P

P

P

U

U

U

U

U

U

U

U

где:

N..N -

номер узла, из которого пришло сообщение

PPP -

приоритет сообщения

U..U -

идентификатор пользователя - автора сообщения

Вариант 22

Дескриптор семафора, который защищает пул ресурсов, имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

N

N

N

M

M

M

0

L

W

W

W

W

W

W

W

W

где:

N..N -

текущее количество свободных единиц ресурса

M..M -

общее количество единиц ресурса

L -

признак блокирования/разблокирования семафора (1/0)

W..W -

количество процессов, которые ожидают доступа к ресурсу

Вариант 23

Заголовок кадра в системе передачи данных имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

S

S

S

S

S

S

D

D

D

D

D

D

0

C

C

C

где:

S..S -

адрес источника

D..D -

адрес приемника

CCC -

управляющий код

Вариант 24

Заголовок пакета в системе передачи данных имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

T

T

T

0

S

S

S

S

L

L

L

L

L

L

L

L

где:

TTT -

тип пакета

S..S -

идентификатор источника

L..L -

длина пакета

Вариант 25

Поле управления диспетчером кадра в протоколе управления логическим каналом имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

1

0

C

C

0

0

0

0

P

N

N

N

N

N

N

N

где:

CC -

управляющий код

P -

признак запроса или завершения (0/1)

N..N -

номер последовательности

Вариант 26

Формат заголовка пакета в системе ретрансляции кадров такой:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

C

C

C

C

C

C

C

C

C

C

R

E

E

E

E

E

где:

C..C -

идентификатор канала передачи

R -

признак команды / ответа (0/1)

E..E -

расширение адреса

Вариант 27

Формат элемента доступа к объекту в системе безопасности такой:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

0

A

A

A

T

T

M

0

G

G

G

G

G

G

G

G

где:

AAA -

код доступа к объекту из группы PUBLIC

TT -

доступ для чтения и/или доступ для записи

G..G -

код группы доступа, к которой принадлежит объект

Вариант 28

Дескриптор массива, который формируется компилятором языка программирования, имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

L

L

L

L

0

0

B

B

B

B

B

E

E

E

E

E

где:

L..L -

размер элемента массива

B..B -

начальный индекс

E..E -

конечный индекс

Вариант 29

Блок управления сегментом памяти в системе с реальной памятью имеет формат:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

T

T

T

T

T

0

A

0

L

L

L

L

L

L

L

L

где:

T..T -

идентификатор задачи, которой принадлежит сегмент или 0 - для свободного сегмента

A -

признак активности задачи (1/0)

L..L -

длина сегмента

Вариант 30

Слово состояния устройства в системе ввода-вывода представляется в виде:

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

C

C

C

C

C

0

F

B

N

N

N

N

N

N

N

N

где:

C..C -

код состояния

F -

признак ошибки (1/0)

B -

признак занятости (0/1)

N..N -

количество байт, переданных в последней операции