Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Видеоматериал для лекций по С++ c потоковым вводо_выводом (cin, cout) 2008 г.doc
Скачиваний:
9
Добавлен:
29.03.2016
Размер:
346.62 Кб
Скачать

Этапы работы с программой на С++ в системе программирования

Общая структура программы на С++

директивы_препроцессора

определение_функции_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<<”выход из цикла”

Структура выбора ifelse

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);

}

Результаты работы программы