Как работает условный оператор if 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Как работает условный оператор if



Continue и break

Оператор continue и break

Часто при вознекновении некоторого события удобно иметь возможность досрочно завершить цикл. Используемый для этой цели оператор break (разрыв) вызывает немедленный выход из циклов, организуемых с помощью операторов for, while, do-while, а также прекращение оператора switch. Приведенная ниже программа обеспечивает поиск в заданномиассиве элемента, равного g (пример 4.9). В случае обнаружения такого элемента оператор break прекращает дальнейшее выполнение цикла. Так как параметр i сохраняет значение после выхода из цикла, то дальнейший анализ его значения (if(i==n)) позволяет судить об удачном (i<=n) илинеудачном (i==n) поиске. В случае вложенных циклов оператор break немедленно прекращает выполнение самого внутреннего из объемлющих его циклов. Пример 1

/*линейныйпоиск*/ #include <stdio.h> int a[]={1,2,3,33,5,6,0,8}; int n=8; main() { inti,g=33; for(i=0;i<n;i++) if(a[i]==g) break; if(i==n) printf("%d ненайден\n",g); else printf("%d на %d месте \n"g,i); }

На примере 2 приведена программа, которая ведет подсчет числа различных элементов в массиве. Каждый очередной элемент a[i] сравнивается с последующими элементами массива. Если он не совпадает ни с одним из этих элементов, в счетчик k добавляется еденица. В противном случае внутренний цикл прерывается оператором break и начинается новая итерация внешнего цикла. Пример 2

/*числоразныхэлементов*/ #include <stdio.h> main() { static a[]={7,3,7,4,3,6}; inti,j,m,k=1;m=6; for(i=0;i<m-1;i++) { for(j=i+1;j<m;j++) if(a[i]==a[j]) break; if(j==m) k++; } printf("%d разныхэлем. \n", k); }

Оператор continue тоже предназначен для прерывания циклического процесса, организуемого операторами for, while, do-while. Но в отличае от оператора break, он не прекращает дальнейшее выполнение цикла, а только немедленно переходит к следующейинтерации того цикла, в теле которого он оказался. Он как бы имитирует безусловный переход наконечный оператор цикла, но не за ее пределы самого цикла. Программа на примере 5.1 использует оператор continue для пропуска отрицательных элементов массива, суммируя только положительные.Пример 3

#include <stdio.h> main() { static int a[]={1,2,-3,4,-5,6}; inti,n,s; n=6; s=0; for(i=0; i<n; i++) { if(a[i]<=0) continue; /*пропуск 0*/ s+=a[i]; } printf("сумма = %d \n",s); }

Do..while

Оператор цикла do..while

Оператор do..while имеет следующий синтаксис:

do {

оператор;

}while (условие);

Сначала выполняется оператор, затем проверяется условие. Если результат является истинным, то цикл повторяется, а в противном случае он завершается. Назначение операторов и условия продолжения цикла аналогичны оператору while.

Цикл do..while сначала выполняет тело цикла, а условие продолжения проверяет потом. Это гарантирует выполнение операторов цикла, по крайней мере, один раз. В листинге 4.2 приведен измененный вариант предыдущей программы, в котором вместо цикла while используется цикл do..while.

Листинг 4.2. Цикл оператора do..while

#include <iostream>

using namespace std;

int main()

{

int counter;

cout << "How many hellos? ";

cin >> counter;

do

{

cout << "Hello\n";

counter--;

} while (counter >0);

cout << "Counter is: " << counter << endl;

return 0;

}

Результат

How many hellos? 2

Hello

Hello

Counter is: 0

Анализ: Подобно предыдущей программе, код которой приведен в листинге 3.3, здесь на консоль также выводится слово "Hello", однако в отличие от приведенной программы, оно отображается, по крайней мере, один раз.

В строке 6 пользователю предлагается ввести начальное значение счетчика (counter). В операторе do..while тело цикла выполняется до проверки условия, что гарантирует выполнение операторов цикла, по меньшей мере, один раз. В строке 10 текст сообщения выводится на экран, в строке 11 значение счетчика counter уменьшается на единицу, а в строке 12 проверяется условие продолжения цикла. Если оно истинно, то выполняется следующий цикл со строки 8 в противном же случае цикл завершается, и управление передается в строку 13.

 

