c lects (4)

31
Functions Функц

Upload: mongoo

Post on 12-Jul-2015

1.334 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: C lects (4)

Functions Функц

Page 2: C lects (4)

Functions- функц

Тодорхой нэртэй бүлэг коммандууд

Тодорхой утга зорилготой байна.

Дэд програм

main нь функц юм

main дотроос өөр функцуудыг дуудна

Функцийн дотроос бусад функцийг дуудаж

болно гэх мэтээр…

Page 3: C lects (4)

Жишээ - Квадрат#include <stdio.h>

double square(double a)

{

return a*a;

}

int main(void)

{

double num;

printf("enter a number\n");

scanf("%lf",&num);

printf("square of %g is %g\n",num,square(num));

return 0;

}

Main –н гадаа тодорхойлогдсон функц

Square функцийг дуудаж байна

Page 4: C lects (4)

Яагаад функц хэрэглэх

шаардлагатай вэ?

Бодлогыг жижиг хэсгүүдэд хувааж өгдөг

Том хэмжээний бодлогыг бодох хялбар арга

Дахин дахин хэрэглэгдэх зааврууд

Бид нэг ижил зүйлийг дахин дахин бичих

хэрэггүй

printf ба scanf …

Програмыг уншиж ойлгоход хялбар болно

Page 5: C lects (4)

Функц бичигдэх хэлбэр

return-type name(arg_type1 arg_name1, arg_type2 arg_name2, …)

{

function body;

return value;

}

double square(double a){

return a*a;}

int main(void){

…}

Page 6: C lects (4)

Return комманд

Return биелэхэд функцийн биелэлт

дуусаж дуудсан функцэд утгыг

буцааж өгдөг

Буцах утгын төрөл функцийн

төрөлтэй адил байх ѐстой

Page 7: C lects (4)

Дасгал

Өгөгдсөн эерэг бүхэл тоо хүртлэх

анхны тоонуудыг хэвлэх програм

бич.

(Хэрэв параметр нь анхны тоо бол

нэг бусад тохиолдолд 0 утгыг

буцаадаг функц ашигла)

Page 8: C lects (4)

Бодолт

is_prime_func.c

Page 9: C lects (4)

Void төрөл

Зарим үед функц утга буцаах

шаардлагагүй байдаг

Энэ үед ‘void’ төрлийн утгыг

буцаана

‘return’ үг таарвал функцийн

биелэлт утга буцаахгүйгээр дуусна

Page 10: C lects (4)

Void

Хэрэв функц параметр авдаггүй бол‘void’ гэж бичиж болно

Page 11: C lects (4)

Жишээ

void ShowHelp(void)

