ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.12.2021
Просмотров: 282
Скачиваний: 3
Лекція 1. Вступ
Мова програмування Сі - могутній і професійний засіб як серед програмістів, так і серед любителів. Вона була створена в 1972 році співробітником фірми Bell Denіcom Pіttі, коли вони створювали операційну систему UNIX.
Більшість мов програмування націлено на те,щоб бути корисними, але при цьому їх розробники переслідували і іншу мету. Головна мета розробки мови програмування мови Паскаль полягає в тому, щоб забеспечити міцну основу для викладання правильних (вірних) принципів програмування.З іншого боку, мова програмування BASIC розроблялася так, щоб бути схожою на англійську мову, для того, щоб її могли вивчати студенти, не знайомі з компютерами. А ось мета розробки мови програмування Сі полягає в створенні інструментального засобу, призначеного для програмістів. Вона і привела до того, що Сі стала однією з кращих мов програмування нашого часу.
Структурні особливості мови програмування Сі.
Мова Сі – сучасний програмний засіб. Вона побудована так, що дозволяє користувачам природженим шляхом застосувати програмування “зверху-вниз”, структурний підхід і модульне проектування програми.
Для мови Сі характерна досить висока ефективнісь. Програми на Сі компактні і швидко виконуються. Фактично мова Сі має такі прекрасні можливості керування, які звичайно асоціюються з мовою асемблера. Програми на Сі можна налагоджувати на максимальну швидкість виконання або на економне використання памяті.
Мова Сі є переносимою мовою. Тобто, це означає, що програми на мові Сі, написані для однієї операційной системи, можуть виконуватись і в інших операційних системах з невеликими змінами в них, або взагалі без них. Створені компілятори мови Сі приблизно для 40 операційних систем, починаючи з систем для 8-бітових мікропроцесорів і закінчуючи системами для супер комп‘ютерів brey. Але треба відмітити, що частини програм, написані спеціально для роботи з окремими апаратними пристроями-такими, як спеціальні можливості Windows або Sуstem 7.1 для Macintosh, є, як правило, переносимими.
Мова Сі є потужною і гнучкою. Наприклад, більша частина потужної сучасної операційної системи Unix, написана на мові Сі. Також вона була використана для написання компіляторів на мовах APL, LIPS, PASCAL, LOGO, BASIC.
Програми на Сі використовувались для вирішення фізичних і інертних задач, а також для створення спеціальних мультикаційних ефектів в кінофільмах, наприклад, в фільмі “Повернення Джерал”.
Мова Сі менш сувора, чим мова Паскаль в стилі обмеження свободи дій програмістів. З одного боку, ця гнучкісь є перевагою, а з іншого – приховує в собі небезпеку. Можна допустити таку помилку, яка не можлива в інших мовах. Тому мова Сі накладає на програмістів більше відповідальності. Як зазначив один з письменників в жанрі компютерної літератури: ”Плата за свободу полягає в необхідності бути завжди уважним.”
Використання мови Сі . 7 етапів для створення програми:
-
Визначення мети складання програми:
На цьому етапі потрібно усвідомлювати, що ми повинні отримати в загальних термінах, а не в термінах мови Сі.
-
Створення проекту програми.
Визначають, як програма буде робити. Який інтерфейс, як вона побудована, звідки будуть взяті дані і методи їх обробки.
-
Створення програмного коду.
Тобто отримата блок схема повинна бути записана на мові Сі в вигляді файлу початкового кода. Рекомендується використовувати коментарі, для пояснень дій в програмі.
4. Компіляція початкового кода.
Виконується за допомогою компоновщика, який створює об’єктний.
-
Виконання програми.
Використовують команди інтегрованого середовища редактора.
-
Перевірка і відклагодження програми.
-
Супроводження і модернізація програми.
Структура програми на мові Сі.
На початку програми записуються деякі команди процесора, які включають файли. Синтаксис їх використання такий:
#include < file.h >
#include < file.h >
#include < file.h >
Треба звернути увагу на те, що така директива препроцесора не має в кінці ; .
Препроцесором вважається корисний помічник, який переглядає програму до компілятора і замінює символічні абреавіатури в програмі на відповідні директиви. Він шукає файли, які необхідні для програми і може змінити умови компіляції. Використання таких директив призводить до того, що препроцесор підставе на місце цих директив тексти файлів, які перераховані в кутових дужках < >.
Всі файли мають розширення .h.(від слова header - файли). Якщо даний файл в цьому розділі буде відсутній, то препроцесор видає повідомлення про помилку, яка є дуже типовою для початківців < Unable to open include file <file.h.>. В цьому випадку достатньо перевірити не тільки наявність header – файла в відповідній директорії, але і впевнитись в тому, що опція Options\Direktories дійсно відповідає спеціальному розділу, де містяться файли включення.
Самим поширеним у початківців є файл studio.h. В ньому оголошуються бібліотечні функції введення – виведення і подаються деякі стандартні визначення.
В мові Сі будь яка програма складається з однієї аба більше функцій. Різним функціям можна давати які завгодно імена. Серед них є особлива – mаin; виконання будь якої програми починається з функції main.
Одним з механізмів взаємодії між функціями є аргументи. Список аргументів в круглих дужках йде після назви функції; тому список виглядає так : ( ). Дужки {i} обрамляють початок і кінець програми; потім ми побачимо, що їх використовують і для іншого.
Тіло програми складається з послідовності інструкцій (команд), які пропонують дії на визначеному кроці її виконання.
Такими діями можуть бути: присвоєння значення змінній, перевірка умови. Інструкції складаються з операндів та операторів. Для визначення останніх використовують зарезервовані слова. Їх назва фіксована і вони не можуть бути використані для іншого.
В Сі кожний оператор, а також кожен рядок зі зверненням до функції закінчується ; . Виключення складають команди препроцесора і імена функції, які стоять на початку (крім mаin ) зверніть увагу на те, що { } тільки обрамлять оператори, і крапку з комою після них ставити не треба.
Основні визначення мови Сі.
Алфавіт мови складається з латинських великих і малих букв, які мають різні коди, тому prog і Prog не одне й те ж, цифр і спеціальних знаків: ., ,, ‘, :.
Спеціальні символи (кожен окремо, або в комбінації з іншими) дозволяють задавати оператори і знаки операцій, серед яких найбільш часто використовують такі:
1) = оператор присвоювання. Допускається вираз а = b = с. Тут змінні а і в отримують значення змінної с.
2) +, -, *, /.
Допустимі операції
a + = b а = а + b
a - = b а = а – b
a * = b а = а * b
a / = b а = а / b
3) >, <, = =, > = , < =, ! = - не дорівнює, = = дорівнює
Наприклад : 3 > 2, 4! = 5, 2 < = 2, 6 = = 6 – істинні
4) % - знак операції ділення по модулю;
5) // або / *, * / - використовується для коментарів ;
6) + + - знаки операції декремента – збільшення на 1;
7) - - − знаки операції інкремента – зменшення на 1;
+ + а – збільшення змінної а на 1 до використання змінної в виразах;
а + + - збільшення змінної а на 1 після використання цієї змінної в виразах;
-- а і а -- - аналогічно.
8) && - “ і ”; | | – або; ! – ні;
9) &, |, ^, < <, > >, = інверсія знака порозрядних логічних операцій;
10) ? : - тернарної операції;
11) *, & - знаки адресних операцій;
12) . , - для використання в записах або структурах.
13) [ ] – для запису індексів масивів ;
14) ( ) – для функцій та встановлення черт використання операцій;
15) “ – лапки, для виведення символьної інформації на дисплей;
16) ‘ – апостроф, для визначення констант;
В подальшому будуть розглянуті всі принципи використання і будуть дані пояснення. Ідентифікатор використовують в якості назви об’єкту (функції, змінної, константи). Назва ідентифікатора повинна задовольняти такі умови:
-
починаються з букви латинського алфавіту а....z, або з символа прідкресленим _, який отримуємо натискуючи А15.
Як вводити і виводити інформацію.
Розглянемо чотири функції: printf, scanf, putchar, i setchar . Перші дві призначаютьсядля реалізації форматного введення і виведення даних.
Функція printf формально описується таким чином:
Printf(„керуючий рядок”, аргумент1, аргумент2...)
Керуючий рядок містить об`єкти трьох типів: звичайні символи, які просто виводяться на екран дисплею (копіюються в стандартий вихідний потік); специфікація перетворення, кожна з яких викликає виведення на екран значення чергового елемента зі списку і керуючі символьні константи.
Кожна специфікація перетворення починається зі знака % і закінчується деяким символом, який задає перетворення. Між знаком % і символом перетворення може бути: знак мінус, який вказує, що перетворений параметр потрібно вирівняти вліво в своєму полі; рядок цифр, який задає мінімальний розмір поля; крапка, яка відокремлює розмір поля від рядка цифр; рядок цифр, який задає максимальне число символів, які треба ввести або кількість цифр, які потрібно вивести справа від десяткової крапки в значеннях float або double.
Далі записується один із символів перетворення :
d – значенням аргумента є дійсне ціле число;
o - значенням аргумента є 8-не ціле число;
х – значенням аргумента є 16-не число;
с – значенням аргумента є символ;
s – значенням аргумента є рядок символів (виводяться до ознаки кінця рядка);
е – значенням аргумента є дійсне десяткове число в експотенційній формі;
f – значенням аргументя є дійсне десяткове число з плаваючою крапкою;
q – використовується як %е або %f і вилучає вивід несуттєвих нулів;
р – значенням аргумента є вказівник (адреса)
Якщо після знака % записаний не символ перетворення, то він виводиться на екран.
Фунція printf використовує керуючий рядок для того, щоб скільки всього аргументів і їх типи. Аргументами можуть бути змінні, константи, вирази, виклики функцій, головне, щоб їх значення відповідали заданій специфікації.
При наявності помилок (наприклад в кількості аргументів або типів перетворення ) результати будуть невірними.
Серед керуючих символьних констант найбільш частіше використовуються такі:
\a – для короткочасноїподачі звукового сигналу;
\b – для переведення курсора вліво на одну позицію;
\n – для перехода на новий рядок;
\r – для повернення каретки або переведення курсора в початок поточного рядку;
\t – для горизонтальної табуляції;
\v – для вертикальної табуляції;
Наприклад в результаті запису інструкції виклику функції:
Printf( ” \t ЕОМ \n % d\n”, i);
Спочатку виконується горизонтальна табуляція (\t), тобто курсор зміститься з початку краю екрана, потім на екран виведеться на екран слово ЕОМ, після чого курсор перейде в початок нового рядка (\n), потім буде виведено ціле значення і по формату d і на закінчення курсор перейде в початок нового рядка (\n).
Приклад : на малюнку показано використання функції printf при умові, що і = 123456 (тип long ) та j = 127 ( тип int) .
Printf ( ’’ \t і = %ld ; \n j = %d \n ’’, і , j );
Р ядок k і = 1 2 3 4 5 6 ;
Р ядок k + 1 j = 127
Р ядок k + 2
Функція scanf формально записується таким чином:
Scanf (” керуючий рядок ”, аргумент 1, аргумент 2, ....)
Аргументом Scanf повинен бути покажчик на відповідні значення (перед імнем змінної записується символ &). Призначення покажчиківрозглянемо потім.
Керуючий рядок містить специфікації перетворення і використовується для встановлення кількості і типів аргументів. В нього можуть входити : проміжки, символи табуляції і перехода на новий рядок (всі вони ігноруються); специфікації перетворення, які складаються із знака % або символа * ( заборона присвоєння ) або можливо числа, що задає максимальний розмір поля.
На рисунку показано, як інтерпретується символ & перед іменем і змінної. Комбінація &і розуміється як адреса комірки, де зберігається значення і (покажчик на і).
Адреса і
-
&і
Пам’ять
З начення і
Scanf розташовує за адресою &і введене значення. В функції Scanf допускаються деякі символи пертворення функції printf.
Наприклад:
d - на вході очікується десяткове ціле число;
o - на вході очікується 8-ве ціле число;
x - на вході очікується 16-ве число;
u - на вході очікується поява беззнакового числа;
c - на вході очікується поява одиночного символа;
s - на вході очікується поява рядка символів;
f - на вході очікується поява дійсного числа;
p - на вході очікується поява покажчика (адреси) у вигляді 16кового числа;
Перед символами d, o , x , f може стояти буква l. В перших трьох випадках відповідні змінні повинні мати тип long, а в останньому – double. Приклад демонструє деякі можливості використання функції scanf, а також відповідність аргументів символам специфікації. Біля останнього аргумента l не записаний знак & тому, що рядок є масивом символів , оголошений як charl [20];
рядок
Дійсне число
Scanf ( ’’ % d % f % c % s ’’ , і , j , & k, l )
Дес дійс сим ряди
Дес.
символ
Число 20 в квадратних дужках після ідентифікатора l означає розмір масиву символів. В мові Сі ім’я масиву є покажчиком ( адресою першого елемента в масиві).
Оскільки це так то знак & перед ідентифікатором l не потрібен. Самий простий механізм введення – читання по одному символу з клавіатури за допомогою функції getchar. Інструкція вигляду c = getchar (); дозволяє присвоїти змінній с черговий вводимий символ . Звернення putchar (c), видає значення змінної с ( а цим значеннм є теж символ ) в стандартний вихідний потік ( на екран дисплея). Змінна с повинна мати тип int або char. Самостійно: модифікатор * і його використання з функціями printf() і scanf ()
Приклади використання форматного введення - виведення
#include stdio.h
main ()
{
char s [ ]; /* об'ява рядка символів */
float a = 86.531;
printf ( ” % s \n ”, ” Кафедра ПЗ ”); /* виведення рядка символів */
printf ( ” ввести рядок символів \n”)
scanf ( ” % ”, s);
printf ( ” _ _ _ 20 s ; %20s \n”, s ); /* заданий мінімальний розмір поля (20 символів)*/
printf ( ” (_ _ _ -20s ) ; % 20s \n ” , s); /* знак ”-” вказує, що рядок s буде виводитись починаючи з ліво мітки поля (вирівняння зліва)*/
}
Кафедра ПЗ
Ввести рядок символів
ВДТУ
( _ _ _ 20 s) ВДТУ
( _ _ _ -20s) ВДТУ
printf ( ” ввести рядок символів \n”);
scanf ( ” %3s \n ”, s); /* з рядка буде введено 3 символа */
printf ( ” c = %”, c );
результат:
ввести рядок символів
Вінниця
С = Він
В приведених прикладах виводиться підказка на екран і потім переводиться курсор \n за допомогою.
Для аналогічної мети в Сі є функція puts, яка виконує те ж саме, але без символа \n . Друга функція gets дозволяє вводити рядок символів. Приклад використання:
#include stdio.h
main ()
{
char q [40]; /*об‘ява рядка символів */
puts (” введіть рядок символів ”)
puts (q); /* введення рядка символів, який може містити проміжки */
puts (q); /* виведення рядка символів */
}
введіть рядок символів
Привіт з Вінниці