For

Оператор цикла for

используется, когда нужно повторить заданное действие известное число раз.

Сначала посмотрим на формат цикла for. Он выглядит следующим образом:

Листинг 1:

for (инициализация счетчика; условие; изменение счетчика)

оператор;

Цикл for состоит из двух частей: заголовка (первая строка) и тела цикла (вторая строка)

Первое выражение - инициализация счетчика.

Мы должны завести переменную-счетчик и присвоить ей начальное значение.Например:

Листинг2.

for (i=0;...;...)

или

for (j=13;...;...)

Второе выражение - условие.

Здесь записано условие при котором будет выполняться тело цикла. Т.е. цикл будет работать пока условие истинно. Например:

Листинг 3.

for (i=0; i<10;...)

или

for (d=-100; d<=0;...)

Третье выражение - изменение счетчика.

Здесь записывается как изменяется переменная-счетчик после каждого выполнения тела цикла. Например:

Листинг4.

for (i=0; i<10; i++)

или

for (d=-100; d<=0; d+10)

Тело цикла всегда состоит из одного оператора. И если нам нужно использовать несколько операторов, то как и в случае с конструкцией if-else, применяется составной оператор {...}.

Как работает оператор цикла for:

Когда программа встречает слово for она понимает что перед ней цикл.

Сначала определяется переменная счетчик (выражение 1).

Проверяется условие выполнение цикла (выражение 2)

Если условие ложно, то программа выходит из цикл for и продолжает свое выполнение. Т.е. если в самом начале условие будет ложно, то тело цикла не выполнится ни одного раза.

Если условие истинно, то начинает выполняться тело цикла.

После того как тело цикла выполнится, программа возвращается к заголовку и выполняет изменение значение переменной-счетчика (выражение 3).

После этого возвращаемся к пункту два, и все действия повторяются до тех пор, пока условие не станет ложным.

 

If

If..else

Switch

While

Оператор цикла while

С помощью данного оператора реализуется цикл, который выполняется до тех пор, пока истинно условие цикла. Синтаксис данного оператора следующий:

while(<условие>)
{
<телоцикла>
}

Приведем пример реализации данного цикла, в котором выполняется суммирование элементов ряда S = 0+1+2+3... пока S

int N=20, i = 0;
long S = 0L;
while(S < N)
{
S=S+i;
i++;
}

В данном примере реализуется цикл while с условием i < N. Так как начальное значение переменной i=0, а N=20, то условие истинно и выполняется тело цикла, в котором осуществляется суммирование переменной i и увеличение ее на 1. Очевидно, что на 20 итерации значение i=20, условие станет ложным и цикл будет завершен. Продемонстрируем гибкость языка С++, изменив данный пример следующим образом:

int N=20, i = 0;

long S = 0L;

while((S=S+i++) < N)В данном случае при проверке условия сначала выполняются операторы, стоящие в скобках, где и осуществляется суммирование элементов ряда и только, затем, проверяется условие. Результат выполнения обоих вариантов программ одинаковый и S=21. Однако последняя конструкция бывает удобной при реализации опроса клавиатуры, например, с помощью функции scanf():

intnum;

while(scanf(“%d”,&num) == 1)

{

printf(“Вы ввели значение %d\n”,num);

}Данный цикл будет работать, пока пользователь вводит целочисленные значения и останавливается, если введена буква или вещественное число. Следует отметить, что цикл while можно принудительно завершить даже при истинном условии цикла. Это достигается путем использования оператора break. Перепишем предыдущий пример так, чтобы цикл завершался, если пользователь введет число 0.

intnum;

while(scanf(“%d”,&mun) == 1)

{

if(num == 0) break;

printf(“Выввелизначение %d\n”,num);

}Цикл завершается сразу после использования оператора break, т.е. в приведенном примере, при вводе с клавиатуры нуля функция printf() выполняться не будет и программа перейдет на следующий оператор после while. Того же результата можно добиться, если использовать составное условие в цикле:

intnum;

while(scanf(“%d”,&mun) == 1 &&num!= 0)

{

printf(“Вы ввели значение %d\n”,num);

}

Работает эта конструкция следующим образом.

