Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

О.О.П / ооп / 4_кол / Лекції / ООП (3.Лінійні програми)

.doc
Скачиваний:
23
Добавлен:
30.05.2020
Размер:
294.91 Кб
Скачать

Лекція (2 ч)

Тема: Лінійні програми на Сі++

План:

  1. Структура програми

  2. Засоби мови для написання лінійної програми

  3. Форматований вивід на екран.

  4. Форматоване введення з клавіатури.

  5. Потокове уведення-виведення в Сі++

  1. Структура програми. Загальна структура програми на Сі++ наступна:

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

визначення_функції_1

визначення_функції_2

визначення_функції_N

Серед функцій обов'язково є присутньою головна функція з ім'ям main. Проста програма містить тільки головну функцію і має наступну структуру:

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

void main()

{ визначення_об'єктів;

виконувані_оператори;

}

Розглянемо усі необхідні засоби мови для складання лінійних обчислювальних програм. В якості опорного прикладу розглянемо програму для вичислення площі трикутника за формулою Герона.

Приклад 1. Дано: а, b, з — сторони трикутника. Вичислити S — площа трикутника. По формулі Герона :

де р — півпериметр трикутника.

#ftinclude <stdio.h>

#include <math.h>

void main ()

{float a, b, c, p, s;

printf("\na="); scanf("%f",&a);

printf("\nb="); scanf("%f",&b);

printf("\nc="); scanf("%f",&c);

p=(a+b+c)/2;

s=sqrt (р(p - c));

printf("Площадь треугольника=%: е", s);

}

Розберемося детальніше в усіх елементах цієї програми. Як вже було сказано, програма складається з однієї головної функції із стандартним ім'ям main. Слово void означає відсутність якого-небудь повертаного цією функцією результату, а порожні дужки — відсутність у неї аргументів. Усе, що слід після заголовка функції і поміщено у фігурні дужки, можна назвати тілом функції. Перший рядок — оголошення використовуваних змінних. Усі вони плаваючого типу double. Оголошення змінних закінчується крапкою з комою.

Подальша частина програми — виконувані оператори. Серед них оператори виводу на екран, введення даних з клавіатури, оператори привласнення.

Поняття «оператор» в Сі трактуючи таким чином: будь-яке вираження, після якого стоїть крапка з комою, сприймається компілятором як окремий оператор. Оператор визначає закінчену дію на черговому кроці виконання програми.

З точки зору даного вище визначення наступна конструкція в програмі є оператором:

i++;

Його називають оператором-вираженням

Якщо обчислення вираження закінчується привласненням, то його можна назвати оператором привласнення. У даній програмі є присутніми два оператори привласнення : обчислення півпериметра (р) і обчислення площі трикутника (s).

У вираженні для обчислення площі використовується бібліотечна функція sqrt() — квадратний корінь (як і в Паскале). Ця функція відноситься до бібліотеки математичних функцій. Для підключення цієї бібліотеки до нашої програми використовується директива препроцесора #include <math.h>. Тут math.h — ім'я заголовного файлу цієї бібліотеки. У таблиці. 3 дані описи деяких найчастіше використовуваних функцій математичної бібліотеки Сі.

Таблиця 3

Математичні функції (заголовний файл math.h)

У даній програмі оператори printf (...); і scanf (...); реалізують відповідно вивід на екран і введення початкових даних з клавіатури. Вони здійснюють звернення до відповідних функцій стандартної бібліотеки введення-виведення Сі, заголовний файл якої має ім'я stdio.h.

Форматований вивід на екран

Оператор виклику функції printf() має наступну структуру:

printf(форматний рядок, список_аргументів);

Форматний рядок обмежений подвійними лапками (тобто є текстовою константою) і може включати довільний текст, символи, що управляють, і специфікатори формату. Список аргументів може бути відсутнім або ж складатися з виразів, значення яких виводяться на екран (у окремому випадку з констант і змінних).

