Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмізація та програмування.docx
Скачиваний:
84
Добавлен:
17.05.2015
Размер:
1.35 Mб
Скачать

Тема 6.

Лекція № 6.1 "Основи мови С"

План:

- Вступ (суть лекції)

- Історія мови С

- Правила формального опису синтаксису мови програмування

- Поняття про типи даних

Небагато історії

Мова програмування C + + є найбільш поширеним інструментом розробки програмних засобів як системного, так і прикладного характеру. Історію його появи пов'язують із співробітником американської фірми Bell Labs Деніс Рітчі, хоча його дітищу - мови C передували розробки та інших системних програмістів (М. Річардс - система BCPL, К. Томпсон - мову B). Поштовхом до появи різних програмних засобів, полегшували життя системних програмістів, з'явилися роботи по створенню операційної системи Unix для комп'ютера PDP-7, початі в 1969 році. Справа в тому, що тоді єдиною операційною системою великого комп'ютера GE-645, обслуговувала співробітників лабораторії, була досить громіздка багатокористуюча система Multics. К. Томпсон (до речі, один з розробників Multics) в свій час написав програму, яка моделювала рух небесних тіл. Кожен її запуск на GE-645 обходився в 75 $, а траєкторії руху видавалися в табличному вигляді.

І тоді невелика група співробітників, очолювана К. Томпсоном, вирішила створити більш зручну однокористуючу систему на маленькому покинутому комп'ютері PDP-7 з дисплеєм. До складу цієї групи входив і Д. Рітчі. Система Unix стала дуже популярною серед співробітників лабораторії, тому вона суттєво спрощувала процес проходження завдань і не вимагала від користувачів знання численних директив системи Multics. У 1970 році Д. Рітчі допоміг перенести Unix на більш потужний комп'ютер PDP-11. У процесі цієї роботи став у нагоді набір макрокоманд на мові асемблера, який спрощував програмування численних процедур. Цей набір і був покладений в основу мови C, який вдало поєднував специфіку машинних команд з елементами мови високого рівня. У 1973 році Д. Рітчі і К. Томпсон переписали ядро ​​операційної системи Unix на мову C (до цього всі програми були написані на асемблері).

З 1974 року система Unix разом з вихідними текстами на мові C і компілятор цієї мови були передані ряду університетів. Найбільш важливу роль у подальшому розвитку системи Unix, що перетворилася з однокористуючої в багатокористуючу, зіграли співробітники університету Берклі. Популярність системи Unix, устоявшей до наших днів і обслуговуючої сьогодні більше 90% серверів, значною мірою сприяла і популярності мови C, компілятор якого поставлявся в складі Unix.

Наступний внесок у розвиток потужності та універсальності мови C в 1983 році вніс співробітник все тієї ж Bell Labs Бьерн Страуструп. Запропоновані ним розширення призвели до появи версії C + + (первинна назва - C з класами). Ці нововведення дозволили користувачам конструювати власні типи даних, включати в мову нові операції над такими даними, агрегувати дані з обробними їх функціями-методами, успадковувати і перевизначати методи в породжуваних класах.

Слід зазначити і істотний внесок в розвиток систем програмування на базі мов C, C + +, внесений фірмою Borland, точніше, її засновником - Філіпом Канном. Мова йде про створення інтегрованих систем розробки, в яких вдало поєдналися засоби підготовки, зберігання, налагодження та компонування програм. Вперше така середа з'явилася в системі Turbo Pascal, а після її успішного просування аналогічна середу була реалізована в системі Turbo C. Все більш пізні системи програмування в тій чи іншій мірі запозичили основні ідеї Ф. Канна.

В даний час досить інтенсивно експлуатуються декілька систем програмування на базі мови C + +. У середовищі професійних розробок найбільшою популярністю користуються різні версії Visual C + + фірми Microsoft. Вони дозволяють створювати досить якісні за обсягом і продуктивності додатка. У вузівських організаціях перевагу віддають продукції фірми Borland - Borland C + + (версії 3.1, 4, 5), візуальним середах Borland C + + Builder. Ці системи більш прості в освоєнні, хоча якість виробленої ними продукції залишає бажати кращого. Серед професіоналів високі оцінки можна почути на адресу компіляторів фірми Intel. Кілька років тому досить багато користувачів працювало з різними версіями фірми Symantec.

Гідності мови Сі

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

кожен об'єкт у цьому мові програмування належить точно жодного з існуючих в цій мові програмування типом даних;

перетворення типів здійснюється тільки шляхом перетворення значення з одного типу в інший;

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

Експерименти показали, що мови програмування з сильною типізацією сприяють збільшенню ясності і надійності програм. Механізм трактування подання значення як даних різних типів призводить до того, що використовують його програми не володіють ні надійністю, ні мобільністю. У мові Сі допускається неявне перетворення типів для всіх базових типів і покажчиків. Однак Мобільний Транслятор з мови Сі виводить попередження про кожного хто зустрівся у програмі у випадку неявного перетворення типів, в якому бере участь показуючий.

Мова Сі швидко стає одним з найбільш важливих і популярних мов програмування. Її використання дедалі більше розширюється, оскільки часто програмісти володіють мовою Сі всіма іншими мовами після першого знайомства з ними. Зараз ми згадаємо лише деякі гідності Сі.

Сі - сучасна мова. Він включає в себе ті керуючі конструкції, які рекомендуються теоретичним і практичним програмуванням. Його структура спонукає програміста використовувати в своїй роботі спадний проектування, структурне програмування і поступову розробку модулів. Результатом такого підходу є надійна і читана програма.

Сі - ефективниа мова. Його структура дозволяє найкращим чином використовувати можливості сучасних ЕОМ. Написані на мові Сі програми зазвичай відрізняються компактністю і швидкістю виконання.

Сі - потужна і гнучка мова. Наприклад, велика частина потужною і гнучкою OC UNIX написана на мові Сі. Мова йде про компілятори та інтерпретатори інших мов, таких, як Фортран, АПЛ, Паскаль, Лісп, Лого та Бейсик. Крім того, програми, написані на Сі, використовуються для рішення фізичних і технічних проблем, комп'ютерної графіки і навіть виробництва мультиплікаційних фільмів.

Сі - володіє рядом конструкцій управління, зазвичай асоціюються з асемблера.

Сі - зручна мова. Вон досить структурована, щоб підтримувати гарний стиль програмування, і разом з тим не пов'язує обмеженнями.

Структура програми і правила написання

Розглянемо просту програму на мові Сі:

# Include <stdio.h>

int main () / * проста програма * /

{

int courses;

courses = 30;

printf ("Скільки навчальних курсів на сайті");

printf ("www.intuit.ru? \ n");

printf ("Більш% d. Але буде ще більше! \ n", courses);

return 0;

}

Давайте виконаємо цю програму. Спочатку використовуємо текстовий редактор для створення файлу, що містить текст програми. Цього файлу потрібно привласнити якесь ім'я. Припустимо - intuit.c. Виконаємо компіляцію програми. Після запуску програми, за умови відсутності синтаксичних помилок, результат повинен виглядати наступним чином:

Скільки навчальних курсів на сайті www.intuit.ru?

 Більше 30. Але буде ще більше!

Пояснення до програми

Ми виконали два перегляду тексту програми: під час першого перегляду пояснимо сенс кожного рядка, а під час другого - розглянемо деталі.

Перший перегляд

# Include <stdio.h> - включення іншого файлу.

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

main () - ім'я функції

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

/ * Проста програма * / - коментар

/ *, * / - Відкриваюча і закриваюча дужки багатострокового коментарю.

Коментарі - це примітки, що допомагають зрозуміти сенс програми. Вони призначені для читача, і ігноруються компілятором.

{- Початок тіла функції

Відкриваюча фігурна дужка відзначає початок послідовності операторів - тіло, або визначення, функції. Кінець визначення наголошується закриваючою фігурною дужкою}.

int courses; - оператор опису

За допомогою такого оператора ми оголошуємо, що будемо використовувати в програмі змінну courses, яка приймає цілі (int) значення.

