C cons

5,082 views
4,662 views

Published on

Давтан суралцагчдад

Published in: Education
3 Comments
13 Likes
Statistics
Notes
No Downloads
Views
Total views
5,082
On SlideShare
0
From Embeds
0
Number of Embeds
588
Actions
Shares
0
Downloads
0
Comments
3
Likes
13
Embeds 0
No embeds

No notes for slide

C cons

  1. 1. Програмчлалын Си хэл Програмчлалын хэлний тухай ойлголт, Програмчлалын Си хэл Програмчлалын хэлний тухай үндсэн ойлголт, төрлүүд Компьютерийн техник хангамжуудыг ашиглан, тодорхой удирдлагын доор дэс дараалан биелэх бүлэг үйлдэл болон мэдээллийг боловсруулах боломжоор хангаж өгсөн өгөгдлийн бүтцийг програм хангамж гэж нэрлэнэ. Компьютерийн програм хангамж нь ямар ч зориулалттай байж болно. Тэрхүү програм хангамжийг хэн хүссэн хүн өөрийн хэрэгцээнд ашиглах бүрэн боломжтой. Харин тэрхүү програм хангамжийг шинээр зохиох гэдэг танаас багагүй хэмжээний хичээл зүтгэлийг шаардана. Нэгэнт зохиогдон ашиглагдахад бэлэн болсон програм хангамжийг хэрэглээний програм гэдэг. Харин тэрхүү хэрэглээний програмыг зохиохын тулд бид програмчлалын хэлийг ашиглана. Хэдийгээр компьютер үүссэн цагаас эхлэн нэлээн тооны програмчлалын хэлүүд зохиогдож байсан боловч өнөө үед өргөн хэрэглэгддэг цөөхөн хэдэн хэл байдаг. Эдгээрээс бид C гэсэн програмчлалын хэлийг үзэх гэж байна. Программчлалын хэлийг ашиглан программ бичихэд доорх алхмуудыг гүйцэтгэх ѐстой. Үүнд: 1. Алгоритм зохиох ( Designing ): Бодлого бодохдоо бүр нарийн алгоритм зохиоход хүрнэ. 2. Алгоримтын дагуу программын кодыг бичих ( Coding ): Алгоритм нэгэнт тодорхой болсон тохиолдолд уг програмд хэдэн ширхэг хувьсагч, тогтмол ашиглагдахыг шийдэж тэдгээрийг тодорхойлж өгнө. Хувьсагч болон тогтмол утгууд, тэдгээрийг тодорхойлох тухай доор дэлгэрэнгүй үзэх болно. Уг хувьсагчууд, тогтмолууд болон өмнөх алхамд зохиосон алгоритмаа ашиглан програмын үйлдлүүдийг C хэлний текст засварлагчийн тусламжтайгаар бичиж өгнө. 3. Хөрвүүлэлт хийх (Compilnig ): Программаа бичиж дуусаад хөрвүүлэлт хийнэ. Ингэхэд програм зохиогчийн бичиж өгсөн командуудыг хөрвүүлэн биелэх файл үүсгэнэ. Энэ ажиллагааг компиляци буюу хөрвүүлэлт хийх гэж нэрлэх бөгөөд хөрвүүлэлт хийдэг системийг компилятор гэж нэрлэдэг. Компилятор програмд бичигдсэн бүх командуудыг шалгаж үзээд, хэрэв үл ойлгогдох бичлэг ч юмуу, ер нь ямар нэгэн алдаа гарсан тохиолдолд хэрэглэгчид мэдээлж, компиляцийг зогсооно. Энэ тохиолдолд эргэж 2-р алхамдаа шилжих бөгөөд програмын командууд дотор байгаа алдаануудыг засч дахин хөрвүүлэлт хийх шаардлагатай болдог. Программ КСТ-ийн багш Э.Ононтуул 1
  2. 2. Програмчлалын Си хэл ганц ч алдаагүй болсон тохиолдолд л биелэх файл буюу ашиглахад бэлэн болсон хэрэглээний програм үүснэ. 4. Програмыг шалгах (Testing ): Хөрвүүлсний дараа програмаа сайтар шалгах нь зүйтэй. Хэдийгээр програм огт алдаагүй хөрвөсөн ч гэсэн таны хүссэн маягаар ажиллахгүй, хэрэгцээтэй зөв үр дүнг өгөхгүй байж магадгүй. Энэ тохиолдолд алдааг компилятор бус, харин та өөрөө олох хэрэгтэй болно. 5. Сайжруулах ( Developing ): Зохиосон програм нэгэнт ном ѐсоороо ажиллаж байгаа бол одоо уг програмд байгаа ашиглагдаагүй хувьсагч, тогтмол, функц, макро, илүү болон давхар хийгдэж байгаа үйлдлүүд гэх мэтчилэн програмын хурд ба хэмжээнд сөргөөр нөлөөлж болох зүйлсийг олж засах хэрэгтэй. Ингэснээр програм санах ой болон дискэн дээр эзлэх хэмжээ нь багасах, үр дүнд нь програмын ачаалах болон биелэх хурд ихсэх зэрэг олон талын сайн үр дүнд хүрэх боломжтой юм. КСТ-ийн багш Э.Ононтуул 2
  3. 3. Програмчлалын Си хэл Програмчлалын Си хэлний тухай ойлголт, цагаан толгой, элементүүд Си хэл нь анх үйлдлийн системд зориулагдан бүтээгдсэн хэл бөгөөд сурахад хялбар, маш бага кодчилол хийх боломжтой хэл юм. Си программ нь функцуудын олонлогоос бүрдэх бөгөөд эдгээр функцууд нь нэг буюу хэд хэдэн эх файлд хадгалагдаж болно. Эдгээр эх файл бүр нь тус тусдаа хөрвүүлэгддэг. (машины хэлд) Си программд зөвхөн нэг л функц “main” нэртэй байж болох бөгөөд бусад функцууд нь дурын байдлаар нэрлэгдэж болно. Си программ бичихэд ядаж нэг функц заавал бичих бөгөөд энэ нь “main” функц юм. Си хэлний функц нь бас процедурын үүрэг гүйцэтгэнэ. Ө.х Си хэл нь бусад хэл шиг функцийг функц, процедур гэж ялгадаггүй. Си хэл дээр бичигдсэн программ “main” функцээс эхэлж ажиллах бөгөөд хэрвээ программ хэвийн ажилласан бол энэ функцээр үйл ажиллагаагаа дуусгах болно. Программ ажилллах явцад “main” функц нь бусад функцийг дуудаж болох бөгөөд тэр функц нь цааш өөр функц дуудах гэх мэтчилэн үйл ажиллагаа нь үргэлжилнэ. Тухайн функц үйл ажиллагаагаа дуусгамагц түүнийг дуудсан функцэд удирдлагаа шилжүүлнэ. Программын жишээ : main() { int k; ¯íäñýí ôóíêö çàðëàõ õýñýã printf(“ Now I,ll print pi number ”); printfPI(); } Аливаа хэл дээр бичигдсэн программ нь тухайн хэлний элементүүдийг ашиглан бичигддэг. Си хэл нь дараахь элементүүдээс тогтоно. Үүнд: - Цагаан толгой - Тогтмол - Нэр / идентификатор/ - Түлхүүр үг - Тайлбар Си хэлний компилятор нь программын мөрүүдийг дэс дараалан унших бөгөөд уншигдсан мөр бүрийг тэмдэгтийн хэсгүүдэд хуваадаг. Үүнийг лексем гэдэг. Лексем гэдэг нь программын текстийн нэгж бөгөөд Си хэлний компиляторын хувьд бие даасан утгыг агуулна. Лексемийн жишээ: [] – дунд хаалт КСТ-ийн багш Э.Ононтуул 3
  4. 4. Програмчлалын Си хэл () –бага хаалт 4 {} – их хаалт тогтмолууд, нэрүүд г.м. Цагаан толгой: “Си” хэлний цагаан толгойд том, бага латин үсгүүд, 0-9 хүртэлх цифрүүд, хоосон зай буюу пробелийн тэмдэгтүүд, тусгаарлагч элементүүд, тусгай тэмдэгт, үйлдлийн тэмдэгт гэх мэт орно. Латин цагаан толгойн том үсгүүд - ABCDEFGHIJKLMNOPQRSTUVWXYZ - Латин цагаан толгойн жижиг үсгүүд АbcdefghIjklmnopqrstuvwxyz - Аравтын цифр 1234567890 Үсэг ба цифрүүд нь тогтмол, идентификатор, түлхүүр үгүүдийг бичихэд ашиглагддаг. Хоосон зай буюу пробелийн тэмдэгтүүд: Пробел, табуляци ( тодорхой урттай хоосон зай ), мөр шилжүүлэх зэргийг пробелийн тэмдэгтүүд гэж нэрлэдэг. Эдгээр тэмдэгтүүд хоорондоо лексемээр ялгагдана. Тусгаарлагч: Си хэл нь олон тооны тусгаарлагч тэмдэгтүүдтэй бөгөөд тус тусдаа өөр өөрийн үүрэгтэй байдаг. Тусгаарлагчийг (Хүснэгт 1.1)-т үзүүлэв. хүснэгт 1.1 Тэмдэгт Тайлбар Тэмдэгт Тайлбар , Таслал Анхааруулах тэмдэг . Цэг ² Босоо зураас  Цэгтэй таслал / Налуу зугаас : Хоѐр цэг Эсрэг зураас ? Асуултын тэмдэг ~ Далд тэмдэг ٔ Апостроф _ Доогуур зураас () Бага хаалт # Дугаарын тэмдэг % Хувь & Амперсанд {} Их хаалт - Хасах тэмдэг = Тэнцүү тэмдэг ! ˆ Дээрээ сум хэлбэрийн < дээд хаалт + Нэмэх тэмдэг > Багын тэмдэг * үржих т эмдэг [] Ихийн тэмдэг Дунд хаалт Тусгай тэмдэгтүүд: Тусгай тэмдэгтүүд нь графикаас бусад тэмдэгтэн тогтмол ба мөрөн дэх хоосон зайн тэмдэгтүүдэд зориулагдсан байдаг. Тэдгээр тусгай тэмдэгтүүдийг ашиглан принтер ба дэлгэц рүү мэдээллийг гаргах, буцаах КСТ-ийн багш Э.Ононтуул
  5. 5. Програмчлалын Си хэл үйл ажиллагаанд ашиглаж болно. Тусгай тэмдэгтүүд нь эсрэг налуу зураас ( )-тай хамт хэрэглэгдэнэ. Зураасны ард ямар нэг үсэг, цэгэн тэмдэгт, хувилбарттай цифрүүд байдаг. Yүнийг ( Хүснэгт 1.2) –т үзүүлэв: Хүснэгт 1.2 Тусгай 16-тын тэмдэгт код Тайлбар n 0A Шинэ мөрөнд шилжих t 09 Хэвтээ мөрөнд зай шилжих v 0B Босоо мөрөнд зай шилжих b 08 Нэг тэмдэгт урагшлах r 0D Мөрний эхэнд шилжих f 0C Шинэ хуудсанд шилжих a 07 Сигнал өгөх ‟ 2C Тэмдэгт хэвлэх " 22 Тэмдэгт хэвлэх 5C Эсрэг налуу dd 8-тын систем дэх байт утга xdd 16-тын систем дэх байт утга рrintf(“Нийт элемент : %dn”,summer): summer хувьсагчийг хэвлэнэ. Курсорыг шинэ мөрөнд шилжүүлнэ. xdd-нэгээс хоѐр хүртэлх 16-тын дараалсан цифр бүхий санамсаргүй байт утгыг авдаг. #define NEW_ROW 'n' /* шинэ мөрөнд шилжих ASCII код */ #define COUNT_1 'х8'/*COUNT_1 нь 16-тын тооны ASCII код */ mail() {printf("string") ; putchar ('b');} Yйлдэл: Си хэлний компиляртор нь өөрийн лексемээр үйлдлийн тэмдэгтүүдийн хувилбар бүрийг тайлбарладаг. ( хүснэгт -1.3) –т үйлдлүүдийг үзүүлэв. хүснэгт -1.3 үйлдэл Тайлбар үйлдэл Тайлбар ! Логик биш && Логик ба ~ Сөрөг тэмдэг II Логик буюу + Нэмэх тэмдэг ?: Нөхцөлт үйлдэл - Хасах ++ Нэгээр нэмэгдүүлэх * үржих -- Нэгээр хорогдуулах / хуваах += Нийлбэр олгох % үлдэгдэлтэй хуваах -= Ялгавар олгох << битээр зүүн тийш шилжих *= үржвэр олгох >> битгээр баруун тийш шилжих /= ноогдвор олгох КСТ-ийн багш Э.Ононтуул 5
  6. 6. Програмчлалын Си хэл < бага %= үлдэгдэл олгох <= бага буюу >>= баруун тийш шилжүүлэх > тэнцүү <<= зүүн тийш шилжүүлэх >= их &= бит and олгох == их буюу тэнцүү |= бит or олгох != тэнцүү биш ^= бит xor олгох & ба, хаяг ^ бит xor буюу (зөвхөн буюу ) | буюу ?: үйлдлийг хэрэглэхдээ 2 биш 3-н тэмдэгтэн үйлдлийн хооронд хийнэ. Идентификатор: Хувьсагчид болон функцийн нэрийг идентификатор гэнэ. Си хэлний идентификатор нь үсэг, тоо, доогуур зураас тэмдэгтээс бүрдсэн 32 тэмдэгт хүртэлх урттай байж болно. Идентификаторийг том болон жижиг үсгээр бичиж болох ба Си хэлэнд том жижиг үсгийг ялгаатайд тооцдог. Өөрөөр хэлбэл Count, count, COUNT гэсэн гурван нэр нь гурвуулаа ялгаатай нэрүүд болно. Практикаас үзэхэд өөрийн бичих программаа илүү ойлгомжтой болгохын тулд хувьсагчдын нэрийг жижиг үсгээр, тогтмолуудыг том үсгээр бичиж ашигладаг. Зөв идентификатор Буруу идентификатор far_out Tom‟s TIME whicha$macallit age %dollar time do-it Зөвлөгөө :  Хувьсагчийн нэрийг үсгээр эхлэх  Хувьсагчийг түлхүүр үгтэй ижлээр нэрлэж болохгүй. ( do, while , if , int, float, case . . . )  Хувьсагчдыг гүйцэтгэж байгаа үүрэгтэй нь зохисон нэрээр нэрлэх  Дотоод хувьсагч ялангуяа индекс зэргийг богино, гадаад хувьсагчийг арай уртаар нэрлэхэд тохиромжтой. Түлхүүр үг: Си хэлэнд бүх түлхүүр үгийг жижиг үсгээр бичдэг. Хувьсагчийн нэр нь түлхүүр үгтэй яг ижил байж болохгүй. Гэхдээ бичлэгийн хувьд түлхүүр үгээс ялгаатай байж болно. Жишээ нь : Түлхүүр үг Хувьсагч for FOR КСТ-ийн багш Э.Ононтуул 6
  7. 7. Програмчлалын Си хэл if IF 7 Хүснэгт 4.1 int extern else char register for float typedef do double static while struct goto switch union case long return sizeof default short break auto unsigned continue if asm cdecl huge interrupt pascal void const volatile enum signed _cs near _es _ss far _ds Тайлбар: Энэ нь дараалсан тэмдэгтүүд байна. Бичигдэх хэлбэр: /* тайлбар */ КСТ-ийн багш Э.Ононтуул
  8. 8. Програмчлалын Си хэл Хувьсагч, тогтмол, илэрхийлэл, оператор Бүх программчилалын хэлүүд хувьсагч тодорхойлж, өгөгдөлтэй ажиллах тодорхой механизмуудтай байдаг. Си хэлэнд энгийн өгөгдлийн төрлүүд болох бүхэл, бодит тоо, тэмдэгтэн төрлүүдтэй ажиллах олон арга замууд байдаг. Бусад программчилалын хэлүүдэд байдаггүй тийм аргууд нь Си хэлийг улам ч хүчирхэг болгодог. Энэ бүлэгт үзэх санаануудыг Си хэлэнд эхлэн суралцагч хэн бүхэн сайн ойлгох хэрэгтэй. Өгөгдлийн төрлүүд болон тэдгээртэй ажиллах үйлдлүүдийн олонлог нь Си хэлийг улам уян хатан болгодог ч, зарим талдаа буюу Си хэлийг төгс эзэмшиж ойлгоход хүндрэлтэй байдаг талтай. Энгийн өгөгдлийн төрлүүд Си хэлэнд 4 үндсэн энгийн төрөл байдаг. int Энэ төрлийн хувьсагч бүхэл тоон утга агуулна. Гэхдээ авах утгууд нь зарим төрлийн систем дээр өөр өөр байдаг боловч ихэнхдээ 1 үг буюу 2 byte урттай байдаг. Int утга : -32768 . . . 32767 ( тэмдэгтэй ) char Энэ төрлийн хувьсагч нь тэмдэгт утга агуулна. Char утга нь 1 byte –ийн хэмжээтэй байдаг. Char утга : -128 . . . 127 ( тэмдэгтэй ) float Энэ төрлийн хувьсагч нь бодит тоон утга агуулна. float утга нь 4 byte-ийн хэмжээтэй байдаг ба 10E-38 … 10E+38 завсар дахь бодит тоон утга агуулах чадалтай. doubl Энэ нь float төрлийн адил бодит тоон утга агуулах ба 8 byte e хэмжээтэй. Хувиргагчид Си хэлэнд дараах хувиргагчдыг хэрэглэн өгөгдлийн төрлийг хувиргаж болдог. short int Энэ нь int утгаас их биш утга авна гэсэн үг. Энэ төрлийн хэмжээ нь системээс хамааралтай байдаг. Зарим системд энэ утга нь int утгын хагас хэмжээтэй байхад заримд нь адил хэмжээтэй байдаг. long int int-ээс 2 дахин том гэсэн үг. Мөн системээс хэмжээ нь хамаардаг ба ихэнхдээ 2 үгийн урттай байдаг. long float float утгаас 2 дахин том буюу double төрөл гэсэн үг. unsigned int Энэ нь int төрлийн утгыг тэмдэггүйгээр хадгална гэсэн үг. КСТ-ийн багш Э.Ононтуул 8
  9. 9. Програмчлалын Си хэл Өөрөөр хэлбэл дан эерэг утга авах буюу int утгаас 1 битээр 9 том гэсэн үг. Хүснэгт 4.2 Өгөгдлийн төрлүүдийн хэмжээ Төрөл byte-аар битээр char 1 8 int 2 16 short 2 16 long 4 32 unsigned 2 16 float 4 32 double 8 64 short, long, unsigned хувиргагчид нь int утганд хэрэглэгддэг. Иймээс Си хэлэнд дараах бичлэгүүд адил утгатай байдаг. short int = short long int = long unsigned int = unsigned Хувьсагчид Хувьсагч гэдэг бол тодорхой төрлийн утгыг хадгалж чадах обьект юм. Хувьсагчийг зарлахдаа өгөгдлийн төрөл болон идентификаторыг ашигладаг. Бичигдэх нь : <төрөл> <утга> Жишээ нь : char ch; short i,j; Си хэлэнд хувьсагчийг зарлахгүй байж болдог. Хэрэв хувьсагч нь зарлагдаагүй бол түүнийг int төрөлтэй гэж тооцно. Ө.х Си хэлэнд int хувьсагчийг зарлахгүй байж болно. Гэхдээ бүх хувьсагчаа зарлаж байх нь илүү найдвартай. Хувьсагчид анхны утгатай болох хүртлээ тодорхойгүй төлөвт байна. Хувьсагчид анхны утга олгох 2 арга байдаг. 1. Хувьсагчийг анх зарлахдаа анхны утгыг нь олгож болно. int last = 32767; char capc=‟C‟; float pi = 3.141593; double expo=1.0e6; Энэ арга нь тодорхой хэдэн төрөлд л үйлчилдэг. 1. Утга олгох үйлдэл ашиглан анхны утга олгож болно. КСТ-ийн багш Э.Ононтуул
  10. 10. Програмчлалын Си хэл main() 10 { int last; char capc; float pi; double expo; last = 32767; capc=‟C‟; pi = 3.141593; expo=1.0e6; } Тогтмолууд Программын амьдралын туршид тогтмол утгатай байх обьектыг тогтмол гэж нэрлэнэ. Си хэлэнд тогтмолыг зарлах үндсэн 2 арга байдаг. 1. #define түлхүүр үгээр тогтмолыг зарлах 2. const түлхүүр үгээр зарлах #define тэмдэглэгээг ашиглан зарлахдаа эхлээд тогтмолын нэр , дараа нь оруулах утгыг тодорхойлдог. Харин #define – ийг ашиглахдаа ; -аар төгсгөдөггүйг анхаар. Бичигдэх хэлбэр нь : #define <Тогтмолын нэр> <утга> #define TRUE 1 #define коммандыг main() функцийн биенээс гадна ашиглах ѐстой. #include <stdio.h> #define TRUE 1 #define FALSE 0 main() { ... } „const‟ түлхүүр үгийг ашиглан тогтмол зарлах : Бичигдэх хэлбэр : const <төрөл> <Нэр>=<утга>; Жишээ : const float pi=3.1415; const int Max=100; КСТ-ийн багш Э.Ононтуул
  11. 11. Програмчлалын Си хэл Тогтмолыг ингэж зарласны дараа үндсэн программд дараах үйлдлүүдийг хийхийг хориглоно. main() { pi=3.1; Max=50; pi=pi+1; } Төрлийн хувиргалт Си нь ялгаатай төрлүүдийн хооронд хувиргалт хийдэг. Гэхдээ программ зохиогч түүний үр дүнг тооцоолж , анхаарч байх ѐстой. Жишээ нь : char утганд int утга олгоход халилт гарах магадлалтай. Илэрхийлэл дэх обьектууд нь ялгаатай төрөл байхад Си дараах дүрмийг баримталдаг. Илэрхийлэл float үйлдэл int char үйлдэл int float үйлдэл double int үйлдэл short int үйлдэл long unsigned үйлдэл int Тайлбар үед int утгыг float болгон хөрвүүлж бодолт хийх ба илэрхийллийн үр дүн float утгатай байна. үед char утгыг int болгон хөрвүүлж бодолт хийх ба илэрхийллийн үр дүн int утгатай байна. үед float утгыг double болгон хөрвүүлж бодолт хийх ба илэрхийллийн үр дүн int утгатай байна. үед short утгыг int болгон хөрвүүлж бодолт хийх ба илэрхийллийн үр дүн int утгатай байна. int утгыг long руу хөрвүүлнэ. Үр дүн нь int утгатай unsigned утгыг int-д хөрвүүлнэ. Үр дүн нь int утгатай Хадгалах ангилал Си хэлэнд олон янзын хадгалах ангилал байдаг. Хадгалах ангилалаас нь хамаарч обьектын амьдралын хугацаа, ажиллах хүрээ тодорхойлогддог. Ихэнх хэлүүдэд зөвхөн ажиллах хүрээ нь тодорхойлогдсон байдаг. Өөрөөр хэлбэл хувьсагч, функц нь тодорхой модульд л ашиглагдах бөгөөд бусад модульд бол тодорхойгүй байна. Харин Си хэлд амьдралын хугацаа гэдэг бол чухал ойлголт байдаг. Хэрэв хувьсагч тодорхой нэг функцэд тодорхойлогдсон бол тухайн функцын ажиллах хугацаанд л амьдарна. Тэгэхээр түүний амьдрах хугацаа нь функцын ажиллах хугацаа байна. Гэхдээ хадгалах ангилалаасаа хамаарч амьдрах хугацаа нь ийм байх уу үгүй юу гэдэг нь тодорхойлогдоно. Хадгалах ангилал нь КСТ-ийн багш Э.Ононтуул 11
  12. 12. Програмчлалын Си хэл long, unsigned гэх мэт хувиргагчидтай адилаар тодорхойлогддог. Өргөн хэрэглэгддэг хадгалах ангилалууд нь auto, static, register, extern юм. Утга нь тухайн программын амьдралын хугацаанд хадгалагддаг, харин ажиллах хүрээ нь нэг функцын хүрээгээр тодорхойлогддог хувьсагчийг статик хувьсагч гэнэ. Статик хувьсагчийг static түлхүүр үгээр зарлана. Гадаад хувьсагч болон гадаад функцыг ашиглахдаа түүнийг extern түлхүүр үгээр зарлан ашигладаг. Static болон extern хувьсагчдын тухай бид сүүлд функц сэдвийг үзэхдээ дахин танилцуулах болно. auto –оор тодорхойлогдсон хувьсагчид түүнийг агуулж байгаа функцууд дуудагдах үед оршин тогтнож эхэлдэг. Удирдлага функцээс шилжихэд auto хувьсагч санах ойгоос алга болно. Тухайн машины бодит боломж ямар байгаагаас хамааруулан register төрлийн хувьсагчдыг ашигладаг. Олон дахин ашиглагдах хувьсагчийг буюу их давтамжтай хэрэглэгдэх тоолууруудыг register хувьсагчаар зарлаж болох бөгөөд энэ хувьсагч нь процессорын регистрийг эзэмших учир бусад хувьсагчийг бодвол хурдан ажилладаг. auto int k; register int t; static int i=1; extern int n; Дэлгэцэнд мэдээлэл хэвлэх printf функц Таны программ ажиллаж дуусаад тодорхой үр дүнг гаргах бөгөөд түүнийг бид үзэх буюу дэлгэцэнд үр дүн нь хэвлэгдэх зайлшгүй шаардлагатай байдаг. Си хэлэнд үүнийг хэрэгжүүлдэг printf гэсэн функц байдаг. Энэ функц нь дэлгэцэнд тоо, тэмдэгт, үг гаргахад ашиглагдана. printf функц нь маш өргөн боломжтой бөгөөд ихэнх хүмүүс боломжийг нь бүрэн ашиглаж чаддаггүй. printf функцын формат Энэ функцын үндсэн формат нь : printf(“Удирдлагын тэмдэгт мөр” ,өгөгдөл); Удирдлагын тэмдэгт мөр нь тухайн өгөгдөл ямар хэлбэрээр дэлгэцэнд гарахыг тодорхойлдог. printf(“ Жишээ %d”,1); /* Энэ жишээнд Жишээ 1 гэсэн үгийг хэвлэж байна*/ Си хэлэнд тэмдэгт мөрийг заавал хашилтанд (“”) бичдэг. Тэгэхээр удирдлагын тэмдэгт мөр нь заавал хашилтанд бичигдэнэ. Си хэлэнд бичигдсэн команд бүр “;”-аар төгсөх ѐстой. Өөрөөр хэлбэл энэ нь команд дуусч байна, үүнийг биелүүлэх ѐстой гэдгийг Си энэ тэмдэгтээр мэдэх болно. КСТ-ийн багш Э.Ононтуул 12
  13. 13. Програмчлалын Си хэл 13 Тэмдэгт мөр хэвлэх Бид дэлгэцэнд тэмдэгт мөр мэдээлэл хэвлэхдээ энэ функцыг ашиглана. printf(“ Сайн байна уу ! ”); Энэ комманд биелэгдэхэд дэлгэцэнд Сайн байна уу ! гэсэн үг хэвлэгдэнэ. printf(“ Сайн байцгаана уу !”); printf(“ Хичээлээ эхлэцгээе !”); гэсэн коммандууд юу хэвлэхийг үзэцгээе. Сайн байцгаана уу ! Хичээлээ эхлэцгээе ! Си нь тэмдэгт мөр хэвлээд дараа нь курсорыг дараагийн мөрт автоматаар шилжүүлдэггүй. Тэгвэл ингэж курсорын байрлалыг удирдахдаа Удирдлагын тэмдэгт мөр дотор тусгай тэмдэгтүүдийг ашигладаг. “a” тусгай тэмдэгтийг хэвлэхэд дуут дохио гардаг. Өмнөх жишээнд бид хоѐр тэмдэгт мөр хэвлэхэд тэд 2 мөрт биш, 1 мөрт гарч байсан . Тэгвэл одоо n тусгай тэмдэгт ашиглан энэ үйлдлийг гүйцэтгэе. Эхлээд эхний тэмдэгт мөрөө хэвлээд дараа нь курсорыг дараагийн мөрт шилжүүлэх шаардлагатай. printf(“ Сайн байцгаана уу !n”); printf“ Хичээлээ эхлэцгээе !”); Си тэмдэгт мөрийг хэвлэж байгаад n тэмдэгт дайралдангуут курсорын байрлалыг дараагийн мөрт шилжүүлдэг. Ингэсний дараа хэвлэгдэх тэмдэгтүүд шинэ байрлалаас цааш хэвлэгдэх болно. Тусгай тэмдэгтүүдийг ашигласан жишээ : printf(“Тэмдэгтtмөрtхэвлэв.n”); /* Тэмдэгт мөр хэвлэв. */ printf(“Дохио дуугарав. an”); /* Дохио дуугарав. */ printf(“Тэр ”Үгүй” гэж хэлсэн.n”); printf(“ тэмдэгтийг хэвлэв.n”); /* Тэр “Үгүй” гэж хэлсэн. */ /* тэмдэгтийг хэвлэв. */ Хөрвүүлэлтийн тусгай тэмдэгтүүд Та тэмдэгт болон тоо хэвлэхдээ тэдгээрийг яаж хэвлэгдэхийг тодорхойлох хэрэгтэй болдог. Ингэж тодорхойлохдоо хөрвүүлэлтийн тусгай тэмдэгтүүдийг ашигладаг. Хүснэгт 3.2 Хөрвүүлэлтийн тусгай тэмдэгтүүд Тэмдэгт Тайлбар %d int төрлийн утгыг төлөөлнө. %i int төрлийн утгыг төлөөлнө. КСТ-ийн багш Э.Ононтуул
  14. 14. Програмчлалын Си хэл %c Зөвхөн нэг тэмдэгт %s Тэмдэгт мөр %o unsigned int (8-т тооллын систем) %u unsigned int %x unsigned int (16-т тооллын систем) %X unsigned int (16-т) %f Бодит тоон утга [-]dddd.ddd %e Бодит тоон утга [-]d.ddd e [+/-]ddd %% % тэмдэгт %p XXXX:YYYY санах ойн хаяг %hd, %hi, %ho, %hx short int %ld, %li, %lo, %lx long int %le, %lE, %lf, %lg 14 double %Le, %LE %Lf, %Lg long double Жич : Хамгийн хялбар бөгөөд юуны түрүүнд бидэнд хэрэг болох тусгай тэмдэгтүүдийг тод хараар бичэв. Тоо, тэмдэгт хэвлэхдээ Удирдлагын тэмдэгт мөр дотор хөрвүүлэлтийн тусгай тэмдэгтүүдийг бичих ба дараа нь Удирдлагын тэмдэгт мөрийн ард хэвлэх утгуудаа таслалаар зааглан харгалзуулан жагсааж өгдөг. Жишээ : printf(“%s %d %f %cn”,”Hi”,14,-8.76,’x’); Энэ жишээ нь дараах үр дүнг хэвлэнэ. Hi 14 -8.760000 x “Hi” тэмдэгт мөр нь хашилтанд бичигдэнэ. Харин Си хэлэнд нэг тэмдэгтийг „‟ хашилтанд бичдэг. –8.76 гэсэн бодит тоог хэвлэхэд болгож хэвлэсэн байна. Си түүнийг Си хэлэнд бодит тоог хэвлэхдээ % ба f -8.760000 тэмдэгтийн хооронд . тэмдэгтийг хэрэглэн хэвлэгдэх хэлбэрийг тодорхойлно. Жишээ : printf(“%f %.3f %.2f %.1f”, 4.5678, 4.5678, 4.5678, 4.5678); Үр дүн : 4.567800 4.578 4.57 4.6 fprintf() функц Энэ функц нь өгөгдлийг урсгал (принтер,диск,файл) хэмээн нэрлэгдэх виртуал төхөөрөмжид гаргадаг. КСТ-ийн багш Э.Ононтуул
  15. 15. Програмчлалын Си хэл Бичих хэлбэр : int fprintf(FILE *stream, const char *format[, argument, . . . ]); Энэ функц нь UNIX үйлдлийн системд өргөн хэрэглэгддэг. Жишээ : #include<stdio.h> int main(void) { int n=3; float x=45.875; printf(“ Сайн байна уу ? n”); /* Дэлгэцэнд хэвлэх */ fprintf(stdprn,“ Сайн байна уу ? n”); /* Принтерт хэвлэх */ printf(“ x=%f ба n=%d n”,x,n); /* Дэлгэцэнд хэвлэх */ fprintf(stdprn,“ x=%f ба n=%d n”,x,n); /* “Принтерт хэвлэх */ } Хэрэглэгчээс өгөгдөл унших scanf() функц Энэ функц нь гараас өгөгдөл уншина. Программ зохиох үед хэрэглэгчээс төрөл бүрийн өгөгдөл унших зайлшгүй шаардлага гардаг. Тиймээс юуны түрүүнд энэ функцыг ашиглаж сурах явдал чухал юм. Бичлэгийн хувьд энэ функц нь printf – тэй нэлээд адилхан байдаг, иймээс ч сурахад илүү дөхөм байх болно. Хэрэглэгчээс өгөгдөл уншихдаа ихэнх тохиолдолд printf, scanf хоѐр функцыг хослуулан ашигладаг. Эхлээд printf –ээр хэрэглэгчээс унших утгын тухай буюу асуултаа хэвлээд , дараа нь scanf – аар утгаа уншдаг. Бичигдэх хэлбэр : scanf(Удирдлагын Тэмдэгт Мөр ,хувьсагч); int scanf(“Удирдлагын Тэмдэгт Мөр”,Хувьсагч1, . . . ХувьсагчN); Таны программ биелж байгаад scanf функц дуудагдангуут, программын үйл ажиллагаа зогсож, хэрэглэгчээс өгөгдөл оруулж дуусахыг хүлээдэг. Хэрэглэгч өгөгдөл оруулаад дуусахдаа ENTER товч дарах ѐстой бөгөөд тэгэхэд уншигдсан утгууд нь харгалзах хувьсагчиддаа очин, удирдлага scanf коммандын дараагийн коммандад шилждэг. scanf нь printf-тэй адил хөрвүүлэлтийн тусгай тэмдэгтүүдийг ашигладаг. Харин курсор удирдах тусгай тэмдэгтүүдийг ( nat . . . ) удирдлагын тэмлэгт мөр дотор хэзээ ч бүү ашигла. Ашиглавал функцын үйл ажиллагаа буруу явагдах КСТ-ийн багш Э.Ононтуул 15
  16. 16. Програмчлалын Си хэл болно. Мөн scanf-ыг үргэлж printf-тэй цуг хэрэглэ. Хэрэв printf-ээр асуултаа тавихгүй бол хэрэглэгч өгөгдөл оруулах ѐстой гэдгийг ойлгохгүй байх болно. Жишээ : printf(“Таны массив хичнээн элементтэй байх вэ ?”); /* Асуултаа тавих */ scanf(“%d”,&n); Гэхдээ зарим шинж чанарыг нь авч үзвэл scanf нь тийм ч хялбархан функц биш юм. scanf –ыг ашиглахад гардаг нэг хэцүү асуудал нь “scanf –ын Удирдлагын тэмдэгт мөрийг ямар байдлаар бичсэн яг түүнтэй адилаар хэрэглэгч гараас өгөгдөл оруулах ѐстой” юм. Жишээ : Гараас int утгыг age хувьсагчид уншья. scanf(“=%d”,&n); Энэ тохиолдолд хэрэглэгч гараас тоогоо оруулахдаа өмнө нь заавал = тэмдэг бичиж байх хэрэгтэй. Учир нь scanf ингэж хүсч байна. Тэгэхээр scanf-ын Удирдлагын тэмдэгт мөрийг бичиж байхдаа онц шаардлагагүй л бол хэрэгцээгүй, илүү тэмдэгтийг ашиглахгүй байх хэрэгтэй. scanf-ыг ашиглахад гардаг өөр нэг асуудал нь & тэмдэгтийг ашиглах явдал юм. scanf –д хувьсагчдын өмнө & тэмдэгтийг ашигладаг. Шаарддаг учрыг сүүлд бид “Функц” гэсэн сэдвийг үзэж байхад мэдэх болно. Харин нэг тохиолдолд буюу “%s” тэмдэгтийг ашиглаж байгаа, өөрөөр хэлбэл тэмдэгт массивтай ажиллаж байх үед & тэмдэгтийг ашигладаггүй. Дүрэм : Хэрэглэгчээс int, float, char, double,long гэх мэт энгийн төрлийн утгыг уншихыг хүсвэл & тэмдэгтийг хувьсагчийн нэрийн өмнө заавал ашигла. Харин хэрэглэгчээс тэмдэгт мөр буюу тэмдэгт массив уншихыг хүсвэл & тэмдэгтийг ашиглахгүй. Дараах программд хэрэглэгчээс овог, нэр, нас, хүндийг нь асууж байна. Тэмдэгт мөр уншихдаа & ашиглаагүй, харин нөгөө 2 хувьсагчид & ашиглаж байгааг анзаарна уу. Программд хэрэглэгчийн овог нэрийг нэг scanf –аар цугт нь уншиж чадаагүй байна. Учир нь scanf нь нэгэн зэрэг 2 үг буюу тэмдэгт мөр салгаж уншиж чадахгүй. юм. #include <stdio.h> main() { int age; float weight; char first[15], last[15]; КСТ-ийн багш Э.Ононтуул 16
  17. 17. Програмчлалын Си хэл printf(“Та нэрээ оруулна уу ?”); /* Асуулт */ scanf(“%s”,first); /* & тэмдэгт ашиглаагүй . */ printf(“Та овгоо оруулна уу ?”); /* Асуулт */ scanf(“%s”,last); /* & тэмдэгт ашиглаагүй . */ printf(“Та хэдэн настай вэ ?”); scanf(“%d”,&age); /* Асуулт */ /* & тэмдэгт ашигласан . */ printf(“Та хэдэн кг жинтэй вэ ?”); /* Асуулт */ scanf(“%f”,&weight); /* & тэмдэгт ашигласан . */ printf(“ Таны оруулсан мэдээллүүд n”); printf(“ Овог, Нэр : %s %sn”,last,first); printf(“Жин : %.0fn”,weight);/*0 байгаа учир бутархай оронг хэвлэхгүй.*/ printf(“Нас : %d”, age); } Программ ажиллаад дараах үр дүнг үзүүлнэ. Та нэрээ оруулна уу ? Бат Та овгоо оруулна уу ? Дорж Та хэдэн настай вэ ? 20 Та хэдэн кг жинтэй вэ ? 60 Таны оруулсан мэдээллүүд Овог, Нэр : Дорж Бат Жин : 60 Нас : 20 Жишээ : main() { int i; char c; float f; char Name[20]; scanf(“%d”,&i); scanf(“%c”,&c); scanf(“%f”,&f); scanf(“%s”,Name); } Жишээ : main() { int i,j,k; scanf(“%d %d %d”,&i,&j,&k); } Та scanf-ыг ашиглан хэрэглэгчээс тодорхой форматтай өгөгдлийг уншиж болно. Жишээлбэл он сар уншихад он, сар, өдөр гэсэн утгууд нь тодорхой КСТ-ийн багш Э.Ононтуул 17
  18. 18. Програмчлалын Си хэл тусгаарлагчтай ( 03/05/99 ) байдаг. Тэгвэл одоо хэрэглэгчээс mm/dd/yy гэсэн форматаар он сар уншия. scanf(“%d/%d/%d”,&month,&day,&year); Энэ тохиолдолд хэрэглэгч яг дээрх форматаар л оруулах ѐстой. Дүрэм :  Хэрэглэгчээс өгөгдөл уншихдаа scanf функцыг ашиглана.  scanf-ыг ашиглахдаа удирдлагын тэмдэгт мөр бичдэг ба энэ нь хэрэглэгч өгөгдлөө яаж оруулахыг тодорхойлсон тэмдэгт мөр байна.  scanf-ыг ашиглахаасаа өмнө printf-ээр заавал асуултаа хэвлэ.  scanf-д массиваа өөр хувьсагч ашиглахдаа & тэмдэг ашигла.  scanf-д массивын нэрийн өмнө & тэмдэг бүү ашигла. getchar() функц getchar() нь гараас зөвхөн ганц тэмдэгт уншина, харин putchar нь дэлгэцэнд нэг тэмдэгт хэвлэнэ. Та зөвхөн нэг тэмдэгт гараас унших, эсвэл дэлгэцэнд нэг тэмдэгт хэвлэхийг хүсвэл эдгээр функцыг ашигла. Жишээ : #include <stdio.h> main() { int ch; printf(“ Тэмдэгтээ оруулна уу ? ”); ch=getchar(); printf(“n You typed the character ”); putchar(ch); } Энэ команд нь int утга буцаах ба энэ нь дарагдсан товчны код байна. getch() функц getch() нь оруулах өгөгдлийг буферлэдэггүй. Өөрөөр хэлбэл өгөгдлөө цуглуулан, ENTER товчийг хүлээдэггүй. Үүнээс үүдэх нэг дутагдал нь буруу оруулсан өгөгдлөө BACKSPACE товчоор залруулж, арилгаж болдоггүй. Харин getchar()-аар өгөгдлөө унших үед хэрэглэгч BACKSPACE товч дарж болно. Гэтэл getch()-д ийм боломж байхгүй. Дараах жишээнд getch()-ээр 2 тэмдэгт уншиж байна. КСТ-ийн багш Э.Ононтуул 18
  19. 19. Програмчлалын Си хэл printf(“Хоѐр тэмдэгт оруулна уу ? n”); first=getch(); second=getch(); getch() нь getchar() шиг ENTER товч хүлээдэггүй учраас түүнээс илүү хурдан ажиллана. getche() функц getch() нь оролтын тэмдэгтүүдийг дэлгэцэнд дүрсэлдэггүй. Иймээс та дэлгэцэнд дүрслэхийг хүсвэл дараа нь putch –ийг дуудах шаардлагатай болдог. printf(“Хоѐр тэмдэгт оруулна уу ? n”); first=getch(); putch(first); second=getch(); putch(second); Гэтэл дээрх үйлдлийг гүйцэтгэхийн тулд getche функцыг ашиглахад л хангалттай. getche нь оролтын тэмдэгтүүдийг дэлгэцэнд дүрсэлдэг. Дүрэм  Нэг тэмдэгт унших, бичихийг хүсвэл getchar(), putchar()-г ашигла.  Гараас Enter товчийг хүлээж зогсохыг хүсвэл getchar-ийг ашигла.  Хэрэглэгч товч дарангуут түүнийг дэлгэцэнд дүрсэлэхгүйгээр уншихыг хүсвэл getch()-ийг ашигла.  Эдгээр Оролт гаралтын функцүүдтэй ажиллахдаа char биш int хувьсагч ашигла. Учир нь зарим үйлдлийн системүүд char төрлөөс их утгаар товчлууруудаа кодлосон байдаг. КСТ-ийн багш Э.Ононтуул 19
  20. 20. Програмчлалын Си хэл Си программын бүтэц Си программын бүтцийг агуулгаар нь дараах 5 бүлэг хэсэгт хувааж үзнэ. 1. Холболтын хэсэг 2. Тогтмолуудыг зарлах хэсэг 3. Хувьсагчийг зарлах хэсэг 4. Функцүүдийг зарлах хэсэг 5. Үндсэн функц Холболтын хэсэг Программд стандарт функц процедур холбох шаардлага тулгардаг бөгөөд холболтыг #include түлхүүр үгийн тусламжтайгаар гүйцэтгэнэ. Бичигдэх хэлбэрт : #include <Файлын нэр> эсвэл #include “Файлын нэр” Файлын нэр нь тухайн функцуудыг агуулах .h өргөтгөлтэй файлын нэр байна. Эдгээр файлууд c:tcinclude санд байрлана. Файлуудын жишээ :  stdio.h - Үндсэн оролт гаралтын функцүүд энэ файлд тодорхойлогдоно printf - Дэлгэцэнд өгөгдөл хэвлэх scanf - Гараас утга унших ...  stdlib.h - Төрөл бүрийн хөрвүүлэлтийн функц, программын удирдлага шилжүүлэх функцууд байна. atoi - Тэмдэгт мөрийг тоо болгох itoa - Тоог тэмдэгт мөр болгох ...  alloc.h , malloc.h - Санах ойтой харьцдаг функцууд  math.h - Математик функцууд cos() - Косинус олох, sin() - Синус олох log() - Логарифм олох, sqrt() - Тооны кв язгуур олох pow() - х тоог у зэрэгт дэвшүүлэх  ctype.h - Тэмдэгтийг шалгах, өөрчлөх функцуудыг агуулна. isalpha() - Тэмдэгт нь үсэг мөн эсэхийг шалгана. isdigit() - Тэмдэгт нь тоо мөн эсэхийг шалгана.  time.h - Он сар өдөр болон цагтай ажиллах функцуудыг агуулна. clock() - Программ эхэлснээс хойших хугацааг буцаах time() - Системийн идэвхтэй цагийг буцаах КСТ-ийн багш Э.Ононтуул 20
  21. 21. Програмчлалын Си хэл  conio.h - Дэлгэцтэй ажиллах функцуудыг агуулна. gotoxy() - Курсорын байрлалыг өөрчлөх cprintf() - Өнгө зааж өгч хэвлэх  string.h - Тэмдэгт мөртэй ажиллах функцууд strcpy() - Нэг тэмдэгт мөрийг нөгөөд олгох функц strcat() - Хоѐр тэмдэгт мөрийг залгах функц Тогтмолуудыг зарлах хэсэг Энэ хэсэгт тогтмол хэмжигдэхүүний нэр, авах утгыг зарладаг. 1. const float pi=3.14; 2. #define MAX 100 Хувьсагчийг зарлах хэсэг Программд хэрэглэгдэх глобаль хувьсагчдыг энд зарлана. Бичих хэлбэр : <Хувьсагчийн төрөл> <Хувьсагчийн нэр>; Жишээ : int i,j; char c; Глобаль хувьсагч Глобаль хувьсагч гэдэг нь тухайн программын аль ч хэсэгт харагдах , утгыг нь өөрчилж болох хувьсагч юм. Глобаль хувьсагчийг дараах 2 шинж чанараар нь ялгана.  Программын аль ч функц , процедур дотроос түүний утгыг хэрэглэж, өөрчилж болдог.  Түүний амьдрах хугацаа нь программыг дуусан дуустал үргэлжилнэ. Функцүүдийг зарлах хэсэг Энд хэрэглэгчийн тодорхойлсон функц, процедуруудыг (дэд программ) байрлуулна. Дэд программ нь өөрийн гэсэн нэртэй ба үндсэн программын хаанаас нь ч нэрээр нь дуудаж хэрэглэж болдог. Функцын нэр (параметрүүд) { <Хувьсагчдыг зарлах хэсэг>  Локаль хувьсагч <Функцийн бие> } Локаль хувьсагч  Зөвхөн тухайн функц дотроо хэрэглэгдэнэ. КСТ-ийн багш Э.Ононтуул 21
  22. 22. Програмчлалын Си хэл  Амьдрах хугацаа нь функцын ажиллах хугацаа юм. Үндсэн функц Си хэлэнд программын үндсэн функц нь main нэртэйгээр тодорхойлогддог. Үндсэн функцээс программ эхэлж ажиллана. Ө.х Си хэл дээр бичигдсэн программын хамгийн анхны ажиллах функц нь main функц юм. main() { <Хувьсагч зарлах хэсэг> <Үндсэн программын хэсэг> } Программын жишээ : #include <stdio.h> Òîãòìîë çàðëàõ õýñýã Õîëáîëòûí õýñýã #include <conio.h> #define pr printf const float pi=3.14; int i,j,n; PrintPI() Ãëîáàëü õóâüñàã÷ çàðëàõ õýñýã { int k; Õýðýãëýã÷èéí ôóíêö òîäîðõîéëîõ õýñýã pr(“Тоо=%d”,k); Ëîêàëü õóâüñàã÷ çàðëàõ õýñýã pr(“pi тоо=%f”,pi); } main() { int k; ¯íäñýí ôóíêö çàðëàõ õýñýã pr(“ Now I,ll print pi number ”); Ëîêàëü õóâüñàã÷ çàðëàõ õýñýã PrintfPI(); } КСТ-ийн багш Э.Ононтуул 22
  23. 23. Програмчлалын Си хэл “Си” хэлний операторууд “Си” хэлний үндсэн операторуудад дараахь операторууд орно. 1. Хоосон оператор;. 2. Нийлмэл оператор {}. 3. Оператор илэрхийлэл a=a+b. 4. Нөхцөлт оператор if(). 5. Алхамт ба параметртэй давталтын оператор for(). 6. Өмнөө нөхцөл шалгах оператор while(). 7. Төгсгөлдөө нөхцөл шалгах оператор do while(). 8. Үржүүлэх оператор continue. 9. Сонголтын оператор switch(). 10. Зогсоогч буюу таслагч оператор break. 11. Удирдлага шилжүүлэгч оператор goto 12. Дэд функцээс буцах оператор return. Хоосон оператор Бичигдэх хэлбэр: <;> Үйлдэл хийх шаардлагагүй тохиолдолд хоосон операторыг хэрэглэнэ. Хоосон операторыг хаана хэрэгтэй байна тэр газар, өөрөөр хэлбэл программын дурын хэсэгт хэрэглэж болно. Хоосон операторыг операторын төгсгөл гэж ойлгож болно. Энэ нь ихэнхдээ do while, for, if, while операторуудад ашиглагдана. Жишээ программ: /*A, B хоѐр тооны А тоо их бол дэлгэцэнд max=A гэж хэвлэ. */ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() { int A,B clrscr(); Printf(„‟A=‟‟); scanf(„‟%i‟‟,&A); // А хувьсагчид олгох Printf(„‟B=‟‟); scanf(„‟%i‟‟,&B); // B хувьсагчид олгох /*Хэрэв В тоо их бол ямар ч үйлдэл хийгдэхгүй. Хоосон оператор.*/ if (B>A); КСТ-ийн багш Э.Ононтуул 23
  24. 24. Програмчлалын Си хэл /*Хэрэв A тоо их бол дэлгэцэнд max=A гэж хэвлэ.*/ else printf („‟ nmax=A‟‟); getch(); } Дэлгэцэнд: А= // Гараас дурын тоо өгнө. Жишээ нь: 45 B= // Гараас дурын тоо өгнө. Жишээ нь: 14 max=A Нийлмэл оператор Бичэгдэх хэлбэр: <{}> Үүнийг блок буюу их хаалт гэж нэрлэж болно. Нийлмэл операторыг нэг цогц оператор гэж ойлгож болно. Нийлмэл операторт гаднаас шилжилт хийж болно. (goto) Давталт болон нөхцөл шалгах операторыг хэрэглэж байх үед 2 ба түүнээс дээш үйлдлүүд хийгдэх тохиолдолд заавал блок буюу их хаалтыг (нийлмэл оператор) хэрэглэнэ. Харин давталт болон нөхцөл шалгах операторыг хэрэглэж байх үед ганцхан үйлдэл хийгдэх бол их хаалтыг хэрэглэх шаардлагагүй. Мөн функцийн эх биеийг блок гэж ойлгож болно. Жишээ нь: main() { // main() функцын эхлэл } // main() функцын төгсгөл Нийлмэл оператор нь тухайн программаас хамаараад хэдэн ч удаа хэрэглэгдэж болно. Жишээ программ /*1-ээс N хүртэлх тооны нийлбэрийг ол. */ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() //Нийлмэл операторын эхлэл 1 { int N,i, sum; clrscr(); sum=0; // Нийлбэрийг хадгалах sum хувьсагчийн утга 0 байх ѐстой. Printf(„‟Input N=‟‟); /*Хэд хүртэлх тооны нийлбэр олохоо тодорхойлох эрэгтэй.*/ scanf(„‟%i‟‟,&N); КСТ-ийн багш Э.Ононтуул 24
  25. 25. Програмчлалын Си хэл // Давталт хийх эхний утга i=1; while(i<N) { printf(„‟%i ‟‟, sum); // Нийлмэл операторын эхлэл 2 // Нийлбэрийг тус бүрд нь олж хэвлэх. sum=sum+i; { printf(„‟+%i=%in‟‟, i, sum); i++; // i хувьсагчийн утгыг N хүртэл нэг нэгээр нэмэгдүүлэх // Нийлмэл операторын төгсгөл 2 } printf(„‟ ALL sum=%i‟‟, sum); // Нийт олдсон нийлбэрийг хэвлэх. getch(); // Нийлмэл операторынтөгсгөл 1 } Дэлгэцэнд: Input N= // Гараас N хувьсагчид дурын тоо өгнө. Жишээ нь 5 0+1=1 // 1 үед нийлбэрийг олж хэвлэсэн. Оператор илэрхийлэл Бичигдэх хэлбэр: <илэрхийлэл>; Оператор хэрэгтэй газар бүр илэрхийллийг бичиж болно. Жишээ: a=a+b; j++; гэх мэт. Жишээ программ /*хоѐр тооны ихээс нь багыг хасах программ бич.*/ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() { int count1, count2 clrscr(); printf(„„Input count1=‟‟); scanf(„‟%i ‟‟,&count1); printf(„‟ Input count2=‟‟); scanf(„‟%i ‟‟,&count2); if (count1>count2) // 2 тооны ихийг олж байгаа хэсэг. Printf(„‟Sub=%i-%i=%i, count1, count2, count1-count2); else Printf(„‟Sub=%i-%i=%i, count2, count1, count2-count1); Getch(); КСТ-ийн багш Э.Ононтуул 25
  26. 26. Програмчлалын Си хэл } 26 Дэлгэцэнд: Input count1= // Гараас дурын тоо өгнө. Жишээ нь: 125 Input count2= // Гараас дурын тоо өгнө. Жишээ нь: 45 Sub=125-45=80 // Их тооноос бага тоог нь хасах. Нөхцөлт оператор Бичигдэх хэлбэр: if(<нөхцөл1>) <оператор1>; [else] <оператор2>;] <нөхцөл1> нь нөхцөлт илэрхийлэл байж болно. <нөхцөл1> нөхцөл биелэж байвал <оператор1> гүйцэтгэгдэнэ. Эсрэг тохиолдолд буюу <нөхцөл1> биелээгүй үед <оператор2>-г гүйцэтгэнэ. Бичигдэх хэлбэрийн дөрвөлжин хаалт ( [ ] ) дотор бичигдсэн бичлэгүүд нь заавал бичигдэх албагүй. Өөрөөр хэлбэл хэрэглэгдэж болно эсвэл хэрэглэгдэхгүй орхигдож болно гэсэн үг юм. Энэ нь тухайн программаас шалтгаална. Иймд: [else] <оператор2>;] нь бичигдээгүй үед Бичигдэх хэлбэр: if(<нөхцөл1>) <оператор1>; ийм болно. Энэ нь <нөхцөл1> нөхцөл биелэж байвал <оператор1> гүйцэтгэгдэнэ. Эсрэг тохиолдолд юу ч хийгдэхгүй. (Программын дараагийн мөрөнд шилжинэ.) Жишээ программ /*a,b хоѐр тооны ихийг нь хэвлэх программ. */ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() { int a,b, clrscr(); /*Гараас a,b хувьсагчуудад бүхэл тоон утга авах.*/ printf(„„Input a=‟‟); scanf(„‟%i ‟‟,&a); КСТ-ийн багш Э.Ононтуул
  27. 27. Програмчлалын Си хэл printf(„‟ Input b=‟‟); scanf(„‟%i ‟‟,&); // a тоо b тооноос их бол if(a>b) printf(„‟max value=%i „‟,b); else printf(„‟max value=%i„‟,b); getch(); } Дэлгэцэнд: Input count a= // Гараас дурын тоо өгнө. Жишээ нь: 10 Input count b= // Гараас дурын тоо өгнө. Жишээ нь: 8 max value=10 Алхамт ба параметртэй давталтын оператор Бичигдэх эхлбэр: for( [ <эхний илэрхийлэл > [ <нөхцөлт илэрхийлэл >] [ <илэрхийлэл буюу алхам >] ) <оператор > <нөхцөлт илэрхийлэл > үнэн үед <оператор > биелэнэ. <нөхцөлт илэрхийлэл > худал болтол <оператор> давтагдан хэрэгжинэ. <эхний илэрхийлэл > нь оператор дотрох параметрийн анхны утгыг тодорхойлох болно. <илэрхийлэл буюу алхам > нь <эхний илэрхийлэл > -ийн утгыг нэмэгдүүлэх ба хорогдуулах үйлдлийг гүйцэтгэх замаар давталтаас гарах боломжийг олгодог байна. For буюу алхамт ба параметртэй давталтын оператороос <нөхцөлт илэрхийлэл > үнэн үед ажиллагааг нь тасалж гарахдаа return, break, goto операторуудаар гарч болно. Алхамт ба параметртэй давталтын операторыг тооцоолох дараалал байдаг. 1. <эхний илэрхийлэл> тооцоологдоно. 2. <нөхцөлт илэрхийлэл >-н утга үнэн бол <оператор> биелэгдэнэ. (Эсрэг тохиолдолд давталтаас гарна.) 3. <илэрхийлэл буюу алхам > тооцоологдоно. Үүний дараа дээрх үйл ажиллагаа давтагдах ба энэ нь давталтаас гартал давтагдана. Хэрэв нөхцөлт илэрхийлэ байхгүй бол энэ илэрхийллийг хэзээд үнэн гээд <оператор > биелэж <илэрхийлэл буюу алхам >тооцоологдоно. Энэ үед давталт хязгааргүй үргэлжилнэ. Иймд return, break, goto операторуудаар гарна. КСТ-ийн багш Э.Ононтуул 27
  28. 28. Програмчлалын Си хэл Жишээ программ /*Өгөгдсөн тэмдэгт мөрөнд хоосон зай орсон бол хоосон зайг хасаж бичих программ бичье.*/ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() /*str хувьсагчид тэмдэгтэн мөрөн утгыг олгох.*/ { char str [100]=‟‟Bor land c‟‟; //Давталт хийх i, j ба ба хоосон зайг тоолох хувьсагчууд зарлах int i,j,space; clrscr(); printf(„„str=%s””,str); /*i,j, space хувьсагчуудын утгыг эхлээд 0 гэж өгнө.str {i}!=‟0‟ нь мөрийн төгсгөл хүрсэн эсэхийг шалгана. I++ нь нэг нэгээр нэмэгдсээр байгаад мөрийн төгсгөл хүрэх ѐстой.*/ for(i=j=space=0; str [i]!=‟0‟; i++) { if(str [i]==‟ „) // Хоосон зай байвал space++; // space хувьсагч хоосон зайг тоолно. else // Хоосон зай биш байвал өөрөөр хэлбэл үсэг байвал { str [j]=str[i]; // хоосон зайнаас бусдыг нь массивт хадгална. j++; // хоосон зай биш бол массивын индекс нэгээр нэмэгдэнэ. } } str [ j ]=‟0‟; // мөрийн төгсгөл гэдгийг тодорхойлж өгнө. Printf(“nSpace count=%in**New form**nstr=”%””,space, str); getch(); } Дэлгэцэнд: str=”Bor land c” // Өгөгдсөн тэмдэгтэн мөр Space count=4 // Хоосон зайг тоолсон тоолуур КСТ-ийн багш Э.Ононтуул 28
  29. 29. Програмчлалын Си хэл **New form** str=”Borlandc” // Хоосон зайг хасаж үгийг шахсан байдал. Өмнөө нөхцөл шалгах оператор Бичигдэх хэлбэр: while(<нөхцөлт илэрхийлэл >) <оператор > <нөхцөлт илэрхийлэл >-ийн утга үнэн үед <оператор> хэрэгжих ба худал болох хүртэл давтагдан биелэгдэнэ. <илэрхийлэл> худал үед <оператор > биелэхгүй ба удирдлага нь түүний дараахь операторт шилжинэ. While операторийн давталтыг түүний дотор бичигдсэн return, break, goto операторуудаар дуусгажболно. Жишээ программ /*Өгөгдсөн 10-тын ьооллын системийн тоог 2-тын тоолын систем рүү шилжүүлэх программ.*/ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() { int N, ul,i=0; clrscr(); printf(„„Decimal count N=”); scanf(“%i ”,&N); // 10-тын системд гараас тоо өгөх printf(“***Binary count***”); while(N>0) { ul=N%2; /*2-тын тооллын систем дэхь утгуудыг олох хэсэг*/ goroxy(12-i,4); /*Курсорыг шилжүүлэн байрлуулагч функц*/ N=N/2 // Давталтаас гаргах үйлдэл /*Курсорын байрлалыг шилжүүлэхэд хэрэглэх хувьсагч*/ i++ } getch(); } КСТ-ийн багш Э.Ононтуул 29
  30. 30. Програмчлалын Си хэл Дэлгэцэнд: 30 Decimal count N=124 // 10-тын тооллын системд байгаа тооны ul-г *** Binary count*** // Дэлгэцэнд утгуудыг хойноос нь ургаш хэвлэж 1111100 //2-тын тооллын системд шилжүүлсэн байдал. Төгсгөлдөө нөхцөл шалгах оператор Бичигдэх хэлбэр: do <оператор > while(<нөхцөлт илэрхийлэл >); <оператор > гүйцэтгэгдсэний дараа <нөхцөлт илэрхийлэл >-ийн утгыг шалгана. <нөхцөлт илэрхийлэл > худал болох хүртэл энэ үйл ажиллагаа давтагдан биелэгдэнэ. return, break, goto операторуудаар давталтын ажиллагааг дуусгаж болно. Үргэлжлүүлэх оператор Бичигдэх хэлбэр: continue; Энэ оператор нь do while, for, while давталтын операторуудтай цуг хэрэглэгдэнэ. Энэ оператороор давталтын операторууд нь дараагийн алхамуудад шилжинэ. do while, while давталтын операторт continue операторыг ашиглах үед continue операторын дараагийн алхам нь нөхцөлт илэрхийллийг бодохоос эхэлнэ. Өөрөөр хэлбэл удирдлага while операторт шилжинэ гэсэн үг. For операторт continue операторыг хэрэглэх үед continue операторын дараагийн алхам нь for операторын хувьсагчийн утгыг өөрчилж дараа нь давталт төгсгөлдөө хүрсэн эсэхийг шалгана. Жишээ программ /*N тооны пактрелийг олох программ.*/ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() { int i,N,pac=1; КСТ-ийн багш Э.Ононтуул // Пактрелийг олох хувьсагчийн утга 1-ээс эхлэх ѐстой.
  31. 31. Програмчлалын Си хэл clrscr(); 31 printf(„„INPUT N=”); scanf(“%i ”,&N); // Гараас N хувьсагчид утга авна. // N-ээс 0 хүртэл буурах давталт хийнэ. for(i=N; i>=0; i- -) { if (i==1) continue; // i-ийн утга 1 бол pac-г 1-ээр үржүүлэх шаардлагагүй. If (i==0) continue; // i-ийн утга 0 бол рас-г 1-ээр үржүүлэх шаардлагагүй. pac=pac*i; } printf(“N!=%i”,pac); // N! олсоноо хэвлэх хэсг. getch(); } Дэлгэцэнд: INPUT N= // Гараас дурын тоо өгнө.Жишээ нь:5 N!=120 // Дэлгэцэнд хэвлэгдэх үр дүн Сонголтын оператор Бичигдэх хэлбэр: switch(<илэрхийлэл>) { [Зарлалтын хэсэг] [case <тогтмол илэрхийлэл1>:] <оператор1>:] [case <тогтмол илэрхийлэл2>:] <оператор2>:] .................................................. [ default: <оператор>:] } switch сонголтын операторыг илэрхийллийн утгаас хамаарч боломжит хувилбарын аль нэгийг сонгоход хэрэглэнэ. Өөрөөр хэлбэл эхлээд <илэрхийлэл>-н утга тооцоологдоод түүний утгаас хамаарч аль нэг сонголбор ажиллуулахад хэрэглэнэ гэсэн үг юм. <тогтмол илэрхийлэл...>-үүдийг сонголборууд гэнэ. <илэрхийлэл>-н утгаас хамаарч switch КСТ-ийн багш Э.Ононтуул оператор сонгогдсон сонголборын <оператор...>-ыг
  32. 32. Програмчлалын Си хэл гүйцэтгэнэ. Үүний дараа switch блокын төгсгөл хүртлэх бүх сонголборын <оператор...>-ыг автоматаар гүйцэтгэж дуусаад гарна. Үүнийг таслахын тулпд өөрөөр хэлбэл тухайн сонголборыг гүйцэтгээд сонголтын оператороос гаргахын тулд break операторыг хэрэглэдэг. <Илэрхийлэл>-н утга нь сонголборуудын алинтай ч тохироогүй үед default оператороор орж <оператор...>-ыг гүйцэтгээд switch операторос гарна. <Зарлалтын хэсэг> байгаа тохиолдолд энэ нь хийдэхгүйгээр тухайн сонгогдсон сонголборт шилжинэ. (Доорх жишээнээс хар) Жишээ: char c=„A‟; switch(c) { case („A‟); printf (“A”;) // Үүнийг гүйцэтгэсний дараа case „B‟: printf(“B‟‟) // мөн энэ мөрийг гүйцэтгэнэ. /*Мөн энэ мөрийг гүйцэтгэнэ.*/ default: printf (“Not A and B‟‟); } гэж өгөгдсн тохиолдолд дэлгэцэнд “ABNot A and B” гэсэн тэмдэгтэн мөр хэвлэгдэнэ. char c =‟B‟; switch(c) { case („A‟); printf („A‟) case „B‟: printf(“B”) //Үүнийг гүйцэтгэсний дараа /*Мөн энэ мөрийг гүйцэтгэнэ.*/ default: printf (“Not A and B‟‟); } гэж өгөгдсн тохиолдолд дэлгэцэнд “BNot A and B” гэсэн тэмдэгтэн мөр хэвлэгдэнэ. char c =‟C‟; switch(c) { case („A‟); printf (“A”); case „B‟: printf(“B”) default: printf (“Not A and B‟‟); //Үүнийг гүйцэтгэсний } гэж өгөгдсөн тохиолдолд дэлгэцэнд „„Not A and B ‟‟ гэсэн тэмдэгтэн мөр хэвлэгдэнэ. Зогсоогч буюу таслагч оператор КСТ-ийн багш Э.Ононтуул 32
  33. 33. Програмчлалын Си хэл Бичигдэх хэлбэр: break; Энэ оператор нь do while,for,while, switch операторуудын биелэлтийг таслан тэдгээрийн дараагийн операторт удирдлагыг шилжүүлнэ. break нь эдгээр операторуудын гадна бичигдвэл компляторт түүнийг алдаанд тооцно. Жишээ программ: /*Өгөгдсөн өгүүлбэрийн эхний үгийг хэвлэх программ.*/ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() { char *var_string; clrscr(); printf(„„Input string=”); gets(var_string); // Гараас тэмдэгтэн мөр авдаг функц. printf(“*first word*=”); /*Тэмдэгтэн мөрийн төгсгөл хүртэл давтана.*/ while(*var_string!=‟0‟) { /*Эхний үгийг хэвлэж байгаа хэсэг.*/ printf(“%c”, *var_string); /*Үг нь хоосон зай,таслалаар*/ If (*var_string= =‟ „|| *var_string= =‟,‟) break; // Тусгаарлагддаг учир давталтаас гарна. var_string++; // Дараагийн тэмдэгтийн хаягийг авна. } getch(); } Дэлгэцэнд: Input string= / Гараас тэмдэгтэн мөр оруулах “This is my book”/ //эхний үг. *First word*=This Удирдлага шилжүүлэгч оператор КСТ-ийн багш Э.Ононтуул 33
  34. 34. Програмчлалын Си хэл Бичигдэх хэлбэр: goto <тэмдэгт>; 34 ................... <тэмдэгт>:<оператор> goto оператор нь <тэмдэгт>-ээр тэмдэглэгдсэн операторт удирдлагыг шилжүүлнэ. Тэмдэглэгдсэн <оператор> байхгүй эсвэл ийм тэмдэгтэй оператор олон байвал компилятор түүнийг алдаанд тооцно. Операторын тэмдэг нь зөвхөн goto оператор байгаа үед хүчинтэй. goto оператор байхгүй, тэмдэгт оператор байгаа бол оператор нь тооцоологдохгүй ба программын дэс дараалал хэвийн үргэлжилнэ. Жишээ программ: /*Компьютерийн санасан тоог таах программ.*/ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() { int mem_count,my_count; // Гараах өгөх тоог хадгалах хувьсагч. clrscr(); randomize(); // Санамсаргүй утгыг давтахгүй байх. mem_count=random(10); // Санамсаргүй тоог гаргана. rep: clrscr(); // Удирдлага шилжих мөр. printf(“Inputyour count (0-9)=”); scanf(“%i”,&my_count); if (mem_count!=my_count) // Санасан тоог таагаагүй бол goto rep; // Удирдлага rep-т шилжинэв printf(“It is OK.”); // Таасн үед дэлгэцэнд хэвлэх. getch(); } Input your count (0-9)= // Гараас 0-9 хооронд тоо өгнө. // Таасан тохиолдоолд программ дуусна. It is OK. Дэд функцээс буцах оператор Бичигдэх хэлбэр:return [<илэрхийлэл>] Энэ оператор нь функц утга буцаахад хэрэглэгдэнэ. Функц дуудагдаад ажиллаж дууссны дараа утга буцааж, дуудсан хэсгийн дараагийн операторт удирдлагыг шилжүүлнэ. Хэрэв <илэрхийлэл> өгөгдсөн байвал түүнийг бодож функцийн КСТ-ийн багш Э.Ононтуул
  35. 35. Програмчлалын Си хэл тодорхойлсон төрөл бүхий утгыг буцаана.<илэрхийлэл> байхгүй бол буцах утга байхгүй. Жишээ программ: /*N хүртэлх сондгой тоонуудын үржвэрийг олох программ:*/ #include<conio.h> #include<stdio.h> #include<stdlib.h> long Multiply(int N); //Дэд функцийг зарлаж байгаа хэсэг. main() { long Mul; //Функцээс буцах утгыг авах Mul хувьсагч. Int N=20; //Хэд хүртэл давтахыг тодорхойлж байна. clrscr(); printf(“N=%i”,N); Mul= Multiply(N); // N параметртэй дэд функцийг дуудаж байна. printf(“nMULTIPLY=%li”,Mul); getch(); } /*Үржвэр олдог дэд функцийг тодорхойлж байгаа хэсэг.*/ long Multiply(int N) {int I; long s=1 for(I=1; I<N; i+=2) /*i хувьсагч 2 параметртайгаар нэмэгдэх тул утга нь 1,3,5 гэх мэт.*/ s=s*I; // Үржвэр олж байгаа хэсэг. return s; // Нийт олсон үржвэрийг үндсэн функцэд буцаах. } Дэлгэцэнд: N=20 MULTIPLY=654729075 КСТ-ийн багш Э.Ононтуул // 1-20 хүртэлх сондгой тооны үржвэр. 35

×