Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C лекції / 2.Вирази. Оператори вводувиводу, розгалуження.docx
Скачиваний:
34
Добавлен:
05.03.2016
Размер:
76.94 Кб
Скачать

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(), яка дає змогу затримати на екрані результати виконання програми, доки не буде натиснута довільна клавіша на клавіатурі.