Fungsi dalam Pengaturcaraan C dengan Contoh: Recursive, Inline

Isi kandungan:

Anonim

Apakah Fungsi dalam C?

Fungsi dalam pengaturcaraan C adalah sekatan kod yang dapat digunakan kembali yang menjadikan program lebih mudah difahami, diuji dan dapat diubahsuai dengan mudah tanpa mengubah program panggilan. Fungsi membahagi kod dan memodulasi program untuk hasil yang lebih baik dan berkesan. Ringkasnya, program yang lebih besar dibahagikan kepada pelbagai subprogram yang disebut sebagai fungsi

Apabila anda membahagikan program besar ke dalam pelbagai fungsi, menjadi mudah untuk menguruskan setiap fungsi secara individu. Setiap kali terdapat ralat dalam program, anda dapat dengan mudah menyiasat fungsi yang salah dan hanya membetulkan kesalahan tersebut. Anda boleh memanggil dan menggunakan fungsi dengan mudah bila diperlukan yang secara automatik membawa penjimatan masa dan ruang.

Dalam tutorial ini, anda akan belajar-

  • Perpustakaan Vs. Fungsi yang ditentukan pengguna
  • Deklarasi Fungsi
  • Definisi fungsi
  • Panggilan fungsi
  • Hujah Fungsi
  • Skop Pembolehubah
  • Pemboleh ubah Statik
  • Fungsi Rekursif
  • Fungsi sebaris

Perpustakaan Vs. Fungsi yang ditentukan pengguna

Setiap program 'C' memiliki setidaknya satu fungsi yang merupakan fungsi utama, tetapi program dapat memiliki sejumlah fungsi. Fungsi utama () dalam C adalah titik permulaan program.

Dalam pengaturcaraan 'C', fungsi dibahagikan kepada dua jenis:

  1. Fungsi perpustakaan
  2. Fungsi yang ditentukan pengguna

Perbezaan antara fungsi perpustakaan dan pengguna yang ditentukan di C adalah kita tidak perlu menulis kod untuk fungsi perpustakaan. File ini sudah ada di dalam fail header yang selalu kita sertakan di awal program. Anda hanya perlu menaip nama fungsi dan menggunakannya bersama dengan sintaks yang betul. Printf, scanf adalah contoh fungsi perpustakaan.

Manakala, fungsi yang ditentukan pengguna adalah jenis fungsi di mana kita harus menulis badan fungsi dan memanggil fungsi setiap kali kita memerlukan fungsi tersebut untuk melakukan beberapa operasi dalam program kita.

Fungsi yang ditentukan pengguna dalam C selalu ditulis oleh pengguna, tetapi kemudian dapat menjadi bagian dari perpustakaan 'C'. Ini adalah kelebihan utama pengaturcaraan 'C'.

Fungsi pengaturcaraan C terbahagi kepada tiga aktiviti seperti,

  1. Pengisytiharan fungsi
  2. Definisi fungsi
  3. Panggilan fungsi

Deklarasi Fungsi

Pengisytiharan fungsi bermaksud menulis nama program. Ini adalah bahagian wajib untuk menggunakan fungsi dalam kod. Dalam deklarasi fungsi, kita hanya menentukan nama fungsi yang akan kita gunakan dalam program kita seperti deklarasi pemboleh ubah. Kami tidak dapat menggunakan fungsi kecuali dinyatakan dalam program. Deklarasi fungsi juga disebut " Prototaip fungsi ."

Deklarasi fungsi (disebut prototaip) biasanya dilakukan di atas fungsi utama () dan mengambil bentuk umum:

return_data_type function_name (data_type arguments);
  • The return_data_type : adalah jenis data bagi fungsi nilai yang dikembalikan semula kenyataan itu memanggil.
  • The FUNCTION_NAME : diikuti oleh kurungan
  • Nama hujah dengan pernyataan jenis data mereka secara opsional diletakkan di dalam kurungan.

Kami mempertimbangkan program berikut yang menunjukkan cara menyatakan fungsi kubus untuk mengira nilai kubus bagi pemboleh ubah integer

#include /*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {

Perlu diingat bahawa fungsi tidak semestinya mengembalikan nilai. Dalam kes ini, kata kunci batal digunakan.

Sebagai contoh, deklarasi fungsi output_message menunjukkan bahawa fungsi tersebut tidak mengembalikan nilai: void output_message ();

Definisi Fungsi

Definisi fungsi bermaksud hanya menulis bahagian fungsi. Fungsi fungsi terdiri daripada pernyataan yang akan melakukan tugas tertentu. Badan fungsi terdiri daripada satu atau sekumpulan pernyataan. Ia juga merupakan bahagian wajib dalam fungsi.