У прикладі 1 оператор printf ("\nа="); містить текст ("а=") і символи ("\n"), що управляють. Текст виводиться на екран в тому вигляді, в якому він записаний. Символи, що управляють, впливають на розташування на екрані знаків, що виводяться. В результаті виконання цього оператора на екран з нового рядка виведуться символи а=.

Ознакою символу, що управляє, є значок \. Нижче наводиться їх список:

Оператор printf ("Площа трекутника=% f", s); містить усі види параметрів функції printf. Список аргументів складається з однієї змінної s. Її значення виводиться на екран. Пара символів %f є специфікацією формату значення змінної s, що виводиться. Значок % — ознака формату, а буква f вказує на те, що число, що виводиться, має речовий (плаваючий) тип і виводиться на екран у формі з фіксованою точкою

Наприклад, якщо в результаті обчислень змінна s отримає значення 32,435621, то на екран виведеться:

Площа трикутника=32.435621

Специфікатор формату визначає форму зовнішнього представлення величини, що виводиться. Ось деякі специфікатори формату :

Наприклад, після виконання наступних операторів

на екран виведеться рядок:

m=84.299999 k=-12 p=3.21500e+01

Тут двічі використовуваний символ табуляції , що управляє, відокремив один від одного значення, що виводилися. З цього прикладу видно, що відповідність між специфікаторами формату і елементами списку аргументів встановлюється в порядку їх запису зліва направо.

До специфікатора формату можуть бути додані числові параметри: ширина поля і точність. Ширина — це число позицій, що відводяться на екрані під величину, а точність, — число позицій під дробову частину (після точки). Параметри записуються між значком % і символом формату і відділяються один від одного точкою. Внесемо зміни в оператор виводу для розглянутого вище прикладу.

В результаті на екрані отримаємо:

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

До специфікаторів формату можуть бути додані модифікатори в наступних варіантах:

Форматоване введення з клавіатури

Оператор виклику функції scanf() має наступну структуру:

scanf(форматний_рядок, список_аргументів);

Ця функція здійснює читання символів, що вводяться з клавіатури, і перетворення їх у внутрішнє представлення відповідно до типу величин. У функції scanf() форматний рядок і список аргументів є присутніми обов'язково. У програмі з прикладу 1 є оператор:

scanf("%f",&a);

Тут "%f" — форматний рядок; — список аргументів, що складається з одного елементу. Цей оператор проводить введення числового значення в змінну а.

Символьну послідовність, що вводиться з клавіатури і сприйману функцією scanf(), прийнято називати вхідним потоком. Функція scanf() розділяє цей потік на окремі величини, що вводяться, інтерпретує їх відповідно до вказаного типу і формату і привласнює змінним, що містяться в списку аргументів.

Список аргументів — це перелік змінних, що вводяться, причому перед ім'ям кожної змінної ставиться значок &. Це знак операції «узяття адреси змінною». Детальніше сенс цієї дії буде пояснений пізніше, а доки приймемо це правило формально.

Форматний рядок полягає в лапки (як і для printf) і складається зі списку специфікацій. Кожна специфікація розпочинається зі знаку %, після якого можуть слідувати

*ширина поля модифікатор специфікатор

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

d — для цілих десяткових чисел (тип int);

u — для цілих десяткових чисел без знаку (тип unsigned int);

f — для дійсних чисел (тип float) у формі з фіксованою точкою;

е — для дійсних чисел (тип float) у формі з плаваючою точкою.

Зірочка в специфікації дозволяє пропустити у вхідному потоці певну кількість символів. Ширина поля — ціле позитивне число, що дозволяє визначити число символів з вхідного потоку, що належать значенню відповідної змінної, що вводиться. Як і в специфікаціях виводу для функції printf(), в специфікаціях введення функції scanf() допустиме використання модифікаторів h, l, L. Вони застосовуються при введенні значень модифікованих типів :

hd — для введення значень типу short int;

ld — для введення значень типу long int;

lf, le — для введення значень типу double у формі з фіксованою і плаваючою точкою;

Lf, Le — для введення значень типу long double у формі з фіксованою і плаваючою точкою.

У програмі з прикладу 1 усі три величини а, b, c можна ввести одним оператором:

scanf("%f%f%f",&a,&b,&c);

Якщо послідовність введення буде такою:

5 3.2 2.4 <Enter>

те змінні отримають наступні значення: а = 5,0, b = 3,2, з = 2,4. Роздільником в потоці введення між різними значеннями може бути будь-яка кількість пропусків, а також інші пробільні символи : знак табуляції, кінець рядка. Тільки після натиснення на клавішу Enter значення, що вводяться, привласняться відповідним змінним. До цього вхідний потік поміщається у буфер клавіатури і може редагуватися.

Потокове уведення-виведення в Сі++.

Програмуючи на мові Сі++, можна користуватися засобами введення-виведення стандартної бібліотеки Сі, що підключається за допомогою заголовного файлу stdio.h, як це робилося вище. Проте в Сі++ є свої специфічні засоби введення-виводу

Це бібліотека класів, що підключається до програми за допомогою файлу iostream.h. У цій бібліотеці визначені в якості об'єктів стандартні символьні потоки з наступними іменами:

сin — стандартний потік введення з клавіатури;

cout — стандартний потік виводу на екран.

Введення даних інтерпретується як витягання з потоку сin і привласнення значень відповідним змінним. У Сі++ визначена операція витягання із стандартного потоку, знак якої >>. Наприклад, введення значень в змінну х реалізується оператором

cin>>x;

Виведення даних інтерпретується як приміщення в стандартний потік cout значень, що виводяться. Виводитися можуть тексти, поміщені в подвійні лапки, і значення виразів. Знак операції приміщення в потік <<. Приклади використання потокового виводу :

cout<<a+b;

соut<<"\nРезультат="<<Y;

cout<<"x="<<x<<" y="<<y<<" z="<<z<<endl;

З наведених прикладів видно, що у вихідному потоці можна використовувати символи, що управляють, як і при використанні функції printf(); перед кожним елементом виводу треба ставити знак операції <<. Елемент виведення endl є так званим маніпулятором, що визначає переклад курсора на новий рядок (діє аналогічно символу \n, що управляє).

В процесі потокового введення-виводу відбувається перетворення з форми зовнішнього символьного представлення у внутрішній формат і назад. Тип даних і необхідний формат визначаються автоматично. Стандартні формати задаються спеціальними прапорами форматування, які встановлюються за допомогою функції setf(). Крім того, на формат окремих даних, що виводяться, можна впливати шляхом застосування спеціальних маніпуляторів. Тут ми детально не розбиратимемо ці питання.

Перепишемо програму з прикладу 1 у варіанті з використанням потокового введення-виведення Сі++.

Питання:

Вправи

1. При виконанні програми

           

з клавіатури була введена наступна символьна послідовність:

32.4 87 0.05 4567 2314.45 <Enter>

Як виглядатиме на екрані результат роботи програми?

2. Приведена нижче програма вирішує наступну задачу: йде k -а секунда доби. Визначити, скільки цілих годин (Н) і цілих хвилин (М) пройшло з початку доби. Наприклад, якщо k= 13257 = 3 х 36000 + 40 x 60 + 57, то H = 3, М = 40. Вивести на екран фразу: «Це...годинника...хвилин». Замість многоточий поставити вичислені значення Н і М.

Розібрати, як працює ця програма. Переписати її з використанням потокового введення-виведення Сі++.

3. Скласти програму рішення зворотної задачі по відношенню до попередньої: дана кількість годин і хвилин, що пройшли від початку доби. Визначити кількість секунд.

4. Скласти програму обчислення об'єму і площі поверхні куба по цій довжині ребра.

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

9