Top Banner
“bukuAjar” — 2011/9/22 — 13:39 — page i — #1
97

“bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

Mar 18, 2019

Download

Documents

lamthuy
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page i — #1 ii

ii

ii

Page 2: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page ii — #2 ii

ii

ii

Page 3: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page iii — #3 ii

ii

ii

PemrogramanMenggunakan

Bahasa C

Taufik Fuadi AbidinIrvanizam Zamanhuri

Program Studi InformatikaFakultas Matematika dan Ilmu Pengetahuan Alam

Universitas Syiah Kuala

Page 4: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page iv — #4 ii

ii

ii

The work in this project was partially supported by Program Studi InformatikaFakultas Matematika dan Ilmu Pengetahuan Alam

Universitas Syiah Kuala

Page 5: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page v — #5 ii

ii

ii

Kata Pengantar

Syukur Alhamdulillah penulis panjatkan ke hadirat Allah SWT yangtelah melimpahkan rahmat-Nya sehingga penulis dapat menyele-saikan penulisan Buku Ajar yang berjudul "Pemrograman Meng-gunakan Bahasa C". Selawat dan salam penulis sanjungkan kepadaNabi Besar Muhammad SAW, keluarga dan sahabat beliau.

Buku Ajar ini sangat bagus digunakan untuk mengajarkan Mataku-liah Pemrograman bagi mahasiswa-mahasiswa baik Strata Satu (S1)Informatika atau Matematika maupun Diploma Tiga (D3) Manaje-men Informatika. Di dalam buku ini disajikan tentang konsep-konsepdasar bahasa pemrograman C yang meliputi Input/Output sertaPernyataan, Tipe Data, Pernyataan Bersyarat, Perulangan, Array,Pointer, Fungsi, File, dan Typedef dan Struct. Semua materi tersebutdisajikan sangat jelas dengan dilengkapi visualisasi dari program sertacontoh-contoh program yang efektif dan efisien sehingga mahasiswadengan mudah memahami konsep-konsep bahasa C.

Penulisan Buku Ajar ini merupakan salah satu kegiatan akademikprogram studi Informatika, Fakultas Matematika dan Ilmu Penge-tahuan Alam (FMIPA), Universitas Syiah Kuala (Unsyiah) dan di-danai sepenuhnya oleh FMIPA Unsyiah melalui Dana Rutin Tahunan.Oleh karena itu, penulis ingin mengucapkan terimakasih kepadaPihak Dekanan FMIPA, Unsyiah dan pihak-pihak terkait lainnyayang telah mendukung secara langsung atau tidak langsung dalampenyempurnaan penulisan buku ajar ini.

Akhirnya penulis juga menyadari bahwa penulisan Buku Ajar inimasih jauh dari kesempurnaan. Oleh karena itu kritik dan saran yangmembangun sangat penulis harapkan. Semoga buku ini bermanfaatbagi semua pihak yang terkait dan menjadi lebih sempurna pada masayang akan datang.

Banda Aceh, Juni 2011Taufik Fuadi Abidin & Irvanizam Zamanhuri

Page 6: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page vi — #6 ii

ii

ii

Page 7: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page vii — #7 ii

ii

ii

Daftar Isi

Kata Pengantar v

Daftar Isi vii

Daftar Gambar xi

Daftar Tabel xiii

1 Pendahuluan ANSI/C dan Contoh 11.1 Pengantar . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 ANSI/C . . . . . . . . . . . . . . . . . . . . . . . . . . 21.4 Penulisan Program yang Baik . . . . . . . . . . . . . . 21.5 Kompilasi Menggunakan gcc . . . . . . . . . . . . . . . 3

2 Input Output dan Pernyataan 52.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 52.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3 Penggunaan printf() dan scanf() . . . . . . . . . . . . 52.4 Contoh Program . . . . . . . . . . . . . . . . . . . . . 72.5 Penggunaan Library ctype . . . . . . . . . . . . . . . . 10

3 Tipe Data 113.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 113.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3 Tipe Data Primitif . . . . . . . . . . . . . . . . . . . . 113.4 Presidensi dan Urutan Pemrosesan (Associativity) Op-

erator dalam C . . . . . . . . . . . . . . . . . . . . . . 133.5 Operator-Operator . . . . . . . . . . . . . . . . . . . . 13

3.5.1 Operator Aritmatik, Relasional, dan Incre-ment/Decrement . . . . . . . . . . . . . . . . . 13

Page 8: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page viii — #8 ii

ii

ii

3.5.2 Operator Assignment (=) . . . . . . . . . . . . 143.5.3 Assignment Operator . . . . . . . . . . . . . . . 15

3.6 Konversi Tipe Data . . . . . . . . . . . . . . . . . . . . 16

4 Pernyataan Bersyarat (Conditional Statement) 194.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 194.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 194.3 Konsep Pernyataan Bersyarat . . . . . . . . . . . . . . 204.4 Serangkaian Pernyataan (Compound Statement) . . . . 204.5 Lokal Variabel . . . . . . . . . . . . . . . . . . . . . . . 214.6 if dan if else Statement . . . . . . . . . . . . . . . . . . 224.7 Switch Statement . . . . . . . . . . . . . . . . . . . . . 254.8 Break dan Continue Statements . . . . . . . . . . . . . 264.9 Continue Statement Lanjutan . . . . . . . . . . . . . . 284.10 Conditional Operator . . . . . . . . . . . . . . . . . . . 29

5 Perulangan (Loop) 315.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 315.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 315.3 do while Statement . . . . . . . . . . . . . . . . . . . . 31

5.3.1 do while Statement (Dasar) . . . . . . . . . . . 315.3.2 do while Statement (Lanjutan) . . . . . . . . . 33

5.4 for Statement . . . . . . . . . . . . . . . . . . . . . . . 345.4.1 for Statement (Dasar) . . . . . . . . . . . . . . 345.4.2 for Statement (Lanjutan) . . . . . . . . . . . . 35

5.5 while statement . . . . . . . . . . . . . . . . . . . . . . 37

6 Lanjutan Perulangan (Loop) dan Contoh 416.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 416.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 416.3 Contoh Perulangan for (Lanjutan) . . . . . . . . . . . 41

6.3.1 Contoh 1 . . . . . . . . . . . . . . . . . . . . . 416.3.2 Contoh 2 . . . . . . . . . . . . . . . . . . . . . 426.3.3 Contoh 3 . . . . . . . . . . . . . . . . . . . . . 426.3.4 Contoh 4 . . . . . . . . . . . . . . . . . . . . . 426.3.5 Contoh 5 . . . . . . . . . . . . . . . . . . . . . 436.3.6 Contoh 6 . . . . . . . . . . . . . . . . . . . . . 436.3.7 Contoh 7 . . . . . . . . . . . . . . . . . . . . . 446.3.8 Contoh 8 . . . . . . . . . . . . . . . . . . . . . 44

Page 9: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page ix — #9 ii

ii

ii

7 Array Satu Dimensi 457.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 457.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 457.3 Definisi dan Pendeklarasian Array . . . . . . . . . . . 457.4 Inisialisasi Nilai . . . . . . . . . . . . . . . . . . . . . . 467.5 Indeks (Subscript) Dari Array . . . . . . . . . . . . . . 477.6 Alokasi Memory Array . . . . . . . . . . . . . . . . . . 47

8 Array Dua Dimensi 498.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 498.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 498.3 Pendeklarasian Array Dua Dimensi . . . . . . . . . . . 498.4 Inisialisasi Nilai . . . . . . . . . . . . . . . . . . . . . . 508.5 Indeks (Subscript) Dari Array Dua Dimensi . . . . . . 518.6 Alokasi memori untuk Array Dua Dimensi . . . . . . . 518.7 Contoh Program Menggunakan Array Dua Dimensi . . 52

8.7.1 Inisialiasi Nilai Array Dua Dimensi . . . . . . . 528.7.2 Pengurutan Data Dalam Array . . . . . . . . . 548.7.3 Penjumlahan Matrix Menggunakan Array . . . 54

9 Pointer 559.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 559.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 559.3 Pendeklarasian Pointer . . . . . . . . . . . . . . . . . . 559.4 Visualisasi Pointer . . . . . . . . . . . . . . . . . . . . 569.5 Operator Dereferensing . . . . . . . . . . . . . . . . . . 579.6 Pointer Vs Array . . . . . . . . . . . . . . . . . . . . . 609.7 String . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

10 Fungsi 6310.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 6310.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 6310.3 Pendeklarasian Fungsi . . . . . . . . . . . . . . . . . . 6310.4 Fungsi Bertipe Void . . . . . . . . . . . . . . . . . . . 6510.5 Jenis-Jenis Fungsi . . . . . . . . . . . . . . . . . . . . . 66

10.5.1 Fungsi Called by Value . . . . . . . . . . . . . . 6610.5.2 Fungsi Called by Reference . . . . . . . . . . . 67

10.6 Fungsi String . . . . . . . . . . . . . . . . . . . . . . . 68

Page 10: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page x — #10 ii

ii

ii

11 File 7311.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 7311.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 7311.3 File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7311.4 Beberapa Contoh Manipulasi File . . . . . . . . . . . . 7411.5 Beberapa Fungsi untuk Manipulasi File Teks . . . . . 76

12 Typedef & Struct 7712.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 7712.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 7712.3 Typedef . . . . . . . . . . . . . . . . . . . . . . . . . . 7712.4 Penggunaan Typedef Pada Array . . . . . . . . . . . . 7812.5 Contoh Penggunaan Typedef . . . . . . . . . . . . . . 7912.6 Struct . . . . . . . . . . . . . . . . . . . . . . . . . . . 7912.7 Pointer ke Sebuah Struct . . . . . . . . . . . . . . . . . 80

Daftar Pustaka 83

Page 11: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page xi — #11 ii

ii

ii

Daftar Gambar

1.1 Contoh penulisan program yang baik. . . . . . . . . . 3

3.1 Presidensi dan Urutan Pemrosesan (Associativity) . . 133.2 Operator Aritmatik. . . . . . . . . . . . . . . . . . . . 143.3 Operator Relasional. . . . . . . . . . . . . . . . . . . . 143.4 Operator Increment/Decrement. . . . . . . . . . . . . . 153.5 Contoh Operator Assignment. . . . . . . . . . . . . . . 15

4.1 Contoh penggunaan variabel lokal . . . . . . . . . . . . 214.2 Contoh penggunaan if else statement . . . . . . . . . . 234.3 Contoh penggunaan if else statement . . . . . . . . . . 234.4 Contoh penggunaan switch statement . . . . . . . . . . 254.5 Contoh penggunaan break statement . . . . . . . . . . 274.6 Contoh continue statement lanjutan . . . . . . . . . . 294.7 Contoh conditional operator . . . . . . . . . . . . . . . 294.8 Contoh conditional operator . . . . . . . . . . . . . . . 30

5.1 Contoh penggunaan do while statement lanjutan . . . 335.2 Dua buah program menggunakan do while statement . 345.3 Konversi program C yang menggunakan for statement

ke do while statement . . . . . . . . . . . . . . . . . . . 355.4 Program untuk menghitung total penjumlahan 10

bilangan integer positif pertama . . . . . . . . . . . . . 365.5 Beberapa program dengan menggunakan for statement 365.6 Contoh program dengan menggunakan double for state-

ment . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.7 Konversi statement while ke dalam bentuk do while

dan for . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

7.1 Contoh penginisialisasi array . . . . . . . . . . . . . . 467.2 Visualisasi alamat array . . . . . . . . . . . . . . . . . 477.3 Indeks (Subscript) dari array . . . . . . . . . . . . . . 47

Page 12: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page xii — #12 ii

ii

ii

7.4 Contoh penggunaan array dan visualisasinya . . . . . . 48

8.1 Visualisasi pendeklaraisin array dua dimensi . . . . . . 508.2 Contoh penginisialisasi array dua dimensi . . . . . . . 518.3 Indeks (Subscript) dari array dua dimensi . . . . . . . 518.4 Visualisasi array dua dimensi dalam bentuk satu dimensi 528.5 Visualiasai array num[i][j] . . . . . . . . . . . . . . . . 53

9.1 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 569.2 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 589.3 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 599.4 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 599.5 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 599.6 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 609.7 Visualisasi pointer pada array . . . . . . . . . . . . . . 609.8 Kesamaan array dengan pointer . . . . . . . . . . . . . 60

10.1 Visualisasi fungsi . . . . . . . . . . . . . . . . . . . . . 6610.2 Visualisasi fungsi . . . . . . . . . . . . . . . . . . . . . 6810.3 Visualisasi fungsi . . . . . . . . . . . . . . . . . . . . . 68

12.1 Visualisasi struct . . . . . . . . . . . . . . . . . . . . . 8012.2 Visualisasi struct . . . . . . . . . . . . . . . . . . . . . 81

Page 13: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page xiii — #13 ii

ii

