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

1-е задания

.docx
Скачиваний:
8
Добавлен:
13.04.2015
Размер:
34.36 Кб
Скачать
  1. Какие существуют виды условного оператора, и чем они отличаются?

Условный оператор реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true. В C++ условный оператор начинается с ключевого слова if. Есть несколько форм условных операторов это условные операторы с одной ветвью ( if условие then команды end;), операторы с двумя ветвями (if условие then команды else команды end;) и условные операторы с несколькими условиями.

  1. Как запрограммировать функцию со сменным количеством параметров?

Переменный список параметров задается в заголовке функции многоточием: int f(…).Этот заголовок не вызывает у компилятора протестов, однако у программиста могут возникнуть трудности. Поэтому , список параметров совсем пустой быть не может, должен быть прописан хотя бы один явный параметр, адрес которого мы можем получить при выполнении программы. Заголовок такой функции может выглядеть так:

int f(int k...)

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

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

как установиться на список параметров в стеке;

как «перебирать» параметры;

как закончить перебор.

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

Ответ на последний вопрос не вызывает затруднений. Это можно сделать одним из двух способов:

явно передать среди обязательных параметров количество аргументов;

добавить в конец списка аргумент с уникальным значением, по которому будет определяться конец списка параметров;

И тот, и другой способ имеют право на жизнь — все определяется потребностями задачи и вкусами программиста. В данном случае сначала попробуем второй способ: последним значением списка параметров будет ноль.

Вычисление среднего арифметического аргументов (ноль в конце)

double f(double n, ...) //--заголовок с переменным числом параметров

{ double *p = &n; //--установились на начало списка параметров

double sum = 0, count = 0;

while (*p) //--пока аргумент не равен нулю

{ sum+=(*p); //--суммируем аргумент

p++; //--«перемещаемся на следующий аргумент

count++; //--считаем количество аргументов

}

return ((sum)?sum/count:0); //--вычисляем среднее

}

  1. Какие типы данных вам известны?

базовые типы данных:

int (целое число);

char (символ);

wchar_t (расширеный символьный тип данных);

bool (логический тип данных);

float (вещественный тип данных);

double (вещественный тип данных с двойной точностью);

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

short (короткий);

long (длинный);

signed (знаковый);

unsigned (беззнаковый); Слова short и long используются соответственно для уменьшения и увеличения размера типа данных. Слова signed и unsigned - для указания знаковых и беззнаковых чисел.

  1. Каким образом можно ввести информацию?

Информацию можно вводить как текстовую, так и цифровую в зависимости от задачи. Ввод происходит разными способами и и каждый под определенную ситуацию. Информация в С++ вводится либо в виде переменной, то есть переменной присваевается значение, либо просто мы решая какой то пример вводим число в уравнение и он используется лишь раз, либо же мы используем оператор ввода “cin”. Cin задается так : cin >> код программы (то что мы вводим) ;

  1. Каким образом можно вывести информацию?

Информацию в языке С++ можно выводить благодаря оператору вывода “cout” именно он отвечает за вывод всей нужной информации из программы. Задается он так : текст программы ……. Cout <<информация для вывода ;

  1. Чем отличаются переменные от констант?

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

  1. Расскажите о структуре простейшей программы в языке С++

#include <iostream>

using namespace std;

int main()

{

cout << "Hello, world!" << endl;

system("pause"); // Только для тех, у кого MS Visual Studio

return 0;

}

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

Содержимое второй строки — using namespace std; указывает на то, что мы используем по умолчанию пространство имен, с названием std. Все то, что находится внутри фигурных скобок функции int main() {} будет автоматически выполняться после запуска программы.

Строка cout << "Hello, world!" << endl; говорит программе выводить сообщение с текстом Hello, world на экран

оператор cout предназначен для вывода текста на экран командной строки После него ставятся две угловые кавычки (<<). Далее идет текст, который должен выводиться. Он помещается в двойные кавычки. Оператор endl переводит строку на уровень ниже.

Если в процессе выполнения произойдет какой-либо сбой, то будет сгенерирован код ошибки, отличный от нуля. Если же работа программы завершилась без сбоев, то код ошибки будет равен нулю. Команда return 0 необходима для того, чтобы передать операционной системе сообщение об удачном завершении программы.

В конце каждой команды ставится точка с запятой.

  1. Что такое разадресация в языке С++?

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

char a; // переменная типа char

char*p=new char; /* выделение памяти под указатель и под динамическую переменную типа char */

*p=’Ю’; a=*p; // присваивание значения обеим переменным.

  1. Какие действия можно выполнять с указателями?

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

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

  1. Как задать переменный размер массива?

Чтобы создать переменный размер массива необходимо постоянно пересобирать этот самый массив. Поэтому, нужно использовать динамические массивы которые описаны в std как

std::vector<int> Array;

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

будет создан массив типа int и идентификатором Array

  1. Что такое строка символов в С++?

Строка символов это - строка языка С++ представляющая собой массив символов, который завершается символом с кодом 0.

  1. Когда можно не описывать длину строки?

Например, если это Си-строка, заканчивающаяся нулевым символом:

char str[]="My string!!!";

Определить количество символов можно, считая символы, пока не дойдем до нулевого(strlen). Если же длина строки может изменяться, тогда использование std::string либо рукописная обертка.

  1. Для чего нужен прототип функции?

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

дополнение к 13 - главное преимущество прототипов заключается в том, что вы можете сосредотачивать их в одном месте, скажем h-файле, при этом реализацию функций выносить в cpp-файл (в другой файл).

  1. Применение функций-указателей.

В C++ различают три вида указателей:

указатели на объект,

указатели на функцию

указатели на void,

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

Указатель на функцию

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

тип (*имя) ( список_типов_аргументов );

Например, объявление:

int (*fun) (double, double);

задает указатель с именем fun на функцию, возвращающую значение типа int и имеющую два аргумента типа double.

  1. Как правильно работать с данными внутри функции?

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

  1. Основные известные функции работы со строками в С++

char*strcat (char*_dest, const char*_src); — функція реалізує сціплення рядка dest з рядком src. Функція вертає покажчик на початок отриманого рядка (dest). Проміжний символ‘\0’ рядка dest гаситься.

char*strncat (char*_dest, const char*_src, size_t_maxlen); — функція приєднує maxlen символів з рядка, на який вказує src, до рядка, на який вказує dest. Рядок dest повинен містити не менше maxlen вільних байтів. Якщо maxlen більше рядка src, виконується проста конкатенація.

char*strchr (const char*_, int_c); функція вертає покажчик на позицію першого входження символу “c” в рядок, на який вказує s. В рядок s включається і символ ‘\0’.

int strcmp (const char*_s1, const char*_s2); — функція виконує порівняння двох рядків, на початок яких вказують s1 і s2. Функція вертає значення: менш нуля, якщо s1<s2; рівне нулю, якщо s1==s2; більше нуля, якщо s1>s2.

int strnсmp (const char*_s1, const char*_s2, size_t_maxlen); — функція, що аналогічна функції strcmp () і відрізняється тим, що виконується порівняння перших maxlen байтів.

int stricmp (const char *_s1, const char *_s2); — функція виконує порівняння двох рядків, на що вказують s1 і s2. Перед порівнянням символи перетворюються в малі. Функція вертає значення: більше нуля, якщо s1>s2; рівно нулю, якщо s1==s2; менш нуля, якщо s1<s2.

int strlen (const char*_s); — функція вертає довжину рядка в байтах, на який вказує s. Нуль-терминатор не враховується.

char*stpcpy (char *_dest, const char *_src); функція копіює рядок, на котрий вказує src, в інше місце в пам'яті, на що вказує est. Функція вертає покажчик на кінець рядка, що скопіювався в dest.

char*strncpy (char*_dest, const char*_src, size_t_maxlen); — функція копіює maxlen байт з рядка, на який вказує src, в інше місце в пам'яті, на що вказує dest. Нуль-термінатор теж копіюється. Якщо maxlen менш довжини рядка src, до рядка src не приєднується символ“\0”. І якщо більше, то рядок src переноситься повністю, а символи, що залишалися, заповнюються символом “\0”. Функція вертає покажчик dest.

char *strlwr (char *_s); функція перетворює всі символи рядка, на початок якого вказує s, в малі літери. Функція повертає покажчик на початок цього рядка.

char *strups (char *_s); функція перетворює всі символи рядка, на початок якої вказує s, в великі літери. Функція вертає покажчик на отриманий рядок.

char *strset (char *_s, int_ch); — функція заповнює рядок, на початок якого вказує s, символом ch. Функція вертає покажчик на отриманий рядок.

char *strtok (char *_s1, char *_s2); — функція вертає наступну лексему із s1, яка відділена любим символом з набора s2.

  1. Какие существуют операторы цикла в языке С++?

В С++ есть 2 вида операторов цикла - это операторы цикла с пред и пост условием. Операторы с пред условием начинаются с команды for и имеют такой алгоритм -

for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )

{

/*один оператор или блок операторов*/;

}

Выражение 1 - объявление (и) или инициализация, ранее объявленной, переменной-счетчика, которая будет отвечать за истинность условия в цикле

Выражение 2 - это условие продолжения цикла for, оно проверяется на истинность.

Выражение 3 изменяет значение переменной-счетчика.

Примерно так же работает While - Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.

И оператор пост условия (do While) - Цикл do while отличается от цикла while тем, что в do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла.

  1. Какие типы данных вам известны?

базовые типы данных:

int (целое число);

char (символ);

wchar_t (расширеный символьный тип данных);

bool (логический тип данных);

float (вещественный тип данных);

double (вещественный тип данных с двойной точностью);

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

short (короткий);

long (длинный);

signed (знаковый);

unsigned (беззнаковый); Слова short и long используются соответственно для уменьшения и увеличения размера типа данных. Слова signed и unsigned - для указания знаковых и беззнаковых чисел.

  1. Какие существуют операторы цикла в языке С++?

В С++ есть 2 вида операторов цикла - это операторы цикла с пред и пост условием. Операторы с пред условием начинаются с команды for и имеют такой алгоритм -

for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )

{

/*один оператор или блок операторов*/;

}

Выражение 1 - объявление (и) или инициализация, ранее объявленной, переменной-счетчика, которая будет отвечать за истинность условия в цикле

Выражение 2 - это условие продолжения цикла for, оно проверяется на истинность.

Выражение 3 изменяет значение переменной-счетчика.

Примерно так же работает While - Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.

И оператор пост условия (do While) - Цикл do while отличается от цикла while тем, что в do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла.

  1. Чем отличаются переменные от констант?

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

  1. Какие существуют виды условного оператора, и чем они отличаются?

Условный оператор реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true. В C++ условный оператор начинается с ключевого слова if. Есть несколько форм условных операторов это условные операторы с одной ветвью ( if условие then команды end;), операторы с двумя ветвями (if условие then команды else команды end;) и условные операторы с несколькими условиями.

  1. Какие действия можно выполнять с указателями?

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

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

  1. Каким образом можно ввести информацию?

Информацию можно вводить как текстовую, так и цифровую в зависимости от задачи. Ввод происходит разными способами и и каждый под определенную ситуацию. Информация в С++ вводится либо в виде переменной, то есть переменной присваевается значение, либо просто мы решая какой то пример вводим число в уравнение и он используется лишь раз, либо же мы используем оператор ввода “cin”. Cin задается так : cin >> код программы (то что мы вводим) ;

  1. Каким образом можно вывести информацию

Информацию в языке С++ можно выводить благодаря оператору вывода “cout” именно он отвечает за вывод всей нужной информации из программы. Задается он так : текст программы ……. Cout <<информация для вывода ;

  1. Что такое разадресация в языке С++? Операция разадресации, или разыменования, предназначена для доступа к величине, адрес которой хранится в указателе. Эту операцию можно использовать как для получения, так и для изменения значения величины (если она не объявлена как константа):

char a; // переменная типа char

char*p=new char; /* выделение памяти под указатель и под динамическую переменную типа char */

*p=’Ю’; a=*p; // присваивание значения обеим переменным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]