Указатели, массивы, строки, функции. Решение задачи. Работа с отладчиком

Страницы работы

Содержание работы

Информатика   1курс

Лаб.работа C2

Цель занятия:

1.  Напоминание про F4, F5

2.  Указатели, массивы, строки, функции

3.  Решение задачи

4.  Работа с отладчиком     и показ умения работать с отладчиком.

Скопируйте каталог X-files\Students\Tasks\Informatika\Lab_C2  в свой каталогInform.

Ваш рабочий каталог:   Z:\Inform\Lab_C2

Домашние задачи Lab_F4,  Lab_F5 открыты до 5.04.10

1)  программа  Dc_1.c

Операции явного преобразования типов:

(тип) выражение   - синтаксис языка Си

Неявное преобразование типов происходит всегда при вычислении выражений так, чтобы по возможности не терялась информация. Но если происходит преобразование с понижением типа, то информация будет теряться. Поэтому от программиста требуется высокая внимательность и понимание размеров и устройства используемых типов переменных.

Разбор программы выполняем с помощью отладчика:

После любых изменений в программе не забывайте перекомпилировать программу!!!

n  Компиляция

n  Режим Debug

n  Run to cursor     Shift-F4

n  Step                    F7

n  Add Watch  - поставить курсор у переменной  и  F4

n  Stop Execution  - Ctrl-Alt-F2

 - Смотрим переменные : a,  c,  x

-  Смотрим переменные : x,  y,  z

-  Смотрим переменные : a,  c,  b

Попробуйте ответить, чему станет равна b после последних действий:

   c=255;                         // отгадайте ответ - b

   b=c+256;                    // если всё понятно

2)  программа  Dc_2.c

Иллюстрация использования оператора switch для подсчета нажатий клавиш на клавиатуре.

После запуска программы  понажимате буквы и цифры на клавиатуре. Закончите набор, набрав строку: CTRL-Z (это символ EOF) и Enter.    Enter нужен, так как ввод осуществляется функцией getchar( ), а это буферизированная функция. Функция  getchar( ) помещает вводимые символы в буфер и символы можно удалять из буфера с помощью «забоя». После ввода символа конца строки символы из буфера «читаются», а буфер очищается.

Для подсчёта вводимых символов используются «счетчики»:

nwhite – для счета пробельных символов

ndigit[10] – массив для счёта цифр от 0 до 9

nother –  для остальных символов

Организован цикл ввода символов до тех пор, пока не встретится символ EOF.

Анализ введенных символов проводится с помощью оператора switch:

Введенный символ сравнивается с символьными константами и в случаее совпадения увеличивается соответствующий счётчик. Вход со стороны констант объединен логической операцией ИЛИ, поэтому для выхода из каждого блока констант служат операторы выхода break; - аналог фортрановского EXIT.

3)  программа  Dc_3.c

Создание переменных и указателей на них.

Язык \Си позволяет обращаться к памяти (переменной) двумя способами:

1. по имени переменной                  (аналогия -  письмо Иванову И.И.)

2. по адресу переменной в памяти   (аналогия – письмо по адресу  ул.Вязовая д.1)

В первом случае для обращения к ячейки памяти  заводится ПЕРЕМЕННАЯ , а во втором случае заводится УКАЗАТЕЛЬ – специальная переменная для хранения адреса ячейки памяти.

Когда заводится ПЕРЕМЕННАЯ, то запоминается какой у этой переменной тип. Это позволяет правильно прочитать, то что записано в двоичной памяти.

Поэтому и у УКАЗАТЕЛЯ должен быть ТИП, чтобы можно было правильно прочитать , то что записано в двоичной памяти, на которую показывает указатель.

Указателю можно присвоить значение адреса только переменной такого же типа, что и использовался при определении этого указателя.

Указатели вводятся  аналогично обычным переменным.

Указатели содержат адреса, по которым переменные хранятся в памяти.

4)  программа  Dc_4.c

Программа выводит значение указателя.

Указателю присваивается адрес переменной i. Компилятор размещает локальные переменные в стеке, расположенном по старшим адресам выделенного под стек сегмента памяти. Поэтому значение адресов переменных должно быть близко к    ***0000 - 1 = 0х***FFFF

Операция * , примененная к указателю -    *ip – это операция извлечение значения, хранящегося по

адресу, на который указывает ip.

Задание:

Для того чтобы убедиться, что указатель -  обычная переменная, посмотрите, где компилятор отводит место в памяти под переменную ip.

Для этого направьте в поток вывода адрес переменной (указателя) ip.

Обратите внимание: так как ip создана после переменной  i , то её адрес в стеке меньше (стек заполняется вниз!, в сторону свободного места)

5)  программа  Dc_5.c(основой курс)

Работа с переменными через указатели.  Обращение к переменной можно произвести либо по  имени переменной либо по адресу по которому хранится переменная, т.е. через указатель.

Возможно создание универсального указателя.  Такой указатель создается как указатель на пустой (неопределенный) тип. Такой переменной можно присвоить значение любого указателя. Но вот для извлечения значения необходимо указать компилятору, переменная какого типа хранится по этому адресу. Поэтому используется операция приведения типа.

6)  программа  Dc_5a.c(основой курс)

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Методические указания и пособия
Размер файла:
72 Kb
Скачали:
0