آموزش زبان C (قسمت هفتم:توابع)

به آموزش زبان C (قسمت هفتم – توابع) خوش اومدید.

بخش هفتم:توابع Functions:

توابع مودر استفاده در C آسان هستند، اما به خاطر کارایی زبان C یکسری محدودیت هایی هم دارند به طور کلی:

  • توابع می توانند مقادیری ثابت یا متغیر را به عنوان آرگومان  ورودی دریافت کنند.
  • توابع فقط می توانند یک مقدار یا هیچی مقداری را برگردانند.

هربلایی که سر یک آرگومان بخوایم در بیاریم درون تابع انجام میشه و نمیتونیم درون یک تابع آرگومانی را تغییر بدیم بعد انتظار داشته باشیم بیرون از تابع هم تغییر کنن. دنیای درون تابع کاملا مستقل از بیرون اون هست.

توابع را میشه به صورتهای مختلف تعریف کرد. مثلا تعاریف زیر برای توابع رو ببینید:

int foo(int bar) {
    /* do something */
    return bar * ۲;
}

int main() {
    foo(۱);
}

خب فرقشون چیه؟

در تابع اول که اسمش foo هست میتونه یک ورودی از نوع int با نام bar بگیره (همون int دوم) و میتونه یک خروجی از نوع int (همون int اول) داشته باشه.

اگه دقت کنید می بینید که تابع foo متغیر bar رو گرفته در ۲ ضرب کرده و به عنوان خروجی برگردونده.

در تابع دوم با عنوان main ما هیچ ورودی نمیگیریم یعنی این علامت () اما یک خروجی از نوع int داریم. پس حالا اگه به تابع main بالا دقت کنید می بینید که کامپایلر وقتی به تابع main برسه تابع foo(1) را اجرا میکنه. به این صورت که تابع foo عدد ۱ را به عنوان ورودی گرفته در ۲ ضرب میکنه و حاصل ضرب رو که میشه ۲ میندازه بیرون. (برای اینکه بتونید از این مقدار که تابع foo انداخته بیرون استفاده کنید یک متغیر از نوع Int تعریف کنید و بریزید توی اون)

و اما…

در زبان C، برای اینکه بتونیم از توابع استفاده کنیم باید قبل از استفاده اونهارو تعریف کنیم. حالا یا باید توابع رو درون یک کتابخونه بنویسیم و هدر کتابخونه را فراخوانی کنیم یا باید بیرون تابع اصلی یا همون main اونارو بسازیم و  بالای صفحه کد اصلیمون (قبل از main) اونارو فراخوانی کنیم. به مثال زیر توجه بنمائید:

/* function declaration */
int foo(int bar);
int main() {
    /* calling foo from main */
    printf("The value of foo is %d", foo(۱));
}
int foo(int bar) {
    return bar + ۱;
}

همونطور که در مثال بالا می بینید

تابع foo در پایین (بیرون) تابع main تعریف شده است و در بالای آن فراخوانی شده و در درون تابع main ازش استفاده گردیده است.

و دیگر اینکه…

ما میتونیم توابعی ایجاد کنیم که نه مقداری بگیرند و نه مقداری برگردانند. که از عنوان void برای اونها استفاده می کنیم. مثل زیر:

void moo() {
    /* do something and don't return a value */
}
int main() {
    moo();
}

در کد بالا تابع moo نه ورودی میگیره نه خروجی میده.

اما میتونیم تابع moo رو به صورت زیر هم تعریف کنیم (دوتاش درسته!):

void moo(void) {
    /* do something and don't return a value */
}
int main() {
    moo();
}

یعنی جای () گذاشتیم (void)

و اما تمرین….:

دوستای خوبم، در کد زیر یه تابع بنویسید به نام print_bitg که یک آرگومان از نوع int به عنوان ورودی میگیره. حالا اگه این عدد بزرگتر از ۱۰ بود چاپ کنه : The X number is big که جای x عددی که به عنوان ورودی دادین نمایش داده میشه.

نکته: در دستور printf از n\ برای رفتن به خط بعد استفاده کنید.!

#include <stdio.h> 
/* function declaration */
void print_big(int number);
int main() {
  int array[] = { 1, 11, 2, 22, 3, 33 };
  int i;
  for (i = 0; i < 6; i++) {
    print_big(array[i]);
  }
  return 0;
}
/* write your function here */

جواب تمرین:

#include <stdio.h>
/* function declaration */
void print_big(int number);
int main() {
  int array[] = { 1, 11, 2, 22, 3, 33 };
  int i;
  for (i = 0; i < 6; i++) { print_big(array[i]); } return 0;
}
 void print_big(int number)
{
 if(number > 10){
        printf("%d is big\n",number);
    }
}

همانطور که می بینید تابع print_big در خارج از تابع main تعریف و فراخوانی شده است.

پایان آموزش زبان C (قسمت هفتم – توابع)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...