- •Введение
- •Глава 1. Основы.
- •Int main()
- •1.2. Методика создания программ в Microsoft Visual Studio.
- •Void main(){
- •1.3. Ввод-вывод.
- •1.4. Переменные и константы.
- •Int I; // объявление целочисленной переменной
- •42 // Десятичная константа
- •0X42 // шестнадцатеричная константа, начинается с 0х
- •042 // Восьмеричная константа, начинается с 0
- •1.5. Арифметические операции.
- •Void main()
- •1.6. Встроенные функции. Математические функции. Состав math.H.
- •Void main()
- •Int rand(void); // функция используется без аргумента
- •Глава 2. Операторы и выражения.
- •2.1. Логические выражения и операторы
- •2.1.1. Оператор if else
- •If (условие)
- •If (условие)
- •2.1.2. Конструкция if else if
- •Int number;
- •Int number;
- •2.1.3. Условный оператор.
- •2.1.4. Оператор switch.
- •Int dvalue;
- •2.2. Операторы цикла.
- •2.2.1. Оператор for
- •Void main()
- •Int I; // создаем переменную цикла
- •Void main()
- •Int I; // переменную цикла можно определить и вне цикла
- •2.2.2. Изменение шага цикла
- •Void main()
- •2.2.3. Цикл while.
- •2.2.4. Цикл do while
- •Void main()
- •2.3. Операторы break и continue
- •Void main()
- •Void main()
- •2.4. Типичные ошибки при использовании операторов цикла
- •Глава 3. Производные типы данных.
- •3.1. Ссылки и указатели.
- •Int test; // объявили целочисленную переменную
- •Int & s_test; // ошибка! ссылка не связана с переменной
- •Int *p1; // объявлен указатель на целое с именем p1
- •3.2. Массивы и строки.
- •Int z[10]; //массив из 10 целых чисел
- •Int ar[3]; // объявлен целочисленный массив из 3 элементов
- •Int varr[4]; // объявление массива
- •3.2.2. Многомерные массивы.
- •Int z[3][4]; //массив из 12 целых чисел
- •3.2.3. Строки
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •If(strstr(st,st2)) //если подстрока встречается, выводим
- •3.1.5. Динамическое определение одномерных массивов.
- •3.1.6. Динамические двумерные массивы.
- •3.1.7. Указатели, массивы и арифметика указателей.
- •Int tacs[3];
- •Void main()
- •3.2. Структуры
- •Int age; // элементы структуры
- •Int hours;
- •Int mins;
- •Void main()
- •Int hours;
- •Int mins;
- •Void main()
- •4. Функции, определяемые пользователем
- •4.1. Объявление и определение функции
- •Int max(int , int ); // в прототипе достаточно указать только тип и
- •Void main() {
- •Int MyRand(){
- •Int func(){ return 1;} // правильное выражение
- •Int func2(){return 0.146;} // неправильно, 0.146 преобразуется к int с
- •Void swap(int p, int q)
- •Int bigger(int a,int b)
- •4.2. Передача параметров функций
- •5. Заголовочные файлы.
- •6. Работа с файлами
- •6.1 Простой файловый ввод/вывод
- •6.2 Тонкости работы с файлами
- •7.1. Определение классов.
- •Void main()
- •7.2. Как объявлять функции класса?
- •7.3. Конструкторы и деструкторы классов.
- •8. Графика OpenGl.
- •Void callback Draw()
- •Void main()
- •8.1. Создание анимации с помощью библиотеки xgl
- •Приложения Управление выводом
- •Управление шириной вывода
Void main()
{ int na =0;
int *p = new int[3];
p[0]=0;
p[1]=2;
p[2]=3;
cout<<p<<endl; // адрес элемента p[0];
*p++=12;
cout <<p[0]<<'\t'<<p[1]<<'\t'<<p[2];
}
2. Измените предыдущую программу, заменив выражение *p++ на (*p)++ . Что получится со значениями элементов массива?
3.2. Структуры
Структуры - это составной объект, в который входят элементы любых типов, за исключением функций.
В отличие от массива, который является однородным объектом, структура может быть неоднородной. Тип структуры определяется записью вида:
struct student // за ключевым именем struct следует имя нового типа
{ // открывающиеся скобки
char name[20]; //
Int age; // элементы структуры
int id; //
}; // скобки и точка с запятой заканчивают описание
Где следует размещать определение структуры? Возможные варианты – внутри функции main() или перед ней. Чаще используют внешнее определение структуры, так как в этом случае возможно использование ее во всех функциях, следующих далее.
В приведенном примере шаблон student описывает новый тип данных, поэтому можно создавать переменные этого типа:
student victor;
Для обращения к элементам структуры используется оператор принадлежности ‑ точка (.), например, victor.age.
Обратите внимание, что в качестве элемента структуры можно использовать массив. Элементы структуры принято называть полями и они могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него!
Структуры могут образовывать массив структур, например:
student group[35];
Рассмотрим пример работы со структурами. Разработаем структуру, представляющую временные величины в виде часы, минуты и научимся работать с ними.
#include <iostream.h>
// определение нового типа данных
struct time
{
Int hours;
Int mins;
}; // конец определения структуры, не забудьте точку с запятой
Void main()
{
time day1={5,45}; // определение и инициализация структуры
time day2={4,55}; // типа time
time sumt;
sumt.mins=(day1.mins+day2.mins)%60;
sumt.hours=(day1.hours+ day1.hours)+(day1.mins+day2.mins)/60;
cout<<sumt.hours<<” hours ”<<sumt.mins<<” minutes\n”;
}
Так как для размещения структуры может понадобиться значительный объем памяти, для этого типа данных также предусмотрено динамическое связывание с помощью оператора new. Для структуры time из последнего примера сначала выделим память, достаточную для размещения структуры:
time * pday = new time;
При этом pday – не имя структуры, а ее адрес. Доступ к элементам динамически созданной структуры осуществляется с помощью стрелочного оператора (->). Таким образом, pday->hours – это элемент hours указанной структуры.
#include <iostream.h>
struct time
{
Int hours;
Int mins;
};
Void main()
{
time *pday=new time;
pday->hours=60;
cout<<pday->hours;
delete pday;
}
Помните, если для объявления структуры используется имя структуры, используйте точку. А если идентификатор – указатель на структуру, используйте стрелочный оператор.
После использования динамически объявленной структуры следует очистить область памяти с помощью оператора delete.
Элементом структуры может быть другая структура! В этом случае обращение к полям структуры может достигается через две операции принадлежности. Следующий пример иллюстрирует эту, довольно редкую ситуацию:
struct A // объявление структуры A
{
int k;
double x;
};
struct B // объявление структуры B
{
A s; // s – поле структуры B, по типу – структура типа A
double y;
};
B mas[2]; // массив структур
// способ обращения к полям структуры
mas[0].s.k = 1;
mas[1].y = 1.21;
Контрольные вопросы. А.