courses = 30; - оператор присвоювання

Цей оператор служить для присвоювання змінної courses значення 30.

printf ("Скільки навчальних курсів на сайті?"); - оператор виводу на друк

З його допомогою виводиться на друк фраза, укладена в лапки:

Скільки навчальних курсів на сайті?

printf ("www.intuit.ru? \ n"); - ще один оператор виводу на друк. Цей оператор додає слова www.intuit.ru? в кінець останньої друкованої фрази. Комбінація символів \ n вказує компілятору на початок нового рядка.

printf ("Більш% d. Але буде ще більше! \ n", courses);

Цей оператор виводить на друк значення змінної courses, рівне 30, що міститься в лапках. Символи% d вказують компілятору, де і в якій формі друкувати значення змінної courses.

} - Кінець

Програма завершується закриваючою фігурною дужкою.

Другий перегляд

# Include <stdio.h>

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

standard input / output header - заголовок стандартного вводу-виводу.

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

Рядок "# include <stdio.h>" навіть не є оператором мови Сі. Символ # вказує, що вона повинна бути оброблена "препроцесором" мови Сі. Препроцесор здійснює деяку попередню обробку тексту програми перед початком компіляції.

main ()

Програма, написана на мові Сі, завжди починає виконуватися з функції, званої main (). Дужки вказують на те, що main () - ім'я функції.

Функції - це основні модулі програми, написані на мові Сі. В круглих дужках в загальному випадку міститься інформація, що передається цієї функції. У нашому випадку передача інформації відсутня і, отже, в дужках нічого не міститься.

Файл, що містить програму, може мати будь-яке ім'я з тим обмеженням, що воно має задовольняти системним угодами, і закінчуватися символом с. Наприклад, game.c.

/ * Проста програма * /

Коментарі полегшують процес розуміння програми. Довгий коментар може поміщатися на окремому рядку або навіть займати кілька рядків. Все, що знаходиться між символом, що вказує на початок коментарю / *, і символом, що вказує на його кінець * /, ігнорується компілятором.

{,}

Фігурні дужки {} відзначають початок і кінець тіла функції.

int courses;

Це оператор опису змінної. У нашій програмі в тілі функції використовується змінна courses, і за допомогою слова int оголошується, що змінна courses приймає цілі значення. Крапка з комою в кінці рядка вказує на те, що в ній міститься оператор мови Сі, причому цей символ є частиною оператора, а не роздільником операторів. int служить ключовим словом, визначальним один з основних типів даних мови Сі.

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

У мові Сі всі змінні повинні бути оголошені. Це означає, що ми повинні привести список всіх використовуваних змінних і вказати тип кожної з них.

Ім'я змінної потрібно давати осмислено. Слід враховувати що конкретні реалізації компіляторів обмежують довжину імені змінних.

Ідентифікатор змінної - ім'я змінної. Для позначення імені змінної дозволяється використовувати рядкові і прописні букви, цифри та символ підкреслення, що вважається літерою. Першим символом повинна бути обов'язково буква.

Наприклад, courses, cat_1, _total - правильні ідентифікатори, а $ courses *, 1cat - неправильні.

Змінні можна описувати в міру необхідності, але краще розміщувати оператори оголошення змінних на початку програми. Будь-яка програма, написана на мові Сі, не буде виконуватися, якщо не описати всі використовувані змінні.

courses = 30;

Оператор присвоювання є одним з основних засобів мови. Наведену рядок програми можна інтерпретувати так: привласнити змінної courses значення 30. При описі змінної courses була виділена комірка пам'яті, і тільки тепер в результаті виконання оператора присвоювання змінна отримує своє значення. При бажанні ми могли б присвоїти їй інше значення, тому ім'я courses і позначає змінну.

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

Символи \ n служать директивою почати новий рядок на пристрої виводу. Комбінація \ n представляє один символ, званий "новий рядок". Його сенс формулюється так: почати виведення нового рядка з самої лівої колонки. Символ "новий рядок" служить одним із прикладів того, що називається "керуючої послідовністю". Керуюча послідовність починається з "\".

