
- •Базовые типы данных.
- •Сложные типы данных. Перечислимый тип. Пример.
- •Сложные типы данных. Структуры. Пример.
- •Сложные типы данных. Объединения. Пример.
- •6)Первичные операции. Приоритет операции. Пример.
- •7) Условный оператор Оператор if
- •8)Оператор переключатель
- •9)Пошаговый цикл
- •10)Цикл с предусловием
- •21. Указатель, Объявление, Основные операции. Примеры.
- •22. Арифметические операции с указателями. Пример.
- •23. Операции динамического распределения памяти. Примеры .
- •24. Указатели и одномерные массивы. Динамические массивы. Примеры.
- •25. Указатель на указатель. Массивы указателей. Динамические двумерные массивы. Примеры.
- •26. Функции. Прототип функции. Определение функции. Примеры.
- •27.Передача аргументов функции по значению, по ссылке. Примеры.
- •28. Передача аргументов функции по адресу. Примеры.
- •29. Двумерный массив как аргумент функции. Примеры.
- •30. Динамический двумерный массив как аргумент функции. Примеры.
28. Передача аргументов функции по адресу. Примеры.
При передаче по адресу в стек заносятся копии адресов аргументов, а функция осуществляет доступ к ячейкам памяти по этим адресам и может изменить исходные значения аргументов. Для обращения к значению аргумента-оригинала используется операция «*». Пример функции, в которой меняются местами значения x и y: void zam(int *x, int *y) {int t = *x; *x = *y; *y = t; }
29. Двумерный массив как аргумент функции. Примеры.
Двумерный массив – это таблица значений. Организацией он очень похож на обычный одномерный массив, но для вызова значения элемента нужно использовать два индекса. Удобен для хранения расчетных таблиц, матриц и т.п. В обычном двумерном массиве строго определен размер каждой строки. Возможна ситуация, когда зарезервированное место не будет использовано. В массиве указателей каждый раз резервируется ровно столько места, сколько нужно для хранения данных.
void inputMatr (double[][N], int n)
{ int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
cin>>x[i][j];}
30. Динамический двумерный массив как аргумент функции. Примеры.
Созданный таким образом двумерный динамический массив существенно отличается от обычного двумерного массива. Под обычный двумерный массив при объявлении выделяется сплошной участок памяти размером, равным произведению его границ. Для двумерного динамического массива выделенная память не представляет собой сплошной участок, поскольку она выделяется с помощью нескольких операций new.
main()
{int n, i, j, *mas, buf;
соut <<"\nВведите размерность массива:";
cin >> n;
mas=new int[n];
соut << “\nВводите элементы массива.\n";
for(i=0; i<n; i++)
{cout<<"mas ["<<i<<”]=”;
cin>>mas[i];}
for(i=l; i<n; i++)
for(j=l; j<=n-i; j++)
if (mas[j-l]>mas[j])
{buf=mas[j-l]; mas[j-l]=mas[j]; mas[j]=buf;}
cout <<"Peзyльтиpyющий массив:\n";
for(i=0; i<n; i++) cout<<mas[i]<<" ";
delete mas;}
31 Структуры и функции. Примеры.
Функции это часть программы оформленное особым образом и выполняющее логично завершённое действие или логично завершённое вычисление.
Int max(int x, int y);
main()
{int a,b,c,d,m,m1,m2;
Cin>>a>>b>>c>>d;
m1=max(a,b);
m2=max(c,d);
m=max(m1,m2);
cout <<”max=”<<m;
getch();
}
Int max(int x, int y)
{int z;
if(x>y)z=x;
else z=y;
return;
}
Структура - это составной тип данных.
Struct book
{char author[21];
char title[51];
int year;
double price;};
32 Операции со структурами. Примеры.
К структурным данным в Си применимы следующие операции:
1)операция “.” (точка), Для получения доступа к элементу структурной переменной через ее имя используется символ точка, обозначающий операцию выбор поля структуры.
Struct book
{char author[21];
char title[51];
int year;
double price;};
book a;
a.author;- выведет автора
2)student a,*p;
*p=a;
(*p)<=>a- Выделение элемента структурной переменной через указатель
3)p=&a, операция присваивание адреса, К структурным переменным, точно так же, как и к обычным переменным, применима операция взятия адреса, обозначаемая знаком &
4)b=a, операция присваивания -
Значение ячейки a копируется в ячейку b
33 Массивы структур. Динамические массивы структур. Примеры
Если массивы по определению могут содержать внутри себя множество однотипных элементов, то внутри структур можно описать разное количество разнотипных элементов. А сами по себе структуры являются пользовательским типом данных, следовательно можно создать массив структур.
Struct date
{int d,m,y;};
Void main()
{int i, date x;
For(i=0;i<n;n++)
Cin<<x[i].d<< x[i].m<< x[i].y;
}
Динамический массив структур
Void inputdatedinam(student *pz)
{char iniz[5];
Cout<<”день”;cin>>pz->d
Cout<<”месяц”;cin>>pz->m
Cout<<”год”;cin>>pz->y
}
34 Файловые потоки. Назначение. Объявление. Порядок работы с файловыми потоками.
Файловые потоки представляют объектно-ориентированный способ чтения и записи информации в дисковые файлы. Библио-тека файловых потоков разработана для работы только с тек-стовыми файлами. Однако можно применить ее и для чтения и записи двоичных значений, текстов, структур или любых дру-гих объектов. Класс файловых потоков подключается заголовочными фай-лами fstream.h и iostream.h.
Порядок работы с файловыми потоками.
1)объявление файловых потоков
2)связывание фай-ва потока с физ. файлом(открытие файла)
3)Считывание или запись данных в файл
4)Разрыв связи(закрытие) физ. файлом.
35 Текстовые файловые потоки. Функции работы с ними. Примеры.
Файловые потоки представляют объектно-ориентированный способ чтения и записи информации в дисковые файлы. Библио-тека файловых потоков разработана для работы только с тек-стовыми файлами. Однако можно применить ее и для чтения и записи двоичных значений, текстов, структур или любых дру-гих объектов. Класс файловых потоков подключается заголовочными фай-лами fstream.h и iostream.h.
Порядок работы с файловыми потоками.
1)объявление файловых потоков
2)связывание фай-ва потока с физ. файлом(открытие файла)
3)Считывание или запись данных в файл
4)Разрыв связи(закрытие) физ. файлом.
Текстовые файлы состоят из символов и могут разделяться на строки. Любой символ в файле представляется соответствующим ему числовым кодом. Признаком перехода на следующую строку является символ '\n' Именно текстовые файлы создаются и просматриваются простыми текстовыми редакторами.Числа хранятся в текстовых файлах в виде соответствующих последовательностей символов.
36) екстовые файлы хранят данные в виде текста (sic!). Это значит, что если, например, мы записываем целое число 12345678 в файл, то записывается 8 символов, а это 8 байт данных, несмотря на то, что число помещается в целый тип. Кроме того, вывод и ввод данных является форматированным, то есть каждый раз, когда мы считываем число из файла или записываем в файл происходит трансформация числа в строку или обратно. Это затратные операции, которых можно избежать.
Текстовые файлы позволяют хранить информацию в виде, понятном для человека. Можно, однако, хранить данные непосредственно в бинарном виде. Для этих целей используются бинарные файлы.
Для более «тонкой» работы с содержимом файлов существует бинарный режим, который представляет содержимое файла как последовательность байтов где все возможные управляющие коды являются просто числами. Именно в этом режиме возможно удаление или добавление управляющих символов недоступных в текстовом режиме. Для того чтобы открыть файл в бинарном режиме используется также функция fopen() с последним параметром равным “rb” и “wb” соответственно для чтения и записи.
Еще одной особенностью текстового формата файла является запись чисел в виде текста.
37) #include <stdlib.h> //Для очистки экрана #include <iostream.h> //Для работы с клавиатурой #include <fstream.h> //Для работы с файловыми потоками
void main() { system(“CLS”); //Очистка экрана int y=0; //Y будем записывать в файл int x=0; //X будем считывать из файла
cout<<“Y = “;cin>>y; //Вводим число, которое нужно сохранить в файл ofstream out(“C://1.txt”,ios::binary|ios::out); //Открываем файл в двоичном режиме для записи out.write((char*)&y,sizeof y); //Записываем в файл число y out.close(); //Закрываем файл
cout<<“x = “<<x<<endl; //Показываем X до его изменений
ifstream in(“C://1.txt”,ios::binary|ios::in); //Открываем файл в двоичном режиме только для чтения in.read((char*)&x,sizeof x); //Читаем оттуда информацию и запоминаем её в X in.close(); //Закрываем файл
cout<<“x = “<<x<<endl; //Показываем X после изменения system(“PAUSEДля записи в файл использована команда ofstream, для чтения из файла использована команда instream У обеих команд внутри скобок одинаковая конструкция”);
пример: #include <iostream.h> //Для работы с клавиатурой #include <fstream.h> //Для работы с файлами #include <stdlib.h> //Для очистки экрана
//Наша структура struct MyStruct { char *Name; int size; };
void main() { system(“CLS”); //Очистка экрана MyStruct X,Y; //Создали два объекта соответствующие нашей структуре //Например объект X имеет такие параметры X.Name=“МЕДВЕД”; // X.size=100; //
//Открываем файл для записи в бинарном режиме ofstream out(“C://2.txt”,ios::binary|ios::out); out.write((char*)&X,sizeof X); //Записываем объект X в открытый нами файл out.close(); //Закрываем открытый файл
//Открываем файл только для чтения, открываем в бинарном режиме fstream in(“C://2.txt”,ios::binary|ios::in); in.read((char*)&Y,sizeof Y); //Считываем информацию в объект Y in.close(); //Закрываем открытый файл //Показываем объект Y по его составным частям cout<<Y.Name<<“\n”; cout<<Y.size<<“\n”;
cin.get();
38) При прямом доступе файл рассматривается как набор элементов, занимающих последовательные позиции в линейном порядке; значение может быть передано в элемент файла (или из него), находящийся в любой выбранной позиции. Позиция элемента задается его индексом, который является положительным числом определяемого реализацией целого типа COUNT. Индекс первого элемента в файле (если он есть) равен единице; индекс последнего элемента (если он есть) называется текущим размером; текущий размер файла, не содержащего ни одного элемента, равен нулю. Текущий размер — это характеристика внешнего файла.
Устанавливает позицию в файле, связаннном с потоком fp.
Смещение в байтах является величиной со знаком и берет-
ся относительно origin. Значения origin определены в
io.h файле:
SEEK_SET - начало файла
SEEK_CUR - текущая позиция
SEEK_END - конец файла
Если файл открыт в текстовом режиме, смещение может
быть только значением, возвращенным ftell, а origin
должно быть 0, или offset должно быть 0. Если непос-
редственно перед вызовом fseek работала ungetc, ее
результаты теряются. Если файл был открыт в режиме
чтения/записи, следом за fseek можно выполнить чтение
или запись.
Пример
#include <stdio.h>
#include <io.h>
main()
{
FILE *fp;
fp = fopen("file.dat", "r+");
fseek(fp, 0L, SEEK_END); /* Перейти в конец файла */
fseek(fp, 0L, SEEK_SET); /* Перейти в начало файла */
fseek(fp, 20L, SEEK_SET); /* Перейти на смещение 200 */
39) Форматирование вывод в поток. Манипуляторы. Примеры вывод на экран/с экрана в С++ осуществляется с помощью операторов и cout соответственно,
Потоки вывода создаются на базе класса ostream, который обеспечивает методы для записи данных в буфер потока
Таблица 2 — Манипуляторы форматирования в С++ |
|||
Манипулятор |
Назначение |
Пример |
Результат |
endl |
Переход на новую строку при выводе |
cout << «website:» << endl << «cppstudio.com»; |
website: cppstudio.com |
boolalpha |
Вывод логических величин в текстовом виде (true, false) |
bool log_true = 1; cout << boolalpha << log_true << endl; |
true |
noboolalpha |
Вывод логических величин в числовом виде (true, false) |
bool log_true = true; cout << noboolalpha << log_true << endl; |
1 |
oct |
Вывод величин в восьмеричной системе счисления |
int value = 64; cout << oct << value << endl; |
1008 |
dec |
Вывод величин в десятичной системе счисления (по умолчанию) |
int value = 64; cout << dec << value << endl; |
6410 |
hex |
Вывод величин в шестнадцатеричной системе счисления |
int value = 64; cout << hex << value << endl; |
408 |
showbase |
Выводить индикатор основания системы счисления |
int value = 64; cout << showbase << hex << value << endl; |
0x40 |
noshowbase |
Не выводить индикатор основания системы счисления (по умолчанию). |
int value = 64; cout << noshowbase << hex << value << endl; |
40 |
uppercase |
В шестнадцатеричной системе счисления использовать буквы верхнего регистра (по умолчанию установлены буквы нижнего регистра). |
int value = 255; cout << uppercase << hex << value << endl; |
FF16 |
nouppercase |
В шестнадцатеричной системе счисления использовать буквы нижнего регистра (по умолчанию). |
int value = 255; cout << nouppercase << hex << value << endl; |
ff16 |
showpos |
Вывод знака плюс + для положительных чисел |
int value = 255; cout << showpos<< value << endl; |
+255 |
noshowpos |
Не выводить знак плюс + для положительных чисел (по умолчанию). |
int value = 255; cout <<noshowpos<< value << endl; |
255 |
scientific |
Вывод чисел с плавающей точкой в экспоненциальной форме |
double value = 1024.165; cout << scientific << value << endl; |
1.024165e+003 |
fixed |
Вывод чисел с плавающей точкой в фиксированной форме (по умолчанию). |
double value = 1024.165; cout << fixed << value << endl; |
1024.165 |
setw(int number) |
Установить ширину поля, где number — количество позиций, символов (выравнивание по умолчанию по правой границе). Манипулятор с параметром. |
cout << setw(40) << «cppstudio.com» << endl; |
__cppstudio.com |
right |
Выравнивание по правой границе(по умолчанию). Сначала необходимо установить ширину поля(ширина поля должна быть заведомо большей чем, длина выводимой строки). |
cout << setw(40) << right << «cppstudio.com» << endl; |
__cppstudio.com |
left |
Выравнивание по левой границе. Сначала необходимо установить ширину поля(ширина поля должна быть заведомо большей чем, длина выводимой строки). |
cout << setw(40) << left << «cppstudio.com» << endl; |
cppstudio.com__ |
setprecision(int count) |
Задаёт количество знаков после запятой, где count — количество знаков после десятичной точки |
cout << fixed << setprecision(3) << (13.5 / 2) << endl; |
6.750 |
setfill(int symbol) |
Установить символ заполнитель. Если ширина поля больше, чем выводимая величина, то свободные места поля будут наполняться символом symbol — символ заполнитель |
cout << setfill(‘0′) << setw(4) << 15 << ends << endl; |
0015 |
Пример:
Int main()
{
Ofstream out;
Out.open(“text.txt”);
If (out.is_open())
Cout<<”Файл открылся”;
Else cout<<”Файл найден”;
Out.close;
Return 0;
}