Итак, основное назначение объединений – обеспечить возможность доступа к одному и тому же участку памяти с помощью объектов разных типов.
При определении объединений без явного указания имени объединяющего типа разрешено не вводить даже имени объединения. В этом случае создается анонимное, или безымянное объединение.
8.8. Перечисления
В языке С++ существует конструкция enum, называемая перечислением.
enum имя {
компонента_1,
,
компонента_n
};
где имя – имя перечисления;
компонента – некоторое уникальное в пределах определения имя или комбинация «имя=значение», где «значение»- константное целое выражение.
Перечисление enum действует следующим образом. Первой компоненте, если для нее не указано значение, ставится в соответствие число 0, если значение указано, то это значение. Каждый последующий элемент получит значение предыдущего, увеличенный на 1, если для него значение не указано явно. Таким образом, дни недели объявляются так:
enum DAYS {Monday, Tuesday, Wednesday , . . . , Sunday};
Можно объявить переменную типа enum:
enum DAYS v;
Пример:
v=Tuesday;
v++; // v=Wednesday
v-=2; // v=Monday
то есть с перечислениями можно работать как с целыми типами. Целым типам можно присваивать перечисляемые константы, то есть любой перечисляемый тип - это тип int.
приложение. Примеры программ
Пример 1. Преобразование массивов путем удаления (включения) одного или нескольких элементов.
Задание. Дан массив Х1,Х2,...,Х15. Исключить из него 5-ый и 7-ой отрицательные элементы.
#invlude<iostream. h> //подключение заголовочного файла библиотеки
//ввода-вывода
void main(void)
{ //Здесь начинается тело функции main
int mas[15]={-5,3,1,-8,7,-7,-6,-5,4,-5,-5,-4,-3,-7, -9}; //описание и
//инициализация массива
int mas1[13]; int i, n=0, j=0; //Описание и инициализация данных
for(i=0;i<15;i++) //Цикл для просмотра и преобразования элементов массива
{if(mas[i]>=0){mas1[j]=mas[i];j++;}
else{n++;
if((n!=5)&&(n!=7)){mas1[j]=mas[i];j++;}}};
cout<<"Заданный массив: \n";
for (i=0;i<15;i++) //Цикл для вывода заданного массива
cout<<mas[i];
cout<<"\nМассив после преобразования:\n";
for(j=0;j<13;j++) //Цикл для вывода преобразованного массива
cout<<mas1[j];
cout<<"\n";} //Конец функции main
Результат работы программы:
Заданный массив:
- -7 -9
Массив после преобразования:
-
Пример 2. Табулирование функций. Использование итерационных циклов.
Задание. Выполнить табулирование заданной функции, используя функции, вычисляющие сумму ряда. При вычислении суммы ряда использовать рекуррентные соотношения. Сделать проверку, используя стандартные функции.
Y=2sinx+cosx
#include<iostream. h>
#include<math. h>
#include<iomanip. h>
double msin(double x) { //Функция для вычисления суммы ряда sinx
double E=1e-3;
double u=x, x2=x*x, s=x, m=2; do{
u=-u*x2/(m*(m+1));
s+=u;
m+=2;}
while (fabs(u)>E);
return s;}
double mcos(double x) { //Функция для вычисления суммы ряда cosx
double E=1e-3;
double s=0, u=1, m=0, x2=x*x; do {
s+=u;
u=u*x2/((m+1)*(m+2));
m+=2;}
while (fabs(u)>E);
return s;}
void main() { //Главная функция
double i;
cout <<"\n";
cout <<"________________________________________\n";
cout <<"| При разложении || Проверка |\n";
cout <<"\n";
cout <<"| X | F(x) | Xст | F(x)ст | \n";
cout <<"\n";
for (i=0;i<2*3.1415;i+=1){
cout <<"|"<<setw(7)<<i<<"|"<<setw(11)<<(2*msin(i)+mcos(i)*mcos(i))<< "|";
cout <<"|"<<setw(7)<<i<<"|"<<setw(11)<<(2*sin(i)+cos(i)*cos(i)<< "|\n";
cout <<"|_____|_______|________| |______|_________|";}
Результат работы программы:
При разложении в ряд | Проверка | |||
X | F(x) | Xст | F(x)ст | |
0 | 1 | 0 | 1 | |
1 | 1.974837 | 1 | 1.974869 | |
2 | 1.991547 | 2 | 1.991773 | |
3 | 1.262242 | 3 | 1.262325 | |
4 | -1.086192 | 4 | -1.086355 | |
5 | -1.837085 | 5 | -1.837384 | |
6 | 0.363365 | 6 | 0.363096 |
Пример 3. Обработка битовых последовательностей.
Задание. Реализовать алгоритм восстановления значения целого отрицательного числа по его дополнительному двоичному коду. Значение восстанавливаемого отрицательного числа вводится с клавиатуры, результат выводится на экран.
// Программа возвращает значение целого отрицательного числа по
// его дополнительному двоичному коду.
#include<iomanip. h>
#include<conio. h>
#include<math. h>
void main()
{ clrscr();
int a[16],f[16],i, k=15,c;
int b[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1};
int in, out=0, mask=1<<15;
cout<<endl<<"Введите целое отрицательное число (тип int) :"<<endl;
cin>>in;
cout<<endl;
//---Получение кода числа
cout<<"Kод числа :"<<endl;
for ( c=0; c<=15; c++ )
{ if(in&mask) //Продвигаем маску по числу
a[c]=1; //и организовываем вектор "код"
else
a[c]=0;
cout<<setw(1)<<a[c];
in<<=1; }
cout<<endl<<endl;
//---Инвертируем вектор "код"
for(i=0;i<=15;i++)
{ if(a[i]==1)
f[i]=0;
else
f[i]=1; }
//---Прибавляем 1 и получаем прямой код-------
for(i=15;i>=0;i--)
if(b[i]==1)
if (f[i]==b[i])
{ f[i]=0;
b[i-1]=1;
}
else
f[i]=1;
cout<<"Восстановленное значение"<<endl;
//------По известной формуле переводим число в десятичный вид
for (i=0;i<=15;i++)
{ out+=f[i]*pow(2,k--);
}
out=-out;
cout<<out;
getch();
}
Результат:
Введите целое отрицательное число (тип int):
-123
Kод числа:
Восстановленное значение
-123
Пример 4. Функции. Передача параметров.
Задание. Вычислить интегралы: от функции f1 и f2, используя метод трапеции (Симпсона). В качестве формального параметра функции для вычисления интеграла необходимо использовать указатель на подынтегральную функцию. Выбрать интервалы интегрирования и шаг.
#include<iomanip. h>
#include<conio. h>
#include<math. h>
//Функция вычисления первого интеграла-integr1 y=
double integr1(double g)
{
return g*g*pow((4-g*g),0.5);
}
//Функция вычисления второго интеграла-integr2 ![]()
double integr2(double g)
{ return pow(sin(g),2);}
//--Пеовобразная для функции integr
double int1 (double a, double b)
{return 2*asin(b/2)-sin(4*asin(b/2))-2*asin(a/2)-sin(4*asin(a/2));}
//--Пеовобразная для функции integr
double int2(double a, double b)
{ return b/2-0.25*sin(2*b)-a/2+0.25*sin(2*a);}
//--Функция вычисления-
double integral(double a, double b, int n, double (*integr)(double))
{ //a, b - границы интервала
//n- число шагов
//*integr- указатель на подынтегральную функцию
// применение см. ниже.
int i;
double x, h,s=0;//Вычисляем интеграл методом трапеций
h=(b-a)/n;
x=h;
for(i=1;i<=n;i++)
{
s+=integr(x);
x+=h;
}
return h*((pow(b,2)*pow((4-pow(b,2)),0.5))/2+s);
}
void main()
{
double x, h;
clrscr();
cout<<"!Значения, вычисленные методом трапеций!";
cout<<"Значения, вычисленные по первообразной!";
cout<<"! ";
cout<<integral(0,1.9999,96,*integr1);// В поле "указатель на функцию" записы-
// ваем указатель на функцию, интеграл
// которой необходимо вычислить.
cout<<" ! ";
cout<<int1(0,1.9999)<<" !";
cout<<"! ";
cout<<integral(0,3.14/2,96,*integr2);
cout<<" ! ";
cout<<int2(0,3.14/2)<<" !";
getch();
}
Результат:
!Значения, вычисленные методом трапеций! Значения, вычисленные по первообразной!
3.139022 ! 3.161582
0.817752 ! 0.784602
литература
Основная
1. Объектно-ориентированное программирование с примерами применения. Киев: НИПО «ДиаСофт». 1993.
2. С++ изнутри. Киев: НИПО «ДиаСофт», 1993.
3. Дьюхарст. C., Старк. К. Программирование на С++ Киев: НИПО «ДиаCофт», 1993.
4. , От Turbo C к Borland C++: Cправочное пособие. /Под общ. ред. .- Минск:Выш. шк., 1992.
5. Подбельский С++ :Учеб. пособие. - М.: Финансы и статиститка, 1995.
6. , , Козодоев С++: язык и применение М.: Джен АЙ Лтд, 1993.
Дополнительная
7. Обработка исключительных ситуаций в Си++: что, когда, как. PC Magazine/Russian Edition, 1995.- №4.- С. 180-186.
8. Бабэ Бруно. Просто и ясно о Borland C++. Пер. с англ.- М.: БИНОМ, 199с.
9. Как программировать на С++: Пер. с англ.- М.: ЗАО "Издательство БИНОМ", 199с.: ил.
10.Касаткин программирование на языке Си. В 3т. Минск: Выш. шк., 1993.
11. Язык программирования Си. - М.: Финансы и Статистика, 1992.
12., Лебедев информатики и вычислительной техники. М.: Просвещение, 1990.
13. С++ под рукой. - Киев НИПО «ДиаСофт», 1993.
14. С++ для начинающих: Пер. с англ.- М.: Унитех; Рязань: Гэлион, 1993.- Т. с.; Т. с.
15.Неформальное введение в С++ и Turbo Vision: Пер. с англ.- Санкт-Петербург: Галерея "ПЕТРОПОЛЬ", 1992, 384 с.
16.От Си к Си++ / , , и др.- М.: Финансы и статистика, 199с.
17.Пол Ирэ. ООП с использованием С++: Пер. с англ./ Киев: НИПО «ДиаСофт Лтд.», 1995.-480с.
18.Романов на языке С++. Практический подход.- М.: Компьютер, 199с.
19. От Си к Си++.- М.: ЭДЭЛЬ, 199с.
20. Язык программирования Си++: Пер. с англ.- М.: Радио и связь, 199с.
21. Язык программирования Си++. Второе издание : Пер. с англ.- Киев: ДиаСофт, 1993. Часть с. Часть с.
22. Язык Си. -М.: Мир, 1988.
23., Гончаров руководство по основам информатики и вычислительной техники. - М.: Финансы и статистика; Компьютерпресс, 1990.
24. Справочное руководство по языку программирования С++ с комментариями. Проект стандарта ANSI: Пер. с англ.- М.: Мир, 199с.
Оглавление
1. ВВЕДЕНИЕ В С++.................................................................................... 4
1.1. Интегрированная среда программирования Borland C++............. 4
1.2. Структура программы на языке С++.............................................. 6
1.3. Алфавит языка.................................................................................. 8
1.4. Имена................................................................................................ 9
1.5. Директивы препроцессора #include и #define................................. 9
2. ОСНОВНЫЕ ТИПЫ ДАННЫХ И ИХ ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ 12
2.1. Переменные и константы................................................................ 12
2.2. Данные типа int............................................................................... 12
2.3. Данные типа char............................................................................ 15
2.4. Данные с плавающей точкой.......................................................... 16
2.5. Константы....................................................................................... 18
2.5.1. Целые константы......................................................................... 18
3. ЭЛЕМЕНТАРНЫЙ ВВОД-ВЫВОД..................................................... 23
3.1. Форматированный ввод-вывод...................................................... 23
3.2. Функция ввода cin.......................................................................... 27
3.3. Неинициализированные переменнее.............................................. 28
3.4. Функция вывода cout...................................................................... 29
4. ОПЕРАЦИИ И ВЫРАЖЕНИЯ............................................................. 33
4.1. Выражение и его интерпретация................................................... 33
4.2. Основные операции и их приоритет.............................................. 34
4.3. Указатели и массивы...................................................................... 39
5. ОПЕРАТОРЫ.......................................................................................... 44
5.1. Общие сведения.............................................................................. 44
5.2. Оператор if...................................................................................... 45
5.3. Операторы switch и break.............................................................. 46
5.4. Операторы цикла............................................................................ 48
5.5. Другие управляющие средства языка Си...................................... 51
6. Функции в языке С++.................................................................... 51
6.1. Описание функции.......................................................................... 51
6.2. Прототипы функций....................................................................... 53
6.3. Локальные переменные в функциях.............................................. 54
6.4. Статические переменные в функциях............................................ 55
6.5. Выход из функций........................................................................ 56
6.6. Передача параметров функции...................................................... 56
6.7. Модификаторы cdecl и pascal........................................................ 59
6.8. Передача параметров функции по ссылке.................................... 60
6.9. Перегрузка функций....................................................................... 61
6.10. Указатель на функцию. Модификаторы near, far, huge.............. 62
6.11. Стандартные математические функции....................................... 63
6.12. Работа со строками символов...................................................... 66
7. Классы хранения и видимость переменных.............. 67
7.1. Общие положения........................................................................... 67
7.2. Область определения и видимость идентификатора..................... 68
8. Структуры, объединения и перечисления.................... 72
8.1. Общие положения........................................................................... 72
8.2. Шаблон структуры. Внешний и внутренний шаблоны. Структурная переменная................................................................................................................ 73
8.3. Вложенные структуры................................................................... 76
8.4. Указатель на структурную переменную........................................ 77
8.5.Массивы структурных переменных. Правила выравнивания структурных переменных в памяти............................................................................. 79
8.6. Использование структур в функциях............................................ 81
8.7. Объединения разнотипных данных............................................... 83
8.8. Перечисления.................................................................................. 86
приложение. Примеры программ............................................ 87
литература............................................................................................. 92
Наталья Викторовна Триханова
ПРОГРАММИРОВАНИЕ
НА ЯЗЫКЕ С++. ЧАСТЬ I
Учебное пособие
Научный редактор ст. преп., к. т.н.,
Компьютерный набор выполнил
Подписано к печати:
Формат 60х84/16. Бумага ксероксная.
Плоская печать. Усл. печ. л. 5,58. Уч.-изд. л. 5,05.
Тираж 250 экз. Заказ № .
ИПФ ТПУ. Лицензия ЛТ №1 от 18.07.94.

Типография ТПУ. Томск, пр. Ленина, 30.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


