Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C++ ответы

.pdf
Скачиваний:
48
Добавлен:
17.08.2019
Размер:
399.36 Кб
Скачать

vk.com/club152685050 | vk.com/id446425943

1) Основные характеристики языка С++. Язык С часто называют языком программирования среднего уровня. Но это не значит, что С менее мощный, менее развитой и более трудный в использовании, чем языки высокого уровня, такие как Basicили Pascal. Это также не значит, что С такой же громоздкий и неудобный, как ассемблер (язык низкого уровня). Языком среднего уровня его называют скорее потому, что он объединяет в себе лучшие черты языков высокого уровня с возможностями ассемблера.Как язык среднего уровня С позволяет манипулировать битами, байтами и адресами, то есть теми базовыми элементами данных, с которыми работает компьютер. Несмотря на это, программа, написанная на С, обладает высокой переносимостью. Переносимость – это свойство программного обеспечения, созданного для одного типа компьютера или операционной системы, позволяющее легко переделать его для другого типа, т.е. перенести в другую вычислительную среду.Все языки высокого уровня придерживаются концепции типов данных. Тип данных представляет собой набор значений, хранящихся в переменной, а также набор операций, выполнение которых допускается над этими значениями. Обычные типы данных – это целые числа, символы и числа с плавающей точкой. Язык С имеет несколько встроенных типов данных, однако не является сильно типизированным языком, как Pasca или Ada. В языке С допускается почти все преобразования типов. Например, в выражениях можно свободно смешивать переменные символьного и целого типов.В отличие от большинства языков высокого уровня, в С почти отсутствует контроль ошибок в процессе выполнения программы. Например, не проверяется нарушение границ массивов. Ответственность за подобные ошибки полностью возлагается на программиста.С не требует строгой совместимости параметров и аргументов функций. В языках программирования высокого уровня обычно необходимо, чтобы тип аргумента более или менее соответствовал типу параметра. Для С это не характерно, здесь аргумент может иметь почти любой тип, если его можно разумно преобразовать в тип параметра. Более того, компилятор С автоматически осуществляет все виды необходимых преобразований.Важная особенность С – это малое количество ключевых слов, составляющих команды языка. В С89 определено 32 ключевых слова, причем в С99 добавлено только 5 слов. Языки высокого уровня обычно имеют значительно больше ключевых слов, например, в большинстве версий языка Basic их количество превышает сотню!Язык С хорошо структурирован. В книгах по программированию используется понятие блочной структурированности языка. Хоть этот термин и нельзя применять в полной мере к языку С, его обычно называют просто структурированным языком.Отличительной особенностью структурированного языка является отдельное размещение различных частей кода программы и данных. Таким способом программист может «скрыть» часть информации,используемую для выполнения специфической задачи, от тех участков программы, где эта информация не нужна.Структурированный язык предоставляет программисту много различных возможностей. Например, структурированные языки обычно содержат несколько операторов цикла, таких как while, do-while, for

Для ввода и вывода информации в консольном режиме подключается библиотечная функция с помощью препроцессора: #include <iostream>.

Этот файл содержит определения, позволяющие программам использовать cout и cin для выполнения вывода и ввода информации соответственно.

При запуске консольного приложения неявно открываются потоки: сin — для ввода с клавиатуры, сout — для буферизованного вывода на экран.

Пример оператора ввода: cin >> a,b; Пример оператора вывода: cout << x;

vk.com/club152685050 | vk.com/id446425943

Операторы ввода и вывода в режиме работы Windows Forms имеют иной вид, чем в консольном режиме.

Пример оператора ввода простой переменной:

x=Convert::ToInt(textBox1->Text);

Здесь Convert::ToInt перевод строковой переменной в число целого типа. Пример одного из операторов ввода массива:

int b[7]={5,2,3,7,0,1,8};

Пример оператора ввода массива с помощью генератора случайных чисел:

Random^ rand=gcnew Random; for (i=0; i<n; i++) a[i]=rand->Next(-10,10);

Пример оператора ввода матрицы с помощью генератора случайных чисел:

Random^ rand=gcnew Random; for (i=0; i<n; i++)

for (j=0; j<m; j++) a[i][j]=rand->Next(-50,50)-25.8;

Примеры операторов вывода простой переменной:

textBox1->Text= Convert::ToString(y); richTextBox1->Text="Ответ R="+Convert::ToString(R);

Здесь Convert::ToString перевод числовой переменной в строку. Пример оператора вывода массива:

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

richTextBox1->Text+=" "+ Convert::ToString a[i];

Пример оператора вывода матрицы в общепринятом виде:

for (i=0; i<n; i++) {for (j=0; j<m; j++)

richTextBox1->Text+=" "+ Convert::ToString(a[i][j]); richTextBox1->Text+=Environment::NewLine;} // перевод строки

Пример оператора вывода матрицы в общепринятом виде с использованием другого способа перевода числа в строку a[i][j].ToString():

for (i=0; i<n; i++) {for (j=0; j<m; j++)

richTextBox1->Text+=" "+a[i][j].ToString(); richTextBox1->Text+=Environment::NewLine;} // перевод строки

vk.com/club152685050 | vk.com/id446425943

2) Алфавит языка C++

Множество символов языка C включает:

·прописные буквы латинского алфавита;

·строчные буквы латинского алфавита;

·арабские цифры;

·разделители: , . ; : ? ! ' " | / \ ~ _ ^ ( ) { } [ ] < > # % & - = + *

Литералы в языке C++ могут быть

· Целые:

1.десятичные: 10, 132, -32179;

2.восьмеричные (предваряются символом «0»): 010, 0204, -076663;

3.шестнадцатеричные (предваряются символами «0х»): 0хА, 0x84, 0x7db3. · Вещественные: 15.75, 1.575e1, .75, -.125

· Символьные: 'a', 'e', '.', '?', '2'. · Строковые: "строка".

Комментарий имеет следующий вид: /*<символы>*/ или часть строки, следующая за символами //

= = Равно

! Логическое отрицание & Поразрядное И | Поразрядное ИЛИ

&& Логическое И

|| Логическое ИЛИ

Алфавит C++ служит для построения слов, которые в C++ называются лексемами. Различают пять типов лексем:

·Идентификаторы (это имя программного объекта: переменной, константы, массива, функции, класса и т. п. Name, name и NAME - это разные идентификаторы.);

·ключевые слова (это лексемы специального назначения. break, switch, else, do, and, void.);

vk.com/club152685050 | vk.com/id446425943

·знаки (символы) операций;

·литералы;

·разделители.

Escape-последовательности используются для описания определённых специальных символов внутри строковых литералов, то есть внутри ограничителей " ".

\n - новая строка \t - горизонтальная табуляция

4) Типы данных

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

Тип данных присваивается переменной при ее объявлении или инициализации. Ниже приведены основные типы данных языка C++, которые нам понадобятся.

Основные типы данных в C++

·int — целочисленный тип данных.

·float — тип данных с плавающей запятой.

·double — тип данных с плавающей запятой двойной точности.

·char — символьный тип данных.

·bool — логический тип данных.

Объявление переменной

Объявление переменной в C++ происходит таким образом: сначала указывается тип данных для этой переменной а затем название этой переменной.

Пример объявления переменных

int a; // объявление переменной a целого типа.

float b; // объявление переменной b типа данных с плавающей запятой.

double c = 14.2; // инициализация переменной типа double.

char d = 's'; // инициализация переменной типа char.

vk.com/club152685050 | vk.com/id446425943

bool k = true; // инициализация логической переменной k.

12) Неполный условный оператор.

Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма. Признаком разветвляющегося алгоритма является наличие операций проверки условия. Чаще всего для проверки условия используется условный оператор if.

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

if (Условие) { БлокОпераций1; }

13) Полный условный оператор. Оператор ветвления if

Оператор ветвления if в зависимости от условия позволяет выбрать одно из двух возможных продолжений программы. Схематично этот оператор можно изобразить так, как показано на рисунке ниже:

Формально в терминах языка программирования это можно записать так:

if(Условие)

Оператор ветви «Да»;

else

Оператор ветви «Нет»;

Оператор работает следующим образом: вычисляется записанное в круглых скобках выражение-условие, если оно истинно, то выполняется Оператор ветви «Да», если ложно — то Оператор ветви «Нет». После этого управление передаётся на следующий оператор.

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

·if(a>b) — простое условие, используется операция сравнения;

·if(a>0 && b>0 && c>0) — сложное условие, три операции отношения объединены в одно условие с помощью логической операции И;

vk.com/club152685050 | vk.com/id446425943

· if(a+b) — а здесь условие содержит арифметическое выражение (сложение двух чисел).