1.Сначала проверяется условие в скобках.
1.1 Если оно истинно, то выполняется тело цикла. (Оператор). И программа снова переходит к проверке условия.
Напомню,что тело цикла всегда состоит из одного оператора. И если нам нужно использовать несколько операторов, то как и в случае с конструкцией if-else или циклом for, применяется составной оператор {...}.
1.2 Если условие ложно, то выполнение циклической конструкции заканчивается и программа выполняется дальше.

Таким образом, в качестве условия возможны такие же конструкции, что и в операторе if.

 

Двумерный массив

Многомерный массив — это массив, имеющий несколько измерений.

Каждое измерение выделяется отдельной парой квадратных скобок и характеризуется собственным диапазоном или размером (числом элементов):

тип-элемента имя-массива[описание-диапазона-1]

описание-диапазона-2]...[описание диапазона-N];

Матрица — это массив с двумя измерениями (двумерный).

Матрица фактически представляет собой двумерную таблицу, первое измерение которой считают, например, строкой, а второе — столбцом.

Запись

double mtx [10][20];

задает таблицу размером 10x20 элементов (дробных значений).

При доступе к элементу многомерного массива значения индексов перечисляют в квадратных скобках — каждый индекс в своих скобках. Например:

 

double mtx [10][20];

mtx[5][2] = 3.14;

mtx[9][19] = -0.007;

 

Инкремента и декремента.

Оператор инкремента ++ добавляет к операнду 1, а оператор декремента -- вычитает 1. Таким образом,

x = x + 1; эквивалентно x++;

и x = x – 1; эквивалентно x--;

Оба оператора, и инкремента и декремента, могут как предшествовать операнду (префикс), так и следовать за операндом (постфикс). Например,

x = x + 1;может быть записано и как

++x; // префиксная форма и как

х++; // постфиксная форма

В приведенном примере безразлично, используется ли инкремент как префикс или как постфикс. Однако если инкремент или декремент используется как часть большего выражения, возникает важное различие. Если оператор инкремента или декремента предшествует операнду, С++ выполняет операцию до получения значения операнда с целью использования его в оставшейся части выражения. Если же оператор следует за операндом, С++ сначала получит значение операнда, и лишь затем выполнит его инкремент или декремент. Рассмотрим такой пример:

x =10;

y = ++x;

В этом случае у получит значение 11. Однако, если написать эти строки иначе:

x =10;

y = x++;значение у окажется равным 10. В обоих случаях конечное значение х будет 11; разница в том, когда это случится.

Следующая программа демонстрирует использование операторов инкремента и декремента:

Листинг 3.1. Пример использования операторов инкремента и декремента

// IncrAndDecr.cpp: Defines the entry point for the console application.

// Код программы с операторами инкремента и декремента

 

#include "stdafx.h"

#include<iostream>

using namespace std;

 

int main(){

int n,m,i=3,j=3;

cout <<"At the beginning: \n";

cout <<"i = " << i <<"\n";

cout << "j = " << j << "\n";

cout <<"After command n=i++:\n";

n=i++;// Теперь n=3, a i=4

cout << "n = " << n <<"\n";

cout << "i = " << i << "\n";

 

cout << " After command m=++j:\n";

m=++j;// Значение переменных m=4 и j =4

cout << "m = " << m <<"\n";

cout << "j = " << j << "\n";

 

cout << " After command n= (--i)*(i--):\n";

n=(--i)*(i--);// Теперь n=9, a i=2

cout << "n = " << n << "\n";

cout << "i = " << i << "\n";

 

cout << " After command m=(--j)*(--j):\n";

m=(--j)*(--j);// Теперь m=4, a j=2

cout << "m = " << m << "\n";

cout << "j = " << j << "\n";

 

cout <<" After command n= (--i) * (i++):\n";

n=(--i)*(i++);// Теперь n=l, a i=2

cout << "n = " << n << "\n";

cout << "i = " << i << "\n";

 

cout << " After command m= (j--) * (++j):\n";

m= (j--)*(++j);// Теперь m=9, a j=2

cout << "m = " << m << "\n";

cout << "j = " << j << "\n";

 

cout << " After command n= (--i) * (++i):\n";

n=(--i)*(++i);// Теперь n=4, a i=2

cout << "n = " << n << "\n";

cout << "i = " << i << "\n";

 

cin >> j;

return 0;

}

 

