Лабораторна № 1 "Оператори введення і виведення в мові програмування Сі + +"
1. Теоретичні відомості
1.1 Структура програми
Мета роботи: вивчити оператори введення і виведення, формати, що використовуються в цих операторах. Оформити закінчену програму із застосуванням цих операторів.
У мові СІ будь-яка програма складається з однієї або більше функцій, що задають дії, які потрібно виконати. Виконання будь-якої програми починається з функції main. Далі йде текст програми, укладений у фігурні дужки. Таким чином, структура програми має вигляд:
main ()
{
Тіло програми
}
У самому простому випадку функція main не має аргументів, тому в дужках нічого не міститься. Для роботи програми, що забезпечує введення і виведення інформації, перед функцією main необхідно помістити рядок:
# Include <stdio.h>
1.2 Алфавіт мови і типи даних
Алфавіт мови включає латинські великі / малі літери, цифри та спеціальні знаки. До останніх відносяться:. (Крапка),, (кома), '(апостроф),: (двокрапка) та ін
Важливим поняттям мови є ідентифікатор, який використовується в якості імені об'єкта, наприклад, змінної, функції і т.п. Ідентифікатор може містити до 32 символів і складається з букв і цифр, але починається обов'язково з літери. Малі букви відрізняються від прописних, тому ідентифікатори SIGMA та sigma вважаються різними.
У мові СІ існує кілька типів даних. Кожен тип даних визначається одним з таких ключових слів:
int (цілий) - задає значення, до яких відносяться всі цілі числа. Діапазон можливих цілих значень лежить в межах від -32768 до 32767, змінна типу int займає 16 біт;
short (короткий цілий) - відповідні об'єкти не можуть бути більше, ніж int, змінні цього типу займають 16 біт;
long (довгий цілий) - відповідні об'єкти не можуть бути менше, ніж int. Змінна типу long займає 32 біта і дозволяє представити цілі числа від -2147483648 до 2147483647;
char (символьний) - задає значення, які представляють різні символи;
unsigned (беззнакових) - у мові ЗІ можна оголошувати деякі типи (char, short, int, long) беззнаковими за допомогою модифікатора unsigned (наприклад, unsigned short). Це означає, що відповідні змінні не будуть мати негативних значень. У результаті вони можуть приймати великі позитивні значення, ніж змінні знакових типів. У випадку типу int оголошення виду «unsigned int a;» можна записати «unsigned a;»;
float (речовий) - задає значення, до яких належать дійсні числа, що мають дробову частину, відокремлювану точкою. Дійсні числа можуть бути записані також у експоненційної формі. Наприклад,-1.58е +2 (що дорівнює -1,58 · 10 2). У мові СІ змінна типу float займає 32 біта. Вона може приймати значення в діапазоні від +3.4 е-38 до +3.4 е +38;
double (подвійна точність) - визначає речові змінні, що займають у два рази більше місця, ніж змінна типу float. Змінна типу double займає 64 біта. Вона може приймати значення в діапазоні від +1.7 е-308 до +1.7 е +308.
1.3 Введення і виведення інформації
1.3.1 Форматний висновок
Спочатку розглянемо функцію, що визначає форматний висновок:
printf ("керуюча рядок", аргумент1, аргумент2, ...);
Управляюча рядок містить об'єкти трьох типів: звичайні символи, які просто виводяться на екран дисплея, специфікації перетворення, кожна з яких викликає висновок на екран значення чергового аргументу з подальшого списку і керуючі символи-константи.
Кожна специфікація перетворення починається зі знака% і закінчується деяким символом, що задає перетворення.
Символ перетворення пов'язаний з типом змінних. наведемо символи перетворення:
d - значенням аргументу є десяткове ціле число;
o - значенням аргументу є вісімкове ціле число;
x - значенням аргументу є шістнадцяткове ціле число;
c - значенням аргументу є символ;
s - значенням аргументу є рядок символів;
e - значенням аргументу є дійсне число в експоненційної формі;
f - значенням аргументу є речовий десяткове число з плаваючою точкою;
u - значенням аргументу є беззнаковое ціле число;
p - значенням аргументу є покажчик (адреса).
Якщо після знака% записаний не символ, то він виводиться на екран. Функція printf використовує управляючу рядок, щоб визначити, скільки всього аргументів і які їх типи.
Наприклад, в результаті роботи програми отримані мінлива i, що має значення 100, і змінна j, що має значення 25. Обидві змінні цілого типу. Для виведення цих змінних на екран у вигляді
i = 100 j = 25
необхідно застосувати функцію
printf ("i =% dj =% d", i, j);
Як було описано вище, в лапках задається формат виводу. перед знаком% записуються символи, які будуть безпосередньо видані на екран. Після знака% застосована специфікація d, тому що змінні i і j мають цілий тип. Самі i і j наведені через кому в списку аргументів. Якщо результат повинен бути представлений у вигляді
i = 100; j = 25
необхідно застосувати функцію
printf ("i =% d; j =% d, i, j);
Якщо після знака% стоїть цифра, то вона задає поле, в якому буде виконаний висновок числа. Наведемо кілька функцій printf, які будуть забезпечувати виведення однієї і тієї ж змінної S цілого типу, що має значення 336.
Функція printf ("% 2d", S); видає на екран:
336
У цьому прикладі ширина поля (вона дорівнює двом) менше, ніж кількість цифр у числі 336, тому поле автоматично розширюється до необхідного розміру.
Функція printf ("% 6d", S);
видасть на екран:
_ _ _336
(6 позицій)
Тобто, в результаті роботи функції число зрушено до правого краю поля, а зайві позиції перед числом заповнені пробілами.
Функція printf ("%-6d", S);
видасть на екран:
336_ _ _
(6 позицій)
Знак «мінус» перед специфікацією призводить до зрушення числа до лівого краю поля.
Розглянемо висновок дійсних чисел.
Якщо перед специфікацією f нічого не вказано, то виводиться число з шістьма знаками після коми. при друку числа з плаваючою крапкою перед специфікацією f теж можуть перебувати цифри.
Розглянемо на конкретному прикладі три можливі ситуації:
% 6f - друк числа з плаваючою точкою в полі з шести позицій;
% .2 F - друк числа з плаваючою точкою з двома цифрами після десяткової точки;
% 6.2f - друк числа з плаваючою точкою в полі з шести позицій і двома цифрами після десяткової точки.
Наприклад, в результаті роботи програми отримані змінні дійсного типу а = 3,687 і b = 10,17.
Якщо для виведення значень використана функція
printf ("% 7f% 8f", a, b);
то результат буде представлений у вигляді рядка:
_ _ _ _ _ 3.687 _10.17
(7 поз.) (8 позицій)
Як видно з прикладу, зайві позиції заповнюються пробілами. Якщо для виведення значень використана функція
printf ("% .2 f% / 2f", a, b);
то результатом буде стрічка:
3.69 10.17,
з якої випливає, що в першому числі третя цифра після десяткової точки відкинута з округленням, тому що зазначений формат числа з двома цифрами після десяткової точки.
Якщо для виведення значень використана функція
printf ("% 7.2fe", a, b);
то буде виведено рядок:
_ _ _ 3.681.010000е +01
(7 позицій)
Оскільки для виведення значення змінної b застосована специфікація е, то результат виданий в експоненційної формі. Слід зазначити, що, якщо ширина поля менше, ніж кількість цифр у числі, то поле автоматично розширюється до необхідного розміру.
Як було зазначено вище, в управляючій рядку можуть міститися керуючі символьні константи. Серед керуючих символьних констант найбільш часто використовуються наступні:
\ A - для короткочасної подачі звукового сигналу;
\ B - для переведення курсору вліво на одну позицію;
\ N - для переходу на новий рядок;
\ R - для переведення курсора в початок поточного рядка;
\ T - для горизонтальної табуляції;
\ V - для вертикальної табуляції.
Припустимо, в результаті роботи програми мінлива i отримала значення 50. У результаті запису інструкції виклику функції
printf ("\ t ЕОМ \ n% d \ n", i);
спочатку виконається горизонтальна табуляція (\ t), тобто курсор зміститься від краю екрана на 8 позицій, потім на екран буде виведено слово "ЕОМ", після цього курсор переміститься на початок наступного рядка (\ n), потім буде виведено ціле значення i за форматом d, і остаточно курсор перейде в початок нового рядка (\ n). Таким чином, результат роботи цієї функції на екрані буде мати вигляд:
_ _ _ _ _ _ _ _ ЕОМ
50
1.3.2 Введення даних
Для форматного введення даних використовується функція
scanf («керуюча рядок», аргумент1, аргумент2 ,...);
Якщо в якості аргументу використовується змінна, то перед її ім'ям записується символ &.
Управляюча рядок містить специфікації перетворення і використовується для встановлення кількості і типів аргументів. специфікації для визначення типів аргументів такі ж, як і для функції printf. Перед символами d, o, x, f може стояти літера l. У перших трьох випадках відповідні змінні повинні мати тип long, а в останньому double.
Розглянемо приклад. Потрібно вказати значення для змінних i (цілого типу) і a (дійсного типу). Це завдання виконає функція:
scanf ("% d% f", & i, & a);
У керуючій рядку специфікації трьох типів можуть бути відокремлені один від одного різними знаками, в тому числі і пробілом. Отже, при занесенні значень змінних необхідно використовувати вказаний роздільник. Якщо специфікації не відділені одна від одної ніякими значеннями, то значення змінних заносяться через пробіл.
У мові СІ є дві дуже зручні функції puts і gets, що дозволяють вводити і виводити рядок символів. Приклад їх використання показаний нижче:
# Include <stdio.h>
main ()
{
char q [40]; / * оголошення рядка символів * /
puts ("Введіть рядок символів");
gets (q) / * введення рядка символів * /
puts (q) / * висновок рядка символів * /
}
У результаті роботи програми спочатку на екрані з'явиться текст:
Введіть послідовність символів,
після чого слід ввести яку-небудь рядок символів. Ця інформація за допомогою оператора gets буде привласнена елементам символьного масиву q. Оператор puts виведе рядок символів.
Оператори та вирази
Вирази широко використовуються в програмах на мові СІ і являють собою формули для обчислення змінних. Вони складаються з операндів (змінні, константи тощо), з'єднаних знаками операцій (додавання, віднімання, множення та ін.) Порядок виконання при обчисленні значення виразу визначається їх пріоритетами і може регулюватися за допомогою круглих дужок. Найбільш часто арифметичні вирази використовуються в операторі присвоєння. Цей оператор замінює значення змінної в лівій частині оператора на значення виразу, що стоїть в правій частині, і має таку форму:
змінна = вираз;
У мові СІ може бути використаний модифікатор const, що забороняє які б то не було перевизначення константи: її зменшення, збільшення і т.п. Модифікатор const, використовуваний окремо, еквівалентний const int. Наведемо приклади:
const float a = 3.5;
const j = 47;
У таблиці 1 наведені арифметичні операції, використовувані в мові СІ.
Таблиця 1
Знак операції | Виконання дії |
+ | Додавання |
- | Віднімання |
* | Множення |
/ | Розподіл |
% | Розподіл по модулю |
Результатом розподілу по модулю є залишок від ділення. Наприклад, якщо b = 5, c = 2, то при виконанні операції
а = b% c,
змінна а отримає значення 1.
Широке поширення знаходять також вирази з ще однією нетрадиційної терпарной операцією?:. У вираженні
у = х? а: b,
у = а, якщо х не дорівнює нулю, і в = b, якщо х дорівнює нулю. Наступне вираз
у = (а> b)? a: b;
дозволяє привласнити змінній y значення більшою змінної (а чи b), тобто y = max (a, b).
У таблиці 2 наведено деякі функції, що застосовуються при програмуванні на СІ.
Таблиця 2
Математичний запис | Запис на мові СІ |
| X | | int abs (int X) |
| X | | float fabs (float X) |
arccos X | double acos (double X) |
arcsin X | double asin (double X) |
arctg X | double atan (double X) |
cos X | double cos (double X) |
sin X | double sin (double X) |
tg X | double tan (double X) |
e X | double exp (double X) |
ln X | double log (double X) |
log X | double log10 (double X) |
√ X | double sqrt (double X) |
X Y | double pow (double X, double Y) |
Перед аргументом і функцією вказаний допустимий тип (при програмуванні цей запис типу опускається).
У програмах на мові СІ важлива роль відводиться коментарям, які підвищують наочність і зручність читання програм. Вони можуть бути записані в будь-якому місці програми і обрамляються символами / * і * /.
Розглянемо приклад програми мовою СІ.
Потрібно обчислити:
Для роботи з математичними функціями необхідно перед функцією main помістити рядок:
# Include <math.h>
Програма на СІ має вигляд:
# Include <stdio.h>
# Include <math.h>
main ()
{
float z, f, k; / * оголошення дійсних змінних z, f, k * /
double y, a, b, c, d, x; / * оголошення змінних y, a, b, c, d, x змінними подвійної точності * /
scanf ("% f% f% f% lf% lf", & z, & f, & k, & d, & x) / * введення з клавіатури змінних z, f, k, d, x * /
a = log (x) + (z + f) / k;
b = sin (x) + tan (x);
c = pow (d + exp (x), 1. / 5);
y = (a + b) / c;
printf ("% lf% lf% ef% lf", a, b, c, y) / * висновок на екран значень змінних a, b, c, y * /
}
Слід звернути увагу на те, що при обчисленні змінної с, вираз, що стоїть в правій частині, представлено як 5 √ (d + e x), тому застосована функція pow. Ще одне зауваження. Слід обережно підходити до поділу цілих чисел. Якщо обидва операнди цілі, то результат теж буде цілим, а дробова частина відкидається. таким чином, при виконанні операції 1 / 5, результат буде дорівнює нулю. Для того щоб зберегти дробову частину, хоча б один з операндів має бути речовим. Це умова виконана при обчисленні 1. / 5.
З таблиці 3 взяти завдання за варіантом і написати програму для обчислення виразу мовою СІ.
Таблиця 3
№ варіанту | Завдання
| Вихідні дані
|
|
| x = 4,5 y = 8,5 i = 3 j = 6 |
|
| n = 10,2 x = 4,3 i = 5 m = 2 |
|
| m = 8,1 w = 4,2 x = 10 y = 4 |
|
| t = 4,7 z = 0,8 p = 6,2 k = - 4 m = 6 |
|
| t = 4,1 p = 3,2 w = 8,7 j = 3 i = 7 |
|
| x = 5,7 y = 1,9 k = 8 m = 2 |
|
| m = 5,6 n = 9,4 i = 4 j = 9 |
|
| q = 1,7 p = 2,3 i = 9 j = 4 |
|
| n = 2,6 m = 3,7 p = 6 k = 2 |
|
| t = 1,1 p = 2,4 k = 4 i = 5 |
|
| x = 3,7 y = 2,1 i = 3 j = 4
|
|
| t = 1,5 p = 4,8 i = 2 m = 6 |
|
| z = 2,4 m = 5,8 n = 4 j = 5 |
|
| x = 9,5 y = 3,6 j = 2 i = 5 |
|
| x = 6,4 y = 1,7 k = 5 m = 7 |
Література
Подбельський В.В. Мова Cu + +: Навчальний посібник. - М.: Фінанси і статистика, 1995, - 560 с.
Страуструп Б. Мова програмування Сг + +. - М.: Радіо і зв'язок, 1991. - 352 стор
Собоцінскій В.В. Практичний курс Turbo Cu + +. Основи об'ктно-орієнтованого програмування. - М.: Світ, 1993. - 236 с.
Романов В.Ю. Програмування на мові Cu + +. Практичний підхід. - М.: компьтер, 1993. - 160 с.
Уінер Р. Мова турбо Cu. - М.: Світ, 1991. - 384 с.
Юлін В.А., Булатова І.Р. Запрошення до Cu. - Мн.: Вищ. Шк., 1990, - 224 с.
Котлинського Г.П., Галиновський О.І. Програмування на мові Cu. -Мн.: Вищ. Шк., 1991. - 156 с.