Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_1_Введение_в_С++.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
470.02 Кб
Скачать

Технология подготовки и решения задачи на компьютере

Технология подготовки и решения задачи на компьютере включает:

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

    • составление плана решения – определение структур данных, состава и последовательности требуемых преобразований, выбор способа решения, разработку алгоритма;

    • осуществление решения – переработку согласно составленному плану входной информации в выходную информацию, разработку программы с использованием той или иной технологии программирования;

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

Функция как компонент структуры программы

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

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

/* proba_1_1.cpp

вывод в стиле С */

#include4 <stdio.h> //для ввода/вывода

#include <conio.h> //для _getch()

int main()

{ printf ("Ivanov Ivan\n");

printf ("Ok\n");

_getch(); // функция _getch() приостанавливает выполнение программы до «нажатия любой

// клавиши», это позволит увидеть результат вывода

return 05;

}

//proba_1_2.cpp

вывод в стиле С++ */

#include <iostream> //для ввода/вывода

#include <conio.h> //для _getch()

int main()

{ std6::cout << "Ivanov Ivan\n";

std::cout << "Ok"<< std::endl7 ;

_getch();

return 0;

}

//proba_1_3.cpp

вывод в стиле С++ с использованием пространства имен std*/

#include <iostream>

#include <conio.h>

using namespace std8;

int main()

{ cout << "Ivanov Ivan\n";

cout << "Ok"<< endl;

_getch();

return 0;

}

Результат выполнения любой из программ в режиме консольных приложений:

Ivanov Ivan

Ok

Пояснения к примерам:

Для удобства работы целесообразно в начало каждого текстового файла программы помещать строку комментария с именем файла. В третьей и четвертой строках программ – директивы препроцессора, обеспечивающие включение в программу средств связи со стандартными потоками ввода/вывода данных и прототипа функции _getch(). В строке, содержащей заголовок функции main(), служебное слово int указывает, что функция возвращает целое значение. Круглые скобки после main()соответствуют синтаксису заголовка любой функции. В них помещается, при необходимости, список параметров.

В фигурных скобках представлено тело функции (последовательность описаний, определений и операторов, каждое из которых заканчивается символом «точка с запятой»). В наших примерах тело функции содержит только операторы вывода текста. С++ обеспечивает выполнение вывода в стандартный поток std::cout с использованием оператора << , а ввода из стандартного потока std::cin – с использованием оператора >>. В то же время, доступны, как и в С, функции вывода printf() и ввода scanf().

Одна из принципиальных особенностей С++ – расширение действия стандартных операций, или перегрузка. Конструкция (лексема) <<, при условии, что слева от нее находится имя объекта std::cout ( std::cout << ) означает операцию «поместить в поток», в противном случае, означает, как и в языке С, операцию сдвига влево двоичного представления значения левого операнда (например, запись x << 2 означает сдвиг значения переменной x на 2 разряда влево, т.е. умножение на 4).

Оператор return – оператор возврата, завершающий выполнение программы и передающий в точку ее вызова значение выражения (return выражение;). Для функции main() это значение должно быть равно нулю (return 0;), если исполнение программы прошло успешно. Так как программа «запускается» на исполнение по команде операционной системы, то и возврат будет выполнен к операционной системе (точнее, в стандартный модуль, который автоматически «прикомпоновывается» к программе и из которого осуществляется ее вызов).

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

Формат заголовка функции:

void имя_функции ( ) // нет ни параметров, ни возвращаемого значения

void имя_функции (void ) // нет ни параметров, ни возвращаемого значения

void имя_функции (список_параметров) // есть параметры и нет возвращаемого значения

тип_функции имя_функции (список_параметров)

// есть параметры и есть возвращаемое значение

тип_функции имя_функции ( ) // нет параметров и есть возвращаемое значение

Прототип функции – это заголовок функции, заканчивающийся символом «;» :

char* strcpy(char*, const char*);

Объявление функции указание ее прототипа.

Сигнатура функции – часть заголовка функции, позволяющая средствам трансляции идентифицировать функцию среди других. В С++ простая функция однозначно опознаётся компилятором по её имени и последовательности типов её параметров, что составляет сигнатуру функции в этом языке: заголовок функции, за вычетом типа_функции:

имя_функции (список_параметров)

Если функция является методом некоторого класса, то в сигнатуре будет участвовать и имя класса:

Complex::add (Complex& x, Complex& y) //функция add принадлежит классу Complex

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

{ описание данных

операторы;

return [выражение]; // [выражение ] может отсутствовать

}

Тип функции – это тип возвращаемого функцией значения. Оператор return выражение; возвращает значение выражения в точку вызова функции. Оператор return; записываемый без выражения означает, что функция не имеет возвращаемого значения и имеет тип void. При этом управление из функции возвращается либо при выполнении этого оператора, либо при достижении правой фигурной скобки, завершающей функцию (при отсутствии ключевого слова return).

return; //функция не возвращает значения и имеет тип void;

return 3; //возвращаемое функцией значение = 3;

return (a + b); //возвращаемое значение = значению выражения (а + b);

//скобки необязательны, используются для улучшения читаемости кода

Тело функции main() – это блок программы. Любой фрагмент текста программы в фигурных скобках называют составным оператором (блоком операторов) или просто блоком. В общем случае, тело любой функции может содержать сколько угодно блоков.

Определение функции это совокупность ее заголовка и тела.

Вызов функции – указание имени функции и в круглых скобках списка фактических параметров (аргументов), которые необходимо ей передать (если они есть):

_getch(); //вызов функции ожидания нажатия клавиши на клавиатуре

strcpy(s, "aaaaa"); //вызов функции копирования строки "aaaaa" в строку s

int i = f1(5); //переменной i присваивается значение результата вызова функции f1

f2(x);

double x = sin(1.2) + cos(0.7);

//переменной x присваивается значение суммы результатов вызова //функций синуса и косинуса от заданнных аргументов

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

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

d ouble CUB_X (double x)

{ return (x*x*x);

}

v oid main ()

{

double a = 10.0, y;

y = CUB_X(a);

return ; }

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

Если функция возвращает значение некоторого типа, то необходимо принять (сохранить) это значение в переменную того же типа, либо вывести его на экран, либо использовать в составном выражении. Например, функция sqrt() (#include <math.h>), извлекающая квадратный корень, принимает как аргумент значение, из которого корень следует извлечь, и возвращает значение этого корня:

double x=2.0;

double dbl = sqrt(x);

cout << dbl << " " << sqrt(5.0);

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