int add(int a,int b) //function body{int c;c=a+b;return c;}

Panggilan fungsi

Panggilan fungsi bermaksud memanggil fungsi setiap kali diperlukan dalam program. Setiap kali kita memanggil fungsi, ia menjalankan operasi yang dirancang. Panggilan fungsi adalah bahagian pilihan dalam program.

 result = add(4,5);

Inilah kod lengkap:

#include int add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}

Pengeluaran:

Addition:30

Hujah Fungsi

Argumen fungsi digunakan untuk menerima nilai yang diperlukan oleh panggilan fungsi. Mereka dipadankan mengikut kedudukan; argumen pertama diteruskan ke parameter pertama, parameter ke parameter kedua dan seterusnya.

Secara lalai, argumen diteruskan dengan nilai di mana salinan data diberikan kepada fungsi yang disebut. Pemboleh ubah yang dilalui sebenarnya tidak akan berubah.

Kami mempertimbangkan program berikut yang menunjukkan parameter yang dilalui oleh nilai:

int add (int x, int y);int main() {int a, b, result;a = 5;b = 10;result = add(a, b);printf("%d + %d\ = %d\n", a, b, result);return 0;}int add (int x, int y) {x += y;return(x);}

Output program adalah:

5 + 10 = 15 

Perlu diingat bahawa nilai a dan b dilewatkan untuk menambahkan fungsi tidak diubah kerana hanya nilainya diteruskan ke parameter x.

Skop Pembolehubah

Skop pemboleh ubah bermaksud keterlihatan pemboleh ubah dalam kod program.

Dalam C, pemboleh ubah yang dinyatakan di dalam fungsi adalah lokal untuk blok kod dan tidak dapat disebut di luar fungsi. Walau bagaimanapun, pemboleh ubah yang dinyatakan di luar semua fungsi bersifat global dan dapat diakses dari keseluruhan program. Pemalar yang dinyatakan dengan #define di bahagian atas program dapat diakses dari keseluruhan program. Kami mempertimbangkan program berikut yang mencetak nilai pemboleh ubah global dari fungsi utama dan pengguna yang ditentukan:

#include int global = 1348;void test();int main() {printf("from the main function : global =%d \n", global);test () ;return 0;}void test (){printf("from user defined function : global =%d \n", global);}

Keputusan:

from the main function : global =1348from user defined function : global =1348

Kami membincangkan perincian program:

  1. Kami menyatakan pemboleh ubah global bilangan bulat dengan 1348 sebagai nilai awal.
  2. Kami menyatakan dan menentukan fungsi test () yang tidak mengambil argumen atau mengembalikan nilai. Fungsi ini hanya mencetak nilai pemboleh ubah global untuk menunjukkan bahawa pemboleh ubah global dapat diakses di mana saja dalam program.
  3. Kami mencetak pemboleh ubah global dalam fungsi utama.
  4. Kami memanggil fungsi ujian untuk mencetak nilai pemboleh ubah global.

Di C, ketika argumen diteruskan ke parameter fungsi, parameter bertindak sebagai pemboleh ubah tempatan yang akan dihancurkan ketika keluar dari fungsi.

Apabila anda menggunakan pemboleh ubah global, gunakannya dengan berhati-hati kerana boleh menyebabkan kesalahan dan mereka boleh berubah di mana sahaja dalam program. Mereka mesti dimulakan sebelum menggunakan.

Pemboleh ubah Statik

Pemboleh ubah statik mempunyai skop tempatan. Walau bagaimanapun, mereka tidak hancur ketika keluar dari fungsi. Oleh itu, pemboleh ubah statik mengekalkan nilainya selama-lamanya dan dapat diakses ketika fungsi dimasukkan semula. Pemboleh ubah statik dimulakan apabila diisytiharkan dan memerlukan awalan statik.

Program berikut menggunakan pemboleh ubah statik:

#include void say_hi();int main() {int i;for (i = 0; i < 5; i++) { say_hi();}return 0;}void say_hi() {static int calls_number = 1;printf("Hi number %d\n", calls_number);calls_number ++; } 

Program ini memaparkan:

Hi number 1Hi number 2Hi number 3Hi number 4Hi number 5

Fungsi Rekursif

Pertimbangkan faktorial nombor yang dikira sebagai berikut 6! = 6 * 5 * 4 * 3 * 2 * 1.

