close

Вход

Забыли?

вход по аккаунту

?

Презентация

код для вставкиСкачать
Программирование на языке
высокого уровня
Для студентов очно-заочной
формы обучения
Лекцию читает
Шумова Елена Олеговна
доцент кафедры автоматизированных
систем обработки информации и
управления (АСОИ и У)
shumovaeo@list.ru
Виды учебной работы
Лекции
Самостоятельная работа с опорным
конспектом
Практические занятия
Лабораторные работы
Курсовой проект
Экзамен
Рекомендуемая литература
1.Павловская, Т.А. С/С++. Программирование на
языке высокого уровня/ Т.А.Павловская. - СПб.:
Питер, 2002 -2007.
2. Стивенс, Э. Самоучитель по С++ от Wiley/
Э.Стивенс; Пер. с англ.; Под ред. С.М.Молявко. –
М.: БИНОМ. Лаборатория знаний, 2005.
3.
Шилдт, Г. Самоучитель С++./ Пер. с англ.
Г.Шилдт – СПб.: BHV, 2008.
Лекция № 1
Область действия переменной и классы
памяти
Символьные строки
Классы
ОБЛАСТЬ ДЕЙСТВИЯ
ПЕРЕМЕННОЙ
Область действия переменной – это
правила, которые устанавливают, какие
данные доступны из данного места
программы.
С точки зрения области действия
различают три типа переменных:
- глобальные;
- локальные;
- формальные параметры.
• Локальные переменные - это переменные,
объявленные внутри блока, в частности
внутри функции.
• Глобальные переменные - это переменные,
объявленные вне какой-либо функции.
• Формальные параметры - это переменные,
объявленные при описании функций как ее
аргументы.
Пример с локальными переменными
#include <iostream.h>
void f(void);
void main()
{ int i = 1;
f();
cout << "\nВ ф-ции main() значение i = " << i;
}
void f(void)
{ int i = 10;
cout << "\nВ функции f() значение i = " << i;
}
Результат работы программы:
В ф-ции f() значение i = 10
В ф-ции main() значение i = 1
КЛАССЫ ПАМЯТИ
Каждая переменная принадлежит к одному из
четырех классов памяти:
auto
- автоматическая
extern
- внешняя
static
- статическая
register - регистровая
Тип памяти указывается перед спецификацией типа
переменной при объявлении.
auto int k;
auto – имеют локальную область действия.
Известны внутри блока, в кот. определены.
Хранятся в оперативной памяти ( в стеке).
auto int m;
register – аналогичны автоматическим, хранятся в
регистрах процессора.
register float k;
extern - относятся к глобальным переменным.
Хранятся в разделе переменных и констант.
Использование объявления
extern float x; не приводит к выделению
памяти.
Пример с глобальной переменной
#include <iostream.h>
extern int i; // переменная объявлена ниже
void fun1(void);
void main()
{ i++;
fun1();
i++;
cout << "\nВ функции main() i = " << i;
}
int i = 10; // объявление гл.переменной
void fun1(void)
{ i++;
cout << "\nВ функции fun1() i = " << i;
}
static - область действия - вся программа.
Память выделяется в начале работы
программы в разделе глобальных и
статических переменных. Область видимости
как и у автоматических.
static int k;
// инициализирована нулем
static float m=3.5;
Пример со статической переменной
#include <iostream.h>
void f(void);
void main()
{ int i;
for (i=1; i<=3; i++)
f();
}
void f(void)
{ static int c = 10;
c++;
cout << "\nВ функции f() значение c = " << c;
}
Символьные строки
Строка – это массив символов, т.е. она всегда
имеет тип char [ ].
В конце записи строковой константы
компилятор помещает символ ‘\0’.
char s[25];
char m[15] = “программа”;
char x[ ] = “компьютер”;
Функции работы со строками
strcmp(char *s1, char *s2);
Сравнивает две строки
strncmp(char *s1, char *s2, int n);
Сравнивает первые n-символов
strlen(char *s);
Определяет длину строки (без ‘\0’)
strcpy(char *s1, char *s2);
Копирует s2 в s1
#include <iostream.h>
#include <string.h>
void main()
{ char st1[] = "Символьная строка“, st2[15];
cout << "\n\nВведите строку без пробелов:\n";
cin >> st2;
cout << "Строка st1 :" << st1 << "\n";
cout << "длина строки = " << strlen(st1);
cout << "\nВы ввели :" << st2 << "\n";
cout << "длина введенной строки = " <<
strlen(st2);
}
#include <iostream.h>
#include <string.h>
void main()
{ char st[10];
cout << "сравниваем \"ABC\" и \"ABF\" = "
<< strcmp ("ABC", "ABF") << endl;
cout << "сравниваем \"ADC\" и \"ACC\" = "
<< strcmp ("ADC", "ACC") << endl;
cout << "сравниваем \"ABD\" и \"ABD\" = "
<< strcmp ("ABD","ABD") << endl;
strcpy(st, "privet");
cout << "strcmp (st, \"prikaz\") = " <<
strcmp(st, "prikaz") << endl;
cout << "strncmp (st, \"prikaz\", 3) =" <<
strncmp(st, "prikaz", 3) << endl;
Результат работы программы
сравниваем "ABC" и "ABF" = -3
сравниваем "ADC" и "ACC" = 1
сравниваем "ABD" и "ABD" = 0
strcmp(st, "prikaz") = 11
strncmp(st, "prikaz" , 3) = 0
Классы
Класс является абстрактным типом данных,
определяемым пользователем и представляет собой
модель реального объекта в виде данных и функций
для работы с ними.
Класс в свою очередь позволяет определить
объекты и связать с ними операции и функции.
Пример программы с использованием класса
#include <iostream.h>
#include <math.h>
#define ANG_TO_RAD 0.0174532925
class angle
{ double deg_value;
public:
void set_value();
void print();
double get_sinus();
};
void angle::set_value()
{ cout << " Введите угол в градусах = ";
cin >> deg_value;
}
void angle::print()
{ cout << " Угол в градусах = " << deg_value
<< endl << " Угол в радианах = " <<
ANG_TO_RAD*deg_value << endl;
}
double angle::get_sinus()
{ double v;
v = sin(ANG_TO_RAD * deg_value);
return (v);
}
void main()
{ angle d;
d.set_value();
d.print();
cout << " Синус угла = " << d.get_sinus() <<
endl;
}
Синтаксис объявления:
< ключевое_слово > имя_класса
{
список членов
};
ключевое слово – одно из struct, union, class;
имя_класса – уникальный идентификатор класса;
список членов – включает описание типов и имен
как данных, так и функций, называемых
функциями-членами.
Все члены класса имеют атрибут доступа:
public: – (общий) - может использоваться любой
функцией;
private: – (личный, частный) – может
использоваться только функциями-членами класса
и функциями «друзьями» класса.
protected: – (защищенный) – то же, что и private,
но дополнительно все члены класса могут
использоваться классами, для которых данный
класс является базовым.
Атрибут доступа может быть задан явно или
же определен по умолчанию.
Атрибут доступа
Ключевое слово
по умолчанию
struct
public:
union
public:
class
private:
Для объявления объекта типа класса
используется одна из следующих форм:
Имя_класса имя_объекта [=иниц. выр-ние];
Имя_класса имя_объекта [(иниц. выр-ние)];
Имя_класса *имя_указателя [(иниц.выр-ние]);
Оператор ‘.’
связывает объект типа класс,
определенный именем переменной, с функциейчленом того же класса, что и объект.
Оператор -> связывает объект типа класс,
определенный указателем-переменной, с функцией
членом того же класса, что и объект.
Оператор :: показывает принадлежность к классу
КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ
Функция-член класса, основная цель которой –
инициализация переменных объекта данного класса
распределение памяти для их хранения, называется
конструктором.
Конструктор имеет такое же имя, как и имя
класса, в котором он определен.
Функция деструктор разрушает объект данного
класса и вызывается явно или неявно. Деструктор
имеет такое же имя, как и класс, но предваряется
символом ‘~’.
Пример с конструктором и деструктором
#include <iostream.h>
class empty
{
char *obj_name;
public:
empty(char *name)
{
cout << " Создан объект с именем " <<
name << " класса empty \n";
obj_name = name;
}
~empty()
{ cout << "Объект " << obj_name << “
разрушен\n”;
}
} one("one");
void main()
{ empty second ("second");
}
Создан объект с именем one класса empty
Создан объект с именем second класса empty
Объект second разрушен
Объект one разрушен
ПЕРЕГРУЗКА ОПЕРАТОРОВ
Смысл «перегрузки» в том, что создается
функция, вызываемая каждый раз, когда в
контексте класса упоминается
переопределенный оператор.
Синтаксис определения «перегрузки»
таков:
имя_типа operator символ_операции
(список_параметров)
Пример переопределения
оператора сложения
#include <iostream.h>
struct GOOD_TIME
{
int hours;
int minutes;
int secs;
};
GOOD_TIME operator+ (GOOD_TIME f,
GOOD_TIME s)
{
GOOD_TIME tmp;
tmp.secs = (f.secs + s.secs) % 60;
tmp.minutes =( (f.secs + s.secs)/60 + f.minutes +
s.minutes) % 60;
tmp.hours = ( (f.secs + s.secs)/60 + f.minutes +
s.minutes) /60 + f.hours+ s.hours;
return tmp;
}
void main()
{ GOOD_TIME tm,fm,sm;
fm.hours = 0;
fm.minutes = 0;
fm.secs = 600;
sm.hours = 300;
sm.minutes = 600;
sm.secs = 0;
tm = fm + sm;
cout << " Часы - " << tm.hours << " Минуты - "
<< tm.minutes << " Секунды - " <<
tm.secs;
}
Тестовые задания.
Определите результаты работы программ
#include <iostream.h>
// Задание 1
void f( int a, int& b)
{ int k=10;
a += k; b += 5;
}
void main()
{ int k=4, c=10, d=20;
cout << "k = " << k << " c = " << c << " d = "
<< d << endl;
f(c, d);
cout << "k = " << k << " c = " << c << " d = "
<< d << endl;
}
#include <iostream.h>
// Задание 2
extern int m;
void fun(int &x, int y)
{ m += 3;
x += 5;
y += 3;
}
int m = 5;
void main()
{ int a = 5, b = 7;
m += 2;
cout << "a = " << a << " b = " << b <<
" m = " << m << endl;
fun(a, b);
cout << "a = " << a << " b = " << b <<
" m = " << m << endl;
#include <iostream.h>
// Задание 3
void f( int *a, int b)
{ int c = 10;
*a += c;
b += c;
}
int c = 3;
void main()
{ int x = 4, y = 3;
c += 5;
cout << " x = " << x << " y = " << y << " c = "
<< c << endl;
f(&x, y);
cout << " x = " << x << " y = " << y << " c = "
<< c << endl;
}
#include <iostream.h>
// Задание 4
void fun()
{ int k = 5;
static d = 10;
k ++;
d ++;
cout << " k = " << k << " d = " << d << endl;
}
void main()
{
int c;
for ( c = 1; c < 4; c++)
fun();
}
#include <iostream.h>
// Задание 5
extern int a;
void my_fun()
{ static int m = 4;
a ++;
m ++;
cout << " a = " << a << " m = " << m << endl;
}
int a = 4;
void main()
{ int i;
a += 3;
for (i=1; i<4; i++)
my_fun();
}
Документ
Категория
Презентации по информатике
Просмотров
2
Размер файла
346 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа