- •Введение
- •Глава 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 n;
cout<<”Enter number in the range 1-10”;
do
{
cin>>n;
}
while(n!=7);
cout<<” 7 is my favorite number.\n”;
}
2.3. Операторы break и continue
Операторы break и continue позволяют программе пропустить фрагмент кода. В разделе 2.1.4 приводился пример использования break в операторе switch. Использование его в операторах цикла приводит к такому же эффекту – переходу к оператору, следующему за оператором цикла. Оператор continue используется в циклах и вызывает новую итерацию цикла. В приведенных ниже листингах показан вариант использования обоих операторов.
// в этом примере программа суммирует только четные числа.
// ноль – признак окончания ввода
#include <iostream.h>
Void main()
{
int n, sum=0;
cout<<" Enter integer number. To stop enter 0\n";
do
{
cin>>n;
if (n%2!=0)
continue; // пропуск суммирования, переход на while
sum=sum+n;
}
while(n!=0); // ноль - признак окончания ввода, конец цикла
cout<<" Sum="<<sum<<"\n";
}
Следует обратить внимание на то, что continue заставляет программу перейти непосредственно к проверочному выражению, следовательно, в цикле while будет пропущено выражение обновления цикла, если оно следует после continue. В ряде случаев это может создавать проблемы. Заметим, что использование оператора continue в данном примере было необязательным, достаточно было записать следующий программный код:
if (n%2==0)
sum=sum+n;
// пример использования break
// ноль – признак окончания ввода
#include <iostream.h>
Void main()
{
int x, y;
cout<<" Enter integer number. To stop enter 0\n";
do
{
cin>>n;
if (n==0)
break;
sum=sum+n;
}
while(n!=0);
cout<<" Sum="<<sum<<"\n";
}
Для всех видов циклов есть команды для прерывания цикла и для перехода к следующей итерации – это операторы break и continue, соответственно:
2.4. Типичные ошибки при использовании операторов цикла
Несмотря на простой синтаксис операторов цикла, их применение часто сопровождается ошибками. Рассмотрим следующий пример:
i = 0;
while (i <= 10)
cout<<i<<”\n”;
i++;
cout<<” end program”;
Наличие отступа подсказывает, что автор полагал отнести оператор i++ к телу цикла, однако не использовал для этого фигурных скобок. Теперь оператор цикла будет выполнять бесконечную распечатку нулевого значения i.
Еще одна ловушка связана с использованием точки с запятой:
int k;
for (k=0; k<10; k++);
cout<<k;
В результате выполнения этого кода на экран будет выведено не десять различных значений k, а одно, равное 9.
Контрольные вопросы. А.
Глава 3. Производные типы данных.
3.1. Ссылки и указатели.
В разделе 1.4 простые переменные определялись, как именованная область памяти, в которой хранятся данные. В процессе работы программа находит нужную переменную в памяти компьютера благодаря ее адресу. Узнать адрес переменной в С++ можно при помощи операции &. Например, если test – переменная, то &test определяет ее адрес. Следующий пример поясняет работу этой операции.
int cup = 4;
double nut = 6.5;
cout << “nut= ”<<nut;
cout << “and nut address= ”<<&nut<<’\n’;
cout << “cup= ”<< cup;
cout << “and cup address= ”<<&cup<<’\n’;
В результате выполнения программы на экране отобразится приблизительно следующее1:
nut = 6.5 and nut address = 0x0012FF7C
cup = 4 and cup address = 0x0012FF74
Как видим, при отображении адресов используется шестнадцатеричная система представления чисел. Разность между двумя адресами равно 8 и это имеет смысл, т.к. nut объявлена как тип double под который отводится 8 байт.
При помощи знака & можно определить ссылку, которая по сути является синонимом имени переменной или вторым именем уже определенной переменной:
int first = 31; // объявили целочисленную переменную
int & second = first; // ссылка second – альтернативное имя first
cout<<second<<endl;
second=0; // изменили значение не только second
cout<<first; // что теперь будет выведено на экран?
Можно создать ссылку на константу:
const double & pi = 3.1415; // const указывает, что pi изменять нельзя
При работе со ссылками следует помнить следующие правила:
при объявлении ссылка должна быть инициализирована (кроме случаев, когда она является параметром функции);
после инициализации ссылке не может быть присвоена другая переменная;
нельзя создавать массив ссылок, ссылки на ссылки, указатели на ссылки;
тип ссылки должен совпадать с типом величины, на которую она ссылается.
Следующие примеры иллюстрируют ошибки, которые могут возникать при работе со ссылками: