2
-32768…32767
|
Қысқа
|
Short
|
2(1)
|
-32768…32767(-128…127)
|
Ұзын
|
Long
|
4
|
-2147483648…2147483647
|
Таңбасыз бүтін
|
Unsigned int
| 2 |
0…65535
|
Таңбасыз ұзын
|
Unsigned long
|
4
|
0…424967295
|
Нақты
|
Float
|
4
|
3,14*10-38…3,14*1038
|
Екі еселі дәлдігі бар нақты
|
Double
|
8
|
1,7 *10-308 1,7 *10308
|
Берілгендердің күрделі типі массивтерге, құрылымдарға (struct), бірігулерге (немесе құрамаларға) (union), санауларға (enum) бөлінеді.
Препроцессор директивалары
Си тілінде программалау ортасында немесе тіл компиляторынна қажетті бір компонент ретінде препроцессор кіреді. Препроцессордың негізгі қызметі ол-программада шығарылатын тексті оның компиляциясына дейін өңдеу болып табылады.
Препроцессорлық өңдеу қадамдары.
Негізінен препроцессорлық өңдеу бірнеше қадамдардан тұрады. Нақты бір реализация бірнеше қадамдарды біріктіре алады. Бірақ оның нәтижесі келесі реттеу секілді орындалуы қажет.
Барлық жүйелік-тәуелді стандарты кодтарға қайтадан өзгертіліп кодталуы керек. (мысалы, жүйелік-тәуелді индикатор жол соғында)
"\" және "конец строки" символдарының біреуі араларына қойылған пробелмен алынып тасталады., одан соң бастапоы мәтіндегі келесі жол "\" және "конец строки " символдары орналасқан жолға біріктіріледі.
Мәтінде препроцессорлардың директивалары мен лексемалары анықталады, ал әрбір оларға берілген түсінікткме бс орын символымен ауыстырылады.
Препроцессор директивалары орындалады.
Символдық тұрақтылардағы және символдық жолдардағы эскейп-нәтижелері өздерінің эквиваленттілеріне ауыстырылады., яғни өздерінің сәйкес сандық кодтарына өзгертіледі.
Жинақталған символдық жолдарға (жолдық тұрақтылар) түсініктеме беріледі, яғни олар бір жолға біріктіріледі.
әрбір препроцессорлық лексема Си тіліндегі мәтінге айналады.
Препроцессорлық лексемаларға символдық тұрақылар, файлдар аты, идентификаторлар, операция белгілері, препроцессорлық сандар, тыныс белгілері және жолдық тұрақтылар.
Препроцессор директиваларын өңдеу қадамдарын толық қаастырайық. Оны орындауда келесі жағдайлар пайда болады:
идентификаторларды ауыстыру
көрсетілген файлдардан программаға текст қосу .
программадан оның мәтінінің дара бөліктерін алып тастау (шартты компиляция).
Препроцессорды басқару үшін, яғни дұрыс қадамдар жасау үшін препроцессор командаларын (директивалары) қолданылады, олардың әрбіреуі жаңа жолдарға жазылады және # символынан басталады.
Препроцессор директиваларының жалпыланған форматы:
# директива аты препроцессор лексемалары.
# символының алдында және артында директиваларда пробел болады. сонымен қатар препроцессор лексемаларының алдына да және артынада да пробел қойылады. Препроцессор директиваларының аяқталу қызметін мәтін жолының соңы атқарады (егер "\" символы сол жолға қойылған болса, онда аяқталу қызметін келесі мәтін жолының соңы орындайды).
Клесі препроцессорлық директивалар анықталған.
# define-препроцессор идентификаторы немесе макросты анықтайды.
# include-файлдан мәтін қосу.
#undef-препроцессор идентификаторын немесе макросты анықтаудан бас тарту.
#if-шартты тексеру.
# ifdef-идентификаторды анықтауды тексеру.
#Ifndef-идентификатордың анықталмағанын тексеру.
#else -#if үшін альтернативті бұтақ басы.
#endif-#if шартты директивасының соңы.
#line-келесі төменгі жолдың номер ретінің ауысуы.
#error-қате туралы хат мітінін түзеу.
#pragma-реализациямен алдын-ала қарастырылған әрекет.
# бос директива.
Препроцессорлық директивадан басқа үш препроцессорлық оерация бар. Олар # define командасыменбірге қарастырылады:
defined –ақиқатты тексеру.
##-препроцессорлық лексема конкатенация.
#-операнданы жолдық символға айналдыру.
#define директивасы бірнеше модификацияға ие. Олар препроцессорлық идентификатордың және макростың анықталуын қарастырады.
#include директивасы программа мәтініне көрсетілген файл мәтінін қосады.
#undef директивасы # define директивасының әрекетін жоққа шығарады.
#if директивасы және оның модификациялары #else, #indif, #elif директиваларымен бірге программа мәтінін шартты түрде өңдеуді ұйымдастырады. Бұларды қолданғанда барлық мәтін өңделмейді, тек оның осы директивалармен бөлінген бөліктері ғанаөңделеді.
#line директивасы жол номерін реттейді.
#error директивасы қате болған жағдайда қысқаша мәтінді диагностикалық хат шығарады.
#pragma директивасы автор өзі құрған компиляторды іске қосады.
#-бос директива болғандықтан ештеңе шақырмайды, яғни ешқандай эффект бермейді.
Негізінен Си тілінің операторлары локальді түрде анықталады. Және олардың мүмкіндіктерін кестемен көрсетуге болады. бұл кестенің мәні өте зор, бұны кез келген уақытта оқығанда немесе программа жазғанда қолдануға болады.
Си тіліндегі программаның құрылымы
Кез келген программа бір немесе бірнеше функциялардан турады. Олар программа құруға керекті негізгі модульдер болып табылады. Кез келген программаның жазылған алғашқы мәтіні бастапқы код деп аталады.Оны біріктірілген программалау ортасында теріп,сонан соң компилятор арқылы машиналық кодқа түрлендіріп орындаймыз.
Си тілінде жазылған программа препроцессор директиваларынан, глобалды (ауқымды) айнымалыларды жариялаулардан, бір немесе бірнеше функциялардан тұрады. Осы функциялардың ішінде түгелдей программаның жұмысын басқаратын бір негізгі (main) функция болады.
С тіліндегі программаның жалпы құрылымы мынадай:
<препроцессор директивалары>
<қолданушы типтерін анықтау – typedef>
<функциялар прототиптері>
<глобалды объектілерді анықтау>
<функциялар>
Сонымен Си программасы бірнеше функциялардан құралады және олардың біреуі міндетті түрде MAIN() болуы қажет.
Қарапайым программаның мысалын қарастырайық. Жалпы кез келген функция оның тақырыбы мен тұлғасынан тұрады.
Алдымен программа процессор арқылы өңделіп, оның директиваларын орындайды. Мұнда программағатақырыптық файлдар прогаммаға қосымша элементтеренгізетін мәтіндік файлдар жазылады. Олар мәліметтерді енгізу\шығару операцияларын немесе экран сипаттамаларын өзгерту үшін қажет.
Программадағы кез келген функция тақырыбы препроцессордың директивасынан және функция атынан тұрады. Функция атына жалғасып , жақша ішіне параметрлер жазылуы мүмкін, кейде параметрлер болмайды,ондайда жақша ішінде ешнәрсе жазылмайды.
Функция тұлғасы операторлардан тұрады,олар жүйелі жақшалармен шектеледі. Әрбір оператордан кейін (;) таңбасы қойылады.
Мысалы:
/ Герон формуласы бойынша үшбұрыш ауданын табу/
#include \*енгізу\шығару директивасы*\
#include \*математикалық функциялар директивасы*\
Main()\*басты функцияны қолдану*\
{
Int a,b,c;
Float p,s;
Printf(“\n үшбұрыш қабырғаларын еңгіз,:\n”);
Scanf(“%f%f%f”,&f,&b,&c);
P=(a+b+c)\2;
S=sqr(p*(p-a)*(p-b)*(p-c));
Printf(“s=%f”,s);
}
Процессор директивалары #include сөзінен кейін жазылады, stdio.h тіркесі енгізу\шығару операциялары орындалатынын білдіреді.Ал math.h тіркесі программада математикалық функциялар пайдаланылатынын көрсетеді.
Басты функция main() аргументсіз жазылған,сол себепті жақша ішінде ешнәрсе көрсетілмеген.Ал функция тұлғасы операторлардан тұруы тиіс. Int түйінді сөзі a,b,c айнымалыларының бүтін мәнін қабылдайды,float түйінді сөзі р,s айнымалыларының нақты мән қабылдайтынын сипаттап тұр.
Келесі жол үшбұрыш қабырғаларыненгізуді талап ететін сөз тіркестерін экранға шығарады, мұндағы \n таңбалары сөз тіркесі алдында және одан кейін курсор бір жол төмен түсетінін көрсетеді. Scanf сөзінен басталатын жол a,b,c мәндерін пернелерден қабылдайды, сонан кейін жарты периметр есептеліп, аудан мәні анықталады да, соңғы нәтиже экранға шығарылады.
Scanf- форматты енгізу.
%d%d -енгізу форматы
&a,&b -енгізетін сандарды жазатын ұяшық адресі.
Формат-қандай сандар енгізілетінін\шығарылатынын көрсететін символдық тип.
%d-бүтін ондық сан шығарылуы тиіс.
%i- бүтін ондық сан шығарылуы тиіс.
%f-жылжымалы нүктелінақты ондық сан.
%e-жылжымалы нүктелі экспоненциалды сан.
%E-е орынына Е шығарады.
%c-бір символ шығарылуы тиіс.
%s-символдар тіркесі шығарылуы тиіс.
%g-нақты сан, сан ұзындығына сәйкес %e немесе %f қолданылады.
%u-таңбасыз ондық бүтін сан жазылып шығады.
%o-таңбасыз бүтін сегіздік сан жазылып шығады.
%x-таңбасыз бүтін он алтылық сан жазылып шығады.
\n-келесі жаңа жолға көшу атқаратын басқару символ.
Дәріс №4.Өзін-өзі тексеру сұрақтары
1.Си тіліндегі программаның құрылымын атаңыз.
Достарыңызбен бөлісу: |