Лекц 9(Заагч)

Post on 23-Jul-2015

184 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Алгоритм програмчлалБагш: М.Цэцэнцэнгэл

Си хэлийн заагч

Си хэлийн заагч

Заагч төрөл

Заагч (pointer) гэдэг нь компьютерын санах ойн нэгэн утгын заадаг объектыг хэлнэ.

Заагч хувьсагч нь санах ойн хаягийг хадгалдаг байна.

Си хэлийн заагч

Заагчийн зарлагаа нь энгийн хувьсагчийн зарлагаатай адил боловч хувьчсагчийн урд * тэмдэгтэй байдгаараа ялгаатай.

int a; // engiin huvisagchint *a; // zaagch huvisagch

Заагч

Заагч төрөл нь зөвхөн “unsigned int” утгыг л хадгалдаг. Тэрнээс биш урд нь тавьж байгаа өгөгдлийн төрөл өөр зориулалттай.

float *a; // adilint *b; // adil

Хаяг авдаг Си хэлийн оператор

& оператор нь Си хэлэнд тухайн хувьсагчийн санах ойд байрлаж байгаа хаягийг авдаг.Бид өмнө нь scanf() функцэд ашиглаж байсан.

scanf(“%d”, &a);

Заагчид утга олгоё!

int b;int *a;b = 17;a = &b; // b huvisagchiin hayg a zaagchid

// hadgalagdlaa

Энэ үед оюутнууд

Санах ойд юу болж байна?

Заагч дахь утгыг авахдаа

int b;int *a;b = 17;a = &b;printf(“%u”, a); // 1462 gej hevleneprintf(“%d”, *a); // 17 gej hevlene

Энэ үед оюутнууд

Цуваа ба заагч

int a[] = {10,20,30,40,50};int *p;p = &a;printf(“%d\n”, *p); // 10printf(“%d\n”, *(p+1)); // 20printf(“%d\n”, *(p+2)); // 30

Энэ үед санах ойд

Хаяг 2686712 2686716 2686720 2686724

Утга 10 20 30 40

a

printf(“%u”, a); // 2686712printf(“%u”, p); // 2686712

Цувааны хувьсагч нь цуваа эхэлж байгаа санах ойн хаягийг хадгалж байдаг.

p p+1 p+2 p+3

Бодлого

Хоёр хувьсагчийн утгыг хооронд нь соль.a = 5;b = 7; байсныг a = 7;b = 5; болго.

Солих бодлогын шийдэл 1

int a = 5;int b = 7;a = a + b; // b = 7, a = 5 + 7 = 12b = a - b; // a = 12, b = 12 - 7 = 5a = a - b; // b = 5, a = 12 - 5 = 7

Солих бодлогын шийдэл 2

int a = 5;int b = 7;int tmp;tmp = a;a = b;b = tmp;

Солих үйлдлийг функц болгоё

void swap(int a, int b) {int tmp;tmp = a;a = b;b = tmp;

}

swap функцээ дуудъя

void main(){

int a = 5;int b = 7;swap(a,b);printf(“a=%d b=%d”, a, b);

}

Асуудлыг шийдье

void swap(int *a, int *b){

int tmp;tmp = *a;*a = *b;*b = tmp;

}

swap функцээ дуудъя

void main(){

int a = 5;int b = 7;swap(&a, &b);printf(“a=%d b=%d”, a, b);

}

top related