ii

Daftar Tabel

2.1 Format Tipe Data . . . . . . . . . . . . . . . . . . . . 6

4.1 Operator relasional . . . . . . . . . . . . . . . . . . . . 20

11.1 Parameter Mode untuk Akses File . . . . . . . . . . . 74

Page 14: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page xiv — #14 ii

ii

ii

Page 15: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 1 — #15 ii

ii

ii

Bab 1

Pendahuluan ANSI/C danContoh

1.1 Pengantar

Bahasa C adalah bahasa pemrograman yang sangat populer danpowerful. Bahasa ini mulai dirancang sekitar tahun 70-an oleh DennisRitchie di Bell Laboratories dan menjadi ANSI C (standard C) padaawal tahun 1980. Bahasa pemrograman C banyak digunakan sebagaikernel bagi bahasa-bahasa yang baru dan lebih spesifik seperti C++yang merupakan pengembangan lebih lanjut dari standard C. Contohlain adalah Java, walau bukan merupakan kelanjutan dari standardC, tetapi banyak sintaks dalam Java yang mirip dengan sintaks C.

1.2 Objektif

Objektif dari materi ini adalah (i) memberikan gambaran awaltentang bahasa C, (ii) memperkenalkan bahasa C dengan contoh,(iii) mengajarkan teknik-teknik penulisan program yang baik, (iv)memilih nama untuk variabel, (v) indentation, dan (vi) penjelasandalam program (comment).

Page 16: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 2 — #16 ii

ii

ii

2 Bab 1. Pendahuluan ANSI/C dan Contoh

1.3 ANSI/C

• Didesain oleh Dennis Ritchie di Bell Laboratory (SekarangAT&T)

• Diimplementasi sebagai bahasa pemograman Operating System(OS) Unix pada mini komputer PDP-11 di tahun 1972

• Berkembang dari bahasa B yang berjalan di mesin BCPL yangdikembangkan oleh Martin Richard di tahun 1967.

• Tujuannya adalah menyempurnakan B dan merealisasikan idepemograman berstruktur.

• Tradisional C terwujud di tahun 80-an dan berhasil menjadiANSI/ISO standard di tahun 1990.

Adapun karakteristik adalah

• Portable:

– Dapat dengan mudah dipindahkan dari satu perangkatkeras ke perangkat keras yang lain

– Menyediakan standard library (fungsi-fungsi)

• Mendukung modular programming: Program ditulis dalambeberapa modul atau dipisahkan dalam beberapa file

• Dapat dikategorikan sebagai ’middle level language’

1.4 Penulisan Program yang Baik

Program yang ditulis dengan baik akan mengikuti kaidah-kaidahpenulisan program yang telah disepakati. Penulisan program yangbaik harus disertai dengan beberapa komen yang dapat memudahkanorang lain memahami alur dari program. Selain itu, penulisanprogram yang baik harus memiliki indent untuk blok program dankonsistensi dalam penamaan variabel.

Page 17: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 3 — #17 ii

ii

ii

1.5. Kompilasi Menggunakan gcc 3

Gambar 1.1: Contoh penulisan program yang baik.

1.5 Kompilasi Menggunakan gcc

Kompile program di atas dengan menulis perintah berikut padaterminal (Linux):

gcc -Wall -pedantic -g -o konversi konversi.c

Hasil kompilasi di atas akan membuat sebuah file dengan namakonversi (dibangkitkan dari sebuah buah konversi.c). Selanjutnya, filekonversi tersebut dapat dijalankan secara langsung melalui terminaldengan perintah:

./konversi

Page 18: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 4 — #18 ii

ii

ii

Page 19: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 5 — #19 ii

ii

ii

Bab 2

Input Output danPernyataan

2.1 Pendahuluan

Pemahaman Bahasa Pemrograman C akan lebih mudah melaluicontoh-contoh. Dengan memperhatikan dan memahami contoh-contoh program, mahasiswa diharapkan dapat memahami konsepbahasa pemrograman yang dipelajari secara lebih mudah dan cepat.Pada bab ini, pemahaman terhadap konsep dasar pemrogramanC dilakukan dengan membahas dan memahami beberapa contohprogram.

2.2 Objektif

Objektif dari materi ini adalah (i) memperkenalkan fungsi input danoutput, (ii) pernyataan (Statement), dan iii mengajarkan teknik-teknik penulisan program yang baik.

2.3 Penggunaan printf() dan scanf()

Fungsi printf() digunakan untuk output, sedangkan scanf() digunakanuntuk input. Huruf "f" dalam printf dan scanf merupakan kepen-

Page 20: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 6 — #20 ii

ii

ii

6 Bab 2. Input Output dan Pernyataan

dekan dari kata "formatted". Kedua fungsi tersebut dideklarasidalam header file stdio.h. Header file ini harus disertakan dalamprogram menggunakan kata kunci include.

/* standard library dimana EXIT_SUCCESS, EXIT_FAILURE,

dan Lain-lain didefinisikan*/

#include <stdlib.h>

/* standard I/O dimana printf dan scanf didefinisikan*/

#include <stdio.h>

printf dan scanf secara garis besar menerima dua argumen,yaitu string pengatur (control string) dan argumen lainnya. Stringpengatur digunakan untuk menentukan format dari argumen yangdikirim. Contoh:

Tabel 2.1: Format Tipe DataKarakter Konversi Format argumen

c Characterd Decimal integeru Unsigned decimal integere Floating point dalam notasi scientificf Floating point (pecahan)s Stringld Long integerlf Double

o, x Octaldecimal dan hexadecimal

Page 21: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 7 — #21 ii

ii

ii

2.4. Contoh Program 7

2.4 Contoh Program

Pada sub bab 2.4 akan menampilkan beberapa contoh program Cmenggunakan fungsi printf , scanf, dan beberapa operator matem-atika. Selain itu juga pada sub bab 2.4 juga menampilkan contohprogram penjumlahan dua variabel dan perintah assingment, peng-gunaan string pengatur %x untuk mengkonversi integer (basis 10)menjadi dalam format hexa desimal (basis 16), dan penggunaan stringpengatur %o untuk mengkonversi integer (basis 10) menjadi dalamformat hexa desimal (basis 8).

Program 1 Penggunaan fungsi printf.

#include < stdio.h>void main(void){

printf("\n");printf("Hello Students.");printf("\n");

}

Program 2 Penjumlahan dua variabel dan perintah assingment.#include <stdio.h>void main(void) {

int i,j,k;i = 4;j = 5;k = i + j;

printf("Penjumlahan dua variabel i+j=%d\n",k);}

Program 6 memperlihatkan penggunaan pernyataan penjumlahanmenggunakan perintah (operator)= dan pernyataan increment (++).Walaupun keduanya akan menghasilkan keluaran yang sama, namunpernyataan yang ditulis menggunakan (operator)= dan increment(++) diyakini, walaupun tidak signifikan, akan lebih cepat.

Page 22: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 8 — #22 ii

ii

ii

8 Bab 2. Input Output dan Pernyataan

Program 3 Penggunaan string pengatur %x untuk mengkonversiinteger (basis 10) menjadi dalam format hexa desimal (basis 16)#include <stdio.h>void main(void){

int i = 100;printf(" %x\n",i);

}

Program 4 Penggunaan string pengatur %o untuk mengkonversiinteger (basis 10) menjadi dalam format hexa desimal (basis 8).#include <stdio.h>void main(void){

int i = 74;printf(" %o\n",i);

}

Program 5 Penggunaan scanf untuk beberapa tipe data.#include <stdio.h>#include <stdlib.h>

int main(void){char c1, c2;int ibil;float fbil;double dbil;

printf("\n%s\n%s\n", "Demo scanf untuk beberapatipe data","Input dua karakter, sebuah

integer, float dan double");scanf("%c,%c,%d,%f,%lf", &c1, &c2, &ibil,

&fbil, &dbil);

printf("\nOutput:\n");printf("%4c %4c %5d %12.3f %15e\n\n",c1, c2,

ibil, fbil,dbil);exit(EXIT_SUCCESS);

}

Page 23: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 9 — #23 ii

ii

ii

2.4. Contoh Program 9

Program 6 Penggunaan pernyataan increment dan (operator)=.#include <stdio.h>#include <stdlib.h>#define MAXLOOP 10

int main(void){

int counter = 1, total = 0;while(counter <= MAXLOOP){

total += counter;counter++;

}printf("Total = %d\n ", total);exit(EXIT_SUCCESS);

}

#include <stdio.h>#include <stdlib.h>#define MAXLOOP 10

int main(void){

int counter = 1, total = 0;while(counter <= MAXLOOP){total = total + counter;counter = counter + 1;

} }printf("Total = %d\n ", total);exit(EXIT_SUCCESS);

}

Page 24: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 10 — #24 ii

ii

ii

10 Bab 2. Input Output dan Pernyataan

2.5 Penggunaan Library ctype

Library ctype dapat digunakan untuk memanipulasi karakter. Libraryini sudah build-in pada bahasa pemrograman C.

Program 7 Contoh program menggunakan library ctype.#include <stdio.h>#include <stdlib.h>#include <ctype.h>

int main(void){int character;while((character = getchar()) != EOF){

if(character == ’\n’)putchar(’\n’);

else if(islower(character))putchar(character = toupper(character));

elseputchar(character);}

exit(EXIT_SUCCESS);}

Page 25: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 11 — #25 ii

ii

ii

Bab 3

Tipe Data

3.1 Pendahuluan

Setiap bahasa pemograman menyediakan tipe data. C memilikibeberapa tipe data primitif (intrinsic data type) yang merupakanbagian dari bahasa C itu sendiri. C juga memiliki tipe data lainyang biasa dikenal dengan istilah aggregate data type seperti array.Komplek data tipe dapat dibuat dengan kombinasi antara kedua tipedata tersebut. Bab ini akan membahas bagaimana deklarasi, ekspresiserta cara memanipulasi tipe data dalam C.

3.2 Objektif

Objektif dari bab ini adalah (i) memperkenalkan tipe data dan opera-tor dalam C, (ii) menjelaskan beberapa contoh yang dapat menjebakprogrammer berkaitan dengan tipe data sehingga menimbulkan error,dan (iii) menjelaskan cara mengkonversi satu tipe data ke tipe datayang lain

3.3 Tipe Data Primitif

Pada dasarnya keyword signed sangat jarang digunakan karena signedint sama artinya dengan int. Compiler mengerti bila suatu variable

Page 26: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 12 — #26 ii

ii

ii

12 Bab 3. Tipe Data

dideklarasikan bertipe int maka variable tersebut adalah signed intatau bilangan integer positif maupun negatif. Unsigned int berartibilangan yang dimaksud adalah bilangan integer positif saja.

char signed char unsigned charsigned short int signed int signed long intunsigned short int unsigned int unsigned long intfloat double long double

Untuk tipe komputer 16 bits, tipe data short dan int membu-tuhkan memori sebesar 2 byte dan long 4 byte. Sedangkan untukkomputer 32 bits, tipe data short membutuhkan memori sebesar 2byte dan int dan long sebesar 4 byte.

• Signed int

– Komputer 16 bits−215 ≤ int ≤ 215 − 1 = −32768 ≤ int ≤ +32767

– Komputer 32 bits−231 ≤ int ≤ 231 − 1 = −2147483648 ≤ int ≤+2147483647

• Unsigned int

– Komputer 16 bits0 ≤ int ≤ 216 − 1 = 0 ≤ int ≤ +65535

– Komputer 32 bits0 ≤ int ≤ 232 − 1 = 0 ≤ int ≤ +4294967295

Fungsi sizeof digunakan untuk mengetahui ukuran memori yangdibutuhkan oleh suatu variabel bertipe data tertentu. Penyataanberikut memperlihatkan penggunaan dari fungsi sizeof tersebut.

printf("Ukuran int = %d, Ukuran double = %d\n",

sizeof(int), sizeof(double));

Page 27: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 13 — #27 ii

ii

ii

3.4. Presidensi dan Urutan Pemrosesan (Associativity) Operatordalam C 13

3.4 Presidensi dan Urutan Pemrosesan (Asso-ciativity) Operator dalam C

Gambar 3.1 memperlihatkan urutan pemrosesan dan presidensi darisebuah operator dalam pemrograman C. Urutan pemrosesan danpresidensi harus diketahui agar keluaran dari pernyataan gabungantidak keliru.

Gambar 3.1: Presidensi dan Urutan Pemrosesan (Associativity)

3.5 Operator-Operator

3.5.1 Operator Aritmatik, Relasional, dan Increment/Decrement

Gambar 3.2 menampilkan operator aritmatika. Gambar 3.3 menampilkanoperator relasional dan gambar 3.4 menampilkan operator incre-ment/decrement.

Page 28: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 14 — #28 ii

ii

ii

14 Bab 3. Tipe Data

Gambar 3.2: Operator Aritmatik.

Gambar 3.3: Operator Relasional.

Contoh:

x = 5;

y = x++;

x = 5;

y = ++x;

x = 5;

y = x + x++; Berapakah nilai y ?

3.5.2 Operator Assignment (=)

Penggunaan operator assignment (=) sering menjebak programmerkarena operator ini bukanlah operator boolean (= =) yang digunakanuntuk membandingkan dua buah nilai.

Page 29: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 15 — #29 ii

ii

ii

3.5. Operator-Operator 15

Gambar 3.4: Operator Increment/Decrement.

Gambar 3.5: Contoh Operator Assignment.

3.5.3 Assignment Operator

Penggunaan pernyataan: variabel(operator)=ekspresi memberikankeluaran yang sama dengan pernyataan variabel=variable (operator)ekspresi. Contoh:

y += x; y = y + x;

y /= (x + 2); y = y / (x + 2);

y += (x %= 3)-(t *= 5); y= y+ (x=x%3) - (t=t*5);

y += (x == 2)

Berapakah nilai y jika nilai awal y = 10 dan x = 0 ?

Page 30: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 16 — #30 ii

ii

ii

16 Bab 3. Tipe Data

3.6 Konversi Tipe Data

Konversi data dapat dilakukan secara otomatis (automatic con-version/promotion) dan konversi secara manual (eksplisit/casting).Pengkonversian secara otomatis terjadi apabila dalam suatu perny-ataan memiliki dua variabel dengan tipe yang berbeda sehingga salahsatu dari variabel tersebut akan dikonversikan berdasarkan urutanberikut:

int<unsigned<long<unsigned long<float<double<long double

Contoh

char c;

short s;

int i;

long l;

unsigned u;

float f;

double d;

long double ld;

c - s / i dikonversi menjadi int

u * 3.1 - i dikonversi menjadi double

c + 3 dikonversi menjadi int

u - ld dikonversi menjadi long double

Pengkonversian secara manual (casting) dilakukan secara ekslisitoleh programmer. Jika i adalah variabel bertipe int, maka

• (double) i : Mengakibat i secara eksplisit terkonversi menjaditipe double

• (float) i + 3 : Equivalen dengan ((float) i) + 3 Berhubungoperator casting lebih tinggi presidensinya dari pada operator+ maka tanda kurung tidak perlu digunakan

Contoh

Page 31: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 17 — #31 ii

ii

ii

3.6. Konversi Tipe Data 17

x = (float) ((int) y + 1);

(double) (x = 77) Tidak sama artinya dengan

(double) x = 77, mengapa?

int x = 7;

int y = 3;

float f;

f = x / y; Nilai f = 2

f = (float) x / float (y); Nilai f = 2.3

Page 32: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 18 — #32 ii

ii

ii

Page 33: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 19 — #33 ii

ii

ii

Bab 4

Pernyataan Bersyarat(Conditional Statement)

4.1 Pendahuluan

Pernyataan bersyarat (conditional statement) dalam pemrogramanlebih dikenal dengan istilah flow control of statement. C memilikibeberapa jenis conditional statement, antara lain:

• if dan if...else statement

• switch statement

• break dan continue statement

• conditional operator (?:)

4.2 Objektif

Objektif dari materi ini adalah (i) memperkenalkan dan menjelaskanloop dan conditional statement, dan (ii) menjelaskan perbedaanantara satu statement dengan statement yang lain

Page 34: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 20 — #34 ii

ii

ii

20 Bab 4. Pernyataan Bersyarat (Conditional Statement)

4.3 Konsep Pernyataan Bersyarat

Program-program bahasa C dieksekusikan secara berurutan dari bariske baris. Namun, program tersebut bisa dikontrol eksekusinya denganmenggunakan suatu mekanisme pengontrol. Mekanisme pengontroltersebut membandingkan suatu pernyataan dengan pernyataan lainyang dikenal sebagai kondisi, lalu mengeksekusi perintah-perintahyang memenuhi kondisi tersebut. Dengan kata lain, jika kon-disinya bernilai Benar (TRUE) maka compiler C akan menggerjakansemua perintah-perintah yang berada dalam prosedur mekanismepengontrol.

Mekanisme pengontrol dapat diimplementasikan dengan mengu-nakan operator relasional. Tabel 4.1 menampilkan operator-operatorrelasional.

Tabel 4.1: Operator relasionalOperator Simbol

sama dengan ==tidak sama dengan !=

lebih kecil <lebih besar >

lebih kecil atau sama dengan ≤lebih besar atau sama dengan ≥

tidak (not) !dan (and) &&atau (or) ||

4.4 Serangkaian Pernyataan (Compound State-

ment)

Compound statement atau serangkaian statement yang saling berkai-tan biasanya ditulis secara berkelompok dalam tanda kurung kurawal{ dan }. C menggunakan { dan } untuk mengapit beberapa statementdalam satu blok. Program 8 merupakan potongan program C denganmenggunakan Compound statement.

Page 35: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 21 — #35 ii

ii

ii

4.5. Lokal Variabel 21

Program 8 Potongan program dengan menggunakan Compoundstatement.{

a = 1;if (a > 0){

int b = a;b++;a += b;

}}

Biasanya statement if, if..else, while, for, do dan switch selaludiikuti dengan statement yang berkaitan dengannya. Statement yangmengikuti if, if..else, while, for, do dan switch dapat berupa singlestatement maupun compound statement.

4.5 Lokal Variabel

C membenarkan pendeklarasian lokal variabel. Lokal variabel yangdideklarasikan dalam suatu blok akan bersifat private (tidak dapatdiakses diluar blok). Gambar 4.1 menunjukkan contoh penggunaanvariabel lokal.

Gambar 4.1: Contoh penggunaan variabel lokal

Page 36: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 22 — #36 ii

ii

ii

22 Bab 4. Pernyataan Bersyarat (Conditional Statement)

4.6 if dan if else Statement

Bentuk umum dari if statement adalah sebagai berikut:

if (<conditional expression>) {

<one or more statements>

}

Jika <conditional expression> bernilai true maka perintah <oneor more statements> akan dieksekusikan. Program 9 merupakanpotongan program C menggunakan if statement

Program 9 Potongan program dengan menggunakan if statement.int main(){

int x=0;if(x !=0){

printf("Nilai x sama dengan nol");}printf("Nilai x tidak sama dengan nol");

}

Sedangkan Bentuk umum dari if else statement adalah sebagaiberikut:

if (<conditional expression>)

<statement #1>

else

<statement #2>

Dimana jika <conditional expression> bernilai benar, maka <state-ment #1> dieksekusikan. Sebaliknya, jika <conditional expression>bernilai salah, maka <statement #2> yang akan dieksekusikan.Namun pada realita, kadang-kadang sebuah program C mempunyaidua buah atau lebih ekspresi if else yang berada secara berdekatan.Hal ini membuat sedikit bingung bagi programmer untuk mengetahuiekspresi statement else mana yang akan menjadi "pasangan" bagiif tertentu. Akan tetapi, kompiler C secara automatis mengetahuisetiap pasangan if else dan ini akan ditunjukkan melalui gambar 4.2

Page 37: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 23 — #37 ii

ii

ii

4.6. if dan if else Statement 23

Gambar 4.2: Contoh penggunaan if else statement

dan 4.3. Pada gambar 4.2 terlihat bahwa else pertama (else a–)sangat dekat dengan statement if(y>0). Oleh karena itu, statementelse itu merupakan else bagi if(y>0). Sedangkan statement else b =b/2 menjadi statement else bagi statement if (x>0).

Gambar 4.3: Contoh penggunaan if else statement

Sebagai tambahan, jika pada kondisi statement if mempunyailebih dari dua statement, maka statement-statement tersebut akandiapit oleh tanda kurung kurawal { dan }. Berikut bentuk umumdari if else statement untuk kondisi ini.

if (<conditional expression>) {<dua atau lebih statement>

}else {

<dua atau lebih statement>}

Page 38: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 24 — #38 ii

ii

ii

24 Bab 4. Pernyataan Bersyarat (Conditional Statement)

Program 10 merupakan potongan program C menggunakan if elsestatement dan menghasilkan sebuah program untuk menentukan nilaihuruf dari kalkulasi nilai tugas, ujian tengah semester(uts) dan ujianakhir semester(uas). Kompiler C mengecek hasil dari variabel nilai.Jika nilai lebih kecil dari 90, kompiler C akan mengeksekusi statementelse yang terdapat di dalamnya statement if(nilai ≥ 80). Setelahitu, jika nilai lebih kecil dari 80 maka kompiler C akan mengeksekusistatement else yang ke dua dan begitu juga seterusnya.

Program 10 Potongan program dengan menggunakan if elsestatement.int main() {

float uts, nilai, uas, tugas;printf("Tugas: "); scanf("\%f",\&tugas);printf("UTS: "); scanf("\%f",\&uts);printf("UAS: "); scanf("\%f",\&uas);nilai = 0.2 * tugas + 0.3 * uts + 0.5 * uas;

if (nilai >= 90)printf("Nilai A");

else if (nilai >= 80)printf("Nilai B");

else if (nilai >= 65)printf("Nilai C");

else if (nilai >= 50)printf("Nilai D");

elseprintf("Nilai E");

return 0;}

Adapun luaran dari program di atas adalah tergantung dari nilaiinputan tugas, uas, dan uts. Setiap inputan nilai-nilai tersebutdimasukkan ke dalam sebuah alamat memory melalui perintah scanf.Inputan nilai tersebut ditampung ke dalam sebuah memory yangberbeda-beda. Asumsikan inputan tugas, uts, dan uas adalah 75,70, 90, maka luaran dari program 10 adalah:

Nilai B

Latihan: Berdasarkan contoh program 10, coba modifikasi program

Page 39: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 25 — #39 ii

ii

ii

4.7. Switch Statement 25

tersebut dengan menambahkan tanda kurung kurawal { dan } padasetiap statement if else.

4.7 Switch Statement

Bentuk umum dari switch statement adalah sebagai berikut :

switch (ekspresi) {case ekspresi 1 : statement1case ekspresi 2 : {

statement1statement2...

}......default : statement lainnya

}

Gambar 4.4: Contoh penggunaan switch statement

Cara kerja switch statement adalah sebagai berikut:

• cek (ekspresi) dari switch

• Kerjakan semua statement dari ekspresi case yang bernilaibenar (true)

• Jika tidak ada ekspresi case yang benar maka kerjakan state-ment pada bagian default

Page 40: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 26 — #40 ii

ii

ii

26 Bab 4. Pernyataan Bersyarat (Conditional Statement)

Program 11 Contoh penggunaan switch statement lain.int main() {

int grade = 3;switch (grade) {

case 1: printf("Fall (F)\n"); break;case 2: printf("Bad (D)\n"); break;case 3: printf("Good (C)\n");case 4: printf("Very Good (B)\n"); break;case 5: printf("Excellent (A)\n"); break;default:

printf("You have inputted false grade\n");break; // break disini tidak perlu

}}

Bagaimana hasil dari eksekusi Program 11? Output atau luarandari Program 11 adalah:

Good (C)Very Good (B)

Hasil tersebut diperoleh karena pada case 3 tidak ada perintah break.Ingat kembali bahwa kompiler C mengeksekusi program C secaraberurutan dari baris ke baris. Oleh karena itu, setelah mengeksekusicase 3, kompiler C juga mengeksekusi bagian di case 4 dan keluar daribagian switch setelah menjumpai break pada bagian case 4. Perintahbreak termasuk salah satu mekanisme pengontrol dan akan dibahaspada sub bab 4.8.

4.8 Break dan Continue Statements

Bentuk umum dari break statement adalah:

break;

Tujuan break statement adalah:

• memerintahkan compiler untuk keluar dari satu tingkat (bi-asanya digunakan pada statement pengulangan dan pilihanbercabang)

• Menghentikan pengeksekusian program secara tidak normal

Page 41: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 27 — #41 ii

ii

ii

4.8. Break dan Continue Statements 27

Gambar 4.5 menunjukkan contoh dan penjelasan dari breakstatement.

Gambar 4.5: Contoh penggunaan break statement

Bentuk umum dari continue statement adalah:

continue;

Tujuan break statement adalah:

• memerintahkan compiler untuk melanjutkan pengeksekusianprogram dalam satement pengulangan tanpa pengeksekusianprogram yang berada dibawah statement continue

• Melanjutkan pengeksekusian program di dalam perulangan

Program 12 memperlihatkan penggunaan break dan continuedalam sebuah perulangan do while. Pada program ini kompilerakan keluar dari perulangan do while ketika inputan nilai n < 0atau n = 0 dan akan melanjutkan pengeksekusian program sertasekaligus mencetak string "Skip the value" ketika n > 0. Akantetapi bila inputan nilai n = 0 maka kompiler akan keluar dariperulangan dengan mencetak string "The number is: 0". Namun,jika inputan nilai n tidak pernah sama dengan 0, maka string "thenumber is:" tidak akan pernah dicetak. Hal ini dikarenakan statementpencetakan string tersebut berada setelah statement continue didalam perulangan.

Page 42: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 28 — #42 ii

ii

ii

28 Bab 4. Pernyataan Bersyarat (Conditional Statement)

Program 12 Sebuah program C penggunaan break dan continuestatement.int main() {

int n;do {

printf("\nEnter the number:");scanf("%d",&n);if (n < 0) {

break;}

if(n>10) {printf("Skip the value\n");continue;

}printf("The number is: %d", n);

} while (n != 0);}

Hasil atau luaran dari program 12 adalah:

Enter the number :1The number is:1Enter the number :51Skip the value

Enter the number:-1

4.9 Continue Statement Lanjutan

Pada sub bab ini akan memperlihatkan perbedaan antara state-ment continue dan next. Statement continue melanjutkan eksekusistatement-statement yang berada di dalam perulangan secara beru-rutan dan tidak mengeksekusikan statement-statement yang beradasetelah statement continue. Sedangkan statement next mengarahkankompiler C untuk mengeksekusi semua statement yang berada setelahstatement next. Berdasarkan contoh fig:continuelanjutan, ketikakompiler C mengeksekusikan statement continue, maka kompilerC secara langsung mengeksekusikan expr2 tanpa mengeksekusikanexpr3. Sedangkan ketika kompiler C mengeksekusikan statement gotonext, kompiler C mengeksekusikan expr3 dan tidak mengeksekusikansemua statement yang berada diantara goto next dan next.

Page 43: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 29 — #43 ii

ii

ii

4.10. Conditional Operator 29

Gambar 4.6: Contoh continue statement lanjutan

4.10 Conditional Operator

Bentuk umum dari conditional operator adalah:

expr1 ? expr2 : expr3

expr1 adalah evaluasi dari kondisi jika kondisi benar (TRUE)maka nilai dari operan tersebut adalah expr2 dan jika kondisi salah(FALSE) maka nilai dari operan tersebut adalah expr3.

Gambar 4.7: Contoh conditional operator

Conditional Operator digunakan untuk mempersingkat dalampenulisan program. Semakin sedikit jumlah baris di dalam sebuahprogram, maka semakin cepat kompiler C dalam mengeksekusi

Page 44: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 30 — #44 ii

ii

ii

30 Bab 4. Pernyataan Bersyarat (Conditional Statement)

program tersebut. Di dalam bahasa pemrograman C, jumlah barisdari sebuah program dihitung dengan melihat jumlah dari karakter’;’ di dalam program tersebut.

Condition Operator merupakan suatu operator untuk mempersin-gat sebuah statement if else. Gambar 4.7 dan fig:expr2 memperli-hatkan bagaimana cara mengubah statement if else ke dalam bentukconditional operator.

Gambar 4.8: Contoh conditional operator

Latihan:Bagaimanakan bentuk if..else dari statement conditional berikut:

1. age > 17 ? printf("You can vote.") :printf("You cannot vote.");

2. val = ((y>0) ? 10 : ((x==0) ? 100 : 1000));

Page 45: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 31 — #45 ii

ii

ii

Bab 5

Perulangan (Loop)

5.1 Pendahuluan

Proses perulangan (loop) sangat diperlukan untuk membuat suatuproses yang sama pernyataannya berulang-ulang. Statement peru-langan antara lain:

• do statement

• while statement

• for statement

5.2 Objektif

Objektif dari pertemuan ini adalah (i) memperkenalkan dan menje-laskan loop, (ii) menjelaskan perbedaan dan kesamaan antara satujenis perulangan dengan perulangan yang lain.

5.3 do while Statement

5.3.1 do while Statement (Dasar)

Bentuk umum dari do statement adalah:

do {<statement>

} while (expr);

Page 46: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 32 — #46 ii

ii

ii

32 Bab 5. Perulangan (Loop)

Statement do whilemengizinkan perulangan (loop) untuk mengek-sekusikan <statement> selama kondisi expr bernilai TRUE. <state-ment> murupakan bagian yang akan diulang. Sedangkan <expr>adalah kondisi yang dievaluasi, jika kondisi benar maka prosesperulangan dilakukan sedangkan jika kondisi bernilai salah prosesperulangan dihentikan. Karena kompiler C mengeksekusikan secarateratur dari satu baris ke baris lain dan statement do { } whilemenempatkan kondisi exprt secara struktur di bagian terakhir, makaperulangan <statement> akan dieksekusi paling sedikit sekali. Pro-gram 13 dan 14 merupakan contoh program dengan menggunakan dowhile statement.

Program 13 Contoh program dengan menggunakan do while./* Demonstration of the do..while loop */#include<stdio.h>#include<stdlib.h>

int main() {int value, rDigit;printf(Enter a number to be reversed.\n);scanf("%d", &value);

do {rDigit = value % 10;printf("%d", rDigit);value = value / 10;

} while (value != 0);printf(\n);return 0;

}

Program 14 Contoh potongan program dengan menggunakan dowhile.do {

sum +=i;scanf("%d",&i);

} while(i > 0)

Page 47: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 33 — #47 ii

ii

ii

5.3. do while Statement 33

Pada potongan program 14 terdapat beberapa hal yang perludiperhatikan:

• Minimal statement dalam do dilakukan satu kali.

• Pengulangan berhenti jika data yang dimasukkan berupa bilan-gan nol (0) atau bilangan negatif.

• Input dapat berupa bilangan bulat(int) ataupun bilangan real(float).

• Proses perulangan untuk mendapatkan jumlah dari sum.

5.3.2 do while Statement (Lanjutan)

Gambar 5.1 menampilkan dua buah program dengan menggunakando while statement. Program yang disebelah kiri merupakan programuntuk menginputkan sebuah karakter dengan menggunakan dua buahperulangan do while. Jika karakter yang dimasukkan adalah ’y’ atau’t’ dan setelah dikonversi menjadi huruf kapital, maka kompiler Cakan mencetak string "Anda harus coba inputkan lagi". Akan tetapijika yang dimasukkan adalah karakter ’t’, maka kompiler C akankeluar dari double perulangan tersebut.

Gambar 5.1: Contoh penggunaan do while statement lanjutan

Pada gambar 5.2 menampilkan dua buah program dengan meng-gunakan do while statement. Kedua program C tersebut sekilasterlihat mirip. Namun, hasil atau luaran dari kedua program tersebut

Page 48: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 34 — #48 ii

ii

ii

34 Bab 5. Perulangan (Loop)

adalah berbeda. Perbadaannya adalah hanya letak dari penulisansintaks k++ dan printf("%d",k). Akibatnya akan menghasilkanluaran yang berbeda. Program yang sebelah kiri mencetak nilaik terlebih dahulu kemudian nilai k di-increment-kan. Sedangkanprogram yang sebelah kanan meng-increment-kan nilai k terlebihdahulu kemudian mencetak nilai k.

Gambar 5.2: Dua buah program menggunakan do while statement

5.4 for Statement

5.4.1 for Statement (Dasar)

Bentuk Umum for statement adalah:

for (<expr1>;<expr2>;<expr3>){

<statement>}

Dimana <expr1> merupakan inisialisasi awal dari variable yangdigunakan, dan <expr2> adalah expresi logika (bentuk perbandingannilai, syarat). Pengulangan dilakukan jika kondisi pada expr2 masihbenar (true). Sedangkan <expr3> adalah bagian update. Biasanyaberbentuk penambahan atau pengurangan nilai variabel counter.

Secara teknis, alur kerja program C yang menggunakan forstatement adalah sama dengan program yang menggunakan do while.

Page 49: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 35 — #49 ii

ii

ii

5.4. for Statement 35

Ketika kompiler mengeksekusi perintah for (<expr1>;<expr2>;<expr3>),sintaks pertama yang dieksekusi adalah <expr1>. Kemudian kom-piler mengeksekusi <statement> yang berada di dalam loopingbody. Setelah penambahan atau pengurangan nilai variabel counter<expr3>, kompiler mengecek kondisi <expr2> untuk mengetahuiapakah proses looping selanjutnya dikerjakan atau tidak. Proses inisama seperti yang dilakukan pada statement do while. Gambar 5.3akan menunjukkan proses konversi program C yang menggunakan forstatement ke do while.

Gambar 5.3: Konversi program C yang menggunakan for statementke do while statement

5.4.2 for Statement (Lanjutan)

Pada bagian ini akan ditampilkan tiga buah contoh program C denganmenggunakan perulangan for. Misalnya gambar 5.4 menunjukkansebuah program C untuk menghitung total penjumlahan 10 bilanganinteger positif pertama. Untuk mengimplementasikan algoritmaini, perlu diperhatikan beberapa faktor. Pertama adalah semuaurutan bilangan tersebut harus ditampung ke dalam sebuah variabel(misalnya i). Kedua, nilai awal dari variabel i adalah 1 danbatas akhir dari variabel i adalah 10. Dan ketiga variabel iperlu bertambah satu-satu untuk setiap perulangan supaya semuaurutan bilangan asli bisa dijumlahkan. Penjumlahan kumulatifdari bilangan tersebut dihitung secara teratur oleh kompiler denganmengeksekusikan perintah U += i. Perintah ini ekivalen dengan

Page 50: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 36 — #50 ii

ii

ii

36 Bab 5. Perulangan (Loop)

U = U + i dengan memberikan nilai awal dari variabel i =0 dan dideklarasikan sebelum statement for. Sedangkan padagambar 5.5 menampilkan beberapa gaya penulisan program C denganmenggunakan perulangan for dan gambar 5.6 adalah salah satucontoh program dengan menggunakan double looping.

Gambar 5.4: Program untuk menghitung total penjumlahan 10bilangan integer positif pertama

Gambar 5.5: Beberapa program dengan menggunakan for statement

Page 51: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 37 — #51 ii

ii

ii

5.5. while statement 37

Gambar 5.6: Contoh program dengan menggunakan double forstatement

5.5 while statement

Bentuk Umum dari while statement adalah:

while (<expr>) {<statement>;

}<next statement>;

Terdapat beberapa hal yang perlu diperhatikan:

• <expr> adalah kondisi (syarat) dari while

• <statement> disebut badan dari while loop

• <next statement> merupakan statement yang dikerjakan sete-lah pengulangan berakhir

• pengulangan dilakukan jika kondisi (syarat) pada<expr>masihbenar

Statement while juga sangat mirip dengan statement do while danfor dalam cara pengeksekusian program. Gambar 5.7 akan menun-jukkan bagaimana cara mengkonversi program C dengan menggu-nakan perulangan while menjadi program C dengan menggunakanperulangan for dan do while.

Page 52: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 38 — #52 ii

ii

ii

38 Bab 5. Perulangan (Loop)

Gambar 5.7: Konversi statement while ke dalam bentuk do while danfor

Pada sub bab ini beberapa contoh program C menggunakan pe-rulangan while lanjutan akan ditampilkan seperti dua buah programberikut. Program ini adalah untuk menentukan akar persamaankuadrat

f(x) = 2x2 + 6x+ 3 (5.1)

int main(void) {double xl= -1.5, xr=l.0, eps=0.00001,

xm, fxl, fxm, epsb, abseps=1, x;xm = 0. 5 * (xl + xr) ;while(abseps >= eps) {

abseps= abs (xm - xl);fx1 = 2*sqr(x1) +6*xl+3;fxm = 2*sqr(xm) +6*xm+3;epsb = fxl * fxm ;if (epsb < 0.0) xr = xm;else xl = xm ;xm = 0.5 * (xl + xr) ;x=xm;

}printf(" Akar persamaan %lf\n", x);return 1;

}

Sedangkan program berikut ini adalah untuk menampilkan urutan10 bilangan integer positif pertama beserta mencari salah satu angka

Page 53: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 39 — #53 ii

ii

ii

5.5. while statement 39

apakbar angka tersebut berada di dalam urutan 10 bilangan positifpertama atau tidak.

#include<stdio.h>int main(){

int x = 10, numberFound= 5;int i = 0, j = 1;

// using while loop statementwhile(i < x){

i++;printf("%d\n",i);

}// when,escape loop bodywhile(j < x){

if(j == numberFound){printf("number found\n");break;

}printf("%d...keep finding\n",j);j++;

}return 1;

}

Hasil luaran dari program tersebut adalah sebagai berikut:

123456789101...keep finding2...keep finding3...keep finding4...keep findingnumber found

Page 54: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 40 — #54 ii

ii

ii

Page 55: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 41 — #55 ii

ii

ii

Bab 6

Lanjutan Perulangan (Loop)dan Contoh

6.1 Pendahuluan

Karena kita ketahui bersama bahwa proses perulangan (loop) sangatdiperlukan untuk membuat suatu proses yang sama pernyataannyaberulang-ulang, materi ini akan memperlihatkan penggunaan state-ment perulangan dalam program.

6.2 Objektif

Objektif dari pertemuan ini adalah (i) memperlihatkan dengancontoh penggunaan statement perulangan, dan (ii) mendiskusikankeluaran yang akan dihasilkan oleh program .

6.3 Contoh Perulangan for (Lanjutan)

6.3.1 Contoh 1

Coba diskusikan dan bagaimana hasil dari potongan program berikut.

for (i=0,total =0;scantf("%d",&number)==1;){

if (number < 0){

continue;}total +=number;

Page 56: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 42 — #56 ii

ii

ii

42 Bab 6. Lanjutan Perulangan (Loop) dan Contoh

}printf("Jumlah bilangan positif yang dimasukan = %d\n", total);

6.3.2 Contoh 2

Coba diskusikan dan bagaimana hasil dari potongan program berikut.

while ((c=getchar()) !=EOF)if (c== ’ ’)

++blank_cnt;else

if (c>= ’0’ && C <=’9’)++digit_cnt;

elseif (c>= ’a’ && c<=’z’ || c>= ’A’ && c<=’B’ )

++letter_cnt;else

if (c>= ’\n’)++nl_cnt;

else++other_cnt;

6.3.3 Contoh 3

Coba diskusikan dan bagaimana hasil dari potongan program berikut.

i=-5n=50;while (i<n){

++i;if (i==0)

continue;total +=i;printf(" i = 5d dan total = %d \n",i,total);

}

6.3.4 Contoh 4

Coba diskusikan dan bagaimana hasil dari potongan program berikut.

k=1;printf("Masukkan Password : ");scanf("%s", pw);while (k <= 3){

if (pw=="sandi") break;

Page 57: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 43 — #57 ii

ii

ii

6.3. Contoh Perulangan for (Lanjutan) 43

else{

printf("password salah: ");printf("Masukkan Password : ");scanf("%s", pw);k++;

}}

6.3.5 Contoh 5

Coba diskusikan dan bagaimana hasil dari potongan program berikut.

include <stdio.h>int main (void){

int u15=0,u16=0,u17=0,u18=0,ul=0,n,u,iscanf("%d",&n);scanf("%d",&u);while (i <=n){

switch(u) {case 15 : u15++;case 16 : u16++;case 17 : u17++;case 18 : u18++;default : ul++;

}}return 1;

}

6.3.6 Contoh 6

Coba diskusikan dan bagaimana hasil dari potongan program berikut.

int main(void) {double xl= -1.5, xr=l.0, eps=0.00001,

xm,fxl,fxm, epsb;double abseps=1, x;char ch;do {

xm = 0. 5 * (xl + xr) ;while(abseps >= eps) {

abseps= abs (xm - xl);fx1 = 2*sqr(x1) +6*xl+3;fxm = 2*sqr(xm) +6*xm+3;

Page 58: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 44 — #58 ii

ii

ii

44 Bab 6. Lanjutan Perulangan (Loop) dan Contoh

epsb = fxl * fxm ;if(epsb < 0.0) xr = xm;else xl = xm ;xm = 0.5 * (xl + xr) ; x=xm; }printf(" Akar persamaan %lf\n", x);printf("\nUlangi (Y/T) ? ");do {

ch = toupper(getch());} while(!((ch==’Y’) || (ch ==’T’)));

}while(!(ch == ’T’));return 1;

}

6.3.7 Contoh 7

Coba diskusikan dan bagaimana hasil dari potongan program berikut.

#include<stdio.h>int main(){

int i,j;for(i=0, j=100; (i<100) || (j>0); i++, j--) {

printf("<%d><%d>\n",i,j);if(i==j){

printf("Mempunyai Nilai yang samapada langkah ke %d\n",i);

break;}

}return 1;

}

6.3.8 Contoh 8

Coba diskusikan dan bagaimana hasil dari potongan program berikut.

#include<stdio.h>int main(){

int i,j;for(i=0; i<10; i++) {

for(j=10; j>=i; j--){printf("*");

}printf("\n");

}return 1;

}

Page 59: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 45 — #59 ii

ii

ii

Bab 7

Array Satu Dimensi

7.1 Pendahuluan

Memahami konsep array dimensi satu yang dikombinasikan den-gan penggunaan operator pre-increment dan pre-decrement, post-increment dan post decrement. Tipe data array juga dikenal denganistilah aggregate data type. Array juga biasa disebut sebagai pointertetap (fixed pointer) karena setelah dideklarasikan, alamat awal dariarray tersebut atau alamat pada slot 0 tidak dapat diubah-ubahlayaknya pointer biasa.

7.2 Objektif

Objektif dari materi ini adalah (i) memperkenalkan cara pen-deklarasian array, (ii) menjelaskan penggunaan array satu dimensi,dan (iii) memperlihatkan contoh array satu dimensi berserta visual-isasinya.

7.3 Definisi dan Pendeklarasian Array

Array adalah kumpulan nilai dengan tipe data yang sama yangmenggunakan nama sama. Array selain merupakan suatu bentukstruktur data juga merupakan pointer. Perbedaan utama antaraarray dengan ponter biasa adalah bahwa alamat yang ditunjuk oleharray pada saat dideklarasi tidak dapat diubah-ubah seperti halnyapointer yang lain.

Cara pendeklarasian array sama seperti mendeklarasikan variabeldenga tipe data yang lain, hanya saja diperlukan operator [ ] yang

Page 60: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 46 — #60 ii

ii

ii

46 Bab 7. Array Satu Dimensi

berisikan ukuran dari array yang dideklarasikan. Bentuk umumpendeklarasian array adalah:

tipeDataArray namaArray[ukuran]

Dimana tipeDataArray adalah suatu tipe data untuk nilai dari sebuaharray, namaArray adalah sebuah variabel array, dan ukuran adalahukuran dari array. Berikut adalah beberapa contoh pendeklarasianarray dengan tipe data dan ukuran yang berbeda-beda.

int a[6] = {8, 4, 6, 3, 4, 10};int ageOfStudents[60];float ipkOfStudents[60];

Contoh pertama diatas adalah mendeklarasikan sebuah array satudimensi dengan variabel a bertipe data integer dan berukuran 6 den-gan langsung memberikan nilai awalnya. Contoh berikutnya adalahmendeklarasikan sebuah array satu dimensi dengan variabel ageOf-Students bertipe data integer dan berukuran 60 tanpa memberikannilai awalnya. Sedangkan contoh yang ketiga adalah mendeklarasikansebuah array satu dimensi dengan variabel ipkOfStudents bertipedata float dan berukuran 60 tanpa memberikan nilai awalnya.

7.4 Inisialisasi Nilai

Sama halnya seperti penginisialisasian nilai pada variabel, array jugadapat diberikan nilai pada saat pendeklarasian. Gambar 7.1 adalahbagaimana pendeklarasian, penginisialisasian, dan pengvisualisasianarray.

Gambar 7.1: Contoh penginisialisasi array

Pendeklarasian sebuah array membutuhkan sejumlah memoriyang besarnya sesuai dengan besar ukuran tipe data dan ukuran array

Page 61: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 47 — #61 ii

ii

ii

7.5. Indeks (Subscript) Dari Array 47

itu sendiri. Jika diasumsikan alamat dari array A atau slot pertamadari array A di atas adalah 2310 dan ukuran dari tipe data int adalah4 bytes, maka visualisasi dari pendeklarasian array A ditunjukkanmelalui Gambar 7.2

Gambar 7.2: Visualisasi alamat array

Adapun untuk menghitung total memori yang dibutuhkan dalampendeklarasian sebuah array adalah dengan menggunakan formulaberikut:

TotalMemori(dalam satuan bytes)=sizeof(tipeData)*ukuran_array;

7.5 Indeks (Subscript) Dari Array

Indeks atau subscript dari array dalam C selalu dimulai dengan 0sampai dengan ukuran array - 1. Sebagai contoh float farr[10]; makaindeks dari array farr adalah seperti pada gambar di bawah ini.

Gambar 7.3: Indeks (Subscript) dari array

7.6 Alokasi Memory Array

Array dapat dideklarasikan secara global (deklarasi di luar fungsimain) dan secara lokal (didalam sebuah fungsi atau main). Hati-

Page 62: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 48 — #62 ii

ii

ii

48 Bab 7. Array Satu Dimensi

hati jika kita mendeklarasikannya secara lokal, karena variabel lokalakan dibentuk dalam stack ketika fungsi tersebut dibentuk, dan akandihapus ketika fungsi tersebut dihancurkan (ketika fungsi tersebutselesai dieksekusi). Mungkin hal ini tidak bermasalah bagi variabelbiasa, namun array umumnya akan menuntut jumlah memory yangsangat besar (array float mydata[5000]; akan membutuhkan memorysebesar 20000 bytes), sementara stack hanya memiliki kapasitas sek-itar 2000 - 4000 bytes. Oleh karena itu untuk array yang besar harusdideklarasikan secara global, atau mempergunakan perintah static(misalnya static float mydata[5000];) ketika kita mendeklarasikannyasecara local. Gambar 7.4 menampilkan contoh dari array satudimensi.

Gambar 7.4: Contoh penggunaan array dan visualisasinya

Page 63: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 49 — #63 ii

ii

ii

Bab 8

Array Dua Dimensi

8.1 Pendahuluan

Memahami konsep array multi dimensi yang dikombinasikan den-gan penggunaan operator pre-increment dan pre-decrement, post-increment dan post decrement. C sebenarnya tidak mempunyai arraymultidimension. Akan tetapi karena sistem umum tipe C, maka kitabisa memiliki array dari array. Adapun array multi dimensi yangpaling sederhana adalah array dua dimensi.

8.2 Objektif

Objektif dari materi ini adalah (i) memperkenalkan cara pen-deklarasian array dua dimensi, (ii) menjelaskan penggunaan arraydua dimensi, dan (iii) menjelaskan penggunaan array dua dimensi(multi dimensi).

8.3 Pendeklarasian Array Dua Dimensi

Bentuk umum pendeklarasian array dua dimensi adalah:

tipeArray namaArray[jmlBaris][jmlKolom];

Dimana:

• tipeArray adalah suatu tipe data untuk nilai dari sebuah array.

• namaArray adalah sebuah variable array.

• jmlBaris adalah ukuran baris dari array.

Page 64: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 50 — #64 ii

ii

ii

50 Bab 8. Array Dua Dimensi

• jmlKolom adalah ukuran kolom dari array.

Adapun contoh-contoh pendeklarain array dua dimensi yangbenar dan salah di dalam program C adalah sebagai berikut:

int a2[5][7]; /* Benar */float B[5][5]; /* Benar */char letter[5][3]; /* Benar */char letter[0][0] = ’a’; /* Benar */

int a2[5, 7]; /* Salah */int a2[0, 4] = ’6’; /* Salah */

Pada dasarnya, array dua dimensi merupakan array satu dimensi.Bila sebuah array dd dideklarasikan menjadi array dua dimensidengan menggunakan perintah int dd[3][7]; maka kita bisa memvi-sualisasikan array dd tersebut seperti yang terlihat pada gambar ??.

Gambar 8.1: Visualisasi pendeklaraisin array dua dimensi

8.4 Inisialisasi Nilai

Sama halnya seperti penginisialisasian array satu dimensi, arraydua dimensi juga dapat diberikan nilai pada saat pendeklarasian.Gambar 7.1 adalah bagaimana pendeklarasian, penginisialisasian,dan pengvisualisasian array.

Sama halnya seperti pendeklarasian array satu dimensi, array duadimensi juga membutuhkan sejumlah memori dalam pendeklarasian-nya. Meskipun pada sub bab 9.3 telah ditunjukkan visualisasipendeklarian array dua dimensi dalam bentuk kubus, sebenarnyaarray dua dimensi mengalokasikan memori secara berurutan dalambentuk array satu dimensi. Adapun untuk menetukan jumlah memori

Page 65: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 51 — #65 ii

ii

ii

8.5. Indeks (Subscript) Dari Array Dua Dimensi 51

Gambar 8.2: Contoh penginisialisasi array dua dimensi

yang dibutuhkan dalam pendeklarasian array dua dimensi dapatdihitung dengan menggunakan persamaan berikut:

byte = sizeof(1st index)*sizeof(2nd index)*sizeof(tipe)

8.5 Indeks (Subscript) Dari Array Dua Di-mensi

Indeks atau subscript dari array dalam C selalu dimulai dengan 0sampai dengan ukuran array - 1. Sebagai contoh float data[5][5];maka indeks dari array data adalah seperti pada gambar 8.3.

Gambar 8.3: Indeks (Subscript) dari array dua dimensi

8.6 Alokasi memori untuk Array Dua Dimensi

Array dimensi dua secara umum sama dengan array satu dimensi.Bila dideklarasi sebuah array int dd[3][4], maka array dd tersebutsebenarnya dialokasikan secara berurutan dalam bentuk array satu

Page 66: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 52 — #66 ii

ii

ii

52 Bab 8. Array Dua Dimensi

dimensi seperti yang terlihat pada gambar 8.4. Namun untuklebih memudahkan kita memahami tentang array dua dimensi makadibuatlah visualisasi array dua dimensi dalam bentuk kubus.

Gambar 8.4: Visualisasi array dua dimensi dalam bentuk satudimensi

Perlu dipahami bahwa di dalam penentuan slot array dua dimensitidak sama seperti penentuan slot pada array satu dimensi. Sepertiyang dijelaskan pada sub bab 7.5, penentuan slot array satu dimensiditentukan dengan mengetahui alamat memori slot pertama danukuran tipe data variabel array tersebut. Jika sudah diketahuikedua parameter tersebut, dengan sangat mudah diketahui alamatmemori untuk slot berikutnya. Akan tetapi untuk array dua dimensitergantung dari nilai indeks baris atau kolomnya.

Adapun penentuan slot Array dua dimensi dapat ditentukandengan formula:

dd[i][j] = base_address + sizeof(tipe) * i * 2nd index+ sizeof(tipe) * j

Sebagai contoh, berdasarkan gambar 8.4, nilai dari array dd padaslot dd[2][3] adalah:

dd[2][3] = 300 + sizeof(int) * 2 * 4 + sizeof(int) * 3asumsikan sizeof(int) = 4 byte, makadd[2][3] = 300 + 4 * 2 * 4 + 4 * 3

= 344

8.7 Contoh ProgramMenggunakan Array DuaDimensi

8.7.1 Inisialiasi Nilai Array Dua Dimensi

Program berikut mempunyai dua buah perulangan for yang berfungsiuntuk memasukkan nilai-nilai ke dalam array num dan mencetak

Page 67: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 53 — #67 ii

ii

ii

8.7. Contoh Program Menggunakan Array Dua Dimensi 53

nilai-nilai tersebut pada output editor1. Nilai-nilai tersebut diperolehdari kalkulasi variabel counter i dan j. Setelah setiap hasil incrementdari kedua variabel tersebut disubsitusikan ke dalam formula num[i][j]= (i * 4) + j + 1;, maka diperoleh nilai-nilai untuk setiap slot dariarray num. Hasil atau luaran dari program ?? dapat divisualisaikanmelaui gambar 8.5.

#include <stdio.h>

int main(void) {int i, j, num[3][4];

for(i=0; i<3; i++)for(j=0; j<4; j++)

num[i][j] = (i * 4) + j + 1;

/* print isi array num */for(i=0; i<3; i++) {

for(j=0; j<4; j++)printf("%3d ", num[i][j]);

putchar(’\n’);}return 1;

}

Gambar 8.5: Visualiasai array num[i][j]

1seperti DOS pada window dan terminal pada Unix/Linux

Page 68: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 54 — #68 ii

ii

ii

54 Bab 8. Array Dua Dimensi

8.7.2 Pengurutan Data Dalam Array

Program berikut merupakan salah satu contoh program untuk men-gurutkan data dengan menggunakan array dua dimensi.

#include <stdio.h>#define N 12int main(void) {

int i, j, data[N] = {8,4,5,1,3,8,7,9,12,23,15,6};for(i=0; i<N; i++)

for(j=N-1; j>i; j--)if(data[j] < data[j-1]) {

int temp = data[j];data[j] = data[j-1];data[j-1] = temp;

}/* Cetak data yang telah terurut */for(i=0; i<N; i++) {

printf("%3d ", data[i]);}return 1;

}

8.7.3 Penjumlahan Matrix Menggunakan Array

Program berikut merupakan contoh program C untuk menjumlahkanMatrix menggunakan array dua dimensi.

#include <stdio.h>#define ROW 2#define COL 3int main(void) {

int i, j;float matrixA[ROW][COL], matrixB[ROW][COL],

matrixC[ROW][COL];

/*Tulis proses input data matrixA dan matrixB disini */

/*Proses penjumlahan ditampung oleh matrixC */for(i=0; i<ROW; i++) {

for(j=0; j>COL; j++) {matixC[i][j]= matixA[i][j]+ matixB[i][j];printf("\t %3.2 f", matixC[i][j]);

}}return 1;

}

Page 69: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 55 — #69 ii

ii

ii

Bab 9

Pointer

9.1 Pendahuluan

Pointer yang merupakan variabel yang dapat memegang alamat darisuatu objek dalam memori. Pointer digunakan untuk melalukanakses dan manipulasi alamat memori. Dalam C, array dan pointermemiliki keterkaitan yang erat. Array adalah pointer yang tetap(fixed pointer) sedangkan pointer itu sendiri tidak tetap, artinyaalamat memori yang dipegangnya dapat berubah-ubah. Pemanggilanmelalui alamat (call by reference) yang biasa diimplementasi padafungsi dapat diwujudkan menggunakan pointer.

9.2 Objektif

Objektif dari materi ini adalah (i) memperkenalkan cara pen-deklarasian pointer, (ii)menjelaskan penggunaan pointer, (iii)menjelaskankonsep dereferensing (menbaca / memberikan nilai yang ditunjuk olehsebuah pointer), dan (iv) menjelaskan penggunaan indeks (subscript)pada pointer.

9.3 Pendeklarasian Pointer

Pointer dideklarasikan untuk memegang dan mengakses alamat dalammemori. Jika p adalah suatu variable maka &p merupakan lokasiatau alamat dalam memori dimana sebuah nilai yang dipegang olehp disimpan.

Dalam C, simbol asterisk ’*’ digunakan untuk mendeklarasikansebuah pointer. Simbol ini ditulis setealh setelah tipe data dan

Page 70: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 56 — #70 ii

ii

ii

56 Bab 9. Pointer

sebelum nama dari sebuah pointer. Sebagai contoh:

int * pi;

Sintaks umum pendeklarasian pointer adalah:

tipe_data * nama_pointer;

Simbol asterik ’*’ memberitahu kompiler bahwa sebuah pointeryang menyimpan alamat memori bertipe int dideklarasikan. Pen-deklarasian seperti contoh di atas hanya memberitahukan kompilerbahwa pi adalah pointer bertipe int tanpa memberikan nilai awalapapun kepada pointer pi. Sebuah pointer tanpa nilai awal akansecara otomatis memiliki nilai NULL. Pengujian terhadap pointerdapat dilakukan sebagai berikut:

if (pi == NULL){:

}

9.4 Visualisasi Pointer

Bila dalam program terdapat pernyataan sebagai berikut:

int i = 2;int *pi = &i;

maka visualisasi dari kedua pernyataan di atas terlihat sepertipada gambar 9.1.

Gambar 9.1: Visualisasi pointer

Artinya terdapat sebuah variabel i bertipe integer dengan nilai2 dan pi adalah sebuah pointer yang memegang atau menunjuk kealokasi memori bertipe int yang dimiliki oleh i. Pernyataan:

int *pi = &i;

Page 71: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 57 — #71 ii

ii

ii

9.5. Operator Dereferensing 57

bermakna bahwa sebuah pointer pi bertipe int dideklarasikandengan nilai awal berupa alamat dari i yang bertipe int. Simbol& pada pernyataan di atas merupakan operator unari yang beartialamat (address). Pada pernyataan di atas, nilai awal dari pi adalahalamat dari i dalam memori.

9.5 Operator Dereferensing

Operator dereferensing berarti pembacaan atau pemberian nilaidata pada alamat yang dipegang oleh sebuah pointer. Operatordeferensing juga menggunakan simbol asterik ’*’, akan tetapi sedikitberbeda dengan simbol asterik pada saat pendeklarasian pointer.Perhatikan pernyataan berikut:

int i = 2;int *pi;

pi = &i;

*pi = 12;printf("%d\n", i);

Hasil keluaran dari program di atas adalah 12, dengan katalain variabel i yang pada awalnya bernilai 2 berubah nilainyaakibat dari pernyataan *pi = 12. Hal ini menunjukkan bahwaoperator dereferensing dapat mengubah nilai dari suatu memorimelalui pointer. Pada contoh di atas pi menunjuk ke alamat i, dandereferensing *pi = 12 mengakibatkan nilai dari i yang ditunjuk olehpi berubah menjadi 12.

Contoh Lain Operator Dereferensing

int i = 2;int j = 3;int *pi;int *pj;

pi = &i;pj = pi;

*pj = 20;printf("%d\n", i);

pj = &j;pi = pj;

*pi = 30;printf("%d\n", j);

Page 72: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 58 — #72 ii

ii

ii

58 Bab 9. Pointer

Keluaran dari potongan program tersebut secara berurut adalah:

2030

Terlihat bahwa nilai i yang pada awalnya bernilai 2 berubahmenjadi 20 akibat dari dereferensing pointer *pj = 20; sedangkannilai dari j yang pada awalnya bernilai 3 berubah menjadi 30 akibatdari dereferensing pointer *pi = 30;

Visualisasi langkah demi langkah dari contoh program sebelumnyaadalah sebagai berikut:

int i = 2;int j = 3;int *pi;int *pj;

Potongan program diatas dapat divisualisasikan seperti pada gam-bar 9.2.

Gambar 9.2: Visualisasi pointer

Selanjutnya, pernyataan:

pi = &i;pj = pi;

mengakibatkan pointer pi menampung alamat dari variabel i danponter pj berubah nilainya menjadi sama dengan nilai pi. Ilustrasinyaadalah sebagai terlihat pada gambar 9.3.

Pernyataan

*pj = 20;printf("%d\n", i);

mengakibatkan nilai variabel i yang ditunjuk oleh pointer pjberubah dari 2 menjadi 20.

Selanjutnya, pernyataan:

Page 73: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 59 — #73 ii

ii

ii

9.5. Operator Dereferensing 59

Gambar 9.3: Visualisasi pointer

Gambar 9.4: Visualisasi pointer

pj = &j;pi = pj;

mengakibatkan arah dari pointer pj berubah dan tunjuk ke alamatvariabel j yang juga bertipe int. Kemudian, pointer pi menampungnilai dari alamat c yang sebelumnya ditunjuk oleh pointer pj.

Gambar 9.5: Visualisasi pointer

Dan yang terakhir pernyataan:

*pi = 30;printf("%d\n", j);

mengakibatkan nilai dari variabel yang ditunjuk oleh pi berubahmenjadi 30 akibat adanya operator dereferensing *pi = 30.

Jadi, kesimpulannya adalah dengan menggunakan pointer danoperator derefensing nilai dari suatu variabel dalam memori dapatdengan sangat mudah dimanipulasi. Hal inil membuat pointer

Page 74: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 60 — #74 ii

ii

ii

60 Bab 9. Pointer

Gambar 9.6: Visualisasi pointer

menjadi sangat "powerful" dalam pemrograman sekaligus sebagai"the most possibility of bugs" atau dengan kata lain penyebab terbesarkesalahan dalam program. Oleh karena itu, pointer harus digunakansecara benar dan terkontrol.

9.6 Pointer Vs Array

Bila sebuah array dideklarasikan dengan nama array a sebagaiberikut:int a[6] = {8, 4, 6, 3, 4, 10};

Gambar 9.7: Visualisasi pointer pada array

Pembacaan data pada indeks ke 2 dari array a tersebut dapat di-lakukan dengan menulis a[2]. Karena a adalah array dan merupakanpointer yang tetap (fixed pointer) maka operator dereferensing pundapat diaplikasikan pada a.

Gambar 9.8: Kesamaan array dengan pointer

Bukti:a[2] = *(a+2) = *(a + sizeof(a) * 2)

= *(a + 4 * 2)= *(2310 + 8) = *(2318)= 6

Page 75: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 61 — #75 ii

ii

ii

9.7. String 61

9.7 String

C tidak menyediakan tipe data primitif berupa string. String dalampemrograman C direpresentasikan dengan menggunakan pointer bertipechar. Deklarasi:

char * str = "Pemrograman C"

mengakibatkan sebuah pointer str dibuat dengan nilai awalberupa kumpulan char yang membentuk kalimat Pemrograman C.Perhatikan dan diskusikan contoh program berikut:

#include <stdlib.h>#include <stdio.h>#include <string.h>

int main(void){

char ch[80], *pch = &ch[0];

strcpy(ch, "informatika unsyiah");putchar(*pch++);putchar((*pch)++);putchar(*++pch);putchar(*++pch);putchar(++*pch);putchar(++(*pch));putchar(++(*pch++));++pch;putchar(++(*++pch));putchar(’\n’);printf("%s\n",ch);return (EXIT_SUCCESS);

}

Page 76: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 62 — #76 ii

ii

ii

Page 77: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 63 — #77 ii

ii

ii

Bab 10

Fungsi

10.1 Pendahuluan

Fungsi atau function adalah sub program yang dibuat untuk tujuantertentu dan dapat dieksekusi secara berulang dalam sebuah program.Prototipe fungsi boleh dideklarasikan dalam sebuah atau beberapafile header, sebuah file yang berekstensi .h, sementara implementasidari fungsi yang telah dideklarasi sebelumnya dapat diimplementasilangsung dalam file header yang sama ataupun diimplementasisecara terpisah dalam file lain yang berekstensi .c. Salah satutujuan dari pembuatan sebuah fungsi adalah mempermudah prosespengembangan dan perawatan program.

10.2 Objektif

Objektif dari materi ini adalah (i) memperkenalkan cara mendefin-isikan atau mendeklarasikan fungsi, (ii) menjelaskan cara mengek-sekusi sebuah fungsi dalam program, (iii) memperkenalkan konsepcalled by value dan called by reference, dan (iv) memperkenalkanbeberapa fungsi string.

10.3 Pendeklarasian Fungsi

Dalam C, bentuk umum pendeklarasian sebuah fungsi adalah mengiku-ti format berikut ini:

tipe_data nama_fungsi(parameter) {pernyataan

}

Page 78: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 64 — #78 ii

ii

ii

64 Bab 10. Fungsi

Dari format pendeklarasian fungsi di atas, dapat disimpulkanbahwa sebuah fungsi dapat memiliki nilai kembalian (return value)dan dapat pula tidak memiliki nilai kembalian. Sebuah fungsi yangbertipe void adalah fungsi yang tidak memiliki nilai kembalian,sedangkan fungsi yang memiliki nilai kembalian disebut sebagaifungsi bernilai. Nilai yang dikembalikan oleh sebuah fungsi harussesuai dengan tipe−data yang dideklarasikan pada saat sebuah fungsidideklarasikan.

Tipe data dari sebuah fungsi dapat berupa void, int, float, double,long, struct dan lain-lain. Fungsi yang bertipe void tidak akanmengirimkan nilai pada saat fungsi selesai dieksekusi, sementarafungsi yang bertipe selain void akan mengirimkan nilai kembalianpada saat fungsi tersebut selesai dieksekusi. Pengiriman nilai fungsidilakukan menggunakan pernyataan return.Contoh:

float celciusToFahreinheit(float celcius){return ((celcius * 9/5) + 32);

}

Contoh di atas memperlihatkan sebuah fungsi yang dideklarasidengan nama celciusToFahreinheit dan memiliki sebuah parameterdengan nama celcius dan bertipe float. Fungsi itu sendiri bertipefloat, artinya setelah fungsi selesai dijalankan maka akan ada sebuahnilai dengan tipe float dikembalikan kepada variabel atau pernyataanyang memanggil fungsi itu. Untuk contoh di atas, pernyataan yangdikembalikan oleh fungsi adalah pernyataan setelah kata kunci return,yaitu ((celcius * 9/5) + 32.

Perhatikan pendeklarasian fungsi penjumlahan berikut ini:

int penjumlahan(int operan1, int operan2){return (operan1 + operan2);

}

Contoh di atas memperlihatkan pendeklarasian fungsi penjumla-han yang bertipe int dan memiliki dua buah parameter yaitu operan1dan operan2 yang kedua-duanya bertipe int. Tujuan dibuatnya fungsipenjumlahan tersebut adalah untuk menjumlahkan dua buah operanbertipe int dan mengembalikan nilai hasil penjumlahan itu kepadapenyataan yang memanggilnya. Perhatikan conoth pemanggilanfungsi penjumlahan dalam sebuah program utama main().

#include <stdio.h>int main(void) {

Page 79: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 65 — #79 ii

ii

ii

10.4. Fungsi Bertipe Void 65

int a, b, c;printf("Penjumlahan dua bilangan bulat\n");printf("a = "); scanf("%d", &a);printf("b = "); scanf("%d", &b);c = penjumlahan(a, b);printf("Hasil penjumlahan a + b = %d\n", c);return 1;

}

10.4 Fungsi Bertipe Void

Fungsi bertipe void adalah fungsi yang tidak memiliki return valuedan tidak memiliki pernyataan return dalam implementasinya. Pro-gram berikut memperlihatkan sebuah fungsi yang bertipe em void.

void judulTabel() {printf("-----------------------\n");printf(" No. U r a i a n\n");printf("-----------------------\n");

}

Fungsi di atas juga tidak memiliki parameter. Fungsi yang tidakmemiliki parameter hanya memiliki kurung buka dan kurung tutupsetelah nama fungsinya tanpa ada parameter dideklarasi didalamnya.

Cara pemanggilan fungsi yang tidak memiliki return value samadengan cara pemanggilan fungsi dengan return value. Bila saatdipanggil nilai fungsi yang memiliki return value nilainya biasanyaditampung oleh variabel yang lain, maka untuk fungsi yang tidakmemiliki return value, fungsi berdiri sendiri dan tidak memberikannilainya kepada variabel manapun. Perhatikan contoh programberikut:

#include <stdio.h>int main(void){

int i;

judulTabel(); /*pemanggilan fungsi*/

return 1;}

Page 80: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 66 — #80 ii

ii

ii

66 Bab 10. Fungsi

10.5 Jenis-Jenis Fungsi

10.5.1 Fungsi Called by Value

Pengiriman nilai parameter sebuah fungsi secara called by valuedilakukan dengan mengkopi nilai yang dikirim kepada parameter.Perhatikan fungsi penjumlahan yang telah diperlihatkan sebelumnya.Fungsi tersebut memiliki dua buah parameter. Pada saat fungsitersebut dipanggil dalam program, nilai variabel a dan b di-copykepada parameter operan1 dan operan2. Jika nilai operan1 danoperan2 mengalami perubahan maka nilai variabel a dan b tidak akanterpengaruh. Perhatikan contoh berikut ini:

#include <stdio.h>int penjumlahan(int, int); /* prototype fungsi */

int main(void) {int a = 2, b = 6, c;c = penjumlahan(a, b);printf("Hasil penjumlahan a + b = %d\n", c);printf("a = %d\n", a);printf("b = %d\n", b);return 1;

}

int penjumlahan(int operan1, int operan2) {operan1 = operan1 + 2;return (operan1 + operan2);

}

Pada saat program tersebut dijalankan, memori dialokasikanuntuk tiga buah variabel a, b dan c. Diketahui bahwa nilai variabela adalah 2 dan nilai variabel b adalah 6, sementara nilai variabel cdiawal tidak memiliki nilai.

Gambar 10.1: Visualisasi fungsi

Pemanggilan fungsi pada pernyataan c=penjumlahan(a,b) men-gakibatkan nilai dari variabel a dicopy kepada parameter operan1 dannilai dari variabel b dicopy kepada parameter operan2. Perubahan

Page 81: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 67 — #81 ii

ii

ii

10.5. Jenis-Jenis Fungsi 67

nilai operan1 pada pernyataan operan1 = operan1 + 2 tidak akanmengubah nilai dari variabel a yang sebelumnya bernilai 2. Keluarandari program di atas adalah:

Hasil penjumlahan a + b = 10a = 2b = 6

10.5.2 Fungsi Called by Reference

Pengiriman nilai parameter sebuah fungsi secara called by referencedilakukan dengan cara mengirim alamat memori dari suatu variabelkepada parameter yang bersesuaian dalam bentuk pointer. Pembe-rian alamat memori kepada parameter dapat mengubah nilai darivariabel yang alamatnya dikirim. Perhatikan contoh berikut ini:

#include <stdio.h>int penjumlahan(int *, int *); /* prototype fungsi */

int main(void) {int a = 2, b = 6, c;c = penjumlahan(&a, &b);printf("Hasil penjumlahan a + b = %d\n", c);printf("a = %d\n", a);printf("b = %d\n", b);return 1;

}

int penjumlahan(int * pa, int * pb) {

*pb = *pb - 3;return (*pa + *pb);

}

Pada saat program tersebut dijalankan, memori dialokasikanuntuk tiga buah variabel a, b dan c. Diketahui bahwa nilai variabela adalah 2 dan nilai variabel b adalah 6, sementara nilai variabelc diawal tidak memiliki nilai. Visualisasinya bisa dilihat padagambar 10.2.

Pemanggilan fungsi pada pernyataan c=penjumlahan(&a,&b)mengakibatkan alamat dari variabel a diberikan kepada pointer padan alamat dari variabel b diberikan kepada pointer pb. Visualisas-inya bisa dilihat pada gambar 10.3.

Page 82: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 68 — #82 ii

ii

ii

68 Bab 10. Fungsi

Gambar 10.2: Visualisasi fungsi

Gambar 10.3: Visualisasi fungsi

Pernyataan *pb = *pb - 3 akan mengakibatkan nilai dari byang sebelumnnya bernilai 6 berubah menjadi 3, sehingga hasilpenjumlahan bernilai 5. Keluaran dari program di atas adalah:

Hasil penjumlahan a + b = 5a = 2b = 3

10.6 Fungsi String

Beberapa fungsi yang berkaitan dengan manipulasi tipe data stringtelah diimplementasikan sebelumnya dalam C. String adalah untaiankarakter atau sekumpulkan karakter. Berikut adalah beberapa fungsiuntuk data string:

• Mengkopi string sumber ke string target s termasuk karakter′\0′ (terminated string)char * strcpy(char * s, char * source)

• Menyambung string sumber ke string schar * strcat(char * s, char * source)

• Membandingkan string s1 dengan string s2int strcmp(char * s1, char * s2). Fungsi strcmp akan mengirimnilai negatif bila string s1<s2, atau bernilai 0 bila string s1 =s2, atau bernilai positif jika string s1 > s2.

Page 83: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 69 — #83 ii

ii

ii

10.6. Fungsi String 69

Contoh:

#include <stdio.h>

int main() {char string1[20];char string2[20];

strcpy(string1, "Ahmad");strcpy(string2, "Bani");printf("Return Value: %d\n", strcmp( string1, string2));

strcpy(string1, "Hellooo");strcpy(string2, "Helloo");printf("Return Value: %d\n", strcmp( string1, string2));

strcpy(string1, "Hello");strcpy(string2, "Hello");printf("Return Value: %d\n", strcmp( string1, string2));

return 0;}

Contoh implementasi dari fungsi strcpy adalah sebagai berikut:

char *strcpy(char *dest, *source){while ((*dest++ = *source++) !="\0");return dest;

}

Atau

char *strcpy(char *dest, *source){while (*dest++ = *source++) ;return dest;

}

Contoh implementasi dari fungsi strcat adalah sebagai berikut:

char *strcat(char *first, char *second){char *p;

p =first;while (*p++) ;

Page 84: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 70 — #84 ii

ii

ii

70 Bab 10. Fungsi

--p;while (*p++ = *second++) ;

return first;}

Perhatikan contoh program yang memanipulasi string berikutini. Perhatikan bagaimana pointer pA dan pB dapat memanipulasikarakter yang disimpan dalam setiap slot array strA dan strB.Bentuk kelompok yang terdiri atas 2-3 orang dan didiskusikan contohprogram berikut ini.

char strA[80] = "Sebuah string untuk tujuan demo";char strB[80];

int main(void) {char *pA; /* sebuah pointer ke character */char *pB; /* sebuah pointer ke character */puts(strA); /* print string A */pA = strA; /* pointer pA tunjuk ke string A */puts(pA); /* tampilkan yang ditunjuk pA */pB = strB; /* pointe pB tunjuk ke string B */putchar(’\n’); /* buat baris baru */

/* selama *pA tidak ’\0’ tidak null */while(*pA != ’\0’){

*pB++ = *pA++;}

*pB = ’\0’; /* beri null string kepada strB */puts(strB); /* print string B */

return EXIT_SUCCESS;}

Fungsi yang Berkenaan dengan Karakter

• int isalnum(int c)Fungsi ini akan mengembalikan nilai nonzero bila parameter cadalah alphanumeric.

• int isalpha(int c)Fungsi ini akan mengembalikan nilai nonzero bila parameter cadalah alphabet.

Page 85: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 71 — #85 ii

ii

ii

10.6. Fungsi String 71

• int iscntrl(int c)Fungsi ini akan mengembalikan nilai nonzero bila parameter cadalah karakter kontrol yang tidak dapat diprint seperti DEL,ESC, carriage return (CR), line feed (LF), dan lain-lain.

• int isdigit(int c)Fungsi ini akan mengembalikan nilai nonzero bila parameter cadalah digit.

• int islower(int c)Fungsi ini akan mengembalikan nilai nonzero bila parameter cadalah karakter huruf kecil.

• int isupper (int c)Fungsi ini akan mengembalikan nilai nonzero bila parameter cadalah karakter huruf besar.

• int ispunct(int c);Fungsi ini akan mengembalikan nilai nonzero bila parameter cmerupakan tanda baca.

Sebelum fungsi-fungsi di atas dapat digunakan, #include <ctype.h>harus ditulis dalam program.

Page 86: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 72 — #86 ii

ii

ii

Page 87: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 73 — #87 ii

ii

ii

Bab 11

File

11.1 Pendahuluan

File merupakan unit standar penyimpanan data yang menggunakankonsep stream dalam proses pengaksesannya. Stream merupakanpenghubung antara programmer dengan file. Sebuah stream ter-hubung dengan file yang disimpan dalam media penyimpanan melaluioperasi OPEN dan terputus dari file melalui operasi CLOSE. Ada duajenis stream yang dikenal dala pemrograman C, yaitu stream tipe teks(text) dan stream tipe binari (binary).

11.2 Objektif

Objektif dari materi ini adalah (i) memperkenalkan struktur datafile, (ii) menjelaskan cara membuka, mengakses dan menutup filemenggunakan stream teks, dan (iii)memperlihatkan beberapa contohprogram yang menggunakan struktur data file.

11.3 File

Stream terhubung dengan file yang disimpan dalam media penyim-panan melalui operasi OPEN dan terputus dengan file melalui operasiCLOSE. Perintah membuka sebuah file dilakukan dengan fungsifopen yang telah diimplementasikan dan prototipenya didefinisikandalam library stdio.h, sementara perintah menutup sebuah file dapatdilakukan menggunakan fungsi fclose( ).

FILE *fopen(char *nama_file, char *mode)FILE *fclose(FILE *file_pointer)

Page 88: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 74 — #88 ii

ii

ii

74 Bab 11. File

Mekanisme mengakses sebuah file ditentukan dari parameter mode.Nilai dari parameter mode dapay dilihat melalui tabel 11.1.

Tabel 11.1: Parameter Mode untuk Akses FileMode Arti

r Membuka sebuah file teks untuk pembacaan saja (read only)w Membuat sebuah file teks untuk penulisana Menambahkan (append) data ke dalam sebuah file teksrb Membuka sebuah file binary untuk pembacaan sajawb Membuat sebuah file binary untuk penulisanab Menambahkan data ke dalam sebuah file binaryr+ Membuka sebuah file teks untuk pembacaan/penulisanw+ Membuat sebuah file teks untuk pembacaan/penulisana+ Menambahkan data/membuat file teks untuk pembacaan/penulisan

r+b/rb+ Membuka sebuah file binary untuk pembacaan/penulisanw+b/wb+ Membuat sebuah file binary untuk pembacaan/penulisana+b/ab+ Menambahkan data ke file binary untuk pembacaan/penulisan

Perhatikan penggalan dari program berikut ini:

FILE *ifp, *ofp;

ifp = fopen("input_file","r");ofp = fopen("output_file","w");::

• ifp dan ofp adalah pointer ke FILE.

• ifp tunjuk ke file dengan nama input−file dan file ini diaksesdengan mode pembacaan saja (read-only).

• ofp tunjuk ke file dengan nama output−file dan file ini diaskesdengan mode penulisan, artinya file output−file akan dibuatjika tidak ditemukan dalam media penyimpanan dan akanditimpa (overwrite) jika file dengan nama yang sama telah adadalam media penyimpanan.

11.4 Beberapa Contoh Manipulasi File

Contoh 1. Buka File, Baca Isinya dan Tulis ke Media Output

Page 89: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 75 — #89 ii

ii

ii

11.4. Beberapa Contoh Manipulasi File 75

Satu-Satu Karakter.

#include <ctype.h>#include <stdio.h>#include <stdlib.h>

int main (void){int c;FILE *fp;char *filename = "data.txt";

if((fp = fopen(filename, "r"))==NULL){printf("Error dalam mengakses file...\n");return EXIT_FAILURE;

}

while((c=fgetc(fp)) != EOF){putchar(toupper(c));

}

fclose(fp);return EXIT_SUCCESS;

}

Contoh 2. Buka File, Jumlahkan, dan Tulis Penjumlahan kedalam File.

#include <stdio.h>#include <stdlib.h>

int main (void){int a, sum = 0;FILE *ifp, *ofp;ifp = fopen("input_file.txt", "r");ofp = fopen("output_file.txt", "w");

while (fscanf(ifp,"%d",&a)==1){sum += a;

}fprintf(ofp, "Jumlah = %d\n",sum);

fclose(ifp);fclose(ofp);return EXIT_SUCCESS;

}

Page 90: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 76 — #90 ii

ii

ii

76 Bab 11. File

Contoh 3. Buka File, Jumlahkan, dan Tulis Penjumlahan kedalam File.

#include <ctype.h>#include <stdio.h>#include <stdlib.h>

int main(void){FILE *fp;int ch;fp = fopen("output_file.txt", "w");fprintf(fp, "%s", "Program Studi Informatika\n");fprintf(fp, "%s", "UNSYIAH, Banda Aceh 23111\n\n\n");fclose(fp);

if((fp = fopen("output_file.txt", "r"))==NULL) {printf("Error dalam mengakses file...\n");return EXIT_FAILURE;

}while ((ch=fgetc(fp))!=EOF) {

putchar(tolower(ch));}

fclose(fp);return EXIT_SUCCESS;

}

11.5 Beberapa Fungsi untuk Manipulasi FileTeks

• int fgetc(FILE *fp)Membaca sebuah byte dari sebuah stream

• int fputc(int ch, FILE *fp)Menulis sebuah byte ke dalam sebuah stream

• char *fgets(char *str, int num, FILE *fp)Membaca untaian karakter (string) dari sebuah stream

• int fputs(char *str, FILE *fp)Menulis untaian karakter (string) ke dalam sebuah stream

Page 91: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 77 — #91 ii

ii

ii

Bab 12

Typedef & Struct

12.1 Pendahuluan

Kata kunci typedef dapat digunakan untuk membuat alias darisuatu tipe data. Struct merupakan perintah yang dapat digunakanuntuk membuat struktur dari suatu record. Sebuah record bisamemiliki domain yang heterogen. Sebagai contoh, sebuah recordyang merepresentasikan tentang seseorang memiliki atribut berupanama yang bertipe string, umur yang bertipe integer, dan tinggi yangbertipe double. Biasanya penggunaan typedef dikombinasikan dalampendeklarasian sebuah struct.

12.2 Objektif

Objektif dari materi ini adalah (i) memperkenalkan penggunaantypedef, (ii) memperkenalkan penggunaan struct, (iii) memperli-hatkan cara mendeklarasi struct menggunakan kata kunci typedef.

12.3 Typedef

Kata kunci typedef dalam pemrograman C/C++ digunakan untukmembuat alias dari sebuah tipe data yang rumit. Walaupun typedefbisa digunakan untuk membuat alias dari pendefinisian tipe dataprimitif, typedef juga sering digunakan untuk mendefinisikan aliasdari tipe data struct dan union. Perhatikan beberapa contohpenggunaan kata kunci typedef dalam pendeklarasian sebuah alias:

typedef int Time;Time hours, minutes, seconds;

Page 92: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 78 — #92 ii

ii

ii

78 Bab 12. Typedef & Struct

Pada contoh di atas, variabel Time merupakan alias dari tipedata primitif int. Setelah pendeklarasian alias int menjadi Time,pada saat pendeklarasian variabel hours, minutes, dan seconds, tipedata Time dapat digunakan sebagai tipe data dari ketiga variabeltersebut. Selanjutnya, pada saat variabel hours, minutes, dan secondsdideklarasikan, tipe data Time sudah dapat digunakan sebagai tipedata ketiga variabel tersebut. Sama halnya juga terjadi pada contohberikut ini:

typedef char * String;String nama_mahasiswa, alamat_mahasiswa;

Dalam C, pointer ke character merupakan satu-satunya caramendeklarasi tipe data string. Pada contoh di atas, dengan meng-gunakan kata kunci typedef, sebuah tipe data baru String yangmerupakan alias dari tipe data char* dideklarasikan. Selanjutnya,tipe data baru tersebut digunakan sebagai tipe data dari variabelnama−mahasiswa dan alamat−mahasiswa.

12.4 Penggunaan Typedef Pada Array

Pendeklarasian sebuah array bertipe int dilakukan dengan cara:

int x[100];

Alias dari array bertipe int berukuran 100 tersebut dapat dibuatmenggunakan kata kunci typedef sebagai berikut:

• Langkah 1: Ganti variabel x dengan nama alias, misalnyaLarik.

int Larik[100];

• Langkah 2: Tambahkan kata kunci typedef sehingga menjadi:

typedef int Larik[100];

• Langkah 3: Pendeklarasian variabel dengan tipe Larik beruku-ran 100 adalah:

Larik a, b, c;

Page 93: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 79 — #93 ii

ii

ii

12.5. Contoh Penggunaan Typedef 79

12.5 Contoh Penggunaan Typedef

Contoh 1:

#define N 3typedef float Scalar;typedef Scalar Vector[N];void addVector(Vector a, Vector b, Vector c) {

int i;for(i=0; i<N; ++i){

c[i] = a[i] + b[i];}

}

Contoh 2:

#define N 3typedef float Scalar;typedef Scalar Matrix[N][N];void addMatrix(Matrix a, Matrix b, Matrix c) {

int i,j;for(i=0; i<N; ++i){

for(j=0; j<N; ++j){c[i][j] = a[i][j] + b[i][j];

}}

}

12.6 Struct

Struct atau structure dalam C digunakan untuk membentuk tipe datadengan beberapa anggota (member) dengan tipe tertentu. Tipe datadari member sebuah struct boleh berbeda-beda. Cara mendeklarasisebuah struct adalah sebagai berikut:

struct tgl{int hari;int bulan;int tahun;

};

typedef struct tgl Tanggal;Tanggal date;

Page 94: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 80 — #94 ii

ii

ii

80 Bab 12. Typedef & Struct

Atau dapat juga menggunakan kata kunci typedef pada saatmendeklarasikan struct tgl tersebut dengan menambahkan aliasTanggal dibagian akhir proses pendeklarasian struct itu.

typedef struct tgl{int hari;int bulan;int tahun;

}Tanggal;

Tanggal date;

Contoh di atas memperlihatkan bagaimana struct tgl yang memi-liki member hari, bulan, dan tahun yang bertipe int dideklarasikan.Menggunakan kata kunci typedef, alias dari struct tgl dibuat. Selan-jutnya, variabel date dapat dideklarasi bertipe alias Tanggal tersebut.Untuk mengakses anggota (member) dari sebuah struct, operator titikdigunakan. Sebagai ilustrasi, perhatikan contoh berikut ini.

date.hari = 2;date.tahun = 2001;

Pernyataan di atas mengakibatkan anggota dari struct date diatas memiliki nilai seperti tampak pada gambar 12.1.

Gambar 12.1: Visualisasi struct

12.7 Pointer ke Sebuah Struct

Pendeklarasian sebuah pointer ke struct tgl dapat dilakukan dengancara:

Tanggal date;Tanggal * pdate = &date;

Karena pdate merupakan pointer ke alias Tanggal dan date adalahsebuah variabel bertipe Tanggal, maka perintah pdate = &date;

Page 95: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 81 — #95 ii

ii

ii

12.7. Pointer ke Sebuah Struct 81

Gambar 12.2: Visualisasi struct

mengakibatkan pointer pdate tunjuk ke alamat dari variabel date.Ilustrasi ini dapat dilihat melalui gambar 12.2

Untuk mengakses member dalam struct date menggunakan point-er pdate di atas, operator panah (->) harus digunakan sebelum namamember. Contoh:

pdate -> hari = 2pdate -> bulan = 11pdate -> tahun = 1999;

Page 96: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 82 — #96 ii

ii

ii

Page 97: “bukuAjar” — 2011/9/22 — 13:39 — page i — #1 iirvanizam/programming/cprogrammingbook.pdf · The work in this project was partially supported by Program Studi Informatika

ii

“bukuAjar” — 2011/9/22 — 13:39 — page 83 — #97 ii

ii

ii

Daftar Pustaka 83

Daftar Pustaka

Bronson, G. and H. Silver (1993). C for Engineers and Scientists: AnIntroduction to Programming with ANSI C. West Publishing Co.

Feuer, A. (1998). The C Puzzle Book. Addison-Wesley Professional.

Horton, I. (2006). Beginning C: From Novice to Professional, 4thedition. Apress.

Jensen, T. Pointer Tutorial. URL: http://www.netcom.com/~tjensen/ptr/cpoint.htm.

Kelly, A. and I. P. (1998). A Book on C: Programming in C, 4thedition. California: The Benjamin/Cummings Publishing Co.

Kernighan, B. and D. M. Ritchie (1988). The C ProgrammingLanguage, 2nd edition. Prentice Hall, Inc.

Kochan, S. (2005). Programming in C: A Complete Introduction tothe C Programming Language, 3rd edition. Sams Publishing.

Solter, N. A. and S. Kleper (2005). Professional C++. WileyPublishing Inc.

Vine, M. (2007). C Programming for the Absolute Beginner, 2ndedition. Course Technology PTR.