Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программировании на Си.doc
Скачиваний:
5
Добавлен:
08.09.2019
Размер:
301.57 Кб
Скачать

Задание на лабораторную работу № 2

Название работы: Изучение операторов циклов, условных переходов.

Цель работы: Научиться работе в среде Borland C++ 3.1. Исследовать работу операторов if, for, while.

1. Составить программу для решения уравнения второй степени в виде: a*x2+b*x+c=0

Программа должна запрашивать у пользователя данные для расчета, находить решение для всех значений a, b, c (учесть мнимые числа) и выводить результаты работы на экран.

2. По справочной системе исследовать работу математических функций: pow(), log(), sqrt(), описания которых находятся в справочной системе, заголовочный файл <math.h>. Составить программу, которая демонстрировала бы работу этих функций.

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

  1. Оператор организации циклов for.

  2. Оператор организации циклов while и do while.

  3. Оператор организации условных переходов if.

  4. Оператор организации ветвления switch.

  5. Оператор организации безусловных переходов.

Лабораторная работа №3 Указатели. Структурированные типы данных

Теоретическая часть

Указатели и операции с ними.

Указатели - это переменные, показывающие место или адрес памяти, где расположены другие объекты (переменные, функции и т. п.). Так как указатель содержит адрес некоторого объекта, то через него можно обращаться к этому объекту.

Унарная операция & дает адрес объекта, поэтому оператор y=&x; присваивает адрес х переменной у. Операцию & нельзя применять к константам и выражениям; конструкции вида &(х+7) или &28 недопустимы.

Унарная операция * воспринимает свой операнд как адрес некоторого объекта и использует этот адрес для выборки содержимого, поэтому оператор z=*y; присваивает z значение переменной, записанной по адресу у. Если y= &x; z=*y; то z=x.

Объекты, состоящие из знака * и адреса (например, *а), необходимо объявлять. Делается это, например, так:

int *а, *b, *с;

char *d;

Объявление вида char *d; говорит .о том, что значение, записанное по адресу d, имеет тип char.

Указатели могут встречаться и в выражениях. Если у - указатель на целое, т. е. имело место объявление int *у;, то *у может появиться там же, где и любая другая переменная, не являющаяся указателем. Таким образом, следующие выражения вполне допустимы:

*у = 7;

*х * = 5;

(*z)++;

Первое из них заносит число 7 в ячейку памяти по адресу у, второе увеличивает значение по адресу х в пять раз, третье добавляет единицу к содержимому ячейки памяти с адресом z. В последнем случае круглые скобки необходимы, так как операции * и ++ с одинаковым приоритетом выполняются справа налево (см. табл. 1.2). В результате если, например, *z=5, то (*z)++ приведет к тому, что *z=6, а *z++ всего лишь изменит сам адрес z (операция ++ выполняется над адресом z, а не над значением *z по этому адресу).

Указатели можно использовать как операнды в арифметических операциях. Если у - указатель, то унарная операция y++; увеличивает его значение; теперь оно является адресом следующего элемента. Указатели и целые числа можно складывать. Конструкция y+n (у - указатель, n- целое число) задает адрес n-ro объекта, на который указывает у. Это справедливо для любых объектов (int, char, float и т. п.); транслятор будет масштабировать приращение адреса в соответствии с типом, определенным из соответствующего объявления.

Любой адрес можно проверить на равенство (= =) или неравенство (!=) со специальным значением NULL, которое позволяет определить ничего не адресующий указатель.