Си тіліндегі өрнектер және меншіктеу операторы

Автор работы: Пользователь скрыл имя, 29 Апреля 2012 в 07:36, курсовая работа

Описание

Си тiлi В тiлiнiң негiзiнде дамыды. Си тiлiн Bell Laboratories-те 1972 жылы Деннис Ритчи DEC PDP-11 компьютерiнде жасады. Си BCPL және В тiлдерiнiң көптеген маңызды концепцияларын және мәлiмет типтерiн және басқа да қасиеттерiн қолданды. Си тiлi UNIX операциялық жүйесiн өңдеудегi тiл ретiнде кеңiнен танымал болды. Қазiргi таңда барлық операциялық жүйелер Си және Си++ тiлдерiнде жазылған. Соңғы он жылдықта Си тiлi көптеген компьютерлерде қолайлы болды.

Содержание

КIРIСПЕ....................................................................................................................3
1 бөлім. Си программалау тіліне кіріспе
1.1. Си бағдарламау тілінің мүмкіндіктері мен кемшіліктері.............................5
1.2. Бағдарлама құрылымы.....................................................................................8
1.3. Си тіліндегі негізгі операциялар...................................................................12
2 бөлім. Си тіліндегі өрнектер және меншіктеу операторы
2.1. Си тілінің операторлары. Меншіктеу операторы .......................................14
2.2. Меншіктеу операторлары және шартты өрнек............................................17
Қорытынды............................................................................................................21
Пайдаланылған әдебиеттер тізімі........................................................................23

Работа состоит из  1 файл

си тіл өрнектер.doc

— 103.00 Кб (Скачать документ)

Си тілінде sіzeof деген құрылған операция бар, ол объектінің байт бойынша мөлшерін береді. Мысалы:

Prіntf(“double мəліметтер типі %d байт. \n”, sіzeof(double));

Символдық қатарлар. Символдық қатар - бұл бір немесе бірнеше символдардан тұратын тізбек. Си тілінде қатарды бейнелейтін арнайы тип жоқ. қатарларды char типті массив элементтері деп қарастыруға болады. қатарлардағы символдарды жадыдағы көрші ұяшықтарда орналасқан деп қарастыруға болады - əр ұяшықта бір символдан. Массивтің соңғы элементі \0 болып табылады.


1.3. Си тіліндегі негізгі операциялар

Ең жалпы операция меншіктеу болып табылады. Си тілінде меншіктеу операторы V=A деп жазылады, мұндағы V - айнымалы, А - өрнек. Тағы да тізбекті меншіктеуді қолдануға болады, келесі түрдегі мысалдағыдай: sum=a=b.

Меншіктеу оңнан солға қарай жүреді, яғни b a-ға меншіктеледі, жəне осы sum-ға 10 меншіктеледі де, үш айнымалы да бірдей мəн қабылдайды (яғни бастапқы b айнымалысының мəніне).

Си тілі қарапайым арифметикалық операциялар жиынтығын қолдайды: * - көбейту, / - бөлу, модуль бойынша бөлу - %, + - қосу, - - азайту.

Модуль бойынша бөлу бүтін сандық арифметикада қолданылады. Оның нəтижесі бүтін сандарды бөлген кездегі қалдық болып саналады.

Мысалы: 20%3=2 + жəне - операцияларының үстемдігі *, / жəне % операцияларының үстемдігінен төмендеу, жəне өз кезегінде олардың үстемдігі унарлық минус үстемдігінен төмен. Мысал қарастырайық:

Maіn()

nt m1, m2;

m1=m2=-(15+3)*5+(11+9*(8+3))-266%16;

(* m1=m2=10; (операция оңнан солға дейін орындалады *)

prіntf ("m1=%d\n", m1);

prіntf ("%d\n", m2/3); }

Арттыру жəне азайту операциялары: ++ жəне - -. Бұл операциялар кез келген операторға 1-ді қосуға немесе азайтуға мүмкіндік береді. Көрсетілген операциялардың екі формасын ажыратады, постфикстік жəне префикстік. Олар өз арасында тек қай кезде арттыру немесе азайту болатынына байланысты ажыратылады. Арттыру жəне азайту операциялары өрнектің ортасындада орындалуы мүмкін, жəне де осы операциялар өрнек есептелгеннен кейін де, есептелмей тұрып та орындалуы мүмкін.

Азайту жəне арттыру операциялары жоғарғы үстемдікке ие, тек домалақ жақшалардың үстемдігі жоғарырақ.

Типтерді түрлендіру.

