- •1. Основні операції
- •1.1 Арифметичні операції
- •1.2 Операції присвоювання
- •1.3 Математичні функції
- •1.4 Операції порівняння
- •1.5 Логічні операції
- •1.6 Порозрядні операції (побітові операції)
- •1.7 Операція слідування (кома)
- •1.8 Операції введення та виведення
- •1.9 Операція sizeof()
- •1.10 Умовна операція ? :
- •2. Оператори. Вирази.
- •2.1. Оператор розгалуження if
- •2.2 Оператор switch
1.7 Операція слідування (кома)
Операція "кома" (,) називається операцією слідування, яка "зв'язує" два довільних вирази. Список виразів, розділених між собою комами, обчислюються зліва направо.
Наприклад, фрагмент тексту: a=4; b=a+5; можна записати так: a=4, b=b+5;
Операція слідування використовується в основному в операторах циклу for().
Для порівняння наводимо приклад з використанням операції слідування (приклад 2) та без неї (приклад 1):
Приклад 1:
int a[10],sum,i;
/* ... */
sum=a[0];
for (i=1;i<10;i++)
sum+=a[i];
Приклад 2:
int a[10],sum,i;
/* ... */
for (i=1,sum=a[0];i<10;sum+=a[i],i++) ;
1.8 Операції введення та виведення
Реальні програми важко уявити без використання операцій введення та виведення. В мові Сі на стандартні потоки введення-виведення (в більшості випадків - клавіатура та монітор) завжди вказують імена stdin та stdout. Обробку цих потоків здійснюють функції, визначені в заголовочному файлі stdio.h.
Функція getchar() зчитує і повертає черговий символ з послідовності символів вхідного потоку. Якщо цю послідовність вичерпано, то функція getchar() повертає значення -1 (цьому значенню відповідає константа EOF).
Функція putchar(аргумент), де аргументом є вираз цілого типу, виводить у стандартний вихідний потік значення аргументу, перетворене до типу char.
Приклад:
#include<stdio.h>
void main()
{
char ch;
ch=getchar();
putchar(ch);
}
Для введення та виведення більш складної інформації використовуються функції scanf() та printf().
Функція printf() призначена для виведення інформації за заданим форматом.
Синтаксис функції : printf("Рядок формату"[, аргумент1[, аргумент2, [...]]]);
Першим параметром даної функції є "рядок формату", який задає форму виведення інформації. Далі можуть розташовуватися вирази арифметичних типів або рядки (в списку аргументів вони відокремлюються комами). Функція printf() перетворює значення аргументів до вигляду, поданого у рядку формату, "збирає" перетворені значення в цей рядок і виводить одержану послідовність символів у стандартний потік виведення. Рядок формату складається з об'єктів двох типів: звичайних символів, які з рядка копіюються в потік виведення, та специфікацій перетворення. Кількість специфікацій у рядку формату повинна дорівнювати кількості аргументів.
Приклад:
#include<stdio.h>
void main()
{
int a=10,b=20,c=30;
printf(" a==%d b==%d c==%d ",a,b,c);
}
Специфікації перетворення для функції printf():
%d - десяткове ціле;
%i - десяткове ціле;
%o - вісімкове ціле без знаку;
%u - десяткове ціле без знаку (unsigned)
%x - шістнадцяткове ціле без знаку;
%f - представлення величин float та double з фіксованою точкою;
%e або %Е - експоненціальний формат представлення дійсних величин;
%g - представлення дійсних величин як f або Е в залежності від значень;
%c - один символ (char);
%s - рядок символів;
%p - покажчик
%n - покажчик
%ld - long (в десятковому вигляді);
%lo - long (у вісімковому вигляді);
%p - виведення покажчика в шістнадцятковій формі;
%lu - unsigned long.
Можна дещо розширити основне визначення специфікації перетворення, помістивши модифікатори між знаком % і символами, які визначають тип перетворення (таблиця 1.4.).
Таблиця 1.4 – Значення основних модифікаторів рядка формату
Модифікатор |
Значення |
- |
Аргумент буде друкуватися починаючи з лівої позиції поля заданої ширини. Звичайно друк аргументу закінчується в самій правій позиції поля. Приклад: %-10d |
Рядок цифр |
Задає мінімальну ширину поля. Поле буде автоматично збільшуватися, якщо число або рядок не буде вміщуватися у полі. Приклад: %4d |
Цифри.цифри |
Визначає точність: для типів даних з плаваючою комою - число символів, що друкуються зліва від десяткової коми; для символьних рядків - максимальну кількість символів, що можуть бути надруковані. Приклад: %4.2f |
Розглянемо декілька прикладів:
Приклад 1:
#include <stdio.h>
main()
{
printf("/%d/ ",336);
printf("/%2d/ ",336);
printf("/%10d/ ",336);
printf("/%-10d/ ",336);
};
Результат виконання програми буде виглядати так:
/336/
/336/
/ 336/
/336 /
Приклад 2:
#include <stdio.h>
main()
{
printf("/%f/ ",1234.56);
printf("/%e/ ",1234.56);
printf("/%4.2f/ ",1234.56);
printf("/%3.1f/ ",1234.56);
printf("/%10.3f/ ",1234.56);
printf("/%10.3e/ ",1234.56);
}
На цей раз результат виконання програми буде виглядати так:
/1234.560000/
/1.234560e+03/
/1234.56/
/1234.6/
/ 1234.560/
/ 1.235e+03/
Для введення інформації зі стандартного потоку введення використовується функція scanf().
Синтаксис: scanf("Рядок формату",&аргумент1[,&аргрумент2[, ...]]);
Так, як і для функції printf(), для функції scanf() вказується рядок формату і список аргументів.
Суттєва відмінність у синтаксисі цих двох функцій полягає в особливостях даного списку аргументів. Функція printf() використовує імена змінних, констант та вирази, в той час, як для функції scanf () вказується тільки покажчики на змінні.
Поширеною помилкою використання scanf() у початківців є звертання: scanf("%d",n) замість scanf("%d",&n). Параметри цієї функції обов'язково повинні бути покажчиками!
Функція scanf() використовує практично той же набір символів специфікації, що і функція printf().
#include <stdio.h>
main()
{
int a,b,c;
printf("A=");
scanf("%d",&a);
printf("B=");
scanf("%d",&b);
c=a+b;
printf("A+B=%d",c);
}
Потоки. У C++ немає вбудованих команд уведення-виведення даних. Для організації введення-виведення тут реалізована концепція потоків, яка визначена у спеціальних модулях. У модулі istream.h описані команди введення, у модулі ostream.h - команди виведення, а у модулі iostream.h - команди виведення і введення.
Під потоком розуміють процес уведення-виведення інформації у файл. Периферійні пристрої введення-виведення, такі як клавіатура, монітор, принтер, розглядаються як текстові файли. Під час виконання будь-якої програми автоматично підключаються стандартні потоки для введення даних з клавіатури (сіn), виведення на екран (cout), виведення повідомлення про помилки (сеrr) і допоміжний потік (clog).
Стандартні потоки використовують команди введення (>>) та виведення (<<) даних. За замовчуванням стандартним пристроєм для потоків виведення даних і повідомлень про помилки є монітор користувача, а для потоку введення даних -клавіатура. Однак потоки можна перенаправляти, наприклад, можна зчитувати вхідну інформацію для програми не з клавіатури, а з деякого текстового файлу на диску.
Команда введення даних. Надавати значення змінним можна двома способами: за допомогою команди присвоєння, наприклад х = 3.1, або команди уведення даних із клавіатури. Команда уведення даних із клавіатури дає змогу виконувати програму для різних вхідних даних, що робить її більш універсальною (масовою). Команда введення >> описана у бібліотеці iostream.h (istream.h) і має такий загальний виляд:
сіn >> <змінна>;
Якщо необхідно ввести значення відразу для декількох змінних, то можна або використати декілька потоків введення, або записати усі змінні в одному потоці сіn, застосувавши для цього декілька команд ">>", а саме:
сіn >> <змінна 1> >> <змінна 2> >> ... >> <змінна N>;
Значення сторін можна ввести, наприклад, так: сіn >> а; сіn >> b; сіn >> с;
Одним потоком змінним можна надати значення так: сіn >> а >> b >> с;
Часто перед командою вводу даних використовують команду виводу для покращення розуміння програми:
cout<< "Введіть сторони трикутника";
сіn >> а >> b >> с;
Команда виведення даних. Для виведення на екран повідомлень і результатів обчислень використовують стандартний потік виведення cout і команду << , які визначені у біліотеці iostream.h (ostream.h):
сout << <вираз 1> << < вираз 2> << ... << < вираз N>;
У списку виведення можуть бути сталі, змінні або вирази.
Результати виконання програми Трикутник (периметр і площу) можна вивести, наприклад, так:
сout<<"Периметр = " << p;
сout<<"Площа = " << s;
На екрані одержимо
Периметр = 12Площа = 6
Як бачимо, результати зливаються. Для того, щоб дані виводилися у потрібному користувачу вигляді, використовують керуючі послідовності.
Зауваження. Замість керуючої послідовності можна використати команду endl – кінець рядка. Наприклад, ці дві команди рівносильні:
cout << "f=" << f <<" "; або cout << "f=" << f << endl;.
Зауваження. Значення дійсних чисел (тип float) можна виводити на екран у стандартному або науковому форматах. Якщо значення даного необхідно заокруглити до n значущих цифр, то перед командою виведення треба записати cout.precision(n).
Задача (про трикутник, заданий координатами вершин). Дано координати трьох вершин трикутника А(1; 1), В(2; 2) та С(-1; 2). Обчислити медіану mb і радіус r описаного кола r.
#include<iostream.h> // Трикутник2
#include<math.h> //Бібліотека математичних функцій
#include <conio.h>
void main()
{
clrscr(); // Очищаємо екран
float x1, x2, x3, y1, y2, у3; // Оголошуємо змінні та вводимо дані
cout<< "Уведіть координати точки А";
сіn>> х1 >> у1 ;
cout<< "Уведіть координати точки В";
сіn>> х2 >> у2;
cout<< "Уведіть координати точки С";
сіn>> х3 >> у3;
float a, b, с, х, у, mb, p, s, r; // Оголошуємо додаткові змінні
// Обчислюємо довжини сторін трикутника
а = sqrt(pow((x3 - х2), 2) + pow((y3 - у2), 2));
b = sqrt(pow((x1 - хЗ), 2) + pow((y1 - уЗ), 2));
с = sqrt(pow((x1 - х2), 2) + pow((y1 - у2), 2));
х = (х1 + х3) / 2; // Обчислюємо координати
у = (у1 + у3) / 2; // середини сторони b
mb = sqrt(pow((x - х2), 2) + pow((y - у2), 2)); // Обчислюємо медіану mb
р = (а + b + с) / 2; // Обчислюємо півпериметр
s = sqrt(p * (р - а) * (р - b) * (р - с)); // Обчислюємо площу
r = (а * b * с) / (4 * s); // Обчислюємо радіус
cout<< "mb = " << mb << " "; //Виводимо значення медіани
cout << "r = " << r << " "; //Виводимо радіус
getch(); //Затримуємо результати на екрані
}
mb = 2.061553
r= 1.581139
У програмі Трикутник2 описано під'єднання бібліотеки conio.h, де визначена функція clrscr() - очищення екрана та функція getch(), яка дає змогу затримати на екрані результати виконання програми, доки не буде натиснута довільна клавіша на клавіатурі.