More Related Content Similar to Lecture 2 (20) More from Tuguldurbayar Gantogoo More from Tuguldurbayar Gantogoo (13) Lecture 23. Review: C programming language
Cи хурдтай, авсаархан, флатформоос үл хамаарсан
програмчлалын хэл
Си нь систем програмчлалд ашиглагддаг(Жнь:
Компайлар, үйлдлийн системүүд, өгөгдлийн баазын
системүүд, микроконтоллерууд)
Си маш эмх цэгцтэй, өөрийн гэсэн хэлбэртэй,
бүтэцлэгдсэн хэл
Ritchie – “ Си хачин жигтэй, гайхамшигтай том амжилт”
4. Хувьсагч зарлалт(Variable declarations): int i; float f;
Intialization: char c=‘A’; int x=y=10;
Operators: +,-,*,/,%
Expressions: int x,y,z; x=y*2+z*3;
Функц (Function): int factorial (int n); /*функц int
утга авч, int утга буцаана*/
6. Тодорхойлолтууд - definitions
Өгөгдлийн төрөл:
Обьектийн санах ой нь өгөгдлийн төрлийг тодорхойлж
ямар утга авах мөн ямар үйлдлүүд хийгдэж болохыг
тодорхойлдог
Операторууд:
Обьектуудыг хэрхэн удирдахыг операторууд заадаг
( Жнь: Тоон операторууд, тэмдэгт операторууд)
Оператор unary(Жнь -,++), binary (Жнь +,-,*,/), ternary (?:)
7. Илэрхийлэл (Expression):
програмчлалын хэлний хувьд илэрхийлэл гэдэг нь утга,
хувьсагч, операторууд болон функцуудийн комбинаци юм
(хослол)
Хувьсагч:
Хувьсаг нь нэрэн холбоос, утган заалт бүхий системийн
санах ойд хадгалагдах програмчлалын чухал нэгж
int x=0, y=0; y=x+2;
x, y бол хувьсагч
y=x+2 илэрхийлэл
+ бол оператор
8. Variable names
Нэр өгөх дүрэм:
Variable names can contain letters,digits and _
Variable names should start with letters.
Keywords (e.g., for,while etc.) cannot be used as variable
names
Variable names are case sensitive. int x; int X declares two
different variables
Pop quiz (correct/incorrect):
int money$owed; (incorrect: cannot contain $)
int total_count (correct)
int score2 (correct)
int 2ndscore (incorrect: must start with a letter)
int long (incorrect: cannot use keyword)
9. Өгөгдлийн төрөл болон хэмжээ
Си хэл өгөгдлийн тун цөөхөн төрөлтэй
Тоон (int,float,double) /* Numeric*/
Тэмдэгт (char) /*character*/
Хэрэглэгчийн тодорхойлсон (struct, union)/*user defined*/
10. Өгөгдлийн төрөл болон хэмжээ
Дараах өгөгдлийн төрлийг бид түлхүү хэрэглэнэ
unsigned хувилбар нь signed хувилбарын хязгаараас 2 дахин их утга
авдаг
unsigned, signed хоёрын ялгаа зөвхөн арифметик илэрхийллийн үед л
ажиглагддаг
2008 онд yahoo корпорацийн Flickr unsigned long (2^32-1) –с тэмдэгт
төрөлрүү шилжсэн
11. Big endian vs. Little endian
Хувьсагчийн санах ойд эзэллэх хэмжээ нь машин /
компайлер-с хамааралтай .
Гэхдээ дараах хамаарал бол хууль мэт өөрчлөгддөггүй:
sizeof(char)<sizeof(short)<=sizeof(int)<=sizeof(long) болон
sizeof(char)<sizeof(short)<=sizeof(float)<=sizeof(double)
“NUXI” problem: хэд хэдэн byte-с тогтох тоон төрлийн
хувьд бие даасан byte-уудын дараалан байрлах
дараалал чухал. Аливаа хэрэгсэлийн ариктектур дээр
тулгуурлан “big endian” , “little endian” гэсэн хоёр
хэлбэр байдаг
12. Big endian vs. Little endian(үргэлжлэл)
Big endian: эхэнд тэмдэглэгдсэн битүүд( the most significant bits - MSBs
)бага хаяганд бүртгэгдэнэ. Том хүчин чадал бүхий компьютерүүд энэ
хэлбэр дээр тулгуурласан байдаг. Мөн сүлжээний хаглалт ийм
зарчмаар явдаг учраас сүлжээний дараалал гэж дууддаг (network
order)
Little endian: Сүүлд тэмдэглсэгдсэн битүүд бага хаяг дээр бүртгэгдэнэ.
Энэ нь Х86 дэмждэг процессорууд дээр хэрэглэгддэг(Least significant
bits - LSBs)
15. Зарлалт - Declaration
Зарлалтын энгийн хэлбэр нь
төрөл хувьсагчийн-нэр [=утга]
Жишээ нь
char x; /*uninitialilzed*/
char x = ‘A’ ; /*intialized to ‘A’*/
char x=‘a’, y=‘b’; /*олон хувьсагчид анхны утга олгох*/
char x= y=‘z’; /*давхар утга олголт*/
16. Pop quiz II
int x=017;int y=12; /∗is x>y?∗/
short int s=0xFFFF12; /∗correct?∗/
char c=−1;unsigned char uc=−1; /∗correct?∗/
puts("hel"+"lo"); puts("hel""lo");/∗which is correct?∗/
enum sz{S=0,L=3,XL}; /∗what is the value of XL?∗/
enum sz{S=0,L=−3,XL}; /∗what is the value of XL?∗/
20. Хамаарлийн операторууд – Relational Operators
Хамаарлын операторууд аливаа хоёр операндыг
харьцуулан ‘boolean’ үр дүн үзүүлдэг. Си-д ямар нэг тэг
биш утгууд бүгд ‘үнэн’ гэж ойлгогддог харин 0 нь худал
болно.
21. Хамаарлийн операторууд – Relational Operators
Тэнцүү эсэхийг шалгах бол хамгийн түгээмэл
хэрэглэгддэг хамаарлын оператор.
Анхаар: Тэнцүү эсэхийг шалгах “=” оператор утга олгох “=”
оператораас ялгаатай
Анхаар: “==” оператор бутархай хувьсагч дээр найдваргүй,
яагаад гэвэл нарийвчлал шалгах хязгаартай.
22. Логик операторууд – Logical operators
илэрхийлэлд орсон аливаа утга өмнө нь заавал зарлагдсан буюу
тодорхойлогдсон байх ёстой. Эс бөгөөс хүсээгүй үр дүнг үзүүлнэ.
Жишээ нь
(3==3) || ((c=getchar())==‘y’). Хоёр дахь илэрхийлэл бодогдохгүй
(0) && ((x=x+1)>0) . Мөн адил хоёр дахь илэрхийлэл бодогдохгүй
23. Ихэсгэх ба багасгах операторууд -
Increment and decrement operators
Ихэсгэх болон багасгах нь адилхан арифметик оператор.
Си хоёр төрлийн товчлолоор хангаж өгдөг
Postfix
х++ бол х=х+1 товчлол
х – – бол х=х-1 товчлол
y=x++ бол y=x; x=x+1 товчлол. х утга ихсэхээс өмнө
бодогдоно
y=x– – бол y=x; x=x – 1товчлол. х утга нь ихсэхээс өмнө
бодогдоно
24. Ихэсгэх ба багасгах операторууд -
Increment and decrement operators
Prefix:
++x is a short cut for x=x+1
--х is a short cut for x=x−1
y=++x is a short cut for x=x+1;y=x;. x ихэссэний дараа
бодогдоно
y=-- x is a short cut for x=x-1;y=x;. x багассаны дараа
бодогдоно
25. Битийн операторууд – Bitwise operators
Тэмдэглэх нь:
AND бол 2 операнд хоёулаа үнэн үед үнэн
OR ямар нэг операнд үнэн байхад л үнэн
XOR яг нэг операнд үнэн байхад үнэн
26. Утга олгох оператор – assignment operators
Си програмчлалд өргөн хэрэглэгддэг хэлбэр бол хувьсагч =
хувьсагч оператор илэрхийлэл
x=x+1
x=x∗10
x=x/2
Си мөн эмхтгэсэн утга олгох үйлдлүүдийг дэмжинэ
x+=1 /∗is the same as x=x+1∗/
x−=1 /∗is the same as x=x−1∗/
x∗=10 /∗is the same as x=x∗10 ∗/
x/=2 /∗ is the same as x=x/2
x%=2 /∗is the same as x=x%2
27. Нөхцөлт илэрхийлэл – Conditional Expression
Дараах хэлбэр си хэлэнд өргөн тохиолдоно. (Бараг дандаа) :
if(нөхцөл)
x=<илэрхийлэл a>;
else
x=<илэрхийлэл б>;
Ternary operator : ‘?:’
Код хэрхэн богинохон мөн ойлгомтой болсон байгааг сайн ажиглаарай.
Ийм хэлбэртэйгээр кодыг богино болгохыг англиар Syntatic sugar гэдэг
30. Төрөл хөрвүүлэлт – Type conversions
Хувьсагчуудыг орноос хойш өндөр нарийвчлалтай болгох үед өгөгдөл
урьдчилан бэлтгэгдэнэ. Энэ үйлдлийг компайлер холилдсон төрөлтэй
илэрхийллээр автоматаар хийнэ.(Си хэлэнд илэрхийлэл гэж юу вэ
гэдгийг бид өмнө нь тодорхойлсон)
int i;
float f;
f=i +3.14159; / ∗ i is promoted to float , f=(float)i+3.14159 ∗ /
Компайлер автоматаар хийдэг өөр нэг хөрвүүлэлт бол ‘char’ –> ‘int’. Энэ нь
харьцуулалтыг боломжтой болгоод зогсохгүй тэмдэгтүүд дээр бодолт хийх
боломжтой болгоно.
isupper =(c>=’A’ && c<=’Z’)?1:0; / ∗ с болон тэмдэгт тогмол хэмжигдэхүүнүүд
маань int-руу хөрвүүлэгдэнэ∗ /
if (! isupper )
c=c−’a’+’A’ ;/ ∗ хасах үйлдэл хийгдэх боломжтой. Учир нь бүхэл тооруу
хөрвүүлэлт энд хийгдэх юм ∗ /
31. ++,–,(cast),sizeof have the highest priority• *,/,% have
higher priority than +,
==,!= have higher priority than &&,||
assignment operators have very low priority
Use () generously to avoid ambiguities or side effects
associated with precendence of operators.
y=x∗3+2 /∗same as y=(x∗3)+2∗/
x!=0 && y==0 /∗same as (x!=0) && (y==0)∗/
d= c>=’0’&& c<=’9’/∗same as d=(c>=’0’) && (c<=’9’)∗/