Тема 2: введення-виведення даних 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема 2: введення-виведення даних



ПЛАН

1. Об’єкт cout.

2. Функція printf.

3. Об’єкт cin.

 

Об’єкт cout

Об’єкт cout виводить дані на заданий пристрій.

Синтаксис:

 

cout << data[ << data ], де

data - змінні, константи, вирази.

 

Приклад:

 

cout<< “Привіт”;

cout << “Коля”; //ПривітКоля

 

cout<< “\n Привіт\n”;

cout << “Коля”;

//Привіт

//Коля

 

# include <iostream.h>

 

 

Void main()

{

cout << “Петро \tВася\n”;

cout << “3\t2\n”;

cout << “4\t5\n";

}

 

Виведення:

Петро Вася

3 2

4 5

\t - табуляція через 8 символів.

 

Для cout використовуються різноманітні маніпулятори. Наприклад, маніпулятори hex і oct використовуються для виведення відповідно, 16-х і 8-х чисел.

Приклад:

 

# include <iostream.h>

 

Void main()

{

int num = 0x4c, num_2 = 012, num_s;

num_s = num + num_2;

cout << "Виведення у 16 - х кодах " << hex << num_s;

//Виведення у 16 - х кодах 56

}

 

Маніпулятор установлює виведення 8 і 16–річних чисел, поки не зустрінеться інший маніпулятор oct, hex, dec.

Маніпулятори setw(), setprecision() і setfill() - це функції-члени які змінюють стан об’єкта cout.

setw() - вирівнює число виведення в межах заданої ширини.

setfill() - заповнює незаповнені позиції встановленим символом. При цьому формуються лідируючі пробіли.

setprecision(n) – маніпулятор виведення зазначеної кількості знаків n.

 

Приклад:

 

#include <iostream.h>

#include <iomanip.h>

 

Void main()

{

cout << 456 <<456 <<456<<"\n";

//456456456

cout << setw(5) << 456 << setw(5) << 456<< 456;

// 456 456456

cout<<"\n"<<setw(10)<<setprecision(6)<<12.47888;

// 12.4789

cout << "\n"<< setw(10) << setfill(’+’)<< 12.47;

//+++++12.47

}

 

Маніпулятори setiosflags і resetiosflags використовуються для установки певних глобальних прапорів, які клас C++, iostream, використовує при визначенні поведінки по умовчанню при введенні та виведенні. На ці прапори посилаються як на змінні стану. Функція setiosflags() встановлює зазначені в ній прапори, а resetiosflags() очищує (або скидає) їх. Ці маніпулятори в якості аргументів використовують значення, показані в таблиці 3.

Таблиця 3

Аргументи для setiosflags і resetiosflags

Значення Результат, якщо значення встановлене
ios::skipws Ігнорує порожній простір при введенні
ios::left Виведення із вирівнюванням зліва
ios::right Виведення із вирівнюванням справа
ios::dec Виведення у десятковому форматі
ios::oct Виведення у восьмеричному форматі
ios::hex Виведення у шістнадцятирічному форматі
ios::showbase Виводити основу системи числення
ios::showpoint Виводити десяткову точку
ios::suppercase Виводити шістнадцятирічне число заголовними буквами
ios::showpos Виводити “+” перед додатними цілими числами
ios::scientific Використовувати наукову форму виведення чисел із плаваючою точкою
ios::fixed Використовувати форму виведення чисел із фіксованою точкою

 

Наприклад:

 

cout<<setw(10)<<“Привіт\n”;

cout<<setw(10)<<setiosflags(ios::left)<<“Привіт”;

 

Результат здійснення:

 

Привіт

Привіт

 

Є й інші маніпулятори, із якими можна ознайомиться в "Справочній інформації" пакету або у відповідній літературі.

 

Функція printf

Для виведення даних у класичному C використовується функція printf. Вона без змін перенесена у С++.

Синтаксис:

 

printf(char *fotmat, <додаткові аргументи>)

 

