Опубликован: 10.10.2006 | Доступ: свободный | Студентов: 5981 / 454 | Оценка: 4.26 / 3.88 | Длительность: 31:30:00
Лекция 1:

Краткий обзор С++

1.3 "Улучшенный С"

Минимальная поддержка процедурного программирования включает функции, арифметические операции, выбирающие операторы и циклы. Помимо этого должны быть предоставлены операции ввода-вывода. Базовые языковые средства С++ унаследовал от С (включая указатели), а операции ввода-вывода предоставляются библиотекой. Самая зачаточная концепция модульности реализуется с помощью механизма раздельной трансляции.

1.3.1 Программа и стандартный вывод

Самая маленькая программа на С++ выглядит так:

main () { }

В этой программе определяется функция, называемая main, которая не имеет параметров и ничего не делает. Фигурные скобки { и } используются в С++ для группирования операторов. В данном случае они обозначают начало и конец тела (пустого) функции main. В каждой программе на С++ должна быть своя функция main(), и программа начинается с выполнения этой функции.

Обычно программа выдает какие-то результаты. Вот программа, которая выдает приветствие Hello, World! (Всем привет!):

#include <iostream.h>

         int main ()
         {
cout << "Hello, World!\n";
         }

Строка #include <iostream.h> сообщает транслятору, что надо включить в программу описания, необходимые для работы стандартных потоков ввода- вывода, которые находятся в iostream.h. Без этих описаний выражение

cout << "Hello, World!\n"

не имело бы смысла. Операция << ("выдать") записывает свой второй параметр в первый параметр. В данном случае строка "Hello, World!\n" записывается в стандартный выходной поток cout. Строка - это последовательность символов, заключенная в двойные кавычки. Два символа: обратной дробной черты \ и непосредственно следующий за ним - обозначают некоторый специальный символ. В данном случае \n является символом конца строки (или перевода строки), поэтому он выдается после символов Hello, world!

Целое значение, возвращаемое функцией main(), если только оно есть, считается возвращаемым системе значением программы. Если ничего не возвращается, система получит какое-то "мусорное" значение.

1.3.2 Переменные и арифметические операции

Каждое имя и каждое выражение обязаны иметь тип. Именно тип определяет операции, которые могут выполняться над ними. Например, в описании

int inch;

говорится, что inch имеет тип int, т.е. inch является целой переменной.

Описание - это оператор, который вводит имя в программу. В описании указывается тип имени. Тип, в свою очередь, определяет как правильно использовать имя или выражение.

Основные типы, наиболее приближенные к "аппаратной реальности" машины, таковы:

char
short
int
long

Они представляют целые числа. Следующие типы:

float
  double
  long double

представляют числа с плавающей точкой. Переменная типа char имеет размер, нужный для хранения одного символа на данной машине (обычно это один байт). Переменная int имеет размер, необходимый для целой арифметики на данной машине (обычно это одно слово).

Следующие арифметические операции можно использовать над любым сочетанием перечисленных типов:

+    (плюс, унарный и бинарный)
-    (минус, унарный и бинарный)
*    (умножение)
/    (деление)
%    (остаток от деления)

То же верно для операций отношения:

==   (равно)
!=   (не равно)
<    (меньше чем)
<=   (меньше или равно)
>=   (больше или равно)

Для операций присваивания и арифметических операций в С++ выполняются все осмысленные преобразования основных типов, чтобы их можно было неограниченно использовать любые их сочетания:

double d;
int i;
short s;
// ...
d = d + i;
i = s * i;

Символ = обозначает обычное присваивание.

1.3.3 Указатели и массивы

Массив можно описать так:

char v [ 10 ]; // массив из 10 символов

Описание указателя имеет такой вид:

char * p; // указатель на символ

Здесь [] означает "массив из", а символ * означает "указатель на". Значение нижней границы индекса для всех массивов равно нулю, поэтому v имеет 10 элементов: v [ 0 ] ... v [ 9 ]. Переменная типа указатель может содержать адрес объекта соответствующего типа:

p = & v [ 3 ]; // p указывает на 4-й элемент массива v

Унарная операция & означает взятие адреса.

1.3.4 Условные операторы и циклы

В С++ есть традиционный набор выбирающих операторов и циклов. Ниже приводятся примеры операторов if, switch и while.

В следующем примере показано преобразование дюйма в сантиметр и обратно. Предполагается, что во входном потоке значение в сантиметрах завершается символом c, а значение в дюймах - символом i:

#include <iostream.h>

int main ()
{
  const float fac = 2.54;
  float x, in, cm;
  char ch = 0;

  cout << "enter length: ";

  cin >> x;   // ввод числа с плавающей точкой
  cin >> ch;   // ввод завершающего символа

  if ( ch == 'i' )
  {      // дюйм
      in = x;
      cm = x * fac;
  }
  else if ( ch == 'c' )
  { // сантиметры
      in = x / fac;
      cm = x;
  }
  else
      in = cm = 0;

  cout << in << " in = " << cm << " cm\n";
}

Операция >> ("ввести из") используется как оператор ввода; cin является стандартным входным потоком. Тип операнда, расположенного справа от операции >>, определяет, какое значение вводится; оно записывается в этот операнд.

Оператор switch (переключатель) сравнивает значение с набором констант. Проверку в предыдущем примере можно записать так:

switch ( ch )
{
case 'i':
    in = x;
    cm = x * fac;
    break;
case 'c':
    in = x / fac;
    cm = x;
    break;
         default:
   in = cm = 0;
   break;
        }

Операторы break используются для выхода из переключателя. Все константы вариантов должны быть различны. Если сравниваемое значение не совпадает ни с одной из них, выполняется оператор с меткой default. Вариант default может и отсутствовать.

Приведем запись, задающую копирование 10 элементов одного массива в другой:

int v1 [ 10 ];
int v2 [ 10 ];
// ...
for ( int i=0; i<10; i++ ) v1 [ i ] = v2 [ i ];

Словами это можно выразить так: "Начать с i равного нулю, и пока i меньше 10, копировать i-тый элемент и увеличивать i." Инкремент (++) переменной целого типа просто сводится к увеличению на 1.

Дарья Федотова
Дарья Федотова
Сергей Березовский
Сергей Березовский

В рамках проф. переподготовки по программе "Программирование"

Есть курсы, которые я уже прошел. Но войдя в курс я вижу, что они не зачтены (Язык Ассемблера и архитектура ЭВМ, Программирование на С++ для профессионалов). Это как?

Александр Кромм
Александр Кромм
Россия, Новосибирск, НГТУ