4. Константы

Тұрақтылар жариялау синтаксисі айнымалылар жариялау синтаксисіне ұқсас, айырмашылығы const сөзінен басталады: const тип тұрақты аты = мәні;

Символдық константа 2 бірлік тырнақшаның отрасына жазылады ‘a’. Жолдық тұрақты 2 қостырнақшаның арасына жазылады “a”. Тұрақтылар: 1) литералдық,

2) аталған болып бөлінеді.

Константы представляют собой ячейки памяти, в которых хранятся данные. Есть несколько видов констант. Ниже приводится краткая сводка аппаратных характеристик, которые влияют на их размеры.И так в отличие от переменных константы не изменяются. Создаваемую константу нужно инициализировать, поскольку потом ей уже нельзя присвоить новое значение. Существует в языке C++ два типа констант: литеральные и символьные.

Литеральные константы

Литеральная константа – это значение, непосредственно вводимое в самой программе.1 intcoder = 14;

Переменная coder типа int, а число 14 является литеральной константой.

Целые константы

Целая константа, состоящая из последовательности цифр, считается восьмеричной, если она начинается с 0 (цифры ноль), и десятичной в противном случае. Цифры 8 и 9 не являются восьмеричными цифрами.

Последовательность цифр, которой предшествует 0х или 0Х, воспринимается как шестнадцатеричное целое.

В шестнадцатеричные цифры входят буквы от а или А до fили F, имеющие значения от 10 до 15.

Десятичная константа, значение которой превышает наибольшее машинное целое со знаком, считается длинной (long); восьмеричная и шестнадцатеричная константа, значение которой превышает наибольшее машинное целое со знаком, считается long; в остальных случаях целые константы считаются int.

Явно заданные длинные константы

Десятичная, восьмеричная или шестнадцатеричная константа, за которой непосредственно стоит l (латинская буква «эль») или L, считается длинной константой.

Перечислимые константы

Имена, описанные как перечислители, являются константами типа int.

Описанные константы

Объект любого типа может быть определен как имеющий постоянное значение во всей области видимости его имени. В случае указателей для достижения этого используется декларатор*const; для объектов, не являющихся указателями, используется описатель const.

Символьные константы

Символьная константа состоит из символа, заключенного в одиночные кавычки (апострофы), как, например, 'х'. Значением символьной константы является численное значение символа в машинном наборе символов (алфавите).

Символьные константы считаются данными типа int. Некоторые неграфические символы, одиночная кавычка ' и обратная косая \, могут быть представлены в соответствие со следующим списком escapeпоследовательностей:

●● символ новой строки NL(LF) \n

●● горизонтальная табуляция NT \t

●● вертикальная табуляция VT \v

●● возврат на шаг BS \b

●● возврат каретки CR \r

●● перевод формата FF \f

●● обратная косая \ \\

●● одиночная кавычка (апостроф) ' \'

●● наборбитов 0ddd \ddd

●● набор битов 0xddd \xddd

Escapeпоследовательность \ddd состоит из обратной косой, за которой следуют 1, 2 или 3 восьмеричных цифры, задающиезначение требуемого символа. Специальным случаем такой конструкции является \0 (не следует ни одной цифры),задающаяпустой символ NULL.

Escapeпоследовательность \xddd состоит из обратной косой, за которой следуют 1, 2 или 3 шестнадцатеричных цифры, задающие значение требуемого символа. Если следующий за обратной косой символ не является одним из перечисленных, то обратная косая игнорируется.

 

Если вы посмотрите на таблицу кода ASCII, то увидите, что некоторые из "символов" в ней не выводятся на печать. Например, при использовании в программе символа номер 7 терминал компьютера издает звуковой сигнал. Но как использовать символ, который невозможно набрать на клавиатуре? В языке Си для этого имеются два способа.

В первом способе используется сам код ASCII. Вы должны только указать номер символа вместе с предшествующим знаком "обратная косая черта". Вот эта строкаbeep = ' \007 ';

Здесь имеются два важных момента, которые вы должны отчетливо представлять себе. Первый - это то, что последовательность знаков заключается в апострофы точно так же, как это делается с обычным символом. Второе - то, что номер символа должен быть записан в восьмеричном виде. При использовании кода ASCII необходимо отметить различие между числами и символами, обозначающими числа. Например, символу "4" соответствует код ASCII, равный 52. Это символ "4" а не число 4.

Во втором способе представления "неудобных" знаков используются специальные последовательности символов. Они называются управляющими последовательностями и выглядят следующим образом:

\n новая строка

\t табуляция

\b шаг назад

\r возврат каретки

\f подача бланка

\\ обратная косая черта (\)

\' апостроф (')

\" кавычки (")

При присваивании символьной переменной эти последовательности тоже должны быть заключены в апострофы. Например, мы могли бы написать оператор

nerf = ' \n ';а затем вывести на печать переменную nerf; это приведет к продвижению на одну строку вперед на печатающем устройстве или на экране дисплея.

 

Массив?

Массивэто набор элементов одного типа, доступ к которым осуществляется по номеру (или индексу).

Массив, как и любая переменная программы, перед использованием должен быть объявлен в разделе объявления переменных. В общем виде инструкция объявления массива выглядит следующим образом:

тип-элемента имя-массива [описание-диапазона];

 

Номер элемента массива должен находиться в заданном диапазоне. Нумерация элементов в массиве всегда начинается с нуля.

Тип элемента определяет единый тип данных для каждого элемента массива. Имя массива — это пользовательский идентификатор (название переменной), который хранит ссылку на массив.

Массив с одним измерением называют одномерным массивом или вектором.

В следующем примере описывается массив mуАггау из 100 целых чисел (элементов типа int), в котором первый элемент будет иметь номер 0, а последний — номер 99:

int myArray [100];

 

Для доступа к элементу массива указывают имя переменной (массива соответствующего типа) и вслед за ним — индекс в квадратных скобках. В качестве индекса может выступать произвольное выражение языка C++, значение которого укладывается в диапазон, заданный при описании массива. Например:

 

int myArray[100];

int N;

myArrау[0] = 10;

N = 5;

myArray[N+1] = 500;

mуАггау[99] = myArray[N-2]-50;

 

Математические операции

Оператор – математикалық немесе логикалық әрекет жасау шін компиляторға берілетін нұсқау. Операнд – оператордың жанында орналасқан кез келген өрнек.

Арифметикалық операторлар:

Переменная

Айнымалы – атауы бар жад облысы

Жариялау форматы: тип айнымалы аты[];/массив

Тип айнымалы аты ();/функция

Возможно, в программировании нет более фундаментальной конструкции, чем переменная. Переменная представляет собой именованную ячейку памяти, которой может быть присвоено определенное значение. В дальнейшем, по ходу выполнения программы, значение переменной может быть изменено. Другими словами, содержимое переменной не фиксировано, а поддается изменениям.

В С++ все переменные, перед тем, как их использовать, должны быть объявлены, при этом в объявлении переменной должно быть указано, какого рода значения будут содержаться в этой переменной. Эта называется типом переменной. В нашем случае length может содержать только целочисленные значения, т. е. целые числа в диапазоне от -32768 до 32767. Для того, чтобы в языке С++ объявить целочисленную переменную, перед ее именем следует поставить ключевое слово int.

Общая форма объявления переменной имеет следующий вид:

тип_переменной имя_переменной;

 

Присваивание(Меншіктеу)

В одной строке может стоять больше одной операции присваивания =.

Пример.

a=b=c=d=100;

Знак = всегда означает: "переменной слева присвоить значение, стоящее справа ". Операция выполняется справа налево. Поэтому первой значение 100 получает переменная d, затем с, b и а.

Знак присвоить может стоять даже внутри математического выражения:

value=5+(r=9-c)

Присваивание имеет более высокий приоритет, чем сложение и вычитание. Поэтому сначала переменной r будет присвоено значение 9-с. А затем переменная value получит значение 5+9-с.

Құрама меншіктеу(Составное присваивание)

При написании программы часто требуется изменить значение переменной. Например, требуется взять текущее значение переменной, прибавить или умножить это значение на какое-то выражение, а затем присвоить это значение той же переменной. Такие операции выполняют операторы составного присваивания.

 

Операция Пример Эквивалент

+ = B+ = 500; B= b+ 500;

- = С- = 50; C = с - 50;

* = D* = 1.2; D = d*1.2;

/ = F/ = 50; f = f/.50;

% = m% = 7; M = m% 7;

 

Прототип функции

Если нужно вызвать функцию до ее определения в этом файле или определение функции находится в другом исходном файле, то вызов функции следует предварить ее объявлением, т. е. задать прототип функции, который позволит компилятору выполнить проверку типов аргументов и возвращаемого значения.Формат прототипа:

<класс памяти><тип>имя (список формальных параметров);

В отличие от определения функции, в прототипе за заголовком сразу же следует точка с запятой, а тело функции отсутствует. Правила использования остальных элементов формата такие же, как при определении функции. Имена формальных параметров при объявлении функции можно не указывать, а если они указаны, то их область действия распространяется только до конца объявления.

Таким образом, прототип – это явное объявление функции, которое предшествует определению функции. Тип возвращаемого значения при объявлении функции должен соответствовать типу возвращаемого значения в определении функции. Хороший стиль программирования требует задания прототипа во всех случаях.

В прототипе может быть отражен и тот факт, что число аргументов переменно или что аргументы вообще не задаются.

Если прототип функции не задан, а встретился вызов функции, то строится неявный прототип из анализа формы вызова функции. При этом список типов и числа параметров функции формируется на основании типов и числа фактических аргументов, используемых при данном вызове.

Вызов функции

Для обращения к функции используется имя функции.

Формат вызова:

Имя_функции (список),

где список представляет собой список фактических аргументов, передаваемых в функцию. Этот список может быть и пустым, но наличие круглых скобок обязательно.

Фактический аргумент может быть величиной любого простого типа, структурой, объединением, перечислением или указателем на объект любого типа. Массив и функция не могут быть использованы в качестве фактических аргументов, но можно использовать указатели на эти объекты.

Выполнение вызова функции происходит следующим образом.

Вычисляются выражения в списке фактических аргументов. Затем, если известен прототип функции, тип полученного фактического параметра сравнивается с типом соответствующего формального параметра. Если они не совпадают, то либо производится преобразование типов, либо формируется сообщение об ошибке. Число выражений в списке фактических аргументов должно совпадать с числом формальных параметров, если только функция не имеет переменного числа параметров. В последнем случае проверке подлежат только обязательные параметры. Если в прототипе функции указано, что ей не требуются параметры, а при вызове они указаны, формируется сообщение об ошибке. Происходит присваивание значений или адресов фактических аргументов соответствующим формальным параметрам. Управление передается на первый оператор функции. Выполняются действия, указанные в теле функции. Выполнение оператораreturn в теле функции возвращает управление и вычисленное значение в вызывающую функцию. При отсутствии оператора return управление возвращается после выполнения последнего оператора тела функции, а возвращаемое значение не определено.

Пример программы

Найти корни уравнения x = sin2 x / 4 + 0,27 методом итераций с точностью e.

Расчетная формула x 1 = sin2 x 0 / 4 + 0,27, где условие нахождения искомого корня | x 1x 0| < e – x 0 - начальное значение корня уравнения (обычно принимается равным нулю), x 1 - значение корня уравнения на следующей итерации, e - заданная точность вычисления корня (например, 0.001).

В программе используется старый стиль определения функции:

#include <stdio.h>

#include <math.h> /*Подключение стандартных библиотек*/

#define EPS 0.001 /*Задание точности вычисления корня*/

float root(x, E) /*Заголовок функции с именем root*/

float x,E; /*Описание аргументов функции*/

{ /*Тело функции*/

float x1;

for (x1=pow(sin(x),2)*.25+.27;

fabs (x1−x)>E;

x=x1,

x1=pow(sin(x),2)*.25+.27);

return (x1);

} /*Завершение описания функции root*/

int main()

{

floatx0;

printf ("\n Введите значение x0");

scanf ("%f",&x0);

printf ("\n Корень уравнения %f", root(x0,EPS));

//Вызов функции root()

return 0;

}

 

Строки

Безусловно, наиболее важным применением одномерных массивов является создание символьных строк. С++ поддерживает строки двух видов. Первый, наиболее часто используемый, — это строка с завершающим нулем или, другими словами, массив символов, заканчивающийся нулем. Строка с завершающим нулем содержит символы, образующие эту строку, за которыми помещается ноль. Такие строки пользуются чрезвычайно широко, так как они обеспечивают высокий уровень эффективности и предоставляют программисту возможность выполнять разнообразные строковые операции. Когда программист на С++ использует термин "строка", он (или она) обычно имеет в виду и именно строку с завершающим нулем. Второй вид строк, определенный в С++ — это класс string, который входит в библиотеку классов С++. Таким образом, string не является встроенным типом. Класс string позволяет использовать объектно-ориентированный подход при обработке строк, однако он используется не так широко, как строка с завершающим нулем. Здесь мы рассмотрим первый вид строк.

Основы техники строк

Объявляя символьный массив, который будет содержать строку с завершающим нулем, нужно задать ему длину на один символ больше, чем у самой длинной помещаемой в него строки. Если, например, вы хотите объявить массив str, в котором будет находиться 10-символьная строка, то вы должны написать следующее:char str[11];

Задание величины 11 в качестве длины массива обеспечит в строке место для завершающего нуля.

Как вы уже знаете, С++ позволяет определять символьные константы. Символьная константа представляет собой список символов, заключенный в двойные кавычки. Вот несколько примеров:

“Hello!” “I like C++” “Mars” “”

Добавлять ноль в конец строки вручную нет необходимости; компилятор С++ сделает это сам. В результате строка "Mars" будет выглядеть в памяти таким образом:

Последняя строка в нашем примере выглядит как "". Такая строка называется нулевой строкой. Она содержит только завершающий ноль и больше ничего. Нулевые строки используются в программах в качестве пустых строк.

 

Структура программы

Программа құрылымы:

Тақырыптарды жариялау блогы

Класстар, функциялар жариялау блогы

Бас функция main блогы

Функциялардың ісін анықтау блогы

С++ тілінің синтаксисі

Бас әріп және жай әріп әртүрлі символ ретінде қарастырылады

Идентификаторды жазу үшін латын әріптерді, цифрлар мен астын сызу символы пайдаланылады

Идентификаторды әріптен бастауға және ид-р ішінде бос орын қалдыруға болмайды

Комментарийдің 2 түрі бар: 1) 1 жолды комментарий //, 2) көп жолды /* мында коммент жазылад*/

1 жолға бірнеше оператор жазуға болады

// Sample.cpp: Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

using namespace std;

int main()

{ cout << "Hello World!";

char ch;

cin >> ch;

return 0;}

Изучим структуру консольной программы. В ее начале имеются такие строки:

// - - - - - - - - - - - - - - - - - - -

Этот текст является так называемым комментарием и не влияет на работу программы. Комментарий в программе на языке C+ + представляет собой пояснительный текст. Комментарии всегда пропускаются компилятором. Программист добавляет комментарии, чтобы сделать программу более наглядной.

Обычно комментарии начинаются с двух символов // и весь последующий текст до конца строки считается комментарием. Допускаются также многострочные комментарии. Они заключаются в пары символов /* и */. Все, что записано внутри них, считается комментарием.

Первая команда

#include "stdafx.h"

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

Язык С++ определяет несколько заголовков, которые содержат информацию либо необходимую, либо полезную для вашей программы. Заголовки включаются в программу с помощью директивы #include.

Следующая команда

#include <iostream>

требует подключения заголовка <iostream>, который поддерживает систему ввода-вывода С++. Этот заголовок поставляется вместе с компилятором.

Далее в программе стоит такая строка:

using namespace std;

Эта строка указывает компилятору, что он должен использовать пространство имен std. Пространства имен являются относительно новым добавлением к С++. Пространство имен создает декларативный район, в который помещаются различные элементы программы. Элементы, объявленные в одном пространстве имен, отделены от элементов, объявленных в другом пространстве. Пространства имен оказывают помощь в организации больших программ. Предложение using информирует компилятор о том, что вы хотите использовать пространство имен std. В этом пространстве имен объявлена вся библиотека стандартного С++. Используя пространство имен std, вы упрощаете доступ к стандартной библиотеке.

Следующая строка представляет собой начало программы:

int main ()

Все С++-программы состоят из одной или нескольких функций. Как уже отмечалось ранее, функция - это подпрограмма. Любая функция С++ должна иметь имя. при этом единственная функция, которая должна включаться в каждую С++ - программу, называется main(). Функция main() - это то место в программе, где начинается и где (чаще всего) заканчивается ее выполнение. Открывающая фигурная скобка, которая стоит в следующей строке, отмечает начало кода функции main(). Слово int, предшествующее main(), задает тип данного, возвращаемого функцией main(). Как вы узнаете позже, С++ поддерживает несколько встроенных типов данных, и int является одним из них. Это обозначение происходит от слова integer (целое).

Далее в программу включена строка:

cout << "Hello World!";

Это предложение консольного вывода. Оно приводит к выводу на экран сообщения Hello World!. Вывод на экран осуществляется с помощью оператора вывода <<. Оператор << действует так, что выражение (каким бы оно ни было), стоящее справа от него, выводится на устройство, указанное слева, cout представляет собой предопределенный идентификатор, обозначающий консольный вывод, который, как правило, закреплен за экраном. Таким образом, рассматриваемое предложение выводит на экран сообщение. Заметьте, что это предложение заканчивается знаком точки с запятой. Так заканчиваются все предложения С ++.

Сообщение " Hello World!" представляет собой строку. В С++ строкой называется последовательность символов, заключенная в двойные кавычки. Строки широко используется в программах на С++.

Строки

char ch;

cin >> ch;

приостанавливают выполнение программы, пока не будут введены любые символы(можно также нажать клавишу <Enter>).

Следующая строка программы осуществляет выход из main():

return 0;

Эта строка завершает функцию main() и заставляет ее вернуть значение 0 в вызывающий процесс (которым обычно является операционная система). Для большинства операционных систем возвращаемое значение 0 указывает на то, что программа завершается правильно. Другие значения свидетельствуют о завершении программы в результате возникновения какой-либо ошибки, return является одним из ключевых слов С++ и используется для возврата значения из функции. Все ваши программы должны при нормальном (т. е. без ошибок) завершении возвращать 0.

Завершающая фигурная скобка в конце программы формально заканчивает программу.

 

Тип данных

Деректер типі – сәйкес типті айнымалының мүмкін мәндерінің жиыны. Деректер типінің 2 түрі бар: қарапайым, құрама.

С++ тілінде 8 негізгі қарапайым деректер бар:

int - Бүтін сандар,

float - Бөлшек сандар

double - Дәлдігі жоғары, диапозоны үлкен бөлшек сандар

char - Символдық тип

wchar_t - Юникод – 2 байттық символ

bool - Логикалық тип

void - Бос тип

string - Жолдық (строчный) тип

Деректер типімен бірге олардың диапозонын өзгерту үшін 4 модификатор қолданылады: 1)short, 2) long, 3)signed(таңбалы), 4)unsigned(таңбасыз(оң))

Int типімен модификаторлардың төртеуі де қолданылады, char типімен signed, unsigned; double типімен float модификаторы қолданылады

 

Тернарный условный оператор

Условный оператор? — единственный оператор в языке C++, который работает сразу с тремя операндами. Он получает три выражения и возвращает значение:

(выражение1)? (выражение2): (выражениеЗ)

Эту строку можно прочитать так: "Если выражение1 истинно, возвратить значение выражения2, в противном случае возвратить значение выражения3". Как правило, это значение присваивается переменной. Следующий пример демонстрирует применение условного оператора? вместо оператора if..else.

stroka =(grade >=60)? “зачет”: “незачет”;

cout << stroka;

 

Указатель

— это переменная, содержащая адрес памяти другой переменной. Общая форма объявления переменной-указателя такова: тип * имя-переменной;

Здесь тип — это базовый тип указателя. Базовый тип определяет, на данные какого типа будет указывать этот указатель. имя-переменной - это имя переменной-указателя. Так, чтобы объявить ip, как указатель на int, вы должны написать:int *ip;

Поскольку базовым типом ip указан int, этот указатель можно использовать только для указания на переменные типа int.

Теперь объявим указатель на float: float *fp;

В этом случае базовым типом fp является float, и указатель fp может указывать только на переменные типа float.

Операторы указателей

Для использования с указателями предусмотрены два специальных оператора: * и &. Оператор & возвращает адрес памяти, в которой расположен его операнд. Например, предложение ptr = &total;



Поделиться:


Последнее изменение этой страницы: 2016-04-07; просмотров: 727; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.142.189 (0.272 с.)