Базовые алгоритмические конструкции




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

1. Базовая структура «следование» образуется последовательностью действий, следующих одно за другим. Это самый простой вид алгоритмов, его структура изображена на рисунке 11.3.

Базовая структура «ветвление» обеспечивает выбор одного из альтернативных путей работы алгоритма в зависимости от результата проверки условия (да или нет).

Структура «ветвление» существует в трёх основных вариантах: если-то-иначе (рисунок 11.5.а); если-то (рисунок 11.5.б); выбор-иначе (рисунок 11.5.в).

Базовая структура «цикл» обеспечивает многократное выполнение некоторой совокупности действий. Повторяющаяся совокупность действий называется – телом цикла.

Величина, с которой связано многократное выполнение тела цикла называется – параметром цикла. Параметр цикла имеет начальное и конечное значения.

Существует три вида циклов:

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

– цикл с предусловием (цикл «пока»);

– цикл с постусловием (цикл «до»).

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

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

2. Транслятор. Исходный текст с помощью программы-транслятора переводится в машинный код и таким образом получается объектный модуль (ОМ) программы, т.е. файл с расширением.obj. Трансляторы делятся на компиляторы и интерпретаторы.

3. Компилятор - программа, которая весь ИМ целиком проверяет на ошибки и при их отсутствии, переводит его в машинные коды, получая тем самым ОМ. При нахождении ошибок на экране появляется соответствующее сообщение. После их исправления, транслятор запускается заново.

В общем случае работа компилятора (рисунок 11.16) состоит из четырех основных фаз:

1) лексического анализа, в процессе которого на основе исходного модуля опознаются различные символы и классифицируются как ключевые слова, числовые значения и т.д.;

2) синтаксического анализа, в процессе которого определяются синтаксические соотношения;

3) генерация объектного модуля программы;

4) оптимизация объектного модуля с целью повышения его эффективности.

 

 

22.

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

Алфавит языка программирования – фиксированный для данного языка набор символов, допустимых для построения конструкций программы.

Алфавит языка С, C++ включает:

‒ строчные буквы латинского алфавита (a … z);

‒ прописные буквы латинского алфавита (A... Z);

‒ цифры (0... 9);