Егер өрнекте əр түрлі типті операндтар қолданылса, онда олар қандай да бір жалпы типке түрленеді. Компилятор автоматты түрде типтерді түрлендіруде ережелер жиынтығын қолданады. Типтерді түрлендірудегі негізгі ережелерді келтірейік:

1. Егер операция екі əр түрлі типтер мəліметтері бойынша орындалса, онда екі шамада “жоғарғы” типіне түрленеді. Бұл процесс типтің “жоғарылауы” деп аталады.

2. “Жоғары” типтен “төменгі” типке дейінгі реттелген типтер тізбегі мына түрде болады:

double, float, long, іnt, short жəне char. Unsіgned кілтті сөзі қолданылса, сол тип сəйкесінше рангы көтеріледі.

3. Меншіктеу операторында оң жағындағы өрнек орындалғаннан кейінгі соңғы нəтиже осы мəн тең болатын айнымалының типіне түрленеді. Бұндай процесс типтің “жоғарылауына” немесе “төмендеуіне” əкеледі (екінші жағдайда шама төмен үстемдіктегі мəліметтер типіне түрленуі мүмкін). Типтің “жоғарылауы”, əдетте, жұмсақ өтеді, ал “төмендетуді” жадыдағы мəліметтерді білу арқылы орындау қажет.

Тағы да бір типтерді түрлендіру түрі. Арифметикалық операцияларды есептегенде дəлдікті сақтау үшін барлық float типті шамалар double мəліметтер типіне түрленеді. Бұл дөңгелектеу қателігін едəуір азайтады. Соңғы нəтиже қайтадан float типті санға айналады, егер бейнелеу операторы солай берілсе.

Келтіру операторлары. Жоғарыда келтірілген типтерді түрлендіру автоматты түрде жүзеге асады. қандай да бір шамаға келтіруге қажет мəліметтер типін көрсетуге мүмкіндік бар.


2 бөлім. Си тіліндегі өрнектер және меншіктеу операторы

2.1. Си тілінің операторлары. Меншіктеу операторы

Алғашқы оператор көрсетілген айнымалылардың мәндері пернелер арқылыараларына бір бос орын қалдыру арқылы енгізілген соң, курсорды келесі қатарға көшірмейді. Ал readln (read line – қатарды оқу деген сөздің қысқартылуы) пернелерден мәндер енгізілгеннен кейін курсорды келесі қатарға көшіріп жібереді. Соңғы жазылған параметрсіз оператор ешбір мән енгізбей, тек курсорды келесі қатарға көшіру қызметін атқарады.

Енгізілетін айнымалылардың мәндері integer, real, char, string типтеріне жатуы мүмкін. Логикалық айнымалылардың мәндері енгізілмейді. Айнымалылар мәндері өз типтеріне сәйкес Си тілінің ережесі бойынша енгізіледі. Егер ол шарт бұзылса (мысалы, а1 типі integer болсыа, ал енгізілгенде char типтес мән терілсе), онда экранға енгізу-шығару қатесі шығады, яғни I/O error XX шығады, мұндағы ХХ – бүтін сан түріндегі қатенің сипатына сәйкес коды.

Меншіктеу операторы, барлық тілде пайдаланылатын негізгі оператор. Математикадағы қарапайым теңдеу тәрізді айнымалыларға сандық немесе символдық мән беру бұл жағдайда меншіктеу операторы деп аталады. Ол жазылған өрнектердің мәнін есептеп, оны айнымалыға меншіктеу үшін қолданылады.

Жалпы түрі:

<айнымалы атауы>:= <өрнек>;

мұндағы <айнымалы атауы> — айнымалы идентификаторы, := — меншіктеу белгісі, ал <өрнек> — арифметикалық өрнек немесе сан.

Бұл оператор екі міндет атқарады:

- айнымалылардың белгілі мәндері бойынша арифметикалық өрнектің сандық мәнін есептейді;

- табылған мән айнымалы атауына меншіктеледі.

Си тілінде нәтижені экранға шығару Write (жазу) операторы арқылы бейнеленеді.

Write (a1, a2, …,an);

Writeln (a1, a2, …,an);

Writeln;

