Этапы работы с программой на С++ в системе программирования
Общая структура программы на С++
директивы_препроцессора
определение_функции_1
определение_функции_2
………………
определение_функции_N
Простейшая программа содержит только главную функцию и имеет следующую структуру:
директивы_препроцессора
void main ()
{
определения_объектов;
исполняемые_операторы;
}
Пример. Дано: a,b,c – стороны треугольника. Вычислить S – площадь треугольника. По формуле Герона:
где р – полупериметр треугольника.
# include <iostream.h>
# include <math.h>
void main ()
{
double a,b,c,p,s;
cout<<”Input a,b,c”; //вывод данных на экран
cin>>a>>b>>c; //ввод данных с клавиатуры
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
cout<<”s=”<<s<<endl;
}
Алфавит и словарь
Латинские прописные и строчные буквы (A, B, C,…, x, y, z);
Арабские цифры (0, 1, 2,…7, 8, 9);
Специальные символы: “ , {} | [] () + - / % \ ; ‘ . : ? < = > _ !
& * # ~ ^
Ключевые слова языков С/С++(начинающиеся с символа подчеркивания характерны для компилятора Microsoft)
_asm |
else |
main |
struct |
_assume |
enum |
_multiple_inheritance |
switch |
auto |
_except |
_single_inheritance |
template |
_based |
explicit |
_virtual_inheritance |
this |
bool |
extern |
mutable |
thread |
break |
false |
naked |
throw |
case |
_fastcall |
namespace |
true |
catch |
_finally |
new |
try |
_cdecl |
float |
noreturn |
_try |
char |
for |
operator |
typedef |
class |
friend |
private |
typeid |
const |
goto |
protected |
typename |
const_cast |
if |
public |
union |
continue |
inline |
register |
unsigned |
_declspec |
_inline |
reinterpret_cast |
using |
default |
int |
return |
uuid |
delete |
_int8 |
short |
_uuidof |
dllexport |
_int16 |
signed |
virtual |
dllimport |
_int32 |
sizeof |
void |
do |
_int64 |
static |
volatile |
double |
_leave |
static_cast |
while |
dynamic_cast |
long |
_stdcall |
wmain |
Стандартные типы данных
Тип данных |
Размер (байт) |
Диапазон значений |
char |
1 |
-128…+127 |
int |
2/4 |
зависит от системы |
unsigned char |
1 |
0…255 |
unsigned int |
2/4 |
зависит от системы |
short int |
2 |
-32768…+32767 |
unsigned short |
2 |
0…65535 |
long int |
4 |
-2147483648…+2147483647 |
unsigned long int |
4 |
0…4294967295 |
float (вещественный) |
4 |
±(3.4E-38…3.4E+38) |
double (вещественный с двойной точностью) |
8 |
±(1.7E-308…1.7E+308) |
long double |
10 |
±(3.4E-4932…1.1E+4932) |
bool (логический) |
1 |
true и false |
Идентификаторы
В12 MAX ris_32 result first
Описание переменных
имя_типа список_переменных;
Примеры описаний:
char symbol, lastName;
int number, row;
float x, X, mm3;
long double max_num;
int i=25, c=-100;
float pi=3.14159;
char isma=’S’;
Константы
Целые
десятичные 13 -45 2006
восьмеричные (запись начинается с нуля) 016 033
шестнадцатеричные (запись начинается с символов 0x) 0xFFF
Вещественные 44. 3.14159 1.5Е-6 0.3Е7
Символьные ‘a’ ‘+’ ‘\n’
Строковые “введите исходные данные” “result”
Именованные константы (константные переменные)
Пример описания:
const int massa=200;
Операции и выражения
Примеры выражений, записанные по правилам языка С++:
x+y 5.24-ost 3/(x-y)
i++ x+(++b ) --n+2 k*=2
Арифметические операции:
- вычитание или унарный минус;
+ сложение или унарный плюс;
* умножение;
/ деление;
% деление по модулю (применима только к целым числам);
++ унарная операция увеличения на единицу (инкремент);
-- унарная операция уменьшения на единицу (декремент).
Пример операции деления:
5/2=2 1/5=0
5./3=1.6666 5/3.=1.6666
Пример операции деления по модулю:
7%2=1
Операции инкремента и декремента применяются только к переменным
операция |
название операции |
пример выражения |
пояснение |
++ |
Префиксная форма инкремента |
++x |
Величина х сначала увеличи-вается на 1, а затем это новое значение х используется в выражении, в котором оно встретилось |
++ |
Постфиксная форма инкремента |
x++ |
В выражении используется текущее значение х, а затем величина х увеличивается на 1 |
-- |
Префиксная форма декремента |
--y |
Величина y сначала уменьшается на 1, а затем это новое значение y используется в выражении, в котором оно встретилось |
-- |
Постфиксная форма декремента |
y-- |
В выражении используется текущее значение y, а затем величина y уменьшается на 1 |
Пример:
a=5; b=3;
c=a++*++b;
В результате с=20 a=6 b=4
Операции отношения
< меньше
<= меньше или равно
> больше
>= больше или равно
== равно
!= не равно
Логические операции
! операция отрицания (НЕ)
&& логическое умножение (И)
|| логическое сложение (ИЛИ)
Правила их выполнения определяются таблицей истинности
x |
y |
!x |
x && y |
x || y |
False |
False |
True |
False |
False |
False |
True |
True |
False |
True |
True |
False |
False |
False |
True |
True |
True |
False |
True |
True |
Пример
Логическое выражение, соответствующее системе неравенств a≤b≤c в программе запишется в виде:
if (b≥a && b≤c)
if (x==1 || y!=0)
Пример
Записать логическое выражение, принимающее значение истина, если точка лежит внутри заштрихованной области, иначе – ложь (см. рис.1).
Рис.1.
Решение:
Общее уравнение окружности (X-X0)2+(Y-Y0)2=R2, где (X0,Y0) – координаты центра окружности, R – радиус окружности.
Логическое выражение на языке C++:
((X+3)*(X+3)+(Y-3)*(Y-3)<=9 || (X+3)*(X+3)+(Y+3)*(Y+3)<=9 || (X-3)*(X-3)+(Y-3)*(Y-3)<=9 || (X-3)*(X-3)+(Y+3)*(Y+3)<=9) && !(X*X+Y*Y<16)
Операция присваивания
Знак операции присваивания =
Синтаксис:
имя переменной=выражение;
Пример:
F=cos(x)+5.2
x=y=z=a+2*c
Дополнительные операции присваивания
Операция |
Выражение |
Эквивалент |
+= |
a+=2 |
a=a+2 |
-= |
x-=a+b |
x=x-(a+b) |
*= |
m*=n |
m=m*n |
/= |
h/=5 |
h=h/5 |
%= |
d%=10 |
d=d%10 |
Пример:
if ((x=x+8)>0) cout<<x;
Математические функции
Наиболее часто используемые в программах математические функции языка С++ находятся в библиотеке math.h, расположенной в каталоге INCLUDE. Чтобы воспользоваться этими функциями нужно в начало программы включить заголовочный файл:
# include <math.h>
Функция |
Прототип и краткое описание действий |
abs |
int abs(int i); Возвращает абсолютное значение целого аргумента i |
cos |
double cos(double x); Функция косинуса. Угол (аргумент) задается в радианах |
exp |
double exp(double x); Вычисляет значение ex (экспоненциальная функция) |
fabs |
double fabs(double x); Возвращает абсолютное значение вещественного аргумента x двойной точности |
floor |
double floor(double x); Находит наибольшее целое, не превышающее значения x. Возвращает его в форме double |
fmod |
double fmod(double x, double y); Возвращает остаток от деления нецелого x на y |
log |
double log(double x); Возвращает значение натурального логарифма (lnx) |
log10 |
double log10(double x); Возвращает значение десятичного логарифма (log10x) |
pow |
double pow(double x, double y); Возвращает значение xy |
sin |
double sin(double x); Функция синуса. Угол (аргумент) задается в радианах |
sqrt |
double sqrt(double x); Возвращает положительное значение квадратного корня |
tan |
double tan(double x); Функция тангенса. Угол (аргумент) задается в радианах |
Потоковый ввод/вывод в С++
В С++ имеется библиотека классов, подключаемая к программе с помощью файла iostream.h. В этой библиотеке определены в качестве объектов стандартные символьные потоки со следующими именами:
cin – консольный ввод
cout - консольный вывод
В С++ определена операция извлечения из стандартного потока, знак которой >>.
cin>>x1>>…>>xn;
Для ввода значения в переменную x:
cin>>x;
Знак операции помещения в поток <<.
cout<<x1<<…<<xn;
cout<<x+y;
cout<<”\n Summa=”<<Sum;
cout<<”a=”<<a<<” b=”<<b<<” c=”<<c<<endl;
Организация ветвления
Оператор перехода (оператор безусловного перехода)
goto метка;
Пример:
# include <iostream.h>
void main ()
{
float a,b;
. . . . . . .
b=25;
goto metka1;
. . . . . . .
metka1: a*=b;
cout<<a;
. . . . . . .
}
Пример использования оператора для досрочного выхода из вложенного цикла
for (…)
{ while (…)
{ for (…)
{…. goto exit …}
}
}
exit: cout<<”выход из цикла”
Структура выбора if…else
if (выражение) оператор 1; else оператор 2;
Пример:
if (a > b) z=a; else z=b;
if ((x >y ) && !z) {x=y/100; y+=100;} else z=-y;
if (i) ++i; else cout<<”i=0”;
или
if (i != 0) ++i; else cout<<”i=0”;
Пример.
// максимальное из трех
#include <iostream.h>
void main()
{float a,b,c,z;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
if (a>b) z=a; else z=b;
if (c>z) z=c;
cout<<"z="<<z<<endl;
}
Для увеличения количества возможных вариантов выбора, пары if – else можно объединять
char menuCommand;
cin>> menuCommand;
if (menuCommand==’a’)
foo1();
else if (menuCommand==’b’)
foo2();
else if (menuCommand==’c’)
foo3();
else //По умолчанию. Использовать необязательно.
cout<<”Ошибка ввода. \n”;
// пример неправильного сочетания if и else
#include <iostream.h>
int main ()
{
char c;
cout <<”Введите строчную букву (от a до z). \n ”;
cin >> c;
if (c<=’z’)
if (c<’a’)
cout <<”Неверная буква (<a). \n”;
else
cout <<” Неверная буква (>z). \n”;
return 0;
}
// пример правильного сочетания if и else
#include <iostream.h>
int main ()
{
char c;
cout <<”Введите строчную букву (от a до z). \n ”;
cin >> c;
if (c<=’z’) {
if (c<’a’)
cout <<”Неверная буква (<a). \n”;
}
else
cout <<” Неверная буква (>z). \n”;
return 0;
}
Сокращенная форма записи оператора if
if (выражение) оператор1;
Пример. Фрагмент программы определения наибольшего из трех чисел (a,b,с).
max=a;
if (b>max) max=b;
if (c>max) max=c;
cout<<”max=”<<max;
Операция ?:
Синтаксис:
условие ? выражение 1 : выражение 2;
Пример:
Max=(a<b)?b:a; - определение наибольшего из двух чисел.
Оператор варианта
switch (выражение)
{
case i: оператор1; break;
case j: оператор2; break;
. . . . . . .
case k: операторK; break;
default: операторN; break; //может отсутствовать
}
Пример:
// Перевод числовой оценки знаний ученика в ее словесный эквивалент
#include <iostream.h>
{
int ball;
cout<<”\n Введите оценку: ”; cin>>ball;
switch (ball)
{ case 2: cout<<”\t Это неудовлетворительно! \n”; break;
case 3: cout<<”\t Это удовлетворительно! \n”; break;
case 4: cout<<”\t Это хорошо! \n”; break;
case 5: cout<<”\t Это отлично! \n”; break;
default: “\t Нет такой оценки! \n”;
}
}
Пример:
Фрагмент программы возведения вещественного числа х в целую степень n, где n изменяется в диапазоне от 1 до 5.
y=1.0
switch (n)
{
case 5: y=y*x;
case 4: y=y*x;
case 3: y=y*x;
case 2: y=y*x;
case 1: y=y*x;
default: cout<<”Степень больше 5”;
}
Операция «запятая»
Например, если переменная y имеет тип int, то значение выражения (y=5, 5+y) будет равно 10, а переменная y примет значение 5.
Программирование циклов
Цикл с предусловием
Синтаксис:
while (выражение)
оператор;
Пример. Некто купил мешок сахара. И решил для себя: каждый раз брать из этого мешка ровно одну десятую часть его содержимого до тех пор, пока в мешке не останется меньше 30 кг сахара. Первоначально в мешке было 50 кг.
Написать программу, которая выдавала бы номер обращения к мешку и количество оставшегося в мешке сахара в виде:
number balance
1 45
2 40.5
3 36.45
# include <iostream>
using namespace std;
int main()
{
float massa=50;
int n=0;
cout<<"number"<<"\t balance";
while (massa>=30)
{massa=massa-massa/10;
++n;
cout<<'\n'<<n<<'\t'<<massa;}
cout<<endl;
return 0;
}
Пример. Найти количество первых n натуральных чисел, сумма которых не превышает 20.
# include <iostream>
using namespace std;
int main()
{ int sum=0, n=0;
while (sum<20)
{ ++n;
sum+=n;
}
cout<<"n="<<n-1<<endl;
return 0;}
Результаты выполнения программы: n=5
Цикл с постусловием
Синтаксис:
do
оператор
while (выражение);
Пример
# include <iostream>
using namespace std;
int main()
{ float massa=50;
int n=0;
cout<<"number"<<"\t balance";
do
{ massa=massa-massa/10;
++n;
cout<<'\n'<<n<<'\t'<<massa;
}
while (massa>=30);
cout<<endl;
return 0;
}
Пример. Вычислить n!=1*2*3*…*n-1*n
# include <iostream>
using namespace std;
int main( )
{ int i,n;
long unsigned p;
cout<<"n=";
cin>>n;
p=i=1;
do
p*=++i;
while (i<=n);
cout<<n<<"!="<<p<<endl;
}
Результаты выполнения программы:
n=7
7!=5040
n=4
4!=24
Press any key to continue
Цикл с параметром (оператор for)
Синтаксис:
for (выражение_1; выражение_2; выражение_3)
оператор;
Пример. Вычислить
#include <iostream>
using namespace std;
int main ( )
{
int i, m, n;
unsigned long s=0;
cout<<”m=”;
cin>>m;
cout<<”n=”;
cin>>n;
for (i=m; i<=n: ++i)
s+=i*i;
cout<<”s=”<<s<<endl;
return 0;}
Пример. Составить программу вычисления суммы и произведения пяти чисел.
# include <iostream>
using namespace std;
int main ( )
{
int i;
float number, sum=0, p=1;
for (i=1; i<=5; ++i)
{cout<<"input "<<i<<" number\n";
cin>>number;
sum+=number;
p*=number;}
cout<<"sum="<<sum<<"\t p="<<p<<'\n';
}
Результаты выполнения программы:
input 1 number
5
input 2 number
1
input 3 number
3
input 4 number
3
input 5 number
1
sum=13 p=45
Press any key to continue
Пример. Вычислить .
#include <iostream>
using namespace std;
int main()
{
int x;
for (int i=1; i<=5; ++i)
{
x+=i;
cout<<x<<’\n’;
}
return 0;}
Результаты выполнения программы:
1
3
6
10
15
Press any key to continue
int i=1;
for (; i<=5 ; ++i)
cout<<i;
Пауза
for (int i=1; i<=100; ++i); //тело цикла пустое
Использование операции «запятая» в for
Пример. Вычислить
Вариант 1
#include <iostream>
using name space std;
int main()
{
int i, m, n;
unsigned long s;
cout<<”m=”;
cin>>m;
cout<<”n=”;
cin>>n;
for (i=m, s=0 ; i<=n: ++i)
s+=i*i;
cout<<”s=”<<s<<endl;
return 0;}
Вариант 2.
На месте тела программы находится пустой оператор, а вычислительная часть внесена в выражение 3.
#include <iostream>
using name space std;
int main()
{
int i, m, n;
unsigned long s;
cout<<”m=”;
cin>>m;
cout<<”n=”;
cin>>n;
for (i=m, s=0 ; i<=n: s+=i*i, ++i);
cout<<”s=”<<s<<endl;
return 0;
}
Использование вложенных циклов
for (x=2; x<=9; x++)
for (y=2; y<=9; y++)
cout <<”\n”<<x<<”*”<<y<<”=”x*y;
Результаты выполнения программы:
2*2=4
2*3=6
. . .
9*8=72
9*9=81
Пример. Составить программу табулирования сложной функции двух переменных:
для x=x0(hx)xn и y=y0(hy)yn.
# include <iostream>
# include <math>
using name space std;
int main()
{
double z;
int x0, hx, xn, y0, hy, yn, a, b;
cout<<"x0,hx,xn ";
cin>>x0>>hx>>xn;
cout<<"y0,hy,yn ";
cin>>y0>>hy>>yn;
cout<<"a,b ";
cin>>a>>b;
cout<<"x"<<'\t'<<"y"<<'\t'<<"z"<<'\n';
for (int x=x0; x<=xn; x+=hx) // внешний цикл
for(int y=y0; y<=yn; y+=hy) // внутренний цикл
{if ((x>a && x<b) && (y>a && y<b)) z=a*sin(x)+b*cos(y);
else if ((x<a || x>b) && (y<a || y>b)) z=sin(x)+cos(y);
else z=1;
cout<<x<<'\t'<<y<<'\t'<<z<<endl;}
return 0;
}
Результаты работы программы
Блок-схема алгоритма
Оператор continue
for (i=1; i<=100; ++i)
{ if (i % 2) continue;
cout<<”\t”<<i;
}
данный фрагмент программы обеспечивает вывод на экран всех четных чисел в диапазоне 1 до 100.
Для нечетных значений переменной i остаток от деления на 2 будет равен 1, этот результат воспринимается как значение «истина» в условии ветвления, и выполнится оператор continue. Он завершит очередной шаг цикла, выполнение цикла перейдет к следующему шагу.
Оператор break
// пример использования операторов for и break
# include <iostream>
# define size 10
using name space std;
int main()
{
int i, j, k;
for (i=1; i<size; ++i) // внешний цикл
{
cout<<"\n";
for (j=1; j< size; j++) // внутренний цикл
{ k=i*j;
if (k>35) break; // условие выхода из цикла
if (k<10) cout<<" ";
else cout<<" ";
cout<<k;
}
};
cout<<"\n";
return 0;
}
Результаты работы программы
Задача. Среди к первых членов последовательности вида 1, 1+1/2, 1+1/2+1/3, … найти первый, больший заданного числа А. Если же его нет (среди первых к членов), то напечатать об этом сообщение.
// поиск члена последовательности, большего
// заданного числа a
# include <iostream>
using namespace std;
int main ()
{int k, i;
double a, s;
cout<<”Enter k=”; cin>>k;
cout<<”Enter a=”; cin>>a;
i=1;
s=0;
while (i<=k)
{s+=1./i;
if (s>a) break; else ++i;
}
if (i>k) cout<<”chisla not”<<endl;
else cout<<”i=”<<i<<”\t >a chislo=”<<s<<endl;
return 0;
}
Оператор return
# include <iostream>
# define LIMIT 30
using namespace std;
int main()
{
int row, req, scores[LIMIT], min, max;
float sum=0, average;
cout <<"\n Input a number of values of a row: ";
cin>>req;
if (req > LIMIT)
{
cout<<"\n You should not input more than "<<LIMIT<<" values.\n";
cout<<"\n>>> The end!!! <<<\n";
return (0);
}
for (row=0; row<req; ++row)
{
cout<<"\nInput the "<<row+1<<" number of the row: ";
cin>>scores[row];
}
for (row=0; row<req; row++)
sum+=scores[row];
average=sum/(float)req;
max=min=scores[0];
for (row=1; row<req; ++row)
{
if (scores[row]>max) max=scores[row];
if (scores[row]<min) min=scores[row];
}
cout<<"\nmax="<<max;
cout<<"\nmin="<<min;
cout<<"\n an average="<<average<<"\n";
return(0);
}
Результаты работы программы