Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцииЯзыки прогрИб.doc
Скачиваний:
27
Добавлен:
12.11.2019
Размер:
922.11 Кб
Скачать

Int god; //число лет

cout<<"Vvod vclada: ";

cin>>vclad;

cout<<"Vvod stavki: ";

cin>>stavka;

cout<<"Vvod chisla let: ";

cin>>god;

//блок обработки и вывода данных

cout<<"God"<<setw(20)<<"Summa depozita"<<endl;

//depozit=vclad*(1.0+stavka)^i); i=1,...,god

for(int i=1; i<=god; i++)

{

depozit=vclad*pow(1.0+stavka, i);

cout<<setw(4)<<god;

cout<<setw(20)<<setiosflags(ios::fixed|ios::showpoint)

<<setprecision(2)<<depozit<<endl;

}

return 0;

}

Пример 5. «Структура повторения с постусловием

do/while»

Условие задачи: распечатать оценки студентов.

Создать проект консольного приложения и ввести имя проекта TPlab1_6. Создается исходный файл TPlab1_6.cpp, который будет содержать одну пустую функцию main():

int t_main(int args, _TCHAR* argv[])

{return 0;}.

Проект должен содержать файл заголовков TPlab1_6.h и файл кодов TPlab1_6.cpp.

Создать файл TPlab1_6.h, ввести текст файла и сохранить его:

//файл заголовков TPlab1_6

#include <iostream>

using std::cout;

using std::cin;

using std::endl;

Добавить в файл кодов TPlab1_6.cpp подключение файла заголовков и текст функции main():

#include "stdafx.h"

#include "TPlab1_6.h"

int _tmain(int argc, _TCHAR* argv[])

{

int kol, f, ocenka;

cout<<"Vvesti kol-bo studentov: ";

cin>>kol;

cout<<"Ocenki studentov"<<endl;

cout<<"Nomer"<<"\tOcenka"<<endl;

int i=1;

do

{

cout<<i<<'\t';

cin>>ocenka;

}

while(++i<=kol);

return 0;

}

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

  1. Сколько имеется управляющих структур?

  2. Перечислите структуры ветвления.

  3. Перечислите структуры повторения.

  4. Объясните оператор break.

  5. Объясните оператор continue.

Тема 7. Адресные типы данных

7.1. Указатели

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

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

Для инициализации указателя адресом переменной служит операция & (операция адресации или операция взятия адреса).Для доступа к переменной через указатель используется операция * (операция разадресации, или разыменования, или обращения по адресу, или косвенной адресации).

Пример:

int tabn1,tabn2,*p=&tabn1;//объявление и инициализация

tabn1=1000; //указателя p адресом переменной tabn1

tabn2=*p;//tabn2=1000; Выражение *p означает, что нужно извлечь

// значение по адресу, равному значению указателя p

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

Пример:

int tabn,*p=&tabn;

tabn=1000;

*p=2000;// Значение tabn изменится на 2000

Над указателями можно выполнять следующие операции:

- операции адресации(&) и разадресации(*);

- операция присваивания(=);

- арифметические операции(+,-,++,--);

- операции сравнения.

При выполнении арифметических операций с указателями предполагается, что указатель указывает на массив объектов. Таким образом, если указатель объявлен как указатель на type, то прибавление к нему целого значения перемещает указатель на соответствующее количество объектов type . Если type имеет размер 4 байта, то прибавление целого числа 5 к указателю этого типа перемещает указатель в памяти на 20 байтов.

Указатели - это удобный способ обработки больших объемов данных: массивов, структур, объединений.

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

Пример:

int tabn1, tabn2;

const int *p=&tabn1; //p - указатель на константу типа int

*p=1000; //Присвоение объекту tabn1, на который указывает

// указатель на константу p, недопустимо

p=&tabn2; //Присвоение указателю на константу допустимо

Если необходимо, чтобы сам указатель не изменялся, нужно записать const после обозначения типа указателя.

Пример:

int * const p=&tabn1; //Указатель-константа на int

*p=1000; //Присвоение объекту tabn1, на который указывает

// указатель на константу p, допустимо

p=&tabn2; // Присвоение указателю на константу недопустимо

Адрес именной константы не может быть присвоен указателю-константе, даже если ее значение не будет изменено.

Пример:

const int kol=25;

int * const p=&kol; //Недопустимо

const int *p=&kol; //Допустимо

Преимущества указателей следующие:

  • экономия памяти, более компактное размещение данных с использованием массивов указателей;

  • эффективное выполнение программы при использовании указателей в качестве параметров функции при передаче агрегированных данных за счет того, что в стек копируется не весь объем данных, а только одно число -адрес первого байта данных;

  • возможность изменения значений переменных вызывающей функции при изменении значений параметров вызываемой функции, т.е. возможность возврата значений помимо оператора return;

Альтернативой указателям являются ссылки.