Технологія запису алгоритмів

За допомогою

Мови програмування С

Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного

Елементи мови

Під елементами мови розумітимемо алфавіт, константи, ключові слова, ідентифікатори, коментарі.

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

Означення 3.1. Лексема – це одиниця тексту програми, яка має для компілятора самостійний зміст і не містить інших лексем.

Жодні лексеми, крім символьних рядків, не можуть продовжуватись на кількох рядках тексту програми. Коли компілятор виявляє лексему, він намагається включити до неї максимальну кількість символів. Наприклад:

int i,j,k;…i=j+++k;//це еквівалентно i=(j++)+k;

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

Алфавіт мови – це сукупність таких множин:

a великі та малі латинські літери;

a десяткові цифри;

a спеціальні символи (+, –, *, /, #, %, ^, &, *, (,), |,?,:,;);

a зображувані символи (спеціальні, яким відповідає клавіша клавіатури). Наприклад: \t – табуляція, \n – новий рядок.

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

Десяткові

<десяткове ціле>::=<цифра>{<цифра>}

Наприклад: 12345.

Вісімкові(утворюються за допомогою префікса 0)

<вісімкове ціле>::=0<вісімкова цифра>{<вісімкова цифра>}

Наприклад:

int i=023;

printf ("i=%d',i);//результат – 19.

Шістнадцяткові(утворюються за допомогою префікса 0x)

<шістнадцяткове ціле>::=0x<десяткова цифра>|

a|b|c|d|e|f|A|B|C|D|E|F {<десяткова цифра>|

a|b|c|d|e|f|A|B|C|D|E|F}

Наприклад:

int i=0x13;

printf("i=%d',i);//результат – 19.

Константи із плаваючою точкою синтаксично записуються як

[<цифри>].[<цифри>][e|E [-]<цифри>]

Наприклад: double f=123.2343e – 12.

Символьні константи записуються з використанням одинарних лапок: '<символ>'

Наприклад: 'd'.

Символьні рядкизаписуються за допомогою подвійних лапок:

<символи>"

Наприклад: "Hello, world!"

Символьна константа – це один символ, поміщений в одинарні лапки, наприклад 'а'. Значенням символьної константи є чисельне значення цього символу у внутрішньому машинному наборі символів. Наприклад, у наборі символів ascii символьний нуль '0' має значення 48, а в коді ebcdic – 240, і обидва значення відмінні від числа 0. Написання '0' замість чисельного значення, такого як 48 чи 240, робить програму незалежною від конкретного чисельного зображення символу в машині. Деякі неграфічні символи можуть бути зображені як символьні константи за допомогою умовних послідовностей, наприклад \n (новий рядок), \t (табуляція), \0 (нульовий символ), \\ (зворотна коса риска), ' (одинарні лапки) і т. д. Вони виглядають як два символи, але насправді є одним. Крім того, можна згенерувати довільну константу у вигляді '\ddd', де ddd – від однієї до трьох вісімкових цифр, як у наступному рядку програми:

#define A'\x41' /*це код символу А*/або'\xff', деff– одна чи дві шістнадцяткові цифри#include <stdio.h>void main(){printf("ab\0cd\nxyz");putchar('\n');}

Запам'ятайте, що '\0' служить ознакою кінця рядка в пам'яті, а '\n' – у файлі. У рядку "abcd\n" у кінці неявно вже наявний нульовий символ:

'a','b','c','d','\n','\0'

Рядок "ab\0cd\nxyz" – це

'a','b','\0','c','d','\n','x','y',z','\0'

Писати рядок "abcd\0" не варто, оскільки тоді він матиме в кінці два нульових символи (що не є помилкою, але навіщо?). Функція printf (буде розглянуто далі) друкує рядок до нульового символу, а не до закриваючих лапок.

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

#define maxline 1000char line[maxline+1];

або

seconds=60*60* hours;

Ідентифікатор –це послідовність літер, цифр і символів підкреслювання, що починається літерою чи символом підкреслювання:

<ідентифікатор>::=<літера>|<ідентифікатор><літера>|<ідентифікатор> <цифра>

(літерою в наведеній БНФ вважатимемо й символ підкреслювання).

За умовчанням компілятор розрізняє великі й малі літери. Кількість значущих символів – 32.

Коментарі задаються так: /*<текст>*/. Наприклад:

Main()

/*функція main має бути присутньою обов’язково у С-програмі*/

{

}

Структура С-програми

C -програма може містити (див. детальніше підрозд. 3.6):

a директиви препроцесора, наприклад:

#include <stdio.h>

#define N 100

a указівки компілятору, наприклад:

#pragma argsused

a оголошення та визначення.У тексті програми можна використовувати коментарі.

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

#include <stdio.h>//підключаються бібліотеки, що містять

//функції введення-виведення та ін.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: