0 PENGENALAN KEPADA C
Bahasa C adalah bahasa paras tinggi (high level language) yang mengandungi ciri-ciri bahasa paras
rendah (low level language). C boleh digunakan untuk semua bidang dan boleh digunakan dengan
semua teknik pengaturcaraan.
Pada akhir 80an, bahasa C telah menjadi begitu popular. Kebolehan dan kepantasan C menyebabkan
ia menjadi bahasa yang paling digemari untuk penggunaan sistem operasi dan kejuruteraan.
Sekarang ia menjadi bahasa yang paling popular untuk pembangunan perisian dan juga penggunaan
biasa. Ini mungkin kerana masyarakat informasi pada ketika itu ini sedang menuju ke arah sistem
terbuka (open system) dan sistem operasi yang berkait rapat dengan sistem terbuka ini adalah sistem
operasi UNIX. Bahasa pengaturcaraan yang berkait rapat dengan UNIX pula ialah C, kerana
sebahagian besar dari UNIX itu sendiri pada asalnya ditulis dalam bahasa C. Apabila UNIX semakin
popular, bahasa C juga turut menjadi popular.
Pada ketika yang sama, pakej-pakej pengaturcaraan C untuk MS-DOS (Microsoft Disk Operating
System), yang digunakan pada komputer-komputer peribadi IBM, telah muncul di pasaran. Di antara
pakej-pakej yang popular ialah dari Borland International dan dan QuickC dari Microsoft. Turbo C dan
QuickC adalah pakej-pakej C yang dilengkapi dengan (compiler), (linker) dan (editor) yang disatukan
dalam sebuah (integrated environment).
Microsoft C ialah pakej untuk digunakan dalam sekitaran baris arahan (Command Line Environment).
Jadi sebuah yang berasingan diperlukan. Turbo C juga dibekalkan dengan satu set penyusun dan
penyambung (Compiler and Linker) untuk penggunaan seumpama ini.
Tahun-tahun 90an menyaksikan kemunculan pakej-pakej pengaturcaraan C yang disepadukan
dengan sekitaran pembangunan aturcara berorientaasikan objek (Object Oriented Programming
environment). Pada masa yang sama, suatu versi baru bahasa C yang berorientasikan objek (object
oriented) telah muncul, iaitu C++.
Dari C++ pula telah muncul JAVA, iaitu bahasa pengaturcaraan yang sedang meningkat popularitinya
dengan mendadak. Tidaklah perlu saya bicarakan tentang hal ini kerana banyak tapak-tapak web
yang dikhususkan untuk Java dan lain-lain hal yang berkaitan.
Contoh 1.1 : Sebuah Aturcara C Yang Mudah
Ini adalah sebuah aturcara yang mudah dan pendek. Daripada contoh 1 ini dapatlah kita mencetak
maklumat seperti di bawah ke paparan:
Ini adalah aturcara C kita yang pertama
Bahagian permulaan (kepala) aturcara ini terdiri daripada:
#include <stdio.h>
dan
main()
Arahan "#include <stdio.h>" di atas ialah arahan untuk penyusun supaya memasukkan fail stdio.h
semasa penyusunan. Ia bukan sebahagian daripada arahan C tetapi arahan pra-pemproses (pre-
processor) bagi penyususun.
Selain daripada baris-baris di atas, aturcara ini juga mengandungi baris komen sebagai maklumat
tambahan. Lihat bagaimana semua perkataan di antara /* dan */ ditulis supaya kita atau orang lain
mengetahui tujuan aturcara kita. Baris komen seperti ini tidak semestinya berada di baris permulaan
aturcara akan tetapi boleh ditempatkan di mana-mana sahaja asalkan ia berada di antara aksara-
aksara /* dan */. Adalah baik jika daripada permulaan lagi anda membiasakan diri supaya
menggunakan baris komen ini dengan banyaknya. Ini akan menjelaskan perjalanan dan fungsi setiap
blok pernyataan C anda. Cara begini adalah dianggap sebagai cara yang digunakan oleh seorang
pengaturcara yang berpengalaman, mahir dan teratur hasil kerjanya.
Perhatikan juga bahawa terdapat tanda left curly braces dan right curly braces ({ dan }) untuk
menandakan blok aturcara bagi fungsi main() yang merupakan rutin utama bagi aturcara ini. Di
dalam contoh di atas, blok ini mengandungi satu sahaja pernyataan, iaitu pernyataan printf() yang
merupakan panggilan kepada suatu fungsi output piawai yang diisytiharkan dalam fail stdio.h. Ini
menjelaskan kenapa kita memasukkan fail tersebut dalam penyusunan. Perhatikan rentetan yang
ditulis di antara dua simbol double quote ( "...." ) dalam printf(). Fungsi ini akan mencetak semua
aksara yang terdapat dalam rentetan berkenaan. Akan tetapi terdapat simbol-simbol tertentu yang
mempengaruhi nya. Dalam contoh di atas, terdapat simbol \n supaya rentetan kita dicetak pada baris
yang baru.
Contoh 1.1 : Sebuah Aturcara C Yang Mudah
Ini adalah sebuah aturcara yang mudah dan pendek. Daripada contoh 1 ini dapatlah kita mencetak
maklumat seperti di bawah ke paparan:
Ini adalah aturcara C kita yang pertama
Bahagian permulaan (kepala) aturcara ini terdiri daripada:
#include <stdio.h>
dan
main()
Arahan "#include <stdio.h>" di atas ialah arahan untuk penyusun supaya memasukkan fail stdio.h
semasa penyusunan. Ia bukan sebahagian daripada arahan C tetapi arahan pra-pemproses (pre-
processor) bagi penyususun.
Selain daripada baris-baris di atas, aturcara ini juga mengandungi baris komen sebagai maklumat
tambahan. Lihat bagaimana semua perkataan di antara /* dan */ ditulis supaya kita atau orang lain
mengetahui tujuan aturcara kita. Baris komen seperti ini tidak semestinya berada di baris permulaan
aturcara akan tetapi boleh ditempatkan di mana-mana sahaja asalkan ia berada di antara aksara-
aksara /* dan */. Adalah baik jika daripada permulaan lagi anda membiasakan diri supaya
menggunakan baris komen ini dengan banyaknya. Ini akan menjelaskan perjalanan dan fungsi setiap
blok pernyataan C anda. Cara begini adalah dianggap sebagai cara yang digunakan oleh seorang
pengaturcara yang berpengalaman, mahir dan teratur hasil kerjanya.
Perhatikan juga bahawa terdapat tanda left curly braces dan right curly braces ({ dan }) untuk
menandakan blok aturcara bagi fungsi main() yang merupakan rutin utama bagi aturcara ini. Di
dalam contoh di atas, blok ini mengandungi satu sahaja pernyataan, iaitu pernyataan printf() yang
merupakan panggilan kepada suatu fungsi output piawai yang diisytiharkan dalam fail stdio.h. Ini
menjelaskan kenapa kita memasukkan fail tersebut dalam penyusunan. Perhatikan rentetan yang
ditulis di antara dua simbol double quote ( "...." ) dalam printf(). Fungsi ini akan mencetak semua
aksara yang terdapat dalam rentetan berkenaan. Akan tetapi terdapat simbol-simbol tertentu yang
mempengaruhi nya. Dalam contoh di atas, terdapat simbol \n supaya rentetan kita dicetak pada baris
yang baru.
2. Struktur Data C
int = integer
float = nombor nyata
char = aksara
Jenis int mewakili integer. Terdapat pula kata-kata kunci tertentu yang boleh digabungkan kepada int
untuk membentuk jenis-jenis data yang lebih khusus lagi. Kata-kata kunci berkenaan ialah:
Kata kunci short dan long menentukan saiz yang digunakan untuk menyimpan data yang ditakrifkan.
Untuk Turbo C misalnya, menggunakan 16 bit ruang ingatan, int (tanpa short atau long) juga 16 bit
dan long int menggunakan 32 bit ruang ingatan. Saiz ini bergantung kepada sistem perisian dan yang
digunakan. Bagi sebuah komputer mini, mungkin menggunakan 64 bit ruang ingatan. Saiz data
menentukan kejituan. Lebih banyak bilangan bit yang digunakan, lebih jitu sesuatu nombor (data) itu.
Tetapi ini juga bermakna lebih banyak ruang ingatan yang digunakan. Dengan pengisytiharan int,
short int dan long int, data-data yang diisytiharkan adalah bertanda (signed), iaitu samada positif
atau negatif. Contohnya untuk satu int bersaiz 16 bit, nilai-nilai yang boleh diwakili olehnya ialah dari
-32768 hingga 32767. Kata kunci unsigned digunakan untuk mengabaikan tanda positif atau negatif
ini. Dengan mengabaikan tanda ini, julat nilai nombor berkenaan menjadi dua kali ganda iaitu dari 0
hingga 65535, walaupun ruang ingatan yang digunakan masih lagi 16 bit. Kata kunci unsigned
ditambah kepada kata-kata kunci di atas untuk membentuk kombinasi berikut:
unsigned int
unsigned short int
unsigned long int
Oleh kerana short int dan long int masing-masing boleh diringkaskan kepada short dan long, maka
dari jenis integer kita ada:
int
short
long
unsigned int
unsigned short
unsigned long
Jenis float adalah untuk mewakili nombor nyata, atau dalam sistem komputer ia dikenali sebagai
nombor titik apungan (floating point numbers). Bentuk nombor-nombor float ialah seperti salah satu
yang berikut:
3.14559
6.63e-34 atau 6.63E-34 (E menandakan eksponen 10)
100
0.001
Julat nombor nyata dan kejituan yang boleh diwakili oleh sesatu nombor float itu bergantung kepada
ruang ingatan yang digunakannya, biasanya 16 bit. Jenis float mempunyai dua versi yang lebih besar,
iaitu (double precision, 32 bit) dan long double (64 bit). Jadi hanya tiga jenis float sahaja yang kita
ada, iaitu:
float
double
long double
Tiada jenis-jenis lain seperti "unsigned float", "short double" dan sebagainya.
Jenis char adalah untuk mewakili aksara (abjad, angka, simbol dan sebagainya). Abjad ialah huruf-
huruf ABC hinga Z. Angka ialah nombor-nombor 0123 hingga 9. Manakala simbol-simbol pupla ialah
seperti @, #, $ dan sebagainya.
Jenis char boleh juga dianggap sebagai int yang terhad untuk nilai-nilai dari -128 hingga 127 kerana
setiap aksara diwakili oleh satu kod (nombor) tertentu. Oleh itu kata kunci unsigned boleh digunakan
bersama char (menjadi unsigned char) untuk mendapatkan nilai-nilai 0 hingga 255. Penggunaan char
dan int boleh ditukar-ganti jika nilai yang digunakan adalah kecil, iaitu untuk integer yang bernilai
antara –128 hingga 127 atau integer tak bertanda (unaigned int) yang bernilai antara 0 dan 255.
2.2 Pengisytiharan Pembolehubah
Setiap pemblehubah yang digunakan dalam aturcara C perlu diisytiharkan, seperti kebanyakan
bahasa pengaturcaraan yang lain tetapi tidak seperti di dalam BASIC dan FORTRAN di mana
pembolehubah- pembolehubahnya tidak perlu diisytiharkan.
jenis NamaPembolehubah;
Contohnya:
int nombor;
float peratus;
char gred;
unsigned long nombor_matrik;
Nama pembolehubah boleh terdiri dari sebarang huruf atau nombor. Kebanyakan simbol-simbol
tidak boleh digunakan dalam nama pembolehubah (dan sebarang pengcam lain) kerana ia
mempunyai kegunaan-kegunaan tertentu dalam atrucara C. Tetapi simbol garis bawah (under-score
'_') adalah satu pengecualian dan ia sering digunakan dalam nama-nama pembolehubah yang
panjang. Contohnya seperti pembolehubah nombor_matrik di atas. Dengan menggunakan nama-
nama yang panjang dan deskriptif seperti ini, kegunaan pembolehubah berkenaan akan lebih mudah
difahami
2.3 Pengawalan Dan Umpukan
Semasa sesuatu pembolehubah itu disytiharkan, ia boleh diberi nilai yang tertentu. Pengisytiharan
dengan cara ini dinamakan pememulaan (initialization). Contoh- contohnya adalah seperti berikut:
int nombor = 1;
float peratus = 0.5;
char gred = 'A';
nombor = 2;
peratus = 10;
gred = 'B';
Nilai-nilai dari pembolehubah lain, hasil dari pengiraan, hasil dari sesuatu fungsi tertentu dan
sebagainya boleh juga diumpukkan kepada sesuatu pembolehubah itu. Ini juga boleh dilakukan
semasa pememulaan. Jadi contoh-contoh berikut ini adalah sah:
int x = wherex();
int y = wherey();
int a = x + y;
x = wherex() + a;
y = x + a;
Nota: Andaikan wherex() dan wherey() adalah fungsi- fungsi yang tertakrif.
Operator digunakan untuk melakukan pengiraan dan manipulasi data yang mudah. Dalam C terdapat
operator-operator aritmatik dan tokokan (increment). Selain dari itu terdapat pula fungsi-fungsi
matematik piawai yang boleh digunakan untuk pengiraan yang lebih kompleks (Lihat BAB 3).
Senarai operator aritmatik C adalah seperti dalam bahasa-bahasa pengaturcaraan yang lain juga,
iaitu:
NOTA: x ialah pembolehubah; a dan b boleh jadi pembolehubah atau nilai yang sama jenis dengan x.
Penulisan operasi yang ditunjukkan di atas adalah yang sebaik-baiknya. Akan tetapi, aksara-aksara
ruang tidak memberi kesan ke atas hasil operasi. Pernyataan-pernyataan berikut adalah setara:
a+b
a+ b
a+b
Cara yang terbaik ialah menulisnya supaya tidak menimbulkan kekeliruan, seperti dalam contoh
terakhir yang ditunjukkan di atas.
6+4/2=6+2=8
( 6 + 4 ) / 2 = 10 / 2 = 5
Perhatikan bahawa kita menggunakan tanda kurungan untuk mengubah jujukan pengiraan. Dalam
contoh pertama di atas, 4 dibahagi 2, kemudian ditambah 6. Dalam contoh kedua, 6 ditambah 4,
kemudian jumlahnya dibahagi dengan 2.
Operator-operator tokokan tambahan dan tolakan boleh digabungkan dengan umpukan seperti
berikut:
Untuk melakukan tokokan terlebih dahulu sebelum umpukan, tanda ++ atau -- boleh diletakkan di
depan pembolehubah seperti berikut:
(jenis) nilai;
dengan jenis ialah jenis data yang baru; dan nilai ialah satu nilai tertentu samada nombor, hasil
operasi matematik dan sebagainya. Contohnya:
int a;
float x;
.
.
.
x = (float) a / x;
Dalam contoh di atas, nilai a ditukarkan kepada float terlebih dahulu sebelum dibahagikan dengan x.
Hasilnya diumpukkan kepada x.
Terdapat beberapa fungsi matematik yang telah tertakrif secara piawai dalam perpustakaan C.
Antaranya yang sering digunakan ialah
:
NAMA FUNGSI
cos kosinus
log logaritma asas e
sin sinus
sqr kuasa dua
sqrt punca kuasa dua
Prototaip bagi fungsi-fungsi ini terdapat dalam fail HEADER math.h. Oleh itu ia perlu disertakan
dalam aturcara dengan menggunakan arahan prapemproses #include. Contohnya:
#include <math.h>
float x, y;
int a;
.
.
.
y = sqrt( x );
x = sin( (float) a );
Senarai lengkap fungsi-fungsi matematik yang biasanya terdapat dalam math.lib disenaraikan dalam
lampiran teks ini.
2.5 Pemalar
Pemalar ialah nilai yang tetap, berlawanan dengan pembolehubah yang mana nilainya kita hendak
ubah-ubahkan bergantung kepada keadaan. Antara pemalar-pemalar yang kita gunakan dalam
masalah-masalah matematik dan kejuruteraan ialah seperti nilai PI, pemalar Planck, Boltzman, halaju
cahaya, cas elektron dan sebagainya. Jika nilai-nilai ini ingin kita gunakan dalam pengiraan, kita boleh
isytiharkannya sebagai pemalar. Terdapat dua cara untuk mengisytiharkan pemalar dalam C. Cara
pertama adalah dengan menggunakan #define dan cara yang kedua ialah dengan kata kunci const.
#define PI = 3.1415927
atau:
Perhatikan bahawa dengan #define kita tidak menggunakan tanda umpukan (=) dan tidak perlu
meletakkan tanda ';' di hujungnya. Ini adalah kerana #define adalah arahan pengkompilasi dan bukan
sebahagian dari pernyataan C. Semasa penyusunan aturcara, pengkompilasi akan menggantikan
semua pemalar yang ditakrifkan dengan #define ke dalam aturcara. Jadi, kesannya adalah sama
seperti kita menulis pemalar itu terus ke dalam aturcara, cuma di sini, kerja kita diringkaskan sedikit.
Kita tidak perlu menulis angka-angka yang sebenar tetapi hanya perlu menulis nama yang kita beri
kepadanya sahaja. Contohnya sebagai ganti menulis pengiraan seperti berikut:
x = sin( 3.145927 );
x = sin( PI );
Perhatikan juga bahawa dengan arahan #define kita tidak perlu menulis jenis data pemalar yang kita
takrifkan. Ini juga kerana sebab yang dinyatakan tadi. Bagi const kita perlu menyatakan jenis data
pemalar kita kerana pernyataan ini melibatkan peruntukan ruang ingatan seperti pembolehubah
juga. Cuma bezanya kita tidak boleh mengubah nilai pemalar sebagaimana yang boleh kita lakukan
terhadap pembolehubah melalui umpukan. Jika jenis pemalar tidak dinyatakan, maka pemalar itu
dianggap sebagai pemalar int. Berikut adalah beberapa contoh pengisytiharan pemalar
menggunakan const:
const maxint = 32767;
const char gred = 'A';
const char nama[] = "AHMAD";
(NOTA: Lihat tajuk RENTETAN untuk penerangan tentang pengisytiharan nama[] di atas)
Penggunaan sebenar #define adalah lebih luas daripada mentakrifkan pemalar dalam bentuk nombor
sahaja. Malah ia boleh digunakan untuk menggantikan baris-baris aturcara. Berikut adalah beberapa
contoh pentakrifan dengan #define:
(NOTA: Lihat aturcara contoh 7 untuk penerangan tentang pentakrifan FORMAT di atas)
Adalah menjadi kelaziman iaitu pemalar-pemalar yang ditakrif dengan menggunakan #define ditulis
dalam huruf-huruf besar dan yang diisytihar dengan const ditulis dalam huruf-huruf kecil seperti
pembolehubah-pembolehubah lain. Ini adalah bertujuan untuk memudahkan penulis aturcara dan
juga orang lain memahami penggunaan pemalar-pemalar berkenaan.
2.6 Tatasusunan
Tatasusunan (arrays) ialah senarai berindeks bagi satu-satu jenis data tertentu. Contohnya
tatasusunan bagi int ialah satu senarai nombor-nombor integer yang boleh kita rujuk melalui
indeksnya. Bentuk tatasusunan dalam C ialah seperti berikut:
jenis nama[saiz];
dengan jenis ialah jenis data yang digunakan untuk membentuk tatasusunan; nama ialah nama yang
diberikan kepada tatasusunan; dan saiz ialah bilangan unsur di dalam tatasusunan. Contohnya untuk
membentuk tatasusunan sepuluh integer kita tulis pengisytiharan berikut:
int nombor[10];
Di sini nombor ialah nama bagi tatasusunan kita. Kita boleh berikan nilai awal kepada tatasusunan ini
melalui pememulaan seperti berikut:
Untuk menggunakan satu dari unsur dalam tatasusunan di atas, kita rujuk melalui indeksnya. Indeks
pertama adalah bermula dari sifar dan indeks terakhir adalah saiz - 1. Jadi untuk tatasusunan nombor
<di atas, kita ada indeks dari sifar hingga sembilan:
nombor[0]
nombor[1]
nombor[2]
.
.
.
nombor[9]
Kita boleh umpukkan nilai dari unsur pertama kepada satu pembolehubah integer x misalnya:
x = nombor[0];
nombor[0] = 111;
Secara umum, kita boleh menggunakan tatasusunan seperti menggunakan data jenis biasa, tetapi ia
mempunyai kelebihan iaitu boleh dirujuk melalui indeksnya. (Lihat aturcara contoh 15 untuk melihat
penggunaan tatasusunan dalam aturcara). Kita boleh membentuk tatasusunan dari jenis-jenis data
lain seperti char dan float; termasuk jenis-jenis data penunjuk dan struktur (lihat BAB 5).
Di dalam C tidak terdapat jenis data rentetan (string) secara khusus tetapi ianya boleh dibina di
dalam C dengan mengisytiharkan pembolehubah aksara dalam bentuk tatasusunan (array) atau
penunjuk (pointer). Di sini penggunaan tatasusunan akan ditunjukkan kerana ia lebih mudah
difahami. Penggunaan penunjuk ditunjukkan dalam BAB 5.
char NamaRentetan[n];
Contohnya:
char nama[30];
char alamat[100];
nama = "Ahmad";
Untuk tujuan umpukan seperti ini, kita perlu menggunakan fungsi khas strcpy() (string copy):
Semasa pememulaan, jika panjang rentetan tidak dinyatakan, panjang rentetan asal akan diambil
sebagai panjang rentetan berkenaan. Contohnya:
Dua fungsi asas untuk dalam C ialah printf() untuk output dan scanf() input. Fungsi-fungsi ini
dinamakan sedemikian rupa kerana pada asasnya, printf() mencetak (print) sesuatu pada paparan
dalam bentuk tertentu (formatted) dan scanf() pula mengimbas (scan) sesuatu dari , juga dalam
bentuk tertentu.
NOTA: Dalam C++, fungsi-fungsi printf() dan scanf() biasanya digantikan dengan pernyataan-
pernyataan cout dan cin.
Dengan:
<format> ialah suatu string yang mengandungi arahan-arahan format yang tertentu.
<item> ialah data-data yang hendak dipaparkan.
Contohnya, untuk memaparkan nilai suatu pembolehubah jumlah dari jenis int, kita boleh tulis
seperti ini:
Dengan:
Jika kita perhatikan dalam string format di atas, kita akan dapati selain dari perkataan "Jumlah",
terdapat beberapa simbol lain yang dinamakan spesifikasi format dan mempunyai makna yang
tertentu kepada fungsi printf(). Simbol ‘%d’ menandakan bahawa data yang hendak dipaparkan ialah
dari jenis integer dalam bentuk . (Tanda ‘%’ menandakan bahawa ada data yang dilampirkan, dan
huruf ‘d’ yang digabungkan kepadanya menunjukkan bahawa data berkenaan adalah dari jenis
integer dan hendak ditulis dalam bentuk .)
Simbol ‘\n’ pula mewakili aksara 13 dan 10 dalam ASCII iaitu aksara Carriage Return dan Line Feed.
Secara ringkas, simbol ‘\n’ ini menyebabkan kurser bergerak ke permulaan baris output yang baru.
Jika diletakkan di permulaan teks (iaitu: "\n Jumlah = %d" ), ia menyebabkan data dipaparkan pada
baris yang baru. Jika diletakkan di hujung teks (iaitu: "Jumlah = %d \n" ), sebarang data yang
berikutnya akan dipaparkan pada baris yang baru.
Simbol-simbol seperti ‘\n’, ‘\t’ dan sebagainya dinamakan jujukan escape (escape sequence). Ia
mewakili aksara-aksara khas yang terdapat dalam kod ASCII. Jadual-jadual yang mengandungi senarai
dan jujukan Escape terdapat dalam LAMPIRAN. Sila ambil perhatian bahawa oleh kerana tanda %
digunakan untuk spesifikasi format, maka untuk memaparkan tanda % kita gunakan %%. Contohnya,
jika air ialah pembolehubah integer dengan nilai 10, maka:
memberikan output:
Kandungan air = 10 %
Bagi jujukan Escape pula, untuk memaparkan tanda '\' (back slash), kita perlu tulis '\\' iaitu menulis
simbol back slash itu secara berganda atau dua kali berturut-turut; dan untuk memaparkan tanda '"'
(double quote), kita perlu tulis '\"' (back slash + double quote).
Lebar ruang (medan) yang digunakan untuk memaparkan data (item) boleh ditentukan dengan
meletakkan satu nombor antara tanda % dan huruf dalam spesifikasi format berkenaan. Contohnya
untuk memaparkan satu pembolehubah (jumlah) dalam empat ruang aksara, kita boleh tulis:
Jumlah = __10
NOTA: Simbol '_' menunjukkan aksara ruang (space) yang ditambah oleh printf(). Dalam output
sebenar, tanda ini tidak kelihatan. Ia diletakkan dalam contoh di atas untuk memudahkan
penerangan sahaja.
memberikan output:
____Jumlah = ___10
Untuk data dari jenis float, selain dari menentukan , kita juga boleh menentukan bilangan yang akan
digunakan. Nilai lalai bagi bilangan nombor perpuluhan ialah enam. Contohnya, jika kita ada
pembolehubah float nilai = 32000, maka:
printf("%f", nilai);
printf("%9.2f", nilai);
printf("%e", nilai);
printf("%6.1e", nilai);
Selain dari printf(), terdapat dua lagi piawai, iaitu puts() dan putchar(). Fungsi puts() ialah untuk
memaparkan string sahaja (put string). Ia menambah aksara '\n' di hujung string yang dipaparkan. Ini
menyebabkan kurser bergerak ke baris baru selepas string berkenaan dipaparkan. Secara umum,
puts("string") adalah setara dengan printf("string\n") atau printf("%s\n", "string").
Fungsi putchar() pula ialah untuk sahaja. Secara umum, putchar( ch ) adalah setara dengan
printf("%c", ch).
Selain dari itu, terdapat variasi dari fungsi-fungsi output ini seperti fprintf(), fputs() dan fputchar().
Fungsi-fungsi ini digunakan untuk output ke saluran-saluran output yang lain selain daripada , seperti
fail pada cakera, pangkalan sesiri, pencetak dan sebagainya. Contohnya untuk mencetak pada , kita
boleh tulis seperti ini:
Secara umum, scanf() ialah untuk membaca data dari konsol atau papan kunci (keyboard). Bentuk
penggunaannya ialah:
Kecuali beberapa pengecualian kecil, bagi scanf() adalah sama seperti untuk printf() (Lihat jadual
dalam LAMPIRAN). <addr> menunjukkan alamat kepada pembolehubah yang akan digunakan untuk
menyimpan data yang dimasukkan. Untuk mendapatkan alamat sesuatu pembolehubah, tanda '&'
diletakkan di hadapan nama pembolehubah itu. Contohnya:
scanf("%d", &a);
Dengan mengandaikan a sebagai pembolehubah int, maka &a adalah alamat baginya di dalam
ingatan. Pembolehubah dari jenis string tidak memerlukan tanda '&' kerana nama bagi string
merujuk kepada alamat. Jadi kita cuma perlu tulis:
scanf("%s", nama);
Ini membolehkan kita membaca dua integer dari konsol. Perhatikan: terdapat satu ruang (space)
antara dua simbol %d di atas. Tanda ruang ini menandakan bahawa semasa input, nilai-nilai a dan b
perlu dipisahkan oleh sekurang-kurangnya satu ruang (space), tab, "newline" ([Enter]) atau sebarang
kombinasi dari ketiga-tiganya.
Fungsi-fungsi input yang lain ialah dan . Nyata sekali, gets() ialah untuk dan getch() untuk . Bentuk
penggunaan kedua-duanya ialah:
gets( string );
ch = getch();
Fungsi gets() menerima masuk sebarang aksara yang ditaip pada , sehinggalah [Enter] ditekan.
Perbezaan antara gets() dan scanf("%s") ialah: gets() membaca semua aksara, termasuk aksara ruang
(space), tetapi scanf("%s"), walaupun ia juga membaca sehingga [Enter] ditekan, tetapi sebarang
aksara selepas aksara ruang (space) pertama yang ditemuinya tidak akan disimpan. Contohnya jika
kita ada:
dan jika rentetan "Ali bin Ahmad" ditaipkan pada sebagai jawapan kepada fungsi-fungsi tadi, maka
untuk kes printf(), pembolehubah nama akan mengadungi "Ali", tetapi untuk kes gets(), nama akan
mengandungi keseluruhan "Ali bin Ahmad".
Fungsi getch() membaca satu aksara dari tanpa memaparkan aksara itu ke paparan. Variasi dari dari
getch() ialah getche() (get character with echo). Dengannya, aksara yang ditaip akan dipaparkan ke
paparan.
Variasi lain dari fungsi-fungsi input ini ialah fscanf(), fgets() dan sebagainya, untuk kegunaan pada
saluran-saluran input yang lain selain daripada seperti fail pangkalan sesiri dan lain-lain.
Contoh-Contoh Aturcara 2
#include <stdio.h>
int x, x2;
main()
{
x = 12;
x2 = x * x;
printf("\n %d %d", x, x2);
}
Aturcara ini mendedahkan kita kepada proses yang dapat dilaksanakan oleh aturcara C. Dalam
aturcara ini kita mengisytiharkan dua x dan x2 seperti berikut:
int x, x2;
Perhatikan bahawa pengisytiharan ini dilakukan di luar blok fungsi main(). Kita boleh juga meletakkan
pengisytiharan ini di dalamnya iaitu di bahagian awal blok selepas sahaja tanda pembuka blok seperti
berikut:
main()
{
int x, x2;
Untuk aturcara yang mudah dan ringkas seperti ini, ia tidak akan memberi sebarang perubahan
terhadap pelaksanaan aturcara. Kita juga ada dua iaitu:
x = 12;
x2 = x * x;
Pernyataan yang pertama di atas boleh kita gabungkan dalam pengisytiharan untuk membentuk satu
seperti berikut:
Akan tetapi adalah menjadi satu kelaziman dalam pengaturcaraan C bahawa pememulaan dan
pengisytiharan biasa tidak digabungkan. Ini adalah untuk mengelakkan kekeliruan bagi pengaturcara.
Bagi penyusun, ianya adalah sama sahaja samada kita menulisnya seperti di atas atau kita
menulisnya dalam bentuk yang lebih jelas seperti berikut:
int x = 12;
int x2;
Jika kita gunakan pememulaan seperti salah satu cara tadi maka pernyataan umpukan kita yang
pertama di atas tidak diperlukan lagi. Pernyataan umpukan yang kedua pula ialah satu pengiraan
pendek. Ia mengarahkan komputer supaya mendarabkan nilai pembolehubah x (iaitu 12) dengan
nilainya sendiri. Jadi kita melakukan 12 dengan 12. Hasil pendaraban ini pula disimpan ke dalam
pembolehubah x2. Pernyataan (fungsi) printf() mencetak kedua-dua nilai x dan x2 ke paparan.
Perhatikan bahawa terdapat dua simbol %d di dalamnya. Simbol-simbol ini menandakan bahawa kita
ingin mencetak dua nombor integer dalam bentuk desimal. Dalam penyusun-penyusun C yang
mengikut draf piawaian ANSI, kita boleh menggantikan %d dengan %i. Akan tetapi simbol %d telah
digunakan sekian lama dan inilah simbol yang sering digunakan.
Perhatikan juga terdapat ruang-ruang antara simbol-simbol \n, %d yang pertama dan %d yang kedua.
Ini hanyalah untuk mendapatkan output yang lebih jelas. Kita boleh menulis simbol-simbol ini rapat-
rapat tetapi tiada faedahnya.
3. STUKTUR ATURCARA C
main()
fungsi_1()
fungsi_2()
:
:
fungsi_n()
Sebuah fungsi pula, samada main() atau yang lainnya, adalah terdiri daripada bahagian kepala dan
badan. Bahagian kepala mengandungi takrifan-takrifan, arahan-arahan preprosesor, berkenaan dan
sebagainya. Secara umum, bahagian kepala ini mengandungi persiapan-persiapan awal bagi fungsi
berkenaan. Bahagian badan pula hampir keseluruhannya mengandungi kod-kod aturcara bagi fungsi
berkenaan. Terdapat juga takrifan-takrifan pembolehubah dan sebagainya yang diletakkan di
bahagian badan sesuatu fungsi itu. Secara umum, bahagian badan ini menentukan apakah
sebenarnya yang dilakukan oleh fungsi berkenaan.
Sebuah aturcara yang mudah, yang mengandungi hanya sebuah fungsi, iaitu fungsi main(), mungkin
mempunyai struktur seperti ini:
#include
main()
{
int bil;
:
:
}
Rajah 4.2: Bentuk Sebuah Aturcara Mudah
Penerangan:
#include Arahan preprocessor untuk menyelit fail yang dinamakan dalam tanda <> (dalam contoh
tadi, stdio.h)
main() Nama fungsi utama. Setiap aturcara C yang dilaksanakan, akan dimulakan dari fungsi main().
{ Di sini ia digunakan untuk membuka blok bagi fungsi main().
int bil; Pernyataan C untuk pememulaan, seperti yang diterangkan dalam BAB 2.
1. Nama fungsi mesti mengandungi tanda '(' dan ')'. Tanda ini sebenarnya ialah untuk mengisi
parameter-parameter fungsi berkenaan. Oleh kerana fungsi main() yang kita gunakan ini tidak
berparameter, maka ia dibiarkan kosong.
2. Setiap fungsi mesti mempunyai sekurang-kurangnya sepasang pembuka dan penutup blok.
3. Setiap satu pernyataan yang lengkap, seperti pememulaan dan panggilan kepada fungsi printf()
dalam contoh tadi, mesti diakhiri dengan tanda ';'.
3.2 Komen
Untuk membuatkan aturcara mudah difahami oleh pengaturcara sendiri atau sesiapa yang
membacanya, komen boleh ditambah. Di dalam C, komen diletakkan di antara tanda '/*' dan tanda
'*/'. Contohnya:
/* Ini
juga
satu komen
*/
Perhatikan: sesuatu komen itu tidak semestinya berada dalam satu baris sahaja. Tetapi penggunaan
komen yang terlalu panjang dan melewati beberapa baris hendaklah dengan hati-hati.
Ada kompiler yang membenarkan komen-komen diletakkan secara bersarang seperti ini:
/* Komen pertama
/* komen kedua */
penutup komen pertama */
Ada kompiler yang tidak membenarkannya, dan ada yang memberi pilihan kepada pengguna. Secara
umum, elakkan dari menggunakan komen bersarang ini, kecuali jika anda yakin ianya dibenarkan.
Apabila set pernyataan-pernyataan dalam sesuatu aturcara itu dilaksanakan, ia akan dimulakan dari
bahagian atas set itu dan bergerak satu per satu ke bawah set, sehingga ke pernyataan yang terakhir.
Selain dari itu, semua bahasa pengaturcaraan mempunyai pernyataan-pernyataan kawalan yang
boleh digunakan untuk mengubah haluan pelaksanaan sesuatu aturcara itu. Ada pernyataan kawalan
yang membolehkan pangaturcara membuat gelungan (loops), iaitu melaksanakan satu set
pernyataan tertentu berkali-kali; membuat pilihan, membuat perbandingan dan sebagainya. Di
dalam C terdapat empat set pernyataan kawalan, iaitu if & else, for, do & while, dan switch & case.
3.3.1 Pernyataan Kawalan if dan else
Pernyataan if dan else digunakan untuk melakukan perbandingan dan pilihan. Contohnya jika kita
hendak menentukan samada sesuatu nombor itu positif, kita boleh membandingnya dengan sifar.
Jika nombor itu lebih besar dari sifar misalnya, kita boleh laksanakan satu set pernyataan tertentu.
Kita boleh gunakan pernyataan if untuk tujuan ini. Bentuk penggunaan if ialah seperti berikut:
if ( syarat ) pernyataan;
Penerangan:
1. 1. Syarat biasanya ialah satu perbandingan, tetapi boleh jadi juga hasil dari sesuatu operasi
matematik atau suatu fungsi.
2. 2. Pernyataan ialah sebarang pernyataan atau set pernyataan-pernyataan C.
Contoh:
Dalam contoh di atas, perbandingan dibuat antara pembolehubah a dan sifar, iaitu samada a lebih
besar daripada sifar atau tidak. Jika a lebih besar daripada sifar, maka pernyataan (fungsi) printf()
selepas perbandingan itu akan dilaksanakan. Operator-operator yang boleh digunakan untuk
perbandingan ialah:
OPERATOR MAKNA CONTOH
== Persamaan if ( a == b )
< Kurang daripada if ( a < b )
> Lebih daripada if ( a > b )
<= Kurang atau sama if ( a <= b )
>= Lebih atau sama if ( a >= b )
!= Tidak sama dengan if ( a != b )
Jika syarat adalah benar, maka pernyataan1 akan dilaksanakan, dan jika tidak pernyataan2 akan
dilaksanakan. Contohnya:
if ( x == 0 )
prinf(“\n X adalah sifar”);
else
printf(“\n X bukan sifar”);