Рядок формату складається із символів виведених без зміни і символів, що задають перетворення даних. Для такого перетворення використовуються додаткові аргументи.

Специфікація перетворення формату має вигляд:

%[ флаги ] [ширина] [. точність] [ L|l ] тип де

прапори:

(мінус) - вирівнювання по лівому краю поля;

+ (плюс) - виводиться знак числа + або –;

ширина: визначає мінімальне число виведених символів, що доповнюються пробілами або нулями.

точність: визначає число знаків після десяткової точки для чисел із плаваючою точкою. Для змінних цілого типу визначається максимальне число виведених цифр.

тип:

d або i -десяткове ціле зі знаком (int);

u – десяткове ціле без знака (unsigned int);

x – шістнадцятирічне ціле без знака (unsigned int);

f – виведення числа з плаваючою точкою (float, double);

e – виведення числа з плаваючою точкою із використанням експоненціальної форми (float, double);

c – виведення символу (char);

s – виведення рядка;

p – виведення по покажчику.

L | l – застосовується в комбінації із символом типу:

Lf і Le - довгий із плаваючою точкою (long double);

ld або li - довгий цілий (long int);

lu – беззнаковий довгий цілий (unsigned long int).

 

Приклад:

 

#include <iostream.h>

#include <stdio.h>

 

Void main()

{

int g = 22;

float f = 20000/3.;

double d=10000.0;

long ln = 200001L;

long double ld=1.0;

d = d/3;

ld/=3;

printf(" \n-----%10.1f----",f);

//----- 6666.7----

printf(" \n-----%10.4d----",g);

//----- 0022----

printf(" \n--d=%10.5f g=%d",d,g);

//--d=3333.33333 g=22

printf(" \n--ln=%8ld ",ln);

//--ln= 200001

printf(" \n--ln=%8.7ld ",ln);

//--ln= 0200001

printf(" \n--ld=%20.19Lf ",ld);

//--ld=0.3333333333333333330

}

Об’єкт cin

Введення даних здійснюється з використанням об’єкта cin. Синтаксис:

cin >> змінна [ >> змінна ]…

При введенні рядків введення здійснюється тільки по одному слову. При введенні декількох змінних роздільник між ними - пробіл або <Enter>.

Приклад 1:

 

char f[20];

cout << “Введіть ім’я?”;

cin >> f;

cout << “Ім’я:”<< f;

int e;

cin >>e;

cout << “\n e = ”<< e;

 

Приклад 2

 

#include <iostream.h>

 

Void main()

{

char name[20],fam[20];

int age;

cin >> name >> fam >> age; //Іван Іванов 25

cout << fam << ’ ’ << name << ’ ’ << age;

}

 

Результат роботи:

 

Іванов Іван 25

 

ТЕМА 3: ОПЕРАЦІЇ В С++

ПЛАН

1. Математичні операції в С++.

2. Операції відношення.

3. Логічні операції.

4. Додаткові операції.

5. Порозрядні операції.

 

1. Математичні операції в С++

* / + -

% - ділення по модулю або залишок від ділення

 

cout << 10%2 << “\n”; //0

cout << 300%165 << “\n”; //135

 

Оператор присвоювання:

 

a = b = c = d = e = 100;

val = 3 + (r = 9 - c);

 

Складові операції:

 

+= *= /= - =

 

Приклад:

 

int a = 10;

a+=10 //20;

a-= 10 //10;

a*=2 //20;

a/=5 //4;

 

Змішані типи даних:

Якщо у виразах змішані типи даних, то виконується перетворення меншої точності у більшу. Наприклад, тип цілий і подвоєна точність забезпечує перетворення цілого типу в подвоєну точність.

 

int a = 4;

double c = 17.1567;

double t;

t = a + c; //a-перетвориться в double

 

Частіше усього не треба перейматися стосовно автоматичного перетворення типів. У ряді випадків зручно використовувати приведення типу.

Синтаксис:

 