Если в первых двух случаях всё делается так, как и во многих других языках программирования, то вот сумма двух чисел в качестве результата вычисления условия в операторе if может поставить в тупик. Как трактовать такое условие?

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

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

Пример 1. Дано натуральное число n. Определить, является ли оно двухзначным или нет.

Возможный текст программы:

#include <iostream>

using namespace std;

int main()

{

int n;

cout << "n=";

cin >> n;

if(n > 9 && n < 100)

cout << "Yes" << endl;

else

cout << "No" << endl;

return 0;

}

vk.com/club152685050 | vk.com/id446425943

15) Оператор безусловного перехода имеет вид:

goto <метка>;

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

16) Оператор switch позволяет выбрать одну из нескольких альтернатив. Он записывается в следующем формальном виде:

switch (<выражение>)

{

case<константа_1>: <операторы_1>; break;

case<константа_2>: <операторы_2>; break;

........ ........

default: <операторы_default>;

}

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

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

18) Операторы циклов

Цикл с параметром (for) имеет вид:

for (<выражение_1>; <выражение_2>; <выражение_3>) <тело_цикла>;

vk.com/club152685050 | vk.com/id446425943

Тело цикла составляет либо один оператор, либо несколько операторов, заключенных в фигурные скобки { ... }, т.е. если в цикле выполняется несколько операторов, то применяется составной оператор. В выражениях 1, 2, 3 фигурирует специальная переменная, называемая управляющей. По ее значению устанавливается необходимость повторения цикла или выхода из него.

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

Примеры:

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

{ ...}

for (сh = 'a'; ch != 'p';) scanf ("%c", &ch);

/* Цикл будет выполняться до тех пор, пока с клавиатуры не будет введен символ 'p' */

Цикл с постусловием (do-while) имеет вид:

do {<тело_цикла>} while (<выражение>);

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

Примеры:

do

{

cout<<" Сколько тебе лет? \n";

cin>>i;

pen=y-i;

cout<<" Осталось до выхода на пенсию (лет) = "<<pen<<endl;

x++; //изменение параметра цикла (аналогично x=x+1)

vk.com/club152685050 | vk.com/id446425943

}

while (x<=-1); //условие ложно, но цикл выполняется 1 раз

Цикл с предусловием (while) имеет вид:

while (<выражение>) <тело_цикла>;

Выражение в скобках может принимать ненулевое (истинное) или нулевое (ложное) значение. Если оно истинно, то выполняется тело цикла и выражение вычисляется снова. Если выражение ложно, то цикл while заканчивается.

while (x<=3) //пока параметр цикла не превышает конечное значение.

//выполнять тело цикла

{

cout<<"How old are you? \n";

cin>>i;

pen=y-i;

cout<<"Remained until retirement (years) = "<<pen<<endl;

x++; //изменение параметра цикла (аналогично x=x+1 (расмотрим в последующих уроках))

}

19) Операторы break и continue.

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

Операторы break и continue выполняются в любом из видов циклов (repeat, while, for) и действительны только для внутреннего цикла. Например, если нужно обеспечить принудительный выход из двойного цикла, оператор break должен быть расположен как во внутреннем, так и во внешнем цикле.

Пример:

for i := 1 to 5 do begin

write ('Введите число: ');

vk.com/club152685050 | vk.com/id446425943

readln (num);

if num = 0 then

break;

writeln (num)

end;

for (i = 0; i < n; i++) {

if (A[i] < 0) /* пропустить отрицательные элементы */

continue;

... /* есть положительные элементы */

20) Указатель — это та же переменная, только инициализируется она не значением одного из множества типов данных в C++, а адресом, адресом некоторой переменной, которая была объявлена в коде ранее.

Здесь стоит обратить внимание на следующие вещи:

1.Тип, используемый при объявлении указателя в точности должен соответствовать типу переменной, адрес которой мы присваиваем указателю.

2.В качестве типа, который используется при объявлении указателя, можно выбрать тип void. Но в этом случае при инициализации указателя придется приводить его к типу переменной, на которую он указывает.

3.Не следует путать оператор взятия адреса со ссылкой на некоторое значение, которое так же визуально отображается символом &.

21) Ввод и вывод элементов одномерного массива.

Ввод в консоле

Пр1. Вручную. Int A[7] = {5,2,3,7,0,1,8}

Пр2. С помощью генератора случайных чисел, где n-количество элементов массива

srand(time(NULL));