Жақша ішінде жай айнымалылар немесе апострофтармен қоршалған символдар тобы болуы мүмкін. Шығарылатын мәндердің түрі айнымалалардың типі арқылы анықталады, олар integer, real, char, string, boolean (true, false) сияқты типтер түрінде беріле береді. Шығарылатын параметрлер бір-бірімен үтір арқылы ажыратылып, Write түйінді сөзінен соң жай жақша ішіне жазылады. Шығару операторында жақша ішінде қағазға немесе экранға шығарылатын мәннің пішімін — оның алатын орнын, яғни енін толық көрсетуге болады. Бүтін санды оның енін көрсете отырып экранға шығаруға болады, мысалы: b айнымалысының бүтін түрдегі мәнін көрсету:

Write (b:n) арқылы жүзеге асырылады. Мұндағы b — айнымалының атауы; ал n – мәні бүтін сан болып келетін тұрақты түрінде берілген орын саны, оны бірден бүтін санмен де жазуға болады.

Тілдің кез-келген өрнегі операторлардан (айнымалылар, константалар) , операцияларынан тұрады.

Меншіктеу операторы –х=у.

Х айнымалысына у айнымалысының мәнін меншіктейді. «=» белгісін бірнеше рет бір өрнектің ішінде жазуға болады. Мысалы: х=y=z=100

Арифметикалық операциялар -+-/,*,% символдары жазылды. Процентті нақты санға қолдануға болмайды. Мыс: а=d+c; x=y-z;

z=t*v;

s=k/l;

p=g%w;

Мыс:в=в1=2,с=с1=4 онда операция орындалып болғаннан кейін а=7,в=2,с=5,а1=7,в1=2,с1=7.

Типтерді түрлендіру.

Егер өрнекте әр түрлі типті операндылар бар болса,оларды бір жалпы типке келтіру керек.Ол үшін мынандай функциялар тізімі бар.

1.Егер операндылардың біреуінің типі double болса ,онда қалғаны да сол типке келтіріледі.

2.Немесе long болса қалғаны да сол типке келтіріледі.

3.Немесе float типті болса қалғаны сол типке келтіріледі.

4.Немесе unsignet болса қалғаны сол типке келтіріледі.

5.long болса қалғаны сол типке келтіріледі.

6. unsignet болса қалғаны сол типке келтіріледі.

7.int болса қалғаны сол типке келтіріледі.

int a=30000;

float b;

- - - - -

b=(float)a*12;

Көрсеткіштер(указатели) және олармен операциялар. Көрсеткіш-жадының адресін көрсететін айнымалы.

Унарлық операция (*)-өзінің операндыларын бөтен бір объектілердің адресі ретінде қолданылады.Сондықтан да z=*y z-ке у адресінде жазылған айнымалының мәнін меншіктейді.Егер у=*x;z=*y болса онда z=x;  белгісінен тұратын объектілерді былай белгілеу қажет:

int *a,*b,*c, char*d;/*-dадресінде жазылған айнымалының мәні char дегенді білдіреді.

Көрсеткіштер өрнектерде де қолданылуы мүмкін:

у=7;/7санын у адреске салады*/

*х*=5/*x адресіндегі мәнде 5-ке көбейту.*/

(*z)++; /*-z адрестегі мәнге 1-ді қосады.

Көрсеткіштерді арифметикалық өрнектерде операнд ретінде де қолдануға болады. Егер у көрсеткіш болса, онда у ++ оның мәнін өсіреді. Енді ол келесі элементтердің адресі болдады.


2.2. Меншіктеу операторлары және шартты өрнек

Біріктірілген бинарлық операторға <ор>= меншіктеу операторы сәйкес келеді, мұндағы <ор> – мына операторлардың бірі: +, -, *, /, %, <<, >>, &, ^, |  бола алады. Мына жазба < өрнек1> ор = < өрнек2> төмендегі өрнекпен эквивалентті: <өрнек1> = <өрнек1> ор <өрнек2> .

Мысалы,

x+=5; {x=x+5 өрнегімен эквивалентті }

y*=2; {y=y*2 өрнегімен эквивалентті }

Шартты өрнек. «?=» тернарлық операторының көмегімен шартты өрнек құруға болады. Жалпы жазылу форматы мынадай: «өрнек1» ? «өрнек2» : «өрнек3»

Алдымен «өрнек1» есептелінеді, егер оның мәні нөлге тең емес болса, яғни ақиқат мән қабылдаса, онда «өрнек2» есептелінеді де оның мәні шартты өрнек мәні болып табылады, әйтпесе «өрнек3» орындалады да, соның мәні қабылданады.

Мысалы, z=(a>b)?a:b өрнегі z=max(a,b) математикалық өрнегін программалауда қолданылады.

Сызықтық алгоритм бірнеше меншіктеу операторынан тұрады. Мұндай алгоритмді Си тілінде жазудың ешқандай қиындығы жоқ. Тек өрнектердің   Си тілінде қабылданған жазылу тәртібін сақтасақ жеткілікті. Мұндай операторлар бір қатарға орналаса алады. Алгоритмдік тілде “;” нүктелі үтір арқылы ажыратылып жазылады.

Мысалы,

алг трапеция ауданы (нақ a, b, h, s)

берілгені a, b, h

керек s

басы

s: =(a+b) /(2*h)

соңы 


 

 

 

 

Бұл алгоритм С++ тілінде былайша жазылады:

              10 REM Трапеция ауданы

              20 INPUT A!, B!, H!

              30 LET S = (A+B) / (2*H)

              40 PRINT “Трапетцияның ауданы S = ” ;  S

              50 END

  

С++ тілінің операторларын мына төмендегідей мүмкіндіктерге ие топтарға жіктеуге болады.

- мәндерді есептейді және оларды айнымалыларға меншіктейді;

- информацияны ендіреді және нәтижелер мен хабарларды баспаға шығарады;

- есептеулердің орындалуын басқарады;

Компьютерде программаның орындалуы кезінде айнымалы шама әр түрлі мәндер қабылдауы мүмкін. Дербес жағдайда есептелетін арифметикалық өрнектің мәні меншіктеу операторы арқылы айнымалы шамаға меншіктеледі.

С++ тілінде бұл амал “=” таңбасымен белгіленеді. Меншіктеу белгісінің сол жағына айнымалының аты, ал оң жағына арифметикалық өрнек жазылады. Бұл амалды орындайтын арнайы меншіктеу операторы бар.

Оператордың жазылу пішімі: к LET v = e

Мұнда к- қатар нөмірі; LET-оператордың аты; v- айнымалының аты; е-арифметикалық өрнек (жеке жағдайда сандық немесе литерлік тұрақты немесе сандық және литерлік айнымалы болуы мүмкін).

Меншіктеу операторының орындалуын екі кезеңге бөлуге болады:

• е өрнегінің мәні есептеледі;

• е өрнегінің есептелетін мәні v айнымалысына меншіктеледі, яғни v айнымалысына бөлінген жады ұяшығына жіберіледі.

Егер е сандық тұрақты немесе айнымалы болса,онда бірінші кезең орындалмайды.

Мысал келтірейік:

1. LET  X%=1-бүтін айнымалы Х-ке  1 саны меншіктелед;

2. LET А=27,4- нақты айнымалы А-ға 27,4 саны меншіктелед;

3. LET А$ = «Мектеп» -символдық (мәтіндік) айнымалы А$-ға литерлік тұрақты «Мектеп» сөзі меншіктеледі.

Ал мына мысалдарды жоғарыда аталған бірінші кезең орындалады:

• LET Х=А* SIN(T)-нақты айнымалы х-ке а Sin t өрнегінің есептелген мәні меншіктеледі.

• LET C$=A$+B$ -символдық айнымалы C$-ға символдық айнымалылар A$ мен B$-ның ағымдағы мәндерінің қосылуынан пайда болған нәтиже меншіктеледі.

Осылайша   LET операторының орындалар алдында "=" меншіктеу таңбасының оң жағындағы өрнектегі барлық айнымалылардың мәндері, басқаша айтқанда е өрнегі анықталған (есептелген) болуы тиіс. Мына төмендегі программада 10,20,30 – қатарлардағы операторлар орындалғанда бірінші кезең орындалмайды, ал 40,50-қатарлардағы операторлар орындалғанда бірінші кезең орындалады.

10 LET  А=5

20 LET B=3

30 LET C=-2

40 LET D=B^2-4*A*C

50 LET K= «Дискриминантты есептеу»

60 PRINT"D=;K=;K

C++ тіліндегі "=" меншіктеу таңбасы мен кәдімгі математикадағы теңдік таңбасының арасында үлкен айырмашылық бар. Мысалы, математикалық жазуда мына Х=X+1 өрнегі дұрыс емес, ал C++  тіліндегі 30 LET Х=X+1 жазылуы дұрыс және мынадай мағына береді:

• жадтың Х атты ұясынан айнымалының мәні алынады;

• бұл алынған мән бірімен қосылады да Х+1- ге жаңа мән жасалады;

• осы пайда болған Х+1 мәні Х атты жады ұясына ондағы алғашқы мәнді өшіріп өзі орналасады. Мысалы,

Информация о работе Си тіліндегі өрнектер және меншіктеу операторы