(data type) expression, де

data type -будь-який тип даного

expression - з мінна, константа або вираз

 

Приклад:

 

int c = 10;

cout << (float) c / 3; //3. 3333

cout << (float) (c / 3); //3

 

Якщо змішуються беззнакові змінні зі змінними інших типів, можуть виникнути проблеми.

Операції відношення

== дорівнює

> більше

< менше

>= більше або дорівнює

<= менше або дорівнює

!= не дорівнює

 

Результатом виразу відношення є: 0 - неправда або 1 - істина

 

cout << 2 == 2 == 2 // 0 - неправда

cout << 2 < 3 // 1 - істина

 

Вираз відношення - два арифметичних вирази, з’єднані операцією відношення.

 

Оператор if

 

Синтаксис:

 

if (<вираз>)

{ блок з одного або більш операторів }

 

Якщо після if стоїть 1 оператор, фігурні дужки можна не ставити.

 

Оператор if...else

 

Синтаксис:

 

if (<вираз>)

{ блок з одного або більш операторів }

Else

{ блок з одного або більш операторів С++ }

 

if (Х > 0) Y = X * X;

else Y = 2 * X;

 

У логічному виразі обчислення виконуються зліва на право. Обчислення припиняються, як тільки результат стає визначеним. Такий засіб називається усіканням.

if (a > b || c > d || e > f) – переривається, як тільки обчислюється, що a > b, або c > d.

Логічні операції

&& - I

|| - АБО

! - НЕ

 

!(var1 = = var2) – те ж саме var1! = var2

 

Приклад:

if ((a< b) & & (c > d))

cout << 3;

Пріоритетність операцій:

- арифметичні операції;

- операцій відношення;

- логічні операцій.

 

Усікання може бути використане для коректного обчислення.

Наприклад:

if (b! = 0 && a / b > 12.4) - коректно, ділення на нуль не буде.

Якщо записати if (a / b > 12.4 && b! = 0) - небезпечно, може бути ділення на нуль.

Логічні вирази повертають значення типу int. Будь-яке ненульове значення розглядається як істина.

Додаткові операції

Умовна операція?

Ця операція може використовуватися замість if... else

Синтаксис:

 

результат = вираз1? вираз2: вираз3

 

Приклад:

 

int i = 6, j = 8;

int res = (i < j)? i: j;

cout << res << ’\n’; // 6

char rs[10];

strcpy(rs, (i < j)? "Менше": "Не менше");

cout << rs; //Менше

Операція інкремент (++) і декремент (--)

Ця операція збільшує або зменшує значення змінної.

При цьому в залежності від розташування справа або зліва від змінної інкремент ++ і -- називають префіксним або постфіксним.

++i означає i = i + 1 або i += 1;

--i означає i = i - 1 або i -= 1;

Якщо змінна має префіксну операцію, вона змінює своє значення перед тим, як буде використана у виразі. Якщо використовується постфіксна операція, то змінна змінить своє значення після обробки виразу:

 

a = 6;

b = a++ -1 // a = 7 b = 5

 

Префіксна операція має вищий пріоритет, ніж будь-яка інша операція.

s = ++(a + b) Помилка!!!

Операція застосовується тільки до змінної.

Приклад:

 

int i = 1, j = 2, k = 3;

a = i++ + j - --k;

cout << a << i << k // 122

 

Операція sizeof()

Формат: sizeof (дані)

Sizeof (тип даних)

sizeof повертає розмір у байтах даних або типів даних.

 

cout sizeof (float) //4

 

Порозрядні операції

Таблиця 4

Основні порозрядні операції

 

Операція Значення
& Порозрядне І
| Порозрядне АБО
^ Порозрядне виключаюче АБО
~ Порозрядне заперечення (доповнення до 1)

 

Таблиця 5

Характеристика основних порозрядних операцій

 

1-й біт Операція 2-й біт Результат
  &    
  &    
  &    
  &    
  |    
  |    
  |    
  |    
  ^    
  ^    
  ^    
  ^    
  ~    
  ~    

 

 

