Tuesday, May 10, 2016

Лабораторын ажлын даалгавар №14 (Revised 2018.05.07)

Лаб №14 Си хэлэнд заагч (pointer) ашиглах нь
1. Ажлын зорилго
   1. Си хэлний заагчийг хэрхэн ашиглах тухай сурах, судлах
   2. Заагчийг бусад функцуудтай хослуулан ашиглаж сурах

2. Лабораторын ажлын даалгавар
   1. Заагч: Санах ойн хаягийг хадгалдаг хувьсагч юм. Заагчийн утга нь санах ойн хаяг гэсэн санаа юм. Жишээ: 1000 дахь заагчийн хувьсагч 1003 дахь санах ойн байрлалын утгыг зааж байна
 Заагчийг зарлах: type *name




2.    Заагчид хэрэглэх &-нь өөрийн санах ойн хаягийг буцаах үйлдэл юм.

name = &count: count-ийн санах ойн хаягийг name-д өгнө.
Хувьсагч count нь өөрийн утгыг хадгалахын тулд санах ойн 2000 гэсэн хаягийг авсан, утга нь 100 юм.
Үүнд name-ийн утга нь 2000 юм
Заагчид хэрэглэх *-нь &-ийн эсрэг үйлдэл, тусгай санах ойн хаяг дахь утгыг буцаах үйлдэл

3.      q = *count: name хувьсагчид count-ийн санах ойн хаягийг өгсөн ба энэ нь count-ийн утгыг q-д хадгалж байна.


Дараах бодлогуудыг ажиллуулж утгыг нь ойлгож, тайлан дээр бичиж тайлбарла.

4.  #include <stdio.h>
    int main()
           {
            int month=3;
            int *p;             // бүхэл төрлийн заагч хувьсагч р-г зарлах
p=&month;   // заагч хувьсагч р-д month хувьсагчийн хаягийг өгсөн
printf(“month = %d \ n”, *p);
return 0;
}
Үр дүн: month=3

      5.      #include <stdio.h>
int main()
{
int x=100;
int *p1, *p2;  // бүхэл төрлийн заагч хувьсагч р1, p2-г зарлах
p1=&x;   // заагч хувьсагч р1-д x хувьсагчийн хаягийг өгсөн
p2=p1;    // заагч хувьсагч р2-т р1-ийн утгыг өгч хэвлэх
printf(“Memory address of x = %p \n”, p2); // х-ийн утга биш хаяг хэвлэх
return 0;
}
 
     6.      #include <stdio.h>
int main()
{
int a, b;
int *p;  // бүхэл төрлийн заагч хувьсагч р-г зарлах
a = b = 7;
p=&a;   // заагч хувьсагч р-д a-ын хаягийг өгсөн
*p=3;
printf(“a= %d \n”, *p); // а-ийн утгыг хэвлэх
p=&b; // заагч хувьсагч р-д b-ын хаягийг өгсөн
printf(“b= %d \n”, *p); // b-ийн утгыг хэвлэх
return 0;
}
Үр дүн: month=3

7.      #include <stdio.h>
int main()
{
int a[] = {5,15,25,43,12,1,7,89,32,11};
int *p = &a[1], *q=&a[5];  // бүхэл төрлийн заагч хувьсагч р-д массивын элемэнтүүдийн хаягийг оноосон
printf(“*(p+3) = a[4] = %d \n”, *(p+3)); // p+3-ийн утгыг хэвлэх
printf(“*(q-2) = a[3] = %d \n”, *(q-2)); // q-2-ийн утгыг хэвлэх
printf(“q-p = %d \n”, q-p); // q-p хаягуудын утгыг хасаж хэвлэх
printf(“p > q = false(%d )\n”, p>q); // q-2-ийн утгыг хэвлэх
printf(“*p >*q = true(%d )\n”, *p>*q); // q-2-ийн утгыг хэвлэх
return 0;
}
            Үр дүн: 
*(p+3) = a[4] = 12
*(q-2) = a[3] = 43
q-p = 4
p > q = false(0)
*p >*q = true(1)

8.      #include <stdio.h>
int main()
{
int a, b, *p; 
p = &a;
*p = 500;
printf(“a = %d \n”, a);
return 0;
}

9.      #include <stdio.h>
int main()
{
int a = 5;
int *p; 
printf(“%d \n”, a);
p = &a;
*p = 20;
printf(“%d \n”, a);
return 0;
}

10.  #include <stdio.h>
int main()
{
int *p, *p1;
int a = 35;
p = p1 =  &a;
printf(“p = %d \n”, p);
printf(“p + 2 = %d \n”, p+2);
printf(“p++ = %d \n”, p++);
printf(“p1 - p2 = %d \n”, p1 -p2);
return 0;
}

11.  #include <stdio.h>
           int main()
           {
             int *p;
             int a = 444;
             p = &a;
            *p=*p+1;
             printf(“aaa = %d, p=%u  \n”, a, *p);
             return 0;
            }

12.  50-ын дотор 20 санамсаргүй бүхэл тоо үүсгэн тооны хаягуудыг хэвлэх үзүүлэх програм бич ол.

13.  Заагч ашиглан int a[10] = {11, 34, 82, 7, 64, 98, 47, 18, 79, 20}; тогтмол массивын нийлбэрийг ол.

14.  Заагч ашиглан нэг хэмжээст санамсаргүй массивын бүх элемэнтийг 0-ээр дүүргэх програм бич.

3. Лабораторийн тайлан
1. Си програм дээр бичсэн кодоо бичиж тайлбарлах
2. Си хэлэнд заагч ашигласны ач холбогдолыг тухай бич
3. Лабораторын ажлаар олж авсан мэдлэгээ дүгнэж бич

4.Лабораторийн тайлан өгөх, хамгаалах
1. Лаб-ын тайланг бусдаас хуулахгүй, өөрийн хийсэн зүйлийг бичнэ.
2.  Лаб-ын ажлын тайланг дараагийн лаб орохын өмнө багшид цаасан дээр хэвлэж өгч хамгаална.

No comments:

Post a Comment