‒ специальные символы (.,; + - * / = < > % &! () { } ^ |?: [ ] ~ ' " # \ _ и пробел).

Константа – программный объект, принимающий фиксированное значение, не изменяющееся в процессе исполнения программы.

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

В C, С++ типы данных подразделяются на две группы: простые (скалярные) и составные (структурированные). К простым типам данных (таблица 12.2.1) относятся: целочисленный, вещественный и символьный типы. К структурированным типам данных относятся: строковый и файловый типы, массивы, структуры, перечисление.

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

Целочисленные данные на языке С, С++ могут быть представлены в следующих системах счисления:

‒ десятичной (например, 123, 10, 55, 2160);

‒ восьмеричной (начинаются с ноля, например, 012, 0713, 01255);

‒ шестнадцатеричной (начинаются с 0x или 0X, например, 0x12, 0x7D, 0X1A4).

Таблица 12.2.1 – Скалярные типы данных

Идентификатор типа Длина, байт Диапазон значений
Целые беззнаковые типы
unsigned char   0..255
unsigned int   0..65535
unsigned short   0..65535
unsigned long   0..4294967295
Целые знаковые типы
char   -128..127
int   –32768…32767
short   –32768…32767
long   -2147483648…2147483647
Вещественные типы
float   ±(3.4E–38..3.4E+38)
double   ±(1.7E–308..1.7E+308)
long double   ±(3.4E–4932.. 3.4E+4932)

 

 

23.

Операции определяют действия, производимые над операндами.

Опера́нд ‒ аргумент операции. Операндом в простейшем случае является константа или переменная.

Каждая операция имеет условное обозначение ‒ знак операции (символ или комбинация символов).

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

Синтаксис унарной операции имеет префиксный вид:

<знак операции> <операнд>

Синтаксис бинарной операции:

<операнд 1> <знак операции> <операнд 2>

Приоритет выполнения операций в С, С++ по убыванию: унарные операции; мультипликативные; аддитивные; сдвиг; <, >, <=, >=; == или!=; &; |; ^; &&; ||; простое и составное высказывание.

Операции, объединённые в одну группу имеют одинаковый приоритет.

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

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

Записать математическое выражение на языке С, С++.

Результат (выражение записанное на С,С++) имеет вид:

(a+b) / (c – d)+e / (f * g).

Математическое выражение

Запись на С, С++

10*x + 3*sqrt(cos(x))

(sin(2*x) – 1)/(pow(x,2) – 1)

fabs(x) + 2*sin(x)/cos(x)

 

 

24.

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

Математические выражения записываются по следующим правилам:

‒ запись ведётся в строчку;

‒ нельзя опускать знак умножения между сомножителями.

Приоритет вычисления выражений: (), []; функции; операции.

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

Математическая функция Запись на языке С, С++ Тип аргумента Тип результата
½ x ½ abs(x) int int
fabs(x) float, double, double
sqrt(x) int, double double
xy pow(x,y) double double
10 x pow10(x) int double
ex exp(x) int, double double
ln x log(x) int, double double
lg x log10(x) int, double double
sin x sin(x) double double
cos x cos(x) double double
tg x tan(x) double double
arcsin x asin(x) double double
arcos x acos(x) double double
arctg x atan(x) double double

 

З апись математических выражений:

Математическое выражение Запись на С, С++
10*x + 3*sqrt(cos(x))
(sin(2*x) – 1)/(pow(x,2) – 1)
fabs(x) + 2*sin(x)/cos(x)

25. Программа - это упорядоченная последовательность команд, ведущая к получению результата, согласно алгоритму решения задачи.

Команда выполняют определенные действия и называется оператором языка программирования.

Синтаксически программа состоит из:

‒ директив компилятора;

‒ описательной части;

‒ исполнительной части.

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

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

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

Синтаксис объявления константы:

const <спецификация типа><список идентификаторов>;

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

<спецификация типа><список идентификаторов>;

Исполнительная часть программы ( раздел операторов) является основной частью программы и в общем случае имеет вид:

Main()

{

return 0;}

Для форматного ввода-вывода данных скалярных типов и строк используются стандартные функции ввода/вывода, описанные в библиотеке stdio.h.

Программа на С++ имеет вид:

#include<iostream.h> //включение заголовочного файла ввода-вывода

 

const float pi =3.14; //описание константы π

int R; /*описание переменных: целого типа,

float Pi, L, S, V; вещественного типа*/

 

main() //главная функция

{

cout <<" R="; // вывод на экран комментария

cin >>R; //ввод значения гипотенузы в целом формате

Pi=3.14; // присвоение значения переменной Pi

L=2*Pi*R; // вычисление значений

S= Pi*R*R;

V=4./3.*S*R;

cout <<'\n'<<" L="<< L <<" S="<<S<<'\n'; //вывод значений

cout <<'\n'<<" V ="<<V <<'\n';

return 0;

}

 

26. Для форматного ввода-вывода данных скалярных типов и строк используются стандартные функции ввода/вывода, описанные в библиотеке stdio.h.

Для вводе используется стандартная функция scanf(), её синтаксис:

scanf (“форматная строка”, список параметров ввода);

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

‒ обычные символы, которые должны вводиться с клавиатуры в том же виде, в каком они содержатся в форматной строке;

‒ спецификации преобразования, задающие формат ввода, которые начинаются с символа «%» и заканчиваются символом преобразования. Символы преобразования задают тип вводимой переменной: ‘c’ ‒ символ; «d», «i» - десятичное целое типа int; «D», «I» - десятичное целое типа long; «e», «E» - вещественное число в экспоненциальной форме, например, 5.12E-02; «f», «g», «G» - вещественное число с плавающей точкой; «o» («O») - восьмеричное число типа int (long); «x» («X») - 16-ричное число типа int (long); «u» («U») - беззнаковое целое типа int (long); «s» - строка символов; «lf» - вещественное число удвоенной точности;

‒ управляющие символьные константы (например, ‘\n’ - переход к следующей строке).

 

 

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

Синтаксис полной формы записи условного оператора:

if (условие) оператор_1; else оператор_2;

Синтаксис сокращенной формы записи условного оператора:

if (условие) оператор_1;

Условие является логическим вычисляемым выражением, например, x < 0, y > 3, (x > 3) && (x < 5) и т. д. Условие заключается в круглые скобки, что синтаксически отделяет его от последующего оператора_1.

В полной форме условного оператора при истинности условия выполняется оператор_1, в противном случае (условие ложно) выполняется оператор_2, следующий после ключевого слова языка else.

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

В качестве оператора_1 и оператора_2 могут выступать любые простые и/или структурные операторы.

Пример 12.5.4. Н аписать программу вычисления функции по различным математическим выражениям на различных интервалах:

#include <stdio.h>

main()

{float x,y;

printf("Введите x\n");

scanf(“%f “,&x);

if (x<=0) {y=x*x+1;}

else if (x>2) {y=x+1;}

else y=7-x*x;

printf(“ x=%8.2f y=%8.2f\n”,x,y);

return 0; }

 

28. В языке Си существует три оператора циклов: цикл с параметром (цикл типа for), цикл с предусловием (цикл типа while), цикл с постусловием (цикл типа do … while).

Цикл с параметром имеет следующий синтаксис:

for (раздел 1; раздел 2; раздел 3) тело цикла;

где раздел 1 - инициализация; раздел 2 - проверка условий повторения цикла; раздел 3 - модификация; тело цикла (повторяющаяся часть) состоит из одного оператора; если требуется выполнить в цикле несколько операторов, они заключаются в фигурные скобки, образуя составной оператор.

Разделы отделяются друг от друга точками с запятой, так что всегда в заголовке цикла типа for две точки с запятой, даже если разделы пустые.

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

В разделе 1 записываются операторы, которые должны быть выполнены до цикла. В разделе 2 записываются операторы проверки условий повторения цикла; при истинности условий цикл повторяется. В разделе 3 записываются операторы, которые должны быть выполнены после каждой итерации цикла.

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

Пример 12.5.6. Найти сумму квадратов натурального ряда:

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

#include<stdio.h>

#include<conio.h>

main()

{ int S,n,i;

clrscr();

printf(“Введите n\n”);

scanf(“%d”,&n);

for(S=0,i=1;i<=n;i++) S+=i*i;

printf(“n=%d S=%d\n”,n,S);

getch();

return 0; }

В программе определяются целые переменные S, n, i. В языке Си учитывается регистр при определении идентификатора (имени) переменной. Функция clrscr, производящая очистку экрана, содержится в заголовочном файле conio.h. После ввода переменной n следует цикл типа for. В разделе инициализации присваиваются начальные значения переменным S (в которой накапливается сумма квадратов) и i - параметру цикла. Присваивания разделяются запятой, раздел инициализации отделяется точкой с запятой. В разделе проверки условия значение i сравнивается с n, при i меньшем или равном n цикл повторяется, в противном случае происходит выход из цикла. Раздел модификации состоит из оператора инкремента (увеличения на 1) значения параметра цикла i. Запись i++ эквивалентна записи i = i + 1.

В цикле выполняется один оператор S += i * i; это оператор составного присваивания, эквивалентный оператору S = S + i * i, поэтому фигурные скобки для тела цикла не требуются. После окончания цикла производится печать результата (оператор printf). Функция getch, содержащаяся в заголовочном файле conio.h, ожидает нажатия любой клавиши.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-07-22 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: