Friday, December 23, 2016

Bab 1. Pemrograman C Belajar Dari Contoh



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