Pengiraan ini dilakukan sebagai pengiraan fakta berulang * (fakta -1) sehingga fakta sama dengan 1.

Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri dan merangkumi keadaan keluar untuk menyelesaikan panggilan rekursif. Dalam kes pengiraan nombor faktorial, keadaan keluar adalah sama dengan 1. Pengulangan berfungsi dengan "menyusun" panggilan sehingga keadaan keluar benar.

Sebagai contoh:

#include int factorial(int number);int main() {int x = 6;printf("The factorial of %d is %d\n", x, factorial(x));return 0;}int factorial(int number) {if (number == 1) return (1); /* exiting condition */elsereturn (number * factorial(number - 1));} 

Program ini memaparkan:

 The factorial of 6 is 720 

Di sini, kita membincangkan perincian program:

  1. Kami menyatakan fungsi faktorial rekursif kami yang mengambil parameter integer dan mengembalikan faktorial parameter ini. Fungsi ini akan memanggil dirinya sendiri dan menurunkan nombor sehingga keluar, atau keadaan dasar tercapai. Apabila keadaan itu benar, nilai yang dihasilkan sebelumnya akan dikalikan satu sama lain, dan nilai faktorial akhir dikembalikan.
  2. Kami menyatakan dan memulakan pembolehubah integer dengan nilai "6" dan kemudian mencetak nilai faktoralnya dengan memanggil fungsi faktorial kami.

Pertimbangkan carta berikut untuk lebih memahami mekanisme rekursif yang terdiri daripada memanggil fungsi itu sendiri sehingga kes asas atau keadaan berhenti tercapai, dan setelah itu, kami mengumpulkan nilai sebelumnya:

Fungsi sebaris

Fungsi dalam pengaturcaraan C digunakan untuk menyimpan petunjuk yang paling kerap digunakan. Ia digunakan untuk memodulasi program.

Setiap kali fungsi dipanggil, petunjuk arahan melompat ke definisi fungsi. Setelah melaksanakan fungsi, petunjuk arahan kembali ke pernyataan dari mana ia melompat ke definisi fungsi.

Setiap kali kita menggunakan fungsi, kita memerlukan kepala penunjuk tambahan untuk melompat ke definisi fungsi dan kembali ke pernyataan. Untuk menghilangkan keperluan kepala penunjuk seperti itu, kami menggunakan fungsi sebaris.

Dalam fungsi sebaris, panggilan fungsi secara langsung digantikan oleh kod program yang sebenarnya. Ia tidak melompat ke blok apa pun kerana semua operasi dilakukan di dalam fungsi sebaris.

Fungsi sebaris kebanyakannya digunakan untuk pengiraan kecil. Mereka tidak sesuai semasa pengkomputeran besar terlibat.

Fungsi sebaris serupa dengan fungsi biasa kecuali kata kunci sebaris diletakkan sebelum nama fungsi. Fungsi sebaris dibuat dengan sintaks berikut:

inline function_name (){//function definition}

Marilah kita menulis program untuk melaksanakan fungsi sebaris.

inline int add(int a, int b) //inline function declaration{return(a+b);}int main(){int c=add(10,20);printf("Addition:%d\n",c);getch();}

Pengeluaran:

Addition: 30

Program di atas menunjukkan penggunaan fungsi sebaris untuk penambahan dua nombor. Seperti yang kita lihat, kita telah mengembalikan penambahan pada dua nombor dalam fungsi sebaris hanya tanpa menulis baris tambahan. Semasa panggilan fungsi, kita baru saja melepasi nilai yang harus kita lakukan penambahan.

Ringkasan

  • Fungsi adalah program mini atau subprogram.
  • Fungsi digunakan untuk memodulasi program.
  • Perpustakaan dan pengguna ditentukan adalah dua jenis fungsi.
  • Fungsi terdiri daripada deklarasi, fungsi badan, dan bahagian fungsi panggilan.
  • Pengisytiharan fungsi dan badan adalah wajib.
  • Panggilan fungsi boleh menjadi pilihan dalam program.
  • Program C mempunyai sekurang-kurangnya satu fungsi; ia adalah fungsi utama ().
  • Setiap fungsi mempunyai parameter, nama, jenis data nilai kembali atau kekosongan.
  • Setiap fungsi mesti ditentukan dan dinyatakan dalam program C anda.
  • Perlu diingat bahawa pemboleh ubah biasa dalam fungsi C dihancurkan sebaik sahaja kita keluar dari panggilan fungsi.
  • Argumen yang diteruskan ke fungsi tidak akan diubah kerana mereka tidak mengikut nilai oleh alamat.
  • Skop pemboleh ubah disebut sebagai keterlihatan pemboleh ubah dalam program
  • Terdapat pemboleh ubah global dan tempatan dalam pengaturcaraan C