Bab. 1 Pengantar Pemrograman C
Tujuan
Instruksional
|
|
·
Program C
sederhana: Menampilkan sebaris teks.
·
Program C sederhana
yang lain: Menjumlahkan dua integer.
|
·
Konsep memori
·
Aritmatika dalam C
·
Pembuatan
keputusan: Operator ekualitas dan relasional.
|
1.1 Introduksi
Bahasa C memfasilitasi pendekatan terstruktur terhadap
perancangan program komputer. Pada bab ini, akan diintroduksi pemrograman C dan
disajikan beberapa contoh yang mengilustrasikan beberapa fitur C. Setiap contoh
akan dianalisa statemen demi statemen. Pada Bab 2 dan Bab 3, akan disajikan
pengantar pemrograman terstruktur dalam C.
1.2 Program C Sederhana: Menampilkan
Sebaris Teks
C menggunakan beberapa notasi, yang
mungkin terlihat aneh bagi beberapa orang yang belum pernah memprogram
komputer. Akan dimulai dengan program C sederhana. Contoh pertama ini akan
menampilkan sebaris teks pada monitor. Program dan keluarannya ditampilkan pada
Gambar 1.1.
1
2
3
4
5
6
7
8
9
10
11
|
/* Gambar. 1.1: gambar01_01.c
Program pertama dalam C */
#include <stdio.h>
/* fungsi untuk memulai eksekusi program */
int main( void )
{
printf("Selamat
datang ke bahasa C!\n" );
return 0; /*
mengindikasikan bahwa program berakhir dengan sukses */
} /* akhir dari fungsi main */
|
Selamat datang ke bahasa C!
Gambar 1.1 | Program
pertama dalam C
Meskipun program ini sederhana, ia
mengilustrasikan beberapa fitur penting bahasa C. Baris 1 dan 2
/* Gambar. 1.1: gambar01_01.c
Program pertama dalam C */
dimulai dengan /* dan diakhiri dengan
/*, yang mengindikasihkan bahwa kedua baris ini adalah komentar. Anda dapat
menyisipkan komentar untuk mendokumentasikan program dan membuat program dapat
dibaca dan dimengerti oleh pengguna. Komentar tidak menyebabkan program untuk
melakukan apapun ketika program dijalankan. Komentar diabaikan oleh kompiler C
dan tidak menghasilkan sembarang kode objek bahasa-mesin apapun. Komentar pada
kasus ini hanya menampikan nomor gambar, nama file, dan tujuan program.
Komentar dapat membantu pengguna dalam membaca dan memahami program Anda,
tetapi terlalu banyak komentar, sebaliknya, dapat membuat program susah dibaca.
Baris 3
#include <stdio.h>
adalah sebuah direktif preprosesor C.
Baris yang diawali dengan # diproses oleh
preprosesor sebelum program dikompilasi. Baris 3 memberitahu preprosesor untuk
menyertakan konten dari standard input/output header (<stdio>) dalam program. Header ini memuat
informasi yang digunakan oleh kompiler ketika mengkompilasi pemanggilan
terhadap fungsi-fungsi pustaka masukan/keluaran standar seperti printf. Pada Bab 5, akan dijelaskan secara
detil tentang isi beberapa header yang sering dipakai.
Baris 6
int main( void )
merupakan bagian dari setiap program C.
Sepasang kurung setelah main mengindikasikan
bahwa main merupakan suatu blok pembangun program yang dinamakan fungsi. Program C
memuat satu atau lebih fungsi, yang salah satunya harus berupa fungsi main. Eksekusi terhadap setiap program C dimulai dari fungsi main. Fungsi dapat memberikan nilai balik informasi. Katakunci int di sebelah kiri main mengindikasikan
bahwa main “mengembalikan” sebuah nilai integer. Akan dijelaskan nanti pada Bab
5 tentang apa artinya bagi suatu fungsi dalam “mengembalikan sebuah nilai
balik” ketika mendemonstrasikan bagaimana menciptakan fungsi Anda sendiri.
Sekarang, Anda hanya perlu menyertakan katakunci int di sebelah kiri main di dalam setiap
program Anda. Fungsi juga dapat menerima informasi ketika dipanggil. Katakunci void yang diapit dalam kurung di sini berarti bahwa main tidak
menerima sembarang informasi apapun. Pada Bab 13, akan ditunjukkan suatu contoh
bagaimana main menerima informasi.
Kurung kurawal kiri, {, diberikan untuk
menandai tubuh setiap fungsi (baris 7). Kurung kurawal kanan terkait menandai
akhir setiap fungsi (baris 11). Sepasang kurung kurawal kiri dan kanan dan
potongan program yang diapit oleh sepasang kurung kurawal tersebut dinamakan
blok. Blok merupakan unit program yang penting dalam C.
Baris 8
printf("Selamat
datang ke bahasa C!\n" );
menginstruksikan komputer utuk
melakukan sebuah aksi atau tindakan, yaitu, pada kasus ini, untuk menampilkan
pada monitor suatu string karakter yang ditandai dengan tanda kutip ganda.
Suatu string kadangkala dinamakan pula dengan string karakter, suatu pesan,
atau suatu literal. Keseluruhan baris, termasuk printf, argumennya di dalam kurung, dan tanda titik-koma, dinamakan dengan
statemen. Setiap statemen harus diakhiri dengan sebuah titik-koma (yang juga
dikenal sebagai terminator atau penghenti statemen). Ketika statemen printf, pada baris 8, dieksekusi, program
akan menampilkan pesan Selamat datang ke bahasa C! pada monitor. Perhatikan bahwa karakter \n tidak ditampilkan pada monitor. Karakter backslash (\)
dinamakan dengan karakter escape.
Ketika menemui sebuah backslash di dalam string, kompiler menengok karakter
yang berada di depan backslash dan menggabungkannya untuk membentuk sebuah
runtun escape. Runtun escape \n berarti newline atau garis-baru. Ketika sebuah
garis-baru ada di dalam suatu string yang akan ditampilkan oleh printf, runtun escape /n menyebabkan kursor berpindah ke awal baris berikutnya pada
monitor. Beberapa runtun escape yang umum dijumpai dicantumkan pada Gambar 1.2.
Runtun escape
|
Penjelasan
|
\n
\t
\a
\\
\”
|
Garis-baru. Memposisikan kursor ke awal baris
selanjutnya.
Tab horisontal. Memindahkan kursor ke penghentian
tab berikutnya.
Alert. Membunyikan bel sistem.
Backslash. Menyisipkan sebuah karakter backslash di
dalam suatu string.
Kutip ganda. Menyisipkan sebuah karakter kutip-ganda
di dalam suatu string.
|
Gambar 1.2 | Beberapa
runtun escape yang umum dijumpai
Dua runtun escape terakhir pada Gambar
1.2 kelihatan aneh. Karena backslash memiliki arti khusus di dalam suatu
string, kompiler mengenalinya sebagai karakter escape. Penggunaan backslash
ganda (\\) dimaksudkan untuk menempatkan sebuah
backslash di dalam suatu string. Menampilkan suatu kutip ganda juga bisa
menyebabkan masalah karena kutip ganda menandai batas suatu string. Penggunaan
runtun escape \”di dalam suatu
string yang akan ditampilkan oleh printf mengindikasikan
bahwa printf harus menampilkan sebuah kutip ganda.
Baris 10
return 0; /* mengindikasikan bahwa program berakhir dengan sukses */
disertakan di akhir setiap fungsi main. Katakunci return merupakan salah
satu dari beberapa cara untuk keluar dari sebuah fungsi. Ketika statemen return digunakan di akhir main seperti ditunjukkan di sini, nilai 0 mengindikasikan bahwa
program berhenti dengan sukses. Pada Bab 4, akan dijelaskan tentang fungsi
secara detil, dan alasan untuk menyertakan statemen ini akan menjadi jelas.
Untuk sekarang, Anda hanya perlu mencantumkan statemen ini dalam setiap
program, atau, jika tidak, progam akan mengeluarkan peringatan. Kurung kurawal,
}, (baris 12) mengindikasikan akhir dari fungsi main.
Tadi telah disebutkan bahwa printf menyebabkan program untuk mengambil
tindakan atau aksi. Eksekusi terhadap sembarang program menyebabkan pelaksanaan
berbagai aksi dan pembuatan beberapa keputusan. Pada akhir bab ini, akan
didiskusikan tentang pembuatan keputusan. Pada Bab 2, akan didiskusikan
mengenai model aksi/keputusan pada pemrograman.
Fungsi printf dapat menampilkan Selamat datang ke bahasa C! dalam beberapa cara. Sebagai contoh, program pada Gambar
1.3 menghasilkan keluaran yang sama dengan keluaran program pada Gambar 1.1.
Hal ini karena setiap printf mulai
menampilkan ketika printf sebelumnya
berhenti menampilkan. Fungsi printf pertama (baris
8) menampilkan Selamat datang diikuti dengan sebuah spasi dan printf kedua (baris 9) mulai menampilkan ke bahasa C! pada baris yang sama setelah spasi yang ditampilkan oleh printf pertama.
1
2
3
4
5
6
7
8
9
10
11
12
|
/* Gambar 1.3: gambar01_03.c
Menampilkan pada satu baris dengan dua statemen printf */
#include <stdio.h>
/* fungsi main untuk memulai eksekusi
program */
int main( void )
{
printf(
"Selamat datang " );
printf(
"ke bahasa C!\n" );
return
0; /* mengindikasikan bahwa program berhenti dengan sukses */
} /* akhir dari fungsi main */
|
Selamat datang ke bahasa C!
Gambar 1.3 | Menampilkan
pada satu baris dengan dua statemen printf
Satu printf dapat menampilkan beberapa baris menggunakan beberapa karakter garis-baru
pada Gambar 1.4. Setiap kali runtun escape \n dijumpai, keluaran dilakukan pada awal baris berikutnya.
1
2
3
4
5
6
7
8
9
10
11
12
|
/* Gambar 1.4: gambar01_04.c
Menampilkan beberapa baris dengan satu
printf */
#include <stdio.h>
/* fungsi main untuk memulai eksekusi
program */
int main( void )
{
printf( "Selamat\ndatang\nke\nbahasa\nC!\n" );
return 0; /* mengindikasikan bahwa
program berhenti dengan sukses */
} /* akhir dari fungsi main */
|
Selamat
datang
ke
bahasa
C!
Gambar 1.4 | Menampilkan
beberapa baris teks dengan satu statemen printf
1.3 Program C Sederhana Yang Lain:
Menjumlahkan Dua Integer
Program berikutnya akan menggunakan
fungsi pustaka standar scanf untuk
memperoleh dua integer yang diketikkan oleh pengguna, menjumlahkan kedua nilai
tersebut, dan menampilkan hasilnya menggunakan printf. Program dan keluarannya ditampilkan pada Gambar 1.5.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/* Gambar 1.5: gambar01_05.c
Program penjumlahan */
#include <stdio.h>
/* fungsi main untuk memulai eksekusi
program */
int main( void )
{
int integer1; /* angka pertama
yang dimasukkan pengguna */
int integer2; /* angka kedua yang
dimasukkan pengguna */
int jum; /* variabel tempat
penyimpanan hasil penjumlahan */
printf( "Masukkan angka pertama\n" ); /* meminta
pengguna */
scanf( "%d",
&integer1 ); /* membaca suatu integer */
printf( "Masukkan angka kedua\n" ); /* meminta
pengguna */
scanf( "%d",
&integer2 ); /* membaca sebuah integer */
jum = integer1 + integer2; /*
menugaskan total pada jum */
printf( "Jumlah adalah
%d\n", jum ); /* menampilkan jum */
return
0; /* mengindikasikan bahwa program berakhir dengan sukses */
} /* akhir dari fungsi main */
|
Masukkan angka pertama
18
Masukkan angka kedua
231
Jumlah adalah 249
Gambar 1.5 | Program
penjumlahan
Komentar pada baris 1-2 menyatakan
tujuan program. Seperti dinyatakan sebelumnya, setiap program memulai eksekusi
dengan main. Kurung siku kiri { (baris 7) menandai
awal tubuh main dan kurung siku
kanan terkait } (baris 24) menandai akhir tubuh main.
Baris 8-10
int integer1; /* angka pertama yang dimasukkan pengguna */
int integer2; /* angka kedua yang dimasukkan pengguna */
int jum; /* variabel tempat penyimpanan hasil penjumlahan */
adalah beberapa definisi. Nama integer1, integer2, dan jum adalah nama
variabel. Sebuah variabel adalah suatu lokasi dalam memori dimana sebuah nilai
disimpan untuk digunakan oleh program. Ketiga definisi tersebut menspesifikasi
bahwa variabel integer1, integer2, dan jum ketiganya bertipe int, yang berarti
bahwa ketiganya memuat nilai integer. Setiap variabel harus didefinisikan
dengan sebuah nama dan suatu tipe data dan ditempatkan setelah kurung siku kiri
yang mengawali tubuh main sebelum
digunakan di dalam program. Ada beberapa tipe data lain selian int dalam C. Ketiga definisi tersebut dapat digabungkan menjadi
satu statemen definisi sebagai berikut:
int integer1, integer2, jum;
tetapi hal ini akan membuat sulit untuk
menjelaskan tiap variabel dengan penjelasan masing-masing seperti yang
dilakukan pada baris 8-10.
Nama variabel dalam C dapat berupa
sembarang pengenal yang sah. Pengenal adalah runtun karakter yang memuat huruf,
dijit, dan garis-bawah (_) yang tidak diawali dengan suatu dijit. Panjang
pengenal dapat berapapun yang Anda sukai, tetapi hanya 31 karakter pertama saja
yang dibutuhkan untuk dikenali kompiler C sesuai dengan standar C. Bahasa C
adalah bahasa sensitif, huruf kecil dan huruf besar berbeda dalam C, jadi a1 dan A1 adalah pengenal
yang berbeda.
Definisi harus ditempatkan setelah
kurung siku dari suatu fungsi dan sebelum statemen yang bisa dieksekusi.
Sebagai contoh, dalam program yang diilustrasikan pada Gambar 1.5, penyisipan
ketiga definisi setelah printf pertama akan
menyebabkan error sintaks. Error sintaks disebabkan ketika kompiler tidak dapat
mengenali suatu statemen. Kompiler, secara normal, menampilkan pesan error
untuk membantu Anda dalam menemukan lokasi dan memperbaiki statemen yang salah.
Error sintaks adalah pelanggaran terhadap aturah bahasa C. Error sintaks juga
dikenal sebagai error kompilasi atau error waktu-kompilasi.
Baris 12
printf(
"Masukkan angka pertama\n" ); /* meminta pengguna */
menampilkan literal Masukkan angka pertama pada layar dan memposisikan kursor di
awal baris selanjutnya. Pesan ini disebut dengan prompt karena ia mendesak pengguna untuk melakukan sebuah tindakan
atau aksi. Statemen berikutnya
scanf(
"%d", &integer1 ); /* membaca suatu integer */
menggunakan scanf untuk memperoleh suatu nilai dari pengguna. Fungsi scanf membaca dari masukan standar, yang biasanya papan-ketik. Fungsi
ini memiliki dua argumen, “%d” dan &integer1. Argumen pertama, string kendali
format, mengindikasikan tipe data yang harus dimasukkan oleh pengguna.
Penspesifikasi konversi %d mengindikasikan
bahwa data harus berupa sebuah integer (huruf d adalah singkatan dari “decimal
integer”). Karakter % pada konteks
ini diperlakukan oleh scanf (dan printf) sebagai suatu karakter spesial yang
memulai sebuah penspesifikasi konversi. Argumen kedua dari scanf diawali dengan tanda ampersand (&), yang dinamakan sebagai operator alama dalam C, diikuti dengan nama
variabel. Simbol ampersand, ketika digabungkan dengan nama variabel,
memberitahu scanf tentang lokasi (atau alamat) di dalam memori dimana variabel integer1 disimpan. Komputer kemudian menyimpan
nilai dari integer1 pada lokasi
tersebut. Kegunaan ampersand (&) seringkali
membingungkan bagi programer pemula atau bagi seseorang yang mahir pada bahasa
pemrograman lain yang tidak memerlukan notasi ini. Untuk sekarang, Anda hanya
perlu mengingat untuk mengawali setiap variabel dengan suatu ampersand dalam
setiap pemanggilan terhadap scanf. Beberapa
pengecualian terhadap aturan ini akan didiskusikan pada Bab 5 dan Bab 6.
Ketika komputer mengeksekusi fungsi scanf tersebut, ia akan menunggu
pengguna untuk memasukkan sebuah nilai untuk variabel integer1. Pengguna merespon dengan mengetikkan
suatu integer, kemudian menekan kunci ENTER untuk mengirimkan angka tersebut
kepada komputer. Komputer selanjutnya menugaskan angka ini, atau nilai ini,
kepada variabel integer1. Fungsi printf dan scanf memfasilitasi interaksi antara pengguna dan komputer. Karena interaksi
ini menyerupai sebuah dialog, ia seringkali dinamai dengan komputasi
interaktif.
Baris 15
printf(
"Masukkan angka kedua\n" ); /* meminta pengguna */
menampilkan pesan Masukkan angka kedua
pada layar, kemudian memposisikan kursor di awal baris berikutnya. Fungsi printf ini juga mendesak pengguna untuk
mengambil tindakan.
Statemen
scanf(
"%d", &integer2 ); /* membaca suatu integer */
memperoleh suatu nilai untuk integer2
dari pengguna. Statemen penugasan pada baris 18
jum =
integer1 + integer2; /* menugaskan total pada jum */
menghitung penjumlahan dari variabel integer1 dan integer2 dan menugaskan hasilnya kepada variabel jum menggunakan operator penugasan =. Statemen ini dibaca sebagai, “jum mendapatkan nilai dari integer1 + integer2”. Kebanyakan perhitungan dilakukan dalam statemen penugasan. Operator = dan operator + disebut pula
dengan operator biner karena masing-masing memiliki dua operand. Kedua operand
dari operator + adalah integer1 dan integer2. Kedua operand dari operator + adalah jum dan nilai ekspresi integer1 + integer2.
Baris 20
printf(
"Jumlah adalah %d\n", jum ); /* menampilkan jum */
memanggil fungsi printf untuk menampilkan literal Jumlah adalah yang diikuti oleh nilai numerik dari
variabel jum pada layar. Fungsi printf ini memuat dua argumen, “Jum adalah %d\n” dan jum. Argumen pertama adalah string kendali format. Ia memuat beberapa
karakter literal yang akan ditampilkan dan penspesifikasi konversi %d yang mengindikasikan bahwa sebuah integer akan ditampilkan.
Argumen kedua menspesifikasi nilai yang akan ditampilkan. Perhatikan bahwa
penspesifikasi format untuk sebuah integer sama dalam printf dan scanf. Hal ini
berlaku pada hampir semua tipe data dalam C.
Perhitungan dapat pula dilakukan di
dalam statemen printf. Anda dapat
menggabungkan kedua statemen sebelumnya di dalam statemen
printf( "Jumlah adalah %d\n", integer1 + integer2 );
Baris 22
return 0;
/* mengindikasikan bahwa program berakhir dengan sukses */
melewatkan nilai 0 kembali ke sistem
operasi dimana program sedang dieksekusi. Nilai ini mengindikasikan pada sistem
operasi bahwa program dieksekusi dengan sukses. Untuk informasi tentang
bagaimana melaporkan kegagalan program, Anda dapat melihat manual untuk sistem
operasi Anda. Kurung kanan } pada baris 24 mengindikasikan bahwa akhir dari
fungsi main telah dicapai.
1.4 Konsep Memori
Nama variabel seperti integer1, integer2, dan jum sebenarnya
berkaitan dengan lokasi dalam memori komputer. Setiap variabel mempunyai nama,
tipe, dan nilai.
Ketika statemen (baris 13)
scanf( "%d", &integer1 ); /*
membaca suatu integer */
dieksekusi, nilai yang diketikkan oleh
pengguna ditempatkan ke dalam suatu lokasi memori. Dimisalkan bahwa pengguna
memasukkan angka 45 sebagai nilai untuk integer1. Komputer akan menempatkan 45 ke lokasi integer1 seperti tertampil pada Gambar 1.6.
Gambar 1.6 | Lokasi memori yang menunjukkan nama
dan nilai suatu variabel
Kapan saja sebuah nilai ditempatkan di
dalam suatu lokasi memori, nilai tersebut menggantikan nilai yang sebelumnya
ada pada lokasi itu; jadi, penempatan suatu nilai baru ke dalam lokasi memori
dikatakan bersifat destruktif.
Kembali ke program penjumlahan, ketika
statemen (baris 16)
scanf(
"%d", &integer2 ); /* membaca sebuah integer */
dieksekusi, dimisalkan bahwa pengguna
memasukkan angka 72. Nilai ini ditempatkan ke dalam lokasi integer2, dan memori akan tampak seperti pada
Gambar 1.7. Kedua lokasi tersebut belum tentu saling bertetangga.
Begitu program mendapatkan nilai-nilai
untuk integer1 dan integer2, ia menjumlahkan kedua nilai tersebut dan menempatkan hasil penjumlahan
ke dalam variabel jum. Statemen
(baris 18)
jum =
integer1 + integer2; /* menugaskan total pada jum */
Gambar 1.7 | Dua lokasi memori setelah kedua
nilai dimasukkan pengguna
yang melakukan penjumlahan juga
mengganti nilai apapun yang sebelumnya disimpan di dalam jum. Ini terjadi ketika hasil penjumlahan integer1 dan integer2 ditempatkan ke dalam lokasi jum (menghancurkan
nilai yang sebelumnya ada dalam jum). Setelah jum dihitung, memori akan tampak seperti pada Gambar 1.8. Nilai
integer1 dan integer2 tampak seperti sebelum digunakan dalam perhitungan. Keduanya digunakan,
tetapi tidak dihancurkan, pada saat komputer melakukan perhitungan. Jadi,
ketika sebuah nilai dibaca dari suatu lokasi memori, proses tersebut dikatakan
bersifat non-destruktif.
Gambar 1.8 | Tiga lokasi memori setelah
perhitungan
1.5 Artimatika Dalam C
Kebanyakan program C melakukan
kalkulasi aritmatika. Operator aritmatika C dicantumkan pada Gamba 1.9. Perhatikan
kegunaan berbagai simbol khusus. Simbol asterik (*) mengindikasikan perkalian
dan tanda persen (%) menandakan operator sisa. Dalam aljabar, jika Anda ingin
menggandakan a sebanyak b kali, Anda dapat memanfaatkan simbol asterik, seperti
dalam a * b.
Operasi C
|
Operator Aritmatika
|
Ekspresi Aljabar
|
Ekspresi C
|
Penjumlahan
Pengurangan
Perkalian
Pembagian
Sisa
|
+
-
*
/
%
|
f + 7
p – c
bm
x/y
r mod s
|
f + 7
p – c
b * m
x / y
r % s
|
Gambar 1.9 | Operator aritmatika di dalam C
Semua operator aritmatika adalah
operator biner. Sebagai contoh, eskpresi 3 + 7 memuat operator biner + dan
operand 3 dan 7.
Pembagian integer menghasilkan hasil integer. Sebagai contoh, ekspresi 7/4 memberikan hasil
evaluasi 1 dan ekspresi 17/5 memberikan hasil evaluasi 3. C menyediakan
operator sisa, %, yang
menghasilkan sisa setelah dilakukan pembagian integer. Operator sisa merupakan
suatu operator integer yang dapat dipakai hanya pada operand integer. Ekspresi x % y menghasilkan sisa setelah x dibagi dengan y. Jadi, 7 % 4 menghasilkan 3 dan 17 % 5 menghasilkan 2. Nanti akan didiskusikan banyak aplikasi menarik yang
melibatkan operator sisa.
Ekspresi
Aritmatik Dalam Format Sebaris
Ekspresi aritmatik dalam C harus
ditulis dalam format sebaris untuk memfasilitasi pengentrian program ke dalam
komputer. Jadi, ekspresi seperti “a dibagi oleh b” harus ditulis sebagai a/b sehingga semua operator dan operan berada dalam satu baris.
Notasi aljabar
secara umum tidak dapat diterima oleh
kompiler, meskipun beberapa paket perangkat-lunak tertentu mendukung keberadaan
notasi untuk ekspresi matematika kompleks.
Kurung untuk
Mengelompokkan Subekspresi
Kurung berguna dalam ekspresi C seperti
halnya dalam ekspresi aljabar. Sebagai contoh, untuk mengalikan a dengan kuantitas b + c, Anda menuliskannya dengan a * (b + c).
Aturan Keutamaan
Operator
C memakai operator di dalam ekspresi
aritmatik dengan urutan yang ditentukan oleh aturan keutamaan operator, yang
secara umum sama seperti di dalam aljabar:
1. Operator di
dalam ekspresi yang dimuat di dalam sepasang kurung dievaluasi pertama kali.
Jadi, kurung dapat digunakan untuk memaksa urutan evaluasi sesuai yang Anda
inginkan. Kurung dikatakan berada dalam level tertinggi dalam derajat keutamaan
operator. Di dalam kasus kurung bertingkat, seperti
( ( a + b ) + c )
Operator yang berada diapit sepasang
kurung yang paling dalam dieksekusi terlebih dahulu.
2. Perkalian, pembagian, dan operasi sisa diterapkan selanjutnya.
Jika sebuah ekspresi memuat beberapa perkalian, pembagian, dan operasi sisa,
evaluasi dilakukan dari kiri ke kanan. Perkalian, pembagian, dan operasi sisa
dikatakan berada pada level keutamaan yang sama.
3. Operasi penjumlahan dan pengurangan dievaluasi
berikutnya. Jika sebuah ekspresi memuat beberapa operasi penjumlahan dan
pengurangan, maka evaluasi dilakukan dari kiri ke kanan. Penjumlahan dan
pengurangan juga berada pada level keutamaan yang sama, yang lebih rendah dari
derajat keutamaan operasi perkalian, pembagian, dan sisa.
Aturan keutamaan operator menentukan
urutan yang dipakai C untuk mengevaluasi ekspresi. Ketika dikatakan bahwa
evaluasi dilakukan dari kiri ke kanan, maka hal ini berkaitkan dengan
asosiatifitas operator. Anda akan melihat beberapa operator yang berasosiasi
dari kanan ke kiri. Gambar 1.10 menyimpulkan aturan keutamaan untuk beberapa
operator dalam C.
Operator
|
Operasi
|
Urutan Evaluasi
|
( )
*
/
%
+
-
|
kurung
perkalian
pembagian
sisa
penjumlahan
pengurangan
|
Dievaluasi pertama kali. Jika terdapat kurung
bertingkat, maka ekspresi yang diapit oleh sepasang kurung terdalam yang
dievaluasi terlebih dahulu. Jika terdapat beberapa pasangan kurung yang
berada pada level keutamaan yang sama, maka dievaluasi dari kiri ke kanan.
Dievaluasi selanjutnya. Jika terdapat beberapa, maka
dievaluasi dari kiri ke kanan.
Dievaluasi terakhir. Jika terdapat beberapa, maka
dievaluasi dari kiri ke kanan.
|
Gambar 1.10 | Derajat keutamaan atas beberapa
operator dalam C
Contoh Ekspresi
Aljabar Dalam C
Sekarang akan didiskusikan beberapa
ekspresi dalam C untuk menjelaskan aturan keutamaan operator. Setiap contoh
memuat ekspresi aljabar dalam C. Contoh berikut menghitung rerata aritmatik
atas lima suku.
C: m = (a + b + c + d + e) / 5;
Sepasang kurung (kurung kiri dan kurung
kanan) diperlukan dalam mengelompokkan penjumlahan karena pembagian mempunyai
derajat keutamaan lebih tinggi dari operasi penjumlahan. Keseluruhan entitas (a + b + c + d + e) dibagi oleh 5. Jika sepasang kurung
tersebut diabaikan, maka akan diperoleh a + b + c + d + e / 5 yang akan dievaluasi secara salah sebagai
Contoh berikut adalah suatu persamaan
garis lurus:
C: y = m * x + b;
Pada kasus ini, tidak diperlukan
kurung. Perkalian dievaluasi terlebih dahulu karena perkalian memiliki
keutamaan lebih tinggi daripada operasi penjumlahan.
Contoh berikut memuat operasi sisa (%), perkalian, pembagian, penjumlahan, pengurangan, dan
penugasan:
Angka yang dilingkari mengindikasikan
urutan dimana C mengevaluasi operator-operator yang ada. Operator perkalian,
sisa, dan pembagian dievaluasi terlebih dahulu dengan urutan dari kiri ke kanan
(karena berasosisasi dari kiri ke kanan) karena ketiganya mempunyai derajat
keutamaan lebih tinggi daripada penjumlahan dan pengurangan. Operator
penjumlahan dan pengurangan dievaluasi berikutnya. Keduanya juga dievaluasi
dari kiri ke kanan.
Tidak semua ekspresi dengan beberapa
pasang kurung memuat kurung bertingkat. Sebagai contoh, ekspresi berikut tidak
memuat kurung bertingkat. Kedua pasang kurung berada pada level yang sama.
a * ( b + c ) +
c * ( d + e )
Evaluasi
Terhadap Polinomial Derajat Kedua
Untuk meningkatkan pemahaman atas
aturan keutamaan operator, di sini akan disajikan suatu polinomial derajat
kedua.
Angka-angka yang dilingkari di bawah
statemen mengindikasikan urutan dimana C mengevaluasi operasi-operasi yang ada.
Tidak ada operator aritmatik untuk pemangkatan dalam C, jadi Anda perlu
merepresentasikan
sebagai x * x. Pustaka standar C menyertakan fungsi pow (power, pangkat) untuk
melakukan eksponensiasi. Karena beberapa isu penting yang berkaitan dengan tipe
data, fungsi pow akan dijelaskan
secara detil pada Bab 3.
Dimisalkan variabel, a, b, c dan x dalam
polinomial derajat kedua tersebut diinisialisasi sebagai berikut: a = 2, b = 3, c = 7, dan x = 5. Gambar 1.11 mengilustrasikan urutan dimana operator-operator yang ada
diterapkan.
Seperti dalam aljabar, adalah hal yang
bisa diterima bila menempatkan kurung yang tidak penting di dalam sebuah
ekspresi untuk menjadikan ekspresi lebih jelas. Kurung yang tidak penting
tersebut dinamakan kurung redundan atau berlebih. Sebagai contoh, statemen
sebelumnya dalah ditata kembali sebagai berikut:
y = ( a * x * x ) + ( b * x ) + c;
1.6 Pembuatan Keputusan: Operator
Ekualitas dan Operator Relasional
Statemen C yang dapat dieksekusi
berguna untuk melakukan aksi (seperti perhitungan atau masukan/keluaran data)
atau untuk membuat keputusan (yang sebentar lagi akan diberikan contoh). Anda
bisa membuat keputusan di dalam suatu program, misalnya, untuk menentukan jika
nilai seseorang di dalam ujian lebih tinggi atau sama dengan 60 dan jika ya,
maka akan ditampilkan pesan “Selamat! Anda lulus!”. Pada bagian ini, akan dikenalkan versi sederhana dari statemen if dalam C yang membolehkan suatu program untuk membuat suatu
keputusan berdasarkan kebenaran atau kesalahan dari sebuah statemen fakta yang
dinamakan kondisi. Jika kondisi terpenuhi (kondisi bernilai true), maka statemen di dalam tubuh if akan dieksekusi. Jika kondisi tidak terpenuhi (kondisi bernilai false), maka statemen di dalam tubuh if tidak akan dieksekusi. Apakah statemen di dalam tubuh if dieksekusi atau tidak, setelah statemen if selesai dieksekusi, eksekusi berlanjut ke statemen
berikutnya setelah statemen if.
Kondisi di dalam statemen if dibentuk menggunakan operator ekualitas dan operator
relasional yang disimpulkan pada Gambar 1.12. Operator-operator relasional
memiliki level keutamaan yang sama dan berasosiasi dari kiri ke kanan. Operator
ekualitas memiliki derajat keutamaan lebih rendah daripada operator relasional
dan berasosiasi dari kiri ke kanan. [Perhatikan: Dalam C, sebuah ekspresi dapat
berupa sembarang ekspresi yang menghasilkan nilai nol (false) atau nilai tak-nol (true)].
Untuk menghidari kebingungan, operator
ekualitas dibaca dengan “sama dengan ganda” dan operator penugasan dibaca
dengan “mendapatkan” atau “ditugasi nilai”.
Operator
ekualitas atau operator relasional
|
Operator ekualitas atau operator relasional dalam
C
|
Contoh kondisi dalam C
|
Arti kondisi C
|
Operator Ekualitas
=
Operator Relasional
>
<
|
==
!=
>
<
>=
<=
|
x == y
x != y
x > y
x < y
x >= y
x <= y
|
x sama dengan y
x tidak sama dengan y
x lebih besar dari y
x lebih kecil dari y
x lebih besar dari atau sama dengan y
x lebih kecil dari atau sama dengan y
|
Gambar 1.12 | Operator relasional dan operator
ekualitas
Gambar 1.13 menggunakan enam statemen if untuk membandingkan dua angka yang dimasukkan oleh
pengguna. Jika kondisi di dalam sembarang statemen if bernilai true, maka statemen printf yang berkaitan dengan statemen if tersebut akan dieksekusi. Program dan tiga contoh keluarannya
ditampilkan pada gambar.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
/* Gambar. 1.13: gambar01_13.c
Penggunaan statemen if, operator relasional,
dan
operator ekualitas */
#include <stdio.h>
/* fungsi main untuk memulai eksekusi */
int main( void )
{
int
num1; /* angka pertama yang dibaca dari pengguna */
int
num2; /* angka kedua yang dibaca dari pengguna */
printf( "Masukkan dua integer, dan Saya akan memberitahumu\n"
);
printf( "relasi yang terpenuhi: " );
scanf( "%d%d", &num1, &num2 ); /* membaca dua
integer */
if
( num1 == num2 ) {
printf( "%d sama dengan %d\n", num1, num2 );
} /*
akhir if */
if
(num1 != num2) {
printf( "%d tidak sama dengan %d\n", num1, num2 );
} /*
akhir if */
if
(num1 < num2) {
printf( "%d lebih kecil dari %d\n", num1, num2 );
} /*
akhir if */
if
(num1 > num2) {
printf( "%d lebih besar dari %d\n", num1, num2 );
} /*
akhir if */
if
(num1 <= num2) {
printf( "%d lebih kecil dari atau sama dengan %d\n",
num1, num2 );
} /*
akhir if */
if
(num1 >= num2) {
printf( "%d lebih besar dari atau sama dengan %d\n",
num1, num2 );
} /*
akhir if */
return
0; /* mengindikasikan bahwa program berakhir dengan sukses */
} /*
akhir dari fungsi main */
|
Masukkan dua integer, dan Saya akan
memberitahumu
relasi yang terpenuhi: 3 7
3 tidak sama dengan 7
3 lebih kecil dari 7
3 lebih kecil dari atau sama dengan 7
Masukkan dua integer, dan Saya akan
memberitahumu
relasi yang terpenuhi: 12 12
12 sama dengan 12
12 lebih kecil dari atau sama dengan
12
12 lebih besar dari atau sama dengan
12
Masukkan dua integer, dan Saya akan
memberitahumu
relasi yang terpenuhi: 9 5
9 tidak sama dengan 5
9 lebih besar dari 5
9 lebih besar dari atau sama dengan 5
Gambar 1.13 | Penggunaan
statemen if, operator relasional, dan operator
ekualitas
Program menggunakan scanf (baris 15) untuk mengentrikan dua angka. Setiap
penspesifikasi konversi memiliki argumen terkait dimana di dalamnya sebuah
nilai disimpan. Penspesifikasi konversi %d yang pertama mengkonversi sebuah nilai untuk disimpan di dalam variabel num1, dan %d yang kedua
mengkonversi sebuah nilai untuk disimpan di dalam variabel num2.
Sebuah kurung kiri, {, memulai tubuh
setiap statemen if (misalnya,
baris 17). Kurung kanan terkait, }, mengakhiri setiap tubuh statemen if (misalnya, baris 19). Sembarang jumlah statemen dapat
ditempatkan di dalam tubuh suatu statemen if.
Gambar 1.14 mencantumkan keutamaan
operator-operator yang telah dikenalkan pada bab ini, yang ditunjukkan dari
atas ke bawah dalam urutan keutamaan menurun. Tanda sama dengan juga merupakan
sebuah operator. Semua operator ini, dengan pengecualian operator penugasan =,
berasosiasi dari kiri ke kanan. Operator penugasan (=) berasosiasi dari kanan
ke kiri.
Operator
|
Asosiatifitas
|
( )
* /
%
+ -
< <=
> >=
== !=
=
|
kiri ke kanan
kiri ke kanan
kiri ke kanan
kiri ke kanan
kiri ke kanan
kanan ke kiri
|
Gambar 1.14 | Keutamaan dan asosiatifitas semua
operator yang telah didiskusikan sejauh ini
Beberapa kata yang telah Anda gunakan
dalam program C pada bab ini, khususunya int, return, dan if, merupakan katakunci dalam bahasa C. Gambar 1.15 memuat semua katakunci
dalam C. Semuanya memiliki makna khusus bagi kompiler C, jadi Anda harus
hati-hati agar tidak menggunakannya sebagai pengenal seperti nama variabel.
Gambar 1.15 | Katakunci C
No comments:
Post a Comment