char shortint long float double Пайдаланылатын символдар СИ тілінің символдарын бес топқа бөлуге болады. 1. Тілдегі түйінді сөздер (ключевое слово – keyword) мен идентификаторларды құрастыру үшін қолданылатын символдар (1 кесте). Бұл топқа ағылшын алфавитінің бас және кіші әріптері мен астын сызу символы кіреді. Басқа Паскаль, Бейсик тілдеріндегі тәрізді бір символды өрнектеу үшін қолданылатын бас әріп пен кіші әріп бірдей болып саналмайды, мысалы, А және а айнымалылары екеуі екі түрлі болып есептеледі. 2.1 кесте Латын алфавитінің бас әріптері | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z | Латын алфавитінің кіші әріптері | a b c d e f g h i j k l m n o p q r s t u v w x y z | Астын сызу символы | _ | 2. Қазақ (орыс) алфавитінің бас және кіші әріптері мен араб цифрлары (2 кесте) сөз тіркестері мен түсініктеме мәтін жазуда пайдаланылады. 2.2 кесте Қазақ алфавитінің бас әріптері | А Ә Б В Г Ғ Д Е Ж З И К Қ Л М Н Ң О Ө П Р С Т У Ұ Ү Ф Х Ц Ч Ш Щ Ъ Ы І Ь Э Ю Я | Қазақ алфавитінің кіші әріптері | а ә б в г ғ д е ж з и к қ л м н ң о өп р с т у ұ ү ф х ц ч ш щ ъ ы і ь э ю я | Араб цифрлары | 0 1 2 3 4 5 6 7 8 9 | 3. Операциялар таңбалары, айыру белгілері, қатынас таңбалары және арнайы символдар (3 кесте). 2.3 кесте Символ | Атауы | Символ | Атауы | , | үтір | } | оң жақтағы жүйелі жақша | . | нүкте | { | сол жақтағы жүйелі жақша | ; | нүктелі үтір | < | кіші | : | қос нүкте | > | үлкен | ? | сұрақ белгісі | <= | кіші немесе тең | ' | апостроф | >= | үлкен немесе тең | ! | леп белгісі | [ | сол жақтағы тік жақша | | | тік сызықша | ] | оң жақтағы тік жақша | / | қиғаш сызық | # | нөмір белгісі | \ | кері қиғаш сызық | % | қалдық табу (пайыз) белгісі | ~ | тильда | & | амперсанд | * | жұлдызша | “ | қостырнақша | + | плюс | = | теңдік белгісі | - | минус | = = | тең (қатынас таңбасы) | ^ | логикалық “емес” таңбасы | != | тең емес (қатынас таңбасы) | ) | оң жақтағы жай жақша | && | конъюнкция (ЖӘНЕ) | ( | сол жақтағы жай жақша | || | дизъюнкция (НЕМЕСЕ) | 4. Басқару және айыру символдары. Бұл топқа: босорын, табуляция символы, жаңа жолға көшу, жаңа бетке көшу таңбалары жатады. Бұлар тұтынушы анықтаған объектілерді – константтар мен идентификаторларды бір-бірінен айыру үшін қолданылады. 5. Көрсетілгендерден басқа Си тілінде басқару тізбектері деп аталатын мәліметтер енгізу мен шығаруда қолданылатын арнайы символдар тіркесі бар. Басқару тізбектері кері бөлу сызықшасы белгісінен (\) басталатын латын әріптері мен цифрлар тізбегінен тұрады (4 кесте). 2.4 кесте Басқару тізбектері | Атаулары | Он алтылық кодтары | \a | Қоңырау | | \b | Бір орынға кері қайтару | | \t | Горизонталь табуляция | | \n | Жаңа жолға көшу | 00A | \v | Вертикаль табуляция | 00B | \r | Сырғыманы(каретканы) қайтару | 00C | \f | Форматты жылжыту | 00D | \" | Қостырнақша | | \' | Апостроф | | \0 | Нөл-символ | | \\ | Кері қиғаш сызық | 05C | \ddd | Сегіздік жүйедегі кодтар жиыны | | \xddd | Он алтылық жүйедегі кодтар жиыны | | \ddd и \xddd (мұндағы d цифр тұрғанын көрсетеді) түріндегі тізбектер компьютердегі кодтар жиыны арқылы өрнектелетін символды сәйкесінше сегіздік және он алтылық цифрлар тізбегімен бейнелей алады. Мысалы, каретканы қайтару символы бірнеше тәсілмен өрнектеле алады: \r – жалпы басқару тізбегі, \015 – сегіздік сандардан тұратын басқару тізбегі, \x00D – он алтылық сандардан тұратын басқару тізбегі. Мысалы, жеке мынадай \n (жаңа жолға көшу) басқару тізбегін \010 немесе \xA түрінде де жазуға болады. 2.2.2 Тілдің қарапайым объектілері Тілдің қарапайым объектілеріне сан, идентификатор, константа, айнымалы және функция, өрнек ұғымдары кіреді. Программадағы негізгі амалдардың орындалуына керекті мәліметтердің сандық, логикалық немесе символдық (литерлік) мәндері болады. Олармен жұмыс істеу қолайлы болуы үшін алгебра курсындағы белгілеулерге ұқсас шартты атаулар пайдаланылады. Бұл атаулар әр түрлі мәндерді (сандық мән, символдық мән, т.с.с.) қабылдауы мүмкін, сондықтан оның типі деген ұғым енгізіледі. Сандар. Сандар мен айнымалылар бүтін және нақты болып екіге бөлінеді. Бүтін сандар: +4, -100, 15743, 0 т.с.с. Қазіргі дербес компьютерлер үшін қолданылатын бүтін сандар (ағылшынша ІNTEGER) -32768 бен +32767 аралығында ғана жазылады, бұдан үлкен сандар нақты сандарға айналдырылады. Нақты сандар кәдімгі табиғи аралас сандар тәрізді санның бүтіні мен бөлшегін нүкте арқылы бөлген күйде жазылады. Мысалы: 2.65, 0.5, -0.862, -6.0. Ал өте үлкен немесе өте кіші нақты сандар көрсеткіші бар экспоненциал сандар ретінде mЕ±р түрінде жазылады да, олардың диапазоны әлде қайда кең болады, мұндағы m-санның мантиссасы деп аталады, Е-онның дәрежесі дегенді білдіреді, ал р- дәреженің өз мәні. Мысалы: Кәдімгі жазылуы | Си тілінде жазылуы | | | 147,125 | 147.125 | -6,045 | -6.045 | 12*1014 | 12Е+14 | -0,52*104 | -0.52Е4 | 5,2*10-12 | 5.2Е-12 | -45*106 | - 45Е6 | Тұрақтынемесеконстанта деп программаның орындалу барысында мәндері өзгеріссіз қалатын шамаларды айтады. Тіл ережесі бойынша бірнеше констант типтері болады, мысалы, символдық, бүтін, нақты константтар, т.б. Айнымалылар деп программаның орындалу барысында әр түрлі мәндерді қабылдай алатын шамаларды айтады. Әрбір айнымалы мен констант программа алдында сипатталуы тиіс. Олардың компьютер жадында алатын орны типтеріне байланысты болады. Константтар мен айнымалылар идентификатормен белгіленеді. Атау – идентификатор (іdentіfіcatіon – объектінің белгілі бір символдар тіркесіне сәйкестігін бекіту) программаны және программадағы тұрақтыларды, типтерді, айнымалыларды, функцияларды, файлдарды және тағы басқаларды белгілеп жазу үшін қажет. Идентификаторлар тұрақтыларды, айнымалыларды, олардың түрлерін, функцияларды, программаларды, файлдарды, т.б. программа объектілерін белгілеу үшін қолданылады. Оның ұзындығын өте үлкен етудің қажеті жоқ, өйткені атауларды теру және кейіннен сақтау біраз уақыт керек етеді. Идентификатор – латын әрпінен басталып, әріптер мен цифрлардан тұратын тізбек. Мысалы, a, beta, b5, baga, т.с.с. Айнымалыны сипаттау мынадай нұсқада орындалады: charf;longz, t; int a, beta, baga; float b5, k, n; int y = 10; Қолданылатын негізгі типтерге мыналар жатады: char shortint long float double Алғашқы төрт тип бүтін сандарды, соңғы екеуі –нақты сандарды өрнектейді, charтипікомпьютерде бір символды (байт) бейнелейді. Идентификаторлар латын алфавитінің бас және кіші әріптерінен және цифрлардан құралады. Әріп ретінде астын сызу символын (_) қолдануға рұқсат етілген. Бас әріп пен кіші әріп бірдей болғанымен әр түрлі идентификаторлар болып саналады, мысалы, abc, ABC, A128B, a128b төрт түрлі идентификатор болып есептеледі. Идентификатор ұзындығына шек қойылмайды, бірақ оның алғашқы 31 символы ғана мағыналы болып саналады. Идентификатор сипаттау кезінде анықталады да, кейінгі операторларда қолданыла береді. Сипатталатын идентификатор Си тілінің түйінді сөздерімен сәйкес келмеуі тиіс. Константалардан, айнымалылардан, функциялардан және операциялар таңбаларынан өрнектер құралады. Әрбір өрнек арифметикалық операциялар таңбаларымен қажетті жақшалар көмегімен біріктірілген бірнеше операндтардан (сан, айнымалы, константа) тұрады. Математикадағы формулалар, алгебрадағы көпмүшеліктер программалау тілінде тек осы өрнек ұғымы арқылы беріледі. Егер өрнек мәні бүтін немесе нақты сан болатын болса, ол арифметикалық өрнек болып саналады. Арифметикалық өрнектерде мынадай операциялар: + - * / % болады. Жалпы өрнектер бір жол бойына жазылады және олардағы операция реттілігі жақшалармен анықталады. Өрнектерді жазу мысалдары: і = і+1; k = 5.35; x1= (-b+sqrt(b*b-4*a*c))/(2*a) ; y = sqrt(sin(x)+1); c = 2*pі*r; R = 19.36; Қатынас таңбасы арқылы біріктірілген екі арифметикалық өрнек мәні басқа тілдердегідей ақиқат (0-ге тең емес) немесе жалған (0-ге тең) деп айтылады. Бірақ Си тілінде логикалық тип түсінігі айтылмайды, ол Си++ тілінде бар. Түйінді сөздер – мағынасы алдын ала анықталған идентификаторлар, олардың саны шектеулі. Тұтынушы айнымалы, констант, өз функциялары аттарында тілдің түйінді сөздерін пайдаланбауы тиіс, олар тек өз мағынасында ғана қолданылады. Бірсыпыра түйінді сөздер тізімін келтірейік. auto double intstruct break else long switchregistertupedef char extern return void case floatunsigned default for signed union do if sizeofvolatile continue enum short while Бұған қоса операторлар мен стандартты функциялар аттары да түйінді сөздер тізімі секілді басқа мағынада қолданылмайды. Стандартты функциялар. Си тілінде алдын ала программалары жасалып стандартты модульге жинақталып қойылған, қажет кезінде пайдалануға болатын объектілердің бірі стандартты функциялар болып табылады. Олар жиі кездесетін математикалық және басқа да функцияларды есептеу үшін қолданылады. Стандартты функцияны жазу үшін міндетті түрде функцияның аты және жақшаның ішінде аргументі көрсетілуі қажет. Стандартты функциялар: fabs(x), sіn(x), cos(x), asin(x), acos(x), tan(x), exp(x), log(x), sqrt(x), atan(x), т.с.с. Функцияны есептеу барысында аргумент пен функция типтерінің әр уақытта сәйкес келе бермейтінін есте сақтаған жөн. Си тіліндегі стандартты функцияларды пайдалану үшін <math.h> тақырыптық файлы (прототипі) қолданылады. Комментарий – түсініктеме ретінде қолдануға болатын символдар тізбегі. Олар ұлттық алфавиттерді де пайдалана береді. Комментарий басы мен аяғы /* ...*/ осындай таңбалармен шектелуі тиіс. Олар бір немесе бірнеше жолдардан да тұра алады. Си++ тілінде жол соңында тұратын комментарийлер // сиволдарынан кейін орналасады. Си және Си++ тілдерінде құрастырылған есептерді бір компилятор арқылы шығаруға болатындықтан, көбінесе түсініктемелердің жоғарыдағы екі түрін де пайдалана беруге болады. /* программа ішіндегі комментарийлер осылай орналасады */ Программалау тілінің белгілі бір іс-әрекетті орындай алатын тиянақты мағынасы бар ең қарапайым сөйлемі оператор болып табылады. Тіл объектілерін, яғни программада пайдаланылатын мәліметтердің атаулары мен типтерін, олардың алғашқы мәндерін алдын ала тағайындау программаның сипатталуы болып саналады. Енді Фаренгейт градустарын Цельсий градустарына ауыстыратын программа мәтінін келтірейік. /* Градустарды Фаренгейт бірлігінен Цельсий бірлігіне алмастыру, f = 0, 20, ...,300 */ #include <stdio.h> #include <conio.h> Main() { int t0, tn, step; floatf,c; t0 = 0; /* төменгі температура */ tn =300; /* жоғарғы температура */ step = 20; /* өзгеру қадамы */ clrscr(); f = t0; printf("ГрадФГрадЦ\n"); while (f <= tn) { c = (5.0/9.0) * (f -32.0); printf("%4.0f %6.1f\n", f, c); f = f + step; } printf("\nАяқтау үшін ENTER басыңыз"); getch(); } } 2.3. Ситіліндегімәліметтертиптері Мұндамәліметтердіңбірнешенегізгітиптеріқолданылады. Олар: · char (8 бит) – символдық, яғнитаңбалық тип, · short– қысқабүтін сан, · int – бүтін сан типі, · long – екіеселенгенбүтін сан, · unsigned – таңбасызбүтін сан, · float – нақты сан типі, яғнижылжымалынүктелісандар, · double – екіеселенгеннақты сан типі, · longdouble– ұзартылған, әріекіеселенгеннақты сан типі. Алғашқытөрттип бүтінсандардысипаттауүшінқолданылады. Төмендегікестедеәртүрлітиптердіңұзындықтарыкөрсетілген. Си тілінің ішкі құрамындағы мәліметтер типтері мен олардың ені (ұзындығы) 2.5 кесте Мәлімет типі | Ұзындығы (бит – байт) | Сандар диапазоны | char | 8 бит – 1 байт | -128 ... +127 | unsigned char | 8 бит – 1 байт | 0 ... 255 | short int | 16 бит – 2 байт | -32768 ... 32767 | unsigned short | 16 бит – 2 байт | 0 ... 65 535 | int | 16 бит – 4 байт | -32768 ... 32767 | unsigned [int] | 32 бит – 4 байт | 0 ... 4294967295 | long | 32 бит – 4 байт | -2 147 483 648 ... 2 147 483 647 | unsigned long | 32 бит – 4 байт | 0 ... 4 294 967 295 | float | 32 бит – 4 байт | 3.4×10-38 ... 3.4×1038 | double | 64 бит – 8 байт | 1.7×10-308 ... 1.7×10308 | long double | 80 бит – 10 байт | 3.4×10-4932 ... 3.4×104932 | 2.4. Бүтін сан түріндегі мәліметтерді сипаттау 2.4.1. Int бүтін сандар типі Int типін стандарт бекітпеген, ол компьютерге немесе компиляторға байланысты өзгеріп отырады. 16-разрядты процессорде ол 2 байт, ал 32-разрядтысында – 4 байт. Егер int алдында short спецификатор сөзі тұрса, онда ол әрқашан 2 байт, ал егер спецификаторы long болса, 4 байт болады. Санға компьютер жадында берілген орынға қарай олардың мәндері өзгереді. short int – 2 байт, оның диапазоны –32768 ..+32767; long int – 4 байт, оның диапазоны –2 147 483 648..+2 147 483 647. Int типі 16-разрядты компьютер үшін short int типімен бірдей, ал 32-разрядты компьютер үшін long int типімен бірдей. Signed және unsigned модификаторлары да сандар шамасына әсер етеді, олар: unsigned short int – 2 байт, оның диапазоны 0 ..65536; unsigned long int – 4 байт, диапазоны 0..+4 294 967 295. Айнымалыларды сипаттау кезінде бүтін тұрақтылар – костанталар мәндерін де көрсетуге болады. Мысалы: int k=0; (бір ғана сан сипатталған және оған мән берілген) int k1,k3=0; (біреуі тек сипатталған, екіншісіне мән берілген) Unsigned типі int, long, short түйінді сөздерімен сипатталатын типтердің модификаторы ретінде қолданылады. Мысалы: unsigned int sum=0; char типін 0–255 аралығындағы таңбасыз бүтін сандарды сипаттауда қолдануға болады, ДК жадында бұларға бір байт орын бөлінген. Мысалы: char c1; char ck=’k’; Char типі Бұл тип мәндері реттелген символдар жиыны болып табылады. Әрбір символға бір бүтін сан сәйкес келеді, ол символ коды деп аталады. Символдық тип ені – 1 байт. Char типі де signed және unsigned спецификаторларымен қолданылады. Signed char типі диапазоны –128 .. 127. Unsigned char типін қолданғанда, оның мәндер диапазоны 0 .. 255 болады. Символдарды кодтау үшін ASCII (American Standard Code for International Interchange) стандарты негізге алынған. Символдардың 0 .. 31 кодтары басқару кодтарына жатады, олар тек енгізу-шығару кезінде ғана қолданылады. Сhar типі символдарды олардың бүтін сан түріндегі кодтары арқылы сақтап, басқа шамалардың көрсетілген диапазоны сандарын да көрсету үшін де қолданыла алады. 2.4.3. Float және double жылжымалы нүктелі нақты сандар типтері Нақты сандар компьютерде 2 бөліктен – дәреже мен мантиссадан тұрады. IBM-РС компьютерлерінде float типінің ені – 4 байт, оның бір разряды – сан таңбасы, 7 разряды – дәреже, 24 бит3 – мантисса. Егер double типі аты алдында long сөзі тұрса, онда оған 10 байт орын беріледі. Программалау практикасында көбінесе жылжымалы нүктелі нақты (аралас) сандар пайдаланылады. Double типті сандар екі еселенген дәлдікпен 64 бит арқылы өрнектеледі. Double типінің ені – 8 байт, 1 бит – таңба, 11 бит – дәреже және 52 разряд – мантисса. Мантисса ені – санның дәлдігін, ал дәреже ені – оның диапазонын анықтайды. Кейбір ЭЕМ-дерде мантисса үшін қосымша 32 бит беріледі де, санның дәлдігі артады. Ал кейде санның таңбасы мен дәрежесі үшін 32 бит беріліп, ол санның кескінделу диапазонын арттырады. Мысалдар: float s1, s2; float sum=1.5; Си тілінде объектілердің мәндерін байт арқылы анықтау үшін sizeof стандартты операторы қолданылады. Мысалы: printf(“double типіндегі мәліметтер ені %d байт\n", sizeof(double)); 2.5 Символдық тіркестер (жолдар, қатарлар) Си тілінде символдық тіркестерді сипаттау үшін арнайы тип жоқ, олар көбінесе char типтегі элементтерден тұратын жиым (массив) ретінде қарастырылады. Жолдық немесе тіркестік символдар ЭЕМ жадында көршілес ұяшықтарда сақталады да, олардың соңында ‘\o’ символы тұрады. Символдартіркесінің ұзындығынанықтауүшінstrlen()функциясықолданылады. #define – символдардынемесесолардантұратынконстанталардыанықтаумақсатындақолданылады. Мысалы: #defineNULL ‘/o’ #defineVNAME “КазГУ” 2.6. Printf және scanf функциялары Си тілінде сыртқы ортамен мәліметтер алмасу <stdio.h>енгізу-шығару функциялары кітапханасын пайдалану арқылы орындалады. Ол тақырып файлы ретінде былай жазылады: #include <stdio.h> printf() функциясы мәліметтерді экранға шығару үшін қолданылады. Оның жалпы жазылу түрі: printf(<формат тіркесі>,<аргументтер тізімі>); (<формат тіркесі> –қостырнақшамен (”) шектеліп, аргументтердің қалай бейнеленетінін көрсетіп тұрады, экранға (баспаға) шығару алдында барлық аргументтер формат спецификациясына сәйкес түрлендіріледі, спецификация % символымен басталады және мәліметтер типін, оларды түрлендіру тәсілін көрсететін бір әріп жазылады. Объектілер ретінде айнымалылар, константалар, өрнектер қолданылуы мүмкін. Мысалы: printf (“ Пи санының мәні = %f\n”, pi); Формат тіркесінде мыналар болады: 1) мәтін ретінде шығарылатын символдар тіркесі; 2) түрлендіру спецификациялары; 3) басқару символдары. Әрбір аргументке өз спецификациясы сәйкес келуі тиіс, олар: %d – бүтін ондық сан шығарылуы тиіс, %i – бүтін ондық сан шығарылуы тиіс, %f – жылжымалы нүктелі нақты ондық сан ([-]dddd.dddd ) жазылып шығады, %e – жылжымалы нүктелі экспоненциалды сан ([-]d.dddde±dd) шығарылады, %E – жоғарыдағы сияқты, тек е орнына Е ([-]d.ddddE±dd) шығарылады, %c – бір символ шығарылуытиіс, %s – символдартіркесі (қатары) шығарылуытиіс, %g – нақты сан, сан ұзындығынақарай %e немесе %f қолданылаалады, %u – таңбасызондықбүтін сан жазылыпшығады, %o – таңбасызбүтінсегіздік сан шығады, %x – таңбасызбүтін он алтылық сан шығады. \n – келесі жаңа жолға көшуді атқаратын басқару символы. Мысалы: %9i – бүтін сан ені 9 цифрдан тұрады, сан ені аз болса, оның сол жағында бос орындар орналасады. %9.3f – нақты сан ені 9 цифрдан тұрады, оның 3 таңбасы бөлшекке беріледі, сан ені аз болса, оның сол жағында бос орындар орналасады. Әрбір спецификация % символынан басталып, түрлендіру символымен аяқталады. Ол екеуінің ортасында мыналар тұруы мүмкін:- минус таңбасы, аргумент мәні сол жақ шетке ығыстырылып жазылады.- цифрлар, бүтін санның жалпы орналасу енін анықтайды. Сан осы енге немесе одан артық болып шығарылады. Егер аргумент ені көрсетілген еннен аз болса, онда ол бос орындармен толтырылып жазылады. - нүктеге дейін санның жалпы ені, нүктеден соң бөлшек сандар ені көрсетіледі. - L модификаторы, сәйкес аргумент мәні INT емес LONG екенін білдіреді. scanf()енгізу функциясы жоғарыда қарастырылған түрлендіру спецификациясының көбін пайдаланады. scanf (<формат тіркесі>,<аргументтер тізімі>); Аргументтер ретінде адрес нұсқауыштары пайдаланылады. Мысалы: scanf("%d%f", &x,&y); Кейбірайырмашылықтарынатапөтейік. 1) %е және %f спецификацияларыенгізукезіндебірдейболыптабылады; 2) shortтиптібүтінсандыенгізукезінде %h спецификациясықолданылады. ЕСКЕРТУ. Айнымалыадресін беру үшінадрестердіжазғанда, айнымалыадресінанықтауүшін& символы қолданылады. Алтіркестік (жолдық) айнымалыныенгізгенде, & символы жазылмайды. Ендісанның дәрежесін есептейтін программа құрайық. /* Санды дәрежелеу */ #include <conio.h> #include <stdio.h> #include <math.h> Main() { floatx,y,s; clrscr(); printf("\n х-ті және оның дәрежесін-у енгізіңіз :\n"); scanf("%f%f",&x,&y); s=pow(x,y); printf("\nНәтижесі s=%9.2f",s); } Бақылау сұрақтары 1. Си тілінің шығу тарихы. 2. Си программасының жалпы құрамы мен құрылымы. 3. Препроцессор директивалары түсінігі. 4. Тілдің алфавиті құрамы. Операциялар таңбалары, айыру белгілері, қатынас таңбалары және арнайы символдар. 5. Басқару тізбектері не үшін қажет және олар қалай жазылады? 6. Тілдің қарапайым объектілері. 7. Си тіліндегі сандар мен айнымалылар, олардың жазылу жолдары. 8. Идентификатор дегеніміз не? 9. Өрнек ұғымы. 10. Тілдің түйінді сөздері. 11. Си тіліндегі мәліметтер типтері мен олардың ені. 12. Оператор дегеніміз не, олар қандай топтарға жіктеледі? 13. Бүтін сан типтері мен оларды қолдану ерекшеліктері. 14. Символдық тип және оны қолдану жолдары. 15. Нақты сандар типтері және оларды пайдалану. 16. Символдық тіркестерді сипаттау. 17. Мәліметтерді пернелерден енгізу функциясы және оның жазылу форматтары. 18. Нәтижені экранға шығару жолдары. 19. Формат арқылы жазылатын енгізу-шығару функциясы қандай қызмет атқарады? 20. Cандардың және олардың арасында қалдырылатын бос орындардың енін қайтіп көрсетеді? 21. Енгізу функциясының жазылуы және оның түрлендіру спецификациялары. рrintf() және scanf() функцияларының негізгі айырмашылықтар 3. СИ ТІЛІНДЕ ҚОЛДАНЫЛАТЫН НЕГІЗГІ ОПЕРАТОРЛАР Арифметикалық операциялар символдар арқылы жазылады. Си тілінде мынадай операциялар бар: * – көбейту, / – бөлу, % – модуль бойынша бөлу (қалдықты анықтау), + – қосу, – – азайту. Модуль бойынша бөлу бүтін санды бүтін санға бөлген кездегі қалдықты анықтайды. Мысалы: 20 % 3 = 2. Меншіктеу операторы Меншіктеу операторы символдар арқылы жазылады. Кез келген ; таңбасымен аяқталатын өрнек меншіктеу операторы болып табылады. Өрнектің бір түріне бос оператор жатады, ол жай ; операторы. Си тілінде меншіктеу операторының бірнеше түрі бар. Жалпы меншіктеу операторының жазылу форматы мынадай болады: <айнымалы> = <айнымалы><операция><өрнек>; Мұны Си тілінде қысқаша былай жазуға болады: <айнымалы><операция> = <өрнек>; Төменде бірнеше мысал келтірілген. a=a+b; ® a+=b; a=a*b; ® a*=b; a=a-b; ® a-=b; a=a/b; ® a/=b; Си тілінде тізбектеле жазылған меншіктеу операцияларын да қолдануға болады. Мысалы: sum = a = b; Мұнда меншіктеу операторы оңнан солға қарай орындалады, яғни b-ның мәні a-ға меншіктеледі, ал а-ның мәні sum-ға меншіктеледі. Меншіктеу операторын былай да жазуға болады: 1) a = (b = 1) +2; мұнда a=3, b=1. 2) a = b = 1 + 2; ал мұнда a = 3, b = 3. Дөңгелек жақшаға алынған кез келген меншіктеу операторы анықталған мәні бар өрнек болып табылады, мысалы: ((s=13+12)<=30) деген өрнек ақиқат мәнді болып табылады. Арттыру немесе кеміту (инкремент және декремент) операциялары ++ және – – түрінде жазылады. Бұлар кез келген операндтың мәндерін бірге арттыруға немесе кемітуге мүмкіндік береді. Инкремент, яғни арттыру операциясы (++) және декремент (--), кеміту операциясы айнымалы (тек айнымалы мәнін) мәнін бірге арттырады немесе кемітеді. Олар айнымалы мәнін өзгертеді, яғни жасырын түрдегі меншіктеу амалы болып табылады. Кейде олар жеке оператор түрінде жазылады: i++;немесе++i; Бұл екеуі де мынадай амалмен бірдей болып саналады i = i + 1; Бұл екеуін өрнектерде жиі қолданады. Мысалы: sum = sum + х * --i; Инкремент пен декремент екі формада жазылады: префикстік және постфикстік. Постфикстік арттыру былай жазылады: х++ , ал префикстік арттыру былай жазылады: ++х .Префикстік амалдар негізгі операция алдында, ал постфикстік амалдар негізгі амалдан кейін орындалады. Постфикстік формада х айнымалысының мәні оны қолданғаннан кейін өзгереді, ал префикстік формада – айнымалы мәні оны қолданғанға дейін өзгереді, яғни бір деген санға артады. Мысалы: k=10; x=k++; /* x=10 k=11 */ x=++k; /* x=12 k=12 */ Арттыру/кеміту операцияларын өрнек ішінде де орындау мүмкіндігі бар. Мысалы: sum=a+b++;/*алдымен a,b қосылады, сонан соң b 1-ге артады */ sum=a+ ++b;/*алдымен b 1-ге артады, сосын барып a,b қосылады */ Арттыру/кеміту операцияларының приоритеттері өте жоғары, тек жақша ішіндегі операциялардың приоритеті олардан жоғары болады. Құрама операторбірнеше операторды жүйелік жақшаға алып біріктіру үшін қолданылады. Ол шартты және циклдік операторларда жиі қолданылады. Мысалы: #include <stdio.h> #include <conio.h> Main() { int a = 5, b = 6, c = 7, d; clrscr(); d = (a++ - (--b)) + (c - a--); //d=2 a=5 printf("d=%i a=%d",d,a); getch(); } 3.2. Типтерді түрлендіру Егер өрнекте әр түрлі типтегі сандар мен айнымалылар қолданылса, онда олар жалпы бір типке түрлендіріледі. Біз қарастырған барлық негізгі типтер ішінде төменнен жоғары қарай бағытталған түрлендірілу реттілігі бар. Егер оларды оңған солға қарай реттеп орналастырсақ, мынадай болып шығады: char ® short ® int ® long ® float ® double Оң жақтағылары сол жақтағылардан гөрі жоғары дәрежелі болып табылады. Егер char мен short типтері араласса, нәтижесі – chort болады, алshort пен intтиптері араласса, нәтижесі – int болады, ал intпен long типтері араласса, нәтижесі long, ал longпен float типтері араласса, нәтижесі float, ал float пен doubleтиптері араласса, нәтижесі doubleболады. Егер екі-үш тип араласып, ең үлкен дәрежелісі – float болса, әрқайсысы да және нәтиже де осыған келтіріледі. Компилятор типтерді автоматты түрде түрлендіру үшін төмендегі негізгі ережелер жиынын пайдаланады: 1. Егер операция екі түрлі типтегі мәліметтер үшін орындалатын болса, онда олар осы мәліметтер типтерінің арасындағы “жоғарғы” типке келтіріледі. 2. “Жоғары” типтен бастап, “төмен” типке дейін реттелген типтер аттарының тізбегі келесідей түрде көрсетіледі: double float long int short char Меншіктеу операторында оң жақта орналасқан өрнектің есептелген нәтижесі осы оператордың сол жағына жазылған айнымалының типіне келтіріледі. Осындай процесс типтің “жоғарысына” немесе “төменіне” келтірілуі мүмкін. Мысалы: #include <stdio.h> #include <conio.h> Main () { char ch; int i; float fl; fl=i=ch='A'; printf("ch=%c i=%d fl=%6.2f\n",ch,i,fl); // ch=A i=65 fl= 65.00 ch=ch+1; // ch=66 i=fl+2*ch; // i=65.00+2*66=197 fl=2.0*ch+1; // fl=2*66+1=133 printf("ch=%c i=%d fl=%6.2f\n",ch,i,fl);} // ch=B i=197 fl=133.00 Келтіру операциясы. Жоғарыда көрсетілген типтердің түрлендірілуі автоматты түрде орындалады. Мәліметтердің көрсетілген қажетті типіне келтіру үшін Си тілінде арнайы бір тәсіл бар. Бұл тәсілде типтерді бірыңғайлау үшін, айнымалының алдында дөңгелек жақшада қажетті типтің аты жазылады. Жалпы түрге келтіру операциясы мынадай болып жазылады: (тип)өрнек. Мысалы: int m; float x,y; y=pow(x,2)+sqrt((double)m); 3.3. Программа жұмысын басқару операторлары Программа жұмысын басқару операторлары программаның басқарушы конструкциясы деп аталады. Олар: · құрама операторлар; · таңдау операторлары; · цикл операторлары; · көшу операторы. Құрама операторларға жай құрама операторлар және блоктар жатады. Екеуі де жүйелі жақшаға алынып жазылады. Блокта жай құрама операторларға қарағанда, айнымалыларды сипаттау жолдары болады. Мысалы: { n++; жай құрама оператор summa+=n; } { int n=0; n++; бұл блок summa+=n; } Қатынас операциялары. Қатынас операциялары екі мәнді салыстыру үшін қолданылады. Си тіліндегі қатынас операциясының тізбегі мынадай: ==,!=, <, <=, >, >=. Егер қарастырылатын қатынас нәтижесі ақиқат болса, шарттық өрнектің мәні 1-ге тең болып саналады. Егер ол жалған болса, шарттық өрнек мәні 0-ге тең болады. Қатынас операциясының приоритеті арифметикалық операцияларға қарағанда, төмен және меншіктеу операторымен салыстырғанда жоғары болады. Ал қатынас операцияларын приоритеттеріне сәйкес етіп екі топқа бөлуге болады. Мұнда соңғы 4 операцияның приоритеті 1-ші және 2-ші операциялар приоритетімен салыстырғанда жоғары болады. Логикалық оператор. Екі немесе бірнеше шарттық өрнектерді біріктіру үшін логикалық оператор қолданылады. Си тілінде келесі логикалық операторлар бар: 1) және (&&) операциясы; f1 && f2 2) немесе || (or) операциясы; f1 || f2 ( | коды - 124 ) 3) терістеу ! (not) операциясы. !f1 Терістеу (емес, қарсылық) операциясының приоритеті өте жоғары, одан тек жақша ішіндегі мәндердің проритеті жоғарылау болады. && операциясының приоритеті|| (or) операциясымен салыстырғанда жоғары, ал осы екеуінің приоритеттері қатынас операцияларымен салыстырғанда төмен, меншіктеу операциясынан жоғары болады. |