9 & 14 // 8

1 0 0 1
1 1 1 0
1 0 0 0

9 | 14 // 15

1 0 0 1
1 1 1 0
1 1 1 1

 

9 ^ 14 // 7

1 0 0 1
1 1 1 0
0 1 1 1

 

~ 9 // 6

1 0 0 1
0 1 1 0

 

unsigned char u1 = ~9; // 246

signed char u2 = ~9; // -10

unsigned int u3 = ~9; // 65526

signed int u4 = ~9; // -10

unsigned long u5 = ~9; // 4294967286

signed long u5 = ~9; // -10

 

Приклад визначення парного або непарного значення

 

#include <iostream.h>

 

Void main()

{

int input;

cin>> input;

if(input & 1) // Істина, якщо число непарне

cout<< input << “Число непарне”;

else

cout<< input << “Число парне”;

}

 

У ASCII кодах єдина відзнака між маленькими і великими буквами значення 0 або 1 у 5-му біті - для англійських букв.

Біт → 7 6 5 4 3 2 1 0

А → 0 1 0 0 0 0 0 1 → Шест. 41, Дес. 65

а → 0 1 1 0 0 0 0 1 → Шест. 61, Дес. 97

 

Щоб перетворити символ до верхнього регістру необхідно встановити 0 у 5-й біт.

Для цієї мети можна використовувати маску зі значенням

 

223(10) = DF(16) = 1 1 0 1 1 1 1 1(2) → бітова маска.

Якщо 5-й біт 0 - не зміниться, якщо 1 - перетвориться в 0.

 

Приклад:

 

#include <iostream.h>

#define bitmas (0xDF) // 1 1 0 1 1 1 1 1

 

Void main()

{

char a,b,c;

cin>>a; //g

cin>>b; //M

cin>>c; //p

a = a & bitmas;

b &= bitmas; // Складові поразрядні

c &= bitmas; // операції

cout<<a<<b<<c; //GMP

}

Для переключення заданого біта з 0 у 1 і навпаки, ефективно використовувати виключаюче АБО. Приклад із маскою, аналогічний попередньому.

Порозрядні операції зсуву.

Синтаксис:

a << b → зсув уліво

a >> b → зсув управо

 

Приклад:

 

29 << 3 // 232

0 0 0 1 1 1 0 1 // 29

1 1 1 0 1 0 0 0 // 232

← зсув на 3

 

Ця операція дорівнює 29∙ 23 = 232

Початковий знак від’ємного числа зберігається. При застосуванні порозрядного зсуву до від’ємного числа його знак зберігається, але старші розряди заміняються одиницею, а не нулем. Зсув управо (уліво) на n розрядів відповідно зменшує (збільшує) число в 2n разом.

Приклад порозрядних зсувів.

 

#include <iostream.h>

 

Void main()

{

int num_1 = 25; // 00011001

int num_2 = 102; // 01100110

int shift_1, shift_2;

shift_1 = num_1 << 3; // 200

shift_2 = num_2 << 3; // 816

cout << shift_1 << «\n» << shift_2;

// 200

// 816

}

 

Може бути використана складова операція порозрядного зсуву:

<<= — складений порозрядний зсув уліво

>>= — складений порозрядний зсув управо

 

signed int num1 = 15;

unsigned int num2 = 15;

num1 <<= 4; //множення на 16

num2 >>= 3; //ділення на 8

 

ТЕМА 4: ОРГАНІЗАЦІЯ ЦИКЛІВ

ПЛАН

1. Організація циклів за допомогою while і do... while.

2. Організація циклів із використанням оператора for.

3. Оператори switch і goto.

 

1. Організація циклів за допомогою while і do...while

Синтаксис while:

 

while (<вираз>)

{



Поделиться:


Последнее изменение этой страницы: 2017-02-10; просмотров: 197; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.178.133 (0.167 с.)