Базові типи даних

Фундаментальні об'єкти даних, з якими працює програма, - це змінні і константи [2.1]. Використовувані в програмі змінні перераховуються в оголошеннях або деклараціях, в яких вказується їх тип, а також іноді їх початкові значення.

З іменами змінних зв'язується тип даних, який контролюється компілятором і для якого виділяється певна кількість байтів пам'яті [2.1]. Імена змінних повинні починатися з букви (латинського алфавіту) або символу підкреслення (наприклад, _aza ), за яким можуть йти будь-які комбінації букв у будь-якому регістрі (заголовні або рядкові), символи підкреслення або цифри 0-9. У мові Сі є відмінність між заголовними і рядковими буквами. Тому змінна World відрізнятиметься від змінної world і тому подібне. При цьому у визначенні змінної не дозволяється символ пропуску (пропусків) і деякі інші символи, наприклад $... .

Стандарт С89 визначає п'ять базових типів даних [2.4]:

int - цілочисловий тип, ціле число;

float - дійсне число одинарної точності з плаваючою точкою;

double - дійсне число подвійної точності з плаваючою точкою;

char - символьний тип для визначення одного символу;

void - тип без значення.

Крім того, існують модифікатори, які можуть застосовуватися до цих базових типів . Приведемо модифікатори базових типів даних. До них відносяться наступні специфікатори, попередні їм в тексті програми [2.4]:

signed, unsigned, long, short

Таблиця 2.1. Типи даних мови Сі

Тип даних

Типовий розмір у бітах

Мінімально допустимий діапазон значень

[signed] char

8 (чи 1 байт)

від - 127 до 127

unsigned char

8

від 0 до 255

[signed] int = short int

16 чи 32

від - 32767 до 32767

unsigned int

16 чи 32

від 0 до 65535

long int

32

від - 2147483647 до 2147483647

float

32

від 1Е-37 до 1Е+37 (з точністю не менше 6 значущих десяткових цифр)

double

64

від 1Е-37 до 1Е+37 (з точністю не менше 10 значущих десяткових цифр)

У мові Сі передбачається перетворення типів у виразах і приведення типів. Якщо у вираженні змішані різні типи літералів і змінних, то компілятор перетворить їх в один тип. По-перше, усе char і short int значення автоматично перетворяться (з розширенням "типо розміру") в тип int. Цей процес називається цілочисловим розширенням (integral promotion). По-друге, усі операнди перетворяться (також з розширенням "типорозміру") в тип найбільшого операнда. Цей процес називається розширенням типу (type promotion), причому він виконується після операційно. Наприклад, якщо один операнд має тип int, а інший - long int, то тип int розширюється в тип long int. Чи якщо хоч би один з операндів має тип double, то будь-який інший операнд приводиться до типу double. Це означає, що такі перетворення, як тип char, в тип double цілком допустимі (якщо передбачати, до чого це приведе). Після перетворення обидва операнди матимуть один і той же тип, а результат операції - тип, співпадаючий з типом операндів.

У мові Сі передбачається явне перетворення (приведення) типів. Загальна форма оператора явного приведення типу : (тип) вираження.

  1. Основи програмування на мові Cі Автори: Н.А. Калинина, Н.И. Костюкова

  2. Введення в мови програмування C і C++ Автор: Ю.Л. Кетков

  3. http://do.rksi.ru/library/courses/demo/tema 1_3.dbk

Практика.

Реалізація завдань, вирішених у вигляді блок-схем, на мові Сі (галуження) :

Дано тризначне число. Знайти суму і твір його цифр.

Дано два цілі числа: A, B. Перевірити істинність висловлювання : «Рівно одно з чисел A і B непарне».

Дано тризначне число. Перевірити істинність висловлювання : «Усі цифри цього числа різні».

Лекція 2. "Основи мови Сі (друга частина)".

  • детальний розгляд типів даних

  • змінні

  • операції і вирази

  • пріоритети операцій

  • оператори введення-виводу

  • оператор переходу

  • операції з масивами