{

printf("This function explains what this program does…\n");

printf(“hgjdgshgdfj sjdgf jsf");

/* ... */

}

int main(void)

{

char choice;

printf("Please enter your selection: ");

scanf("%c", &choice);

if (choice==‘h’)

ShowHelp();

else if /* Program continues … */

}

Page 12: C lects (4)

Утгаар дамжуулах

Функц аргументийг хүлээн авахдаа

түүний хуулбарыг авч болно

энэ үед функц дотор уг аргументыг

өөрчлөхөд эх хувь үл өөрчлөгдөнө

Жишээ нь – add_one.c

Page 13: C lects (4)

add_one – алхам

алхмаар

int add_one(int b)

{

b=b+1;

return b;

}

int main(void)

{

int a=34,b=1;

a = add_one(b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

a b

34 1

main() memory state

Page 14: C lects (4)

a b

34 1

int add_one(int b)

{

b=b+1;

return b;

}

int main(void)

{

int a=34,b=1;

a = add_one(b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

main() memory state

add_one – алхам

алхмаар

Page 15: C lects (4)

add_one – алхам

алхмаар

a b

34 1

b

1

add_one memory

state

main() memory

state

int add_one(int b)

{

b=b+1;

return b;

}

int main(void)

{

int a=34,b=1;

a = add_one(b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

Page 16: C lects (4)

int add_one(int b)

{

b=b+1;

return b;

}

int main(void)

{

int a=34,b=1;

a = add_one(b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

a b

34 1

add_one – алхам

алхмаар

b

2

add_one memory state

main() memory state

Page 17: C lects (4)

a b

34 1

add_one – алхам

алхмаар

b

2

add_one memory

state

main() memory

state

int add_one(int b)

{

b=b+1;

return b;

}

int main(void)

{

int a=34,b=1;

a = add_one(b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

Page 18: C lects (4)

add_one – алхам

алхмаар

a b

2 1

main() memory

state

int add_one(int b)

{

b=b+1;

return b;

}

int main(void)

{

int a=34,b=1;

a = add_one(b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

Page 19: C lects (4)

add_one – алхам

алхмаар

a b

2 1

main() memory

state

int add_one(int b)

{

b=b+1;

return b;

}

int main(void)

{

int a=34,b=1;

a = add_one(b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

Page 20: C lects (4)

Үүнийг тайлбарла

#include <stdio.h>

int factorial(int n)

{

int fact = 1;

while (n>1)

{

fact *= n;

n--;

}

return fact;

}

int main(void)

{

int n;

printf("enter a number\n");

scanf("%d",&n);

printf("%d!=%d\n", n,

factorial(n));

/* What will this print? */

printf("n = %d\n", n);

return 0;

}

Page 21: C lects (4)

Хувьсагчийн үйлчлэх хүрээ

Функц дотор зарлагдсан хувьсагч

ижил нэртэй бусад газар зарлагдсан

хувьсагчаас үл хамаарна

Өөр функц дотор зарлагдсан

хувьсагч руу функц хандаж чадахгүй

Жишээ – scope.c

Page 22: C lects (4)

Scope.c

int do_something(void)

{

int a;

printf("Entered do_something\n");

a = 7;

printf("In do_something,

a = %d\n", a);

printf("Exiting do_something\n");

return a;

}

int main(void)

{

int res, a = 34;

printf("Entered main\n");

printf("In main, a = %d\n",a);

res = do_something();

printf("do_something

returned %d\n", res);

printf("In main, a = %d\n", a);

printf("Exiting main...\n");

return 0;

}

Page 23: C lects (4)

Энд юу буруу байна вэ?

int add_one(int b)

{

a=b+1;

}

int main(void)

{

int a=34,b=1;

add_one(b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

Page 24: C lects (4)

Функцийн зарлалт

C бичсэн сайн програм нь олон

файлуудаас бүрддэг

Бид аль нэг файлд функцийг бичээд

бусад файлуудад ашиглаж болно

Page 25: C lects (4)

Функцийн зарлалт

Функц нь түүнийг хэрэглэхээр

дуудахаас өмнө заавал зарлагдсан

байх ѐстой

Зарлалт нь: биегүй байна

return_type Function_name(argument types);

Page 26: C lects (4)

Функцийн зарлалт

#include <stdio.h>

int factorial(int a); /* Функцийн зарлалт! */

int main(void){

int num;

printf("enter a number\n");

scanf("%d", &num);

printf("%d != %d\n", num, factorial(num));

return 0;

}

int factorial(int a){

int i, b = 1;

for(i = 1; I <= a; i++)

b = b*i;

return b;

}

Page 27: C lects (4)

Функцийн зарлалт

stdio.h файлд олон тооны

функцийн зарлалт байдаг

#include нь дуудагдсан функцийн

зарлалтыг хөрвүүлэгчид оруулж өгнө

Page 28: C lects (4)

math сан

Математик функцуудын сан

Ашиглахдаа (#include <math.h>)

Жишээ нь.

double s,p;

s = sqrt(p);

math.h санд уг функц зарлагдсан:

double sqrt (double x);

Page 29: C lects (4)

math сангийн зарим функц

sin(x), cos(x), tan(x)

x радианаар өгөгднө

asin(x), acos(x), atan(x)

log(x)

sqrt(x)

pow(x,y) – x-н yзэрэгт.

ceil(x), floor(x) …гэх мэт

Page 30: C lects (4)

Дасгал

Дараах томъѐог ашиглан

-г ойролцоогоор бодох програм бич. Функцийн аргумент n –г хүлээн авч бодолтыг хийнэ. Буцах утга нь байна.

2

21

π 1 1 1 11

6 4 9 16n n

Page 31: C lects (4)

Дасгал

Өмнөх бодлогыг тодорхой

нарийвчлалд хүргэж

боддог болго. Функцийн

аргумент нь нарийвчлалын

утга байна.