Job Sheet Bhs C - Salahuddin bin Ali

advertisement
PRAKTIKUM I
PENGENALAN PEMROGRAMAN BAHASA C
A. Tujuan Instruksional Khusus
1. Menjelaskan sejarah dan ruang lingkup pemakaian bahasa C
2. Menjelaskan kelebihan dan kekurangan bahasa C
3. Menjelaskan proses kompilasi dan linking program C
4. Menjelaskan struktur penulisan bahasa C dan menjelaskan komponen-komponen
program dalam contoh aplikasi sederhana
5. Mengenal pemrograman dengan bahasa C.
6. Mampu membuat program sederhana dengan bahasa C.
B. Dasar Teori
1. Sejarah dan Ruang Lingkup C
C adalah bahasa yang standar, artinya suatu program yang ditulis dengan versi
bahasa C tertentu akan dapat dikompilasi dengan versi bahasa C yang lain dengan sedikit
modifikasi.
Standar bahasa C yang asli adalah standar dari UNIX.
Sistem operasi,
kompiler C dan seluruh program aplikasi UNIX yang esensial ditulis dalam bahasa C.
Patokan dari standar UNIX ini diambilkan dari buku yang ditulis oleh Brian Kerninghan
dan Dennis Ritchie berjudul "The C Programming Language", diterbitkan oleh PrenticeHall tahun 1978. Deskripsi C dari Kerninghan dan Ritchie ini kemudian dikenal secara
umum sebagai "K&R C".
Kepopuleran bahasa C membuat versi-versi dari bahasa ini banyak dibuat untuk
komputer mikro. Untuk membuat versi-versi tersebut menjadi standar, ANSI (American
National Standards Institute) membentuk suatu komite (ANSI committee X3J11) pada
tahun 1983 yang kemudian menetapkan standar ANSI untuk bahasa C. Standar ANSI ini
didasarkan kepada standar UNIX yang diperluas. Standar ANSI menetapkan sebanyak 32
buah kata-kata kunci (keywords) standar. Versi-versi bahasa C yang menyediakan paling
tidak 32 kata-kata kunci ini dengan sintaks yang sesuai dengan yang ditentukan oleh
standar, maka dapat dikatakan mengikuti standar ANSI. Buku ajar ini didasarkan pada
bahasa C dari standar ANSI.
Jobsheet Pemograman Bahasa C
1
2. Proses Kompilasi dan Linking Program C
Agar suatu program dalam bahasa pemrograman dapat dimengerti oleh komputer,
program haruslah diterjemahkan dahulu ke dalam kode mesin. Adapun penerjemah yang
digunakan bisa berupa interpreter atau kompiler.
Interpreter adalah suatu jenis penerjemah yang menerjemahkan baris per baris
intsruksi untuk setiap saat. Keuntungan pemakaian interpreter, penyusunan program relatif
lebih cepat dan bisa langsung diuji sekalipun masih ada beberapa kesalahan secara kaidah
dalam program. Sedangkan kelemahannya, kecepatannya menjadi lambat sebab sebelum
suatu instruksi dijalankan selalu harus diterjemahkan terlebih dahulu. Selain itu, saat
program dieksekusi, interpreter juga harus berada dalam memori. Jadi memori selalu
digunakan baik untuk program maupun interpreter. Di samping itu, program sumber
(source program) yaitu program aslinya tidak dapat dirahasiakan (orang lain selalu bisa
melihatnya).
Kebanyakan versi C yang beredar di pasaran menggunakan penerjemah berupa
kompiler. Kompiler merupakan jenis penerjemah yang lain, dengan cara kerjanya yaitu
menerjemahkan seluruh instruksi dalam program sekaligus. Proses pengkompilasian ini
cukup dilakukan sekali saja. Selanjutnya hasil penerjemahan (setelah melalui tahapan yang
lain) bisa dijalankan secara langsung, tanpa tergantung lagi oleh program sumber maupun
kompilernya. Keuntungannya, proses eksekusi dapat berjalan dengan cepat, sebab tak ada
lagi proses penerjemahan. Di samping itu, program sumber bisa dirahasiakan, sebab yang
dieksekusi adalah program yang sudah dalam bentuk kode mesin. Sedangkan
kelemahannya, proses pembuatan dan pengujian membutuhkan waktu relatif lebih lama,
sebab ada waktu untuk mengkompilasi (menerjemahkan) dan ada pula waktu melakukan
proses linking. Perlu pula diketahui, program akan berhasil dikompilasi hanya jika program
tak mengandung kesalahan secara kaidah sama sekali.
Proses dari bentuk program sumber C (source program, yaitu program yang ditulis
dalam bahasa C) hingga menjadi program yang executable (dapat dieksekusi secara
langsung) ditunjukkan pada Gambar 1.1 di bawah ini.
Jobsheet Pemograman Bahasa C
2
EDITOR
EDITOR
FILE INCLUDE
(FILE JUDUL)
xxx.h
FILE PROGRAM
SUMBER
yyy.c
KOMPILER
FILE PUSTAKA
FILE OBYEK
FILE OBYEK
LAIN
(library file)
LINKER
FILE
EXECUTABLE
Gambar 1.1 Proses Kompilasi-Linking dari program C
Keterangan Gambar :

Pertama-tama program C ditulis dengan menggunakan editor. Program ini disimpan
dalam file yang disebut file program sumber (dengan ciri utama memiliki ekstensi .c).

File include (umumnya memiliki ekstensi .h, misalnya stdio.h, atau biasa disebut
dengan file judul (header file)) berisi kode yang akan dilibatkan dalam program C
(Pada program tertentu bisa saja tidak melibatkan file include).

Berikutnya, kode dalam file program sumber maupun kode pada file include akan
dikompilasi oleh kompiler menjadi kode obyek. Kode obyek ini disimpan pada file
yang biasanya berekstensi .obj, atau .o (bergantung kepada lingkungan/environment
sistem operasi yang dipakai). Kode obyek berbentuk kode mesin, oleh karena itu tidak
dapat dibaca oleh pemrogram. Akan tetapi kode ini sendiri juga belum bisa dipahami
komputer.
Jobsheet Pemograman Bahasa C
3

Supaya bisa dimengerti oleh komputer, maka kode obyek bersama-sama dengan kode
obyek yang lain (kalau ada) dan isi file pustaka (library file, yaitu file yang berisi rutin
untuk melaksanakan tugas tertentu. File ini disediakan oleh pembuat kompiler,
biasanya memiliki ekstensi .lib) perlu dikaitkan (linking) dengan menggunakan linker,
membentuk
sebuah
program
yang
executable
(program
yang
dapat
dijalankan/dieksekusi secara langsung dalam lingkungan sistem operasi).

Program hasil linker ini disimpan dalam file yang disebut file executable, yang
biasanya berekstensi .exe.
3. Struktur Penulisan Program C
Untuk dapat memahami bagaimana suatu program ditulis, maka struktur dari
program harus dimengerti terlebih dahulu. Tiap bahasa komputer mempunyai struktur
program yang berbeda. Struktur program memberikan gambaran secara luas, bagaimana
bentuk program secara umum.
Program C pada hakekatnya tersusun atas sejumlah blok fungsi. Sebuah program
minimal mengandung sebuah fungsi. Fungsi pertama yang harus ada dalam program C dan
sudah ditentukan namanya adalah main(). Setiap fungsi terdiri atas satu atau beberapa
pernyataan, yang secara keseluruhan dimaksudkan untuk melaksanakan tugas khusus.
Bagian pernyataan fungsi (sering disebut tubuh fungsi) diawali dengan tanda kurung
kurawal buka ({) dan diakhiri dengan tanda kurung kurawal tutup (}). Di antara kurung
kurawal itu dapat dituliskan statemen-statemen program C. Namun pada kenyataannya,
suatu fungsi bisa saja tidak mengandung pernyataan sama sekali. Walaupun fungsi tidak
memiliki pernyataan, kurung kurawal haruslah tetap ada. Sebab kurung kurawal
mengisyaratkan awal dan akhir definisi fungsi. Berikut ini adalah struktur dari program C
main()
{
statemen-statemen;
fungsi utama
}
fungsi_fungsi_lain()
{
statemen-statemen;
}
Jobsheet Pemograman Bahasa C
fungsi-fungsi lain yang
ditulis oleh pemrogram
4
Bahasa C dikatakan sebagai bahasa pemrograman terstruktur karena strukturnya
menggunakan fungsi-fungsi sebagai program-program bagiannya (subroutine). Fungsifungsi yang ada selain fungsi utama (main()) merupakan program-program bagian.
Fungsi-fungsi ini dapat ditulis setelah fungsi utama atau diletakkan di file pustaka
(library). Jika fungsi-fungsi diletakkan di file pustaka dan akan dipakai di suatu program,
maka nama file judulnya (header file) harus dilibatkan dalam program yang
menggunakannya dengan preprocessor directive berupa #include.
4. Pengenalan Fungsi-Fungsi Dasar
a. Fungsi main()
Pada program C, main() merupakan fungsi yang istimewa. Fungsi main() harus ada
pada program, sebab fungsi inilah yang menjadi titik awal dan titik akhir eksekusi
program. Tanda { di awal fungsi menyatakan awal tubuh fungsi dan sekaligus awal
eksekusi program, sedangkan tanda } di akhir fungsi merupakan akhir tubuh fungsi dan
sekaligus adalah akhir eksekusi program. Jika program terdiri atas lebih dari satu fungsi,
fungsi main() biasa ditempatkan pada posisi yang paling atas dalam pendefinisian
fungsi. Hal ini hanya merupakan kebiasaan. Tujuannya untuk memudahkan pencarian
terhadap program utama bagi pemrogram. Jadi bukanlah merupakan suatu keharusan.
b. Fungsi printf().
Fungsi printf() merupakan fungsi yang umum dipakai untuk menampilkan suatu
keluaran pada layar peraga. Untuk menampilkan tulisan
Selamat belajar bahasa C
misalnya, pernyataan yang diperlukan berupa:
printf(“Selamat belajar bahasa C”);
Pernyataan di atas berupa pemanggilan fungsi printf() dengan argumen atau parameter
berupa string. Dalam C suatu konstanta string ditulis dengan diawali dan diakhiri tanda
petik-ganda (“). Perlu juga diketahui pernyataan dalam C selalu diakhiri dengan tanda
titik koma (;). Tanda titik koma dipakai sebagai tanda pemberhentian sebuah pernyataan
dan bukanlah sebagai pemisah antara dua pernyataan.
Jobsheet Pemograman Bahasa C
5
Tanda \ pada string yang dilewatkan sebagai argumen printf() mempunyai makna yang
khusus. Tanda ini bisa digunakan untuk menyatakan karakter khusus seperti karakter
baris-baru ataupun karakter backslash (miring kiri). Jadi karakter seperti \n sebenarnya
menyatakan sebuah karakter. Contoh karakter yang ditulis dengan diawali tanda \
adalah:
\”
menyatakan karakter petik-ganda
\\
menyatakan karakter backslash
\t
menyatakan karakter tab
Dalam bentuk yang lebih umum, format printf()
printf(“string kontrol”, daftar argumen);
dengan string kontrol dapat berupa satu atau sejumlah karakter yang akan ditampilkan
ataupun berupa penentu format yang akan mengatur penampilan dari argumen yang
terletak pada daftar argumen. Mengenai penentu format di antaranya berupa:
%d
untuk menampilkan bilangan bulat (integer)
%f
untuk menampilkan bilangan titik-mengambang (pecahan)
%c
untuk menampilkan sebuah karakter
%s
untuk menampilkan sebuah string
Contoh:
#include <stdio.h>
void main( )
{
printf(“No
: %d\n”, 10);
printf(“Nama : %s\n”, “Ali”);
printf(“Nilai : %f\n”,80.5);
printf(“Huruf : %c\n”,‘A’);
}
Jobsheet Pemograman Bahasa C
6
1. Pengenalan Praprosesor #include
#include merupakan salah satu jenis pengarah praprosesor (preprocessor directive).
Pengarah praprosesor ini dipakai untuk membaca file yang di antaranya berisi deklarasi
fungsi dan definisi konstanta. Beberapa file judul disediakan dalam C. File-file ini
mempunyai ciri yaitu namanya diakhiri dengan ekstensi .h. Misalnya pada program
#include <stdio.h> menyatakan pada kompiler agar membaca file bernama stdio.h saat
pelaksanaan kompilasi.
Bentuk umum #include :
#include “namafile”
Bentuk pertama (#include <namafile>) mengisyaratkan bahwa pencarian file
dilakukan pada direktori khusus, yaitu direktori file include. Sedangkan bentuk kedua
(#include “namafile”) menyatakan bahwa pencarian file dilakukan pertama kali pada
direktori aktif tempat program sumber dan seandainya tidak ditemukan pencarian akan
dilanjutkan pada direktori lainnya yang sesuai dengan perintah pada sistem operasi.
Kebanyakan program melibatkan file stdio.h (file-judul I/O standard, yang
disediakan dalam C). Program yang melibatkan file ini yaitu program yang menggunakan
pustaka I/O (input-output) standar seperti printf().
2. Komentar dalam Program
Untuk keperluan dokumentasi dengan maksud agar program mudah dipahami di
suatu saat lain, biasanya pada program disertakan komentar atau keterangan mengenai
program. Dalam C, suatu komentar ditulis dengan diawali dengan tanda /* dan diakhiri
dengan tanda */.
Contoh :
/* Tanda ini adalah komentar */
#include <stdio.h>
main()
{
printf(“Coba\n”);
/* Ini adl program pertama */
}
Jobsheet Pemograman Bahasa C
7
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6.
Pilih News untuk membuka Program baru, atau open untuk membuka file
program yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama
file sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan
untuk mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Buatlah program yang akan menampilkan tulisan dilayar monitor :
“ Selamat datang di Praktikum Dasar Komputer
Laboratorium Komputer Teknik Elektro
Politeknik Negeri Lhokseumawe “
Contoh :
#include <stdio.h>
void main()
Jobsheet Pemograman Bahasa C
8
{
printf(“Selamat datang di Praktikum Dasar Komputer\n”);
printf(“
Laboratorium Komputer Teknik Elektro\n”);
printf(”
Politeknik Negeri Lhokseumawe \n”);
}
2. Buatlah program dengan menggunakan tipe bilangan real presisi tunggal seperti berikut.
Contoh
#include<stdio.h>
void main()
{
int jumlah;
float harga_per_unit, harga_total;
jumlah = 10;
harga_per_unit = 17.5;
harga_total = jumlah * harga_per_unit;
printf(“Harga total = %f\n”, harga_total);
}
3. Mencetak kalimat dalam beberapa baris.
#include <stdio.h>
void main()
{
printf("Pemrograman adalah sesuatu yg menyenangkan\n");
printf("Pemrograman bahasa C adalah lebih menyenangkan\n");
printf("Testing....\n..1\n...2\n....3\n");
}
4. Menghitung penjumlahan dan mencetak hasilnya
#include <stdio.h>
void main()
{
int jumlah;
jumlah = 1024 + 4096;
printf("Jumlah dari 1024 dengan 4096 adalah %d\n", jumlah);
Jobsheet Pemograman Bahasa C
9
}
5. Mengisi nilai variabel int, penjumlahan isi variabel dan mencetak hasilnya
#include <stdio.h>
void main()
{
int nilai1, nilai2, jumlah;
nilai1 = 1024;
nilai2 = 4096;
jumlah = nilai1 + nilai2;
printf("Jumlah dari %d dengan %d adalah %d\n", nilai1, nilai2, jumlah);
}
6. Mengisi variabel float, mengalikan isi variabel dan mencetak hasilnya
#include <stdio.h>
void main()
{
float harga, total;
int jumlah;
harga = 132.055f;
jumlah = 50;
total = harga * jumlah;
printf("Harga total = %f\n", total);
}
7. Menentukan hasil cetakan dengan lebar medan (field) yang tepat versi 1
#include <stdio.h>
void main()
{
float bil = 2.5f, nomor = 33.567f;
printf("Bilangan = %f\n", bil);
printf("Nomor = %f\n", nomor);
}
F. Soal
1. Buatlah program untuk menampilkan tulisan di bawah ini :
Jobsheet Pemograman Bahasa C
10
PEMROGRAMAN BAHASA C
PRODI TEKNIK ELEKTRONIKA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI LHOKSEUMAWE
DIPROGRAM OLEH : NAMAMU
2. Carilah kesalahan dalam program di bawah ini :
main ()
{
INT jumlah;
/* PERHITUNGAN HASIL
jumlah = 25 + 37 - 19;
/* TAMPILKAN HASIL
printf("Berapa hasil perhitungan 25 + 37 - 19 ?\n);
printf("Jawabannya adalah %d\n" jumlah);
}
3. Berapakah nilai jawaban yang ditampilkan oleh program di bawah ini :
#include <stdio.h>
void main()
{
int jawab, hasil;
jawab = 100;
hasil = jawab - 10;
printf("Jawabannya adalah %d\n", hasil + 6);
}
4. Buatlah program yang menampilkan tulisan :
“Nama Saya
: nama praktikan
: NIM praktikum “
NIM
Dengan perintah printf terstruktur %s, dengan nama dan nim merupakan input dari
user.
(panduan : ingat program printf dan scanf)
#include <stdio.h>
void main ()
{………
…….
Jobsheet Pemograman Bahasa C
11
}
5. Buatlah program yang menampilkan karakter yang merupakan masukan dari keyboard.
(panduan :ingatlah useran printf )
#include <stdio.h>
#include<conio.h>
main ();
{
char karakter;
printf(“…
karakter = getch();
printf(“…,karakter);
}
Jobsheet Pemograman Bahasa C
12
PRAKTIKUM II
DASAR-DASAR PEMROGRAMAN C
A. Tujuan Instruksional Khusus
1. Menjelaskan tentang beberapa tipe data dasar (jenis dan jangkauannya)
2. Menjelaskan tentang Variabel
3. Menjelaskan tentang konstanta
4. Menjelaskan tentang berbagai jenis operator dan pemakaiannya
5. Menjelaskan tentang instruksi I/O
B. Dasar Teori
1. Tipe Data Dasar
Data berdasarkan jenisnya dapat dibagi menjadi lima kelompok, yang dinamakan
sebagai tipe data dasar. Kelima tipe data dasar adalah:

Bilangan bulat (integer)

Bilangan real presisi-tunggal

Bilangan real presisi-ganda

Karakter

Tak-bertipe (void), keterangan lebih lanjut tentang void dijelaskan dalam Bab V.
Kata-kunci yang berkaitan dengan tipe data dasar secara berurutan di antaranya
adalah int (short int, long int, signed int dan unsigned int), float, double, dan char.
Tabel 2-1 memberikan informasi mengenai ukuran memori yang diperlukan dan
kawasan dari masing-masing tipe data dasar.
Tabel 2-1. Ukuran memori untuk tipe data
Tipe
char
int
float
double
Total bit
8
32
32
64
Kawasan
-128 s/d 127
-2147483648 s/d 2147483647
1.7E-38 s/d 3.4E+38
2.2E-308 s/d 1.7E+308
Keterangan
karakter
bilangan integer
bilangan real presisi-tunggal
bilangan real presisi-ganda
Untuk tipe data short int, long int, signed int dan unsigned int, maka ukuran memori yang
diperlukan serta kawasan dari masint-masing tipe data adalah sebagai berikut :
Jobsheet Pemograman Bahasa C
13
Tabel 2-2 Ukuran memori untuk tipe data int
Tipe
Total bit
short int
long int
signed int
unsigned int
16
32
32
32
Kawasan
-32768 s/d 32767
-2147483648 s/d 2147483647
-2147483648 s/d 2147483647
0 s/d 4294967295
Keterangan
short integer
long integer
biasa disingkat dengan int
bilangan int tak bertanda
Catatan :

Ukuran dan kawasan dari masing-masing tipe data adalah bergantung pada jenis mesin
yang digunakan (misalnya mesin 16 bit bisa jadi memberikan hasil berbeda dengan
mesin 32 bit).
1. Variabel
2.1 Aturan Pendefinisan Variabel
Aturan penulisan pengenal untuk sebuah variabel, konstanta atau fungsi yang
didefinisikan oleh pemrogram adalah sebagai berikut :

Pengenal harus diawali dengan huruf (A..Z, a..z) atau karakter garis bawah ( _ ).

Selanjutnya dapat berupa huruf, digit (0..9) atau karakter garis bawah atau tanda
dollar ($).

Panjang pengenal boleh lebih dari 31 karakter, tetapi hanya 31 karakter pertama yang
akan dianggap berarti.

Pengenal tidak boleh menggunakan nama yang tergolong sebagai kata-kata cadangan
(reserved words) seperti int, if, while dan sebagainya.
2.2 Mendeklarasikan Variabel
Variabel digunakan dalam program untuk menyimpan suatu nilai, dan nilai yang
ada padanya dapat diubah-ubah selama eksekusi program berlangsung. Variabel yang akan
digunakan dalam program haruslah dideklarasikan terlebih dahulu. Pengertian deklarasi di
sini berarti memesan memori dan menentukan jenis data yang bisa disimpan di dalamnya.
Bentuk umum deklarasi variabel:
tipe daftar-variabel;
Jobsheet Pemograman Bahasa C
14
Pada pendeklarasian varibel, daftar-variabel dapat berupa sebuah variabel atau
beberapa variabel yang dipisahkan dengan koma. Contoh:
int var_bulat1;
float var_pecahan1, var_pecahan2;
2.3 Memberikan Nilai ke Variabel
Untuk memberikan nilai ke variabel yang telah dideklarasikan, maka bentuk umum
pernyataan yang digunakan adalah :
nama_variabel = nilai;
Contoh:
int var_bulat = 10;
double var_pecahan = 10.5;
2.4 Inisialisasi Variabel
Adakalanya dalam penulisan program, setelah dideklarasikan, variabel langsung
diberi nilai awal. Sebagai contoh yaitu variabel nilai :
int nilai;
nilai = 10;
3. Konstanta
Konstanta menyatakan nilai yang tetap. Berbeda dengan variabel, suatu konstanta
tidak dideklarasikan. Namun seperti halnya variabel, konstanta juga memiliki tipe.
Penulisan konstanta mempunyai aturan tersendiri, sesuai dengan tipe masing-masing.

Konstanta karakter misalnya ditulis dengan diawali dan diakhiri dengan tanda petik
tunggal, contohnya : ‘A’ dan ‘@’.

Konstanta integer ditulis dengan tanda mengandung pemisah ribuan dan tak
mengandung bagian pecahan, contohnya : –1 dan 32767.

Konstanta real (float dan double) bisa mengandung pecahan (dengan tanda berupa titik)
dan nilainya bisa ditulis dalam bentuk eksponensial (menggunakan tanda e), contohnya
Jobsheet Pemograman Bahasa C
15
: 27.5f (untuk tipe float) atau 27.5 (untuk tipe double) dan 2.1e+5 (maksudnya
2,1 x 105 ).

Konstanta string merupakan deretan karakter yang diawali dan diakhiri dengan tanda
petik-ganda (“), contohnya :“Pemrograman Dasar C”.
4. Operator
Operator merupakan simbol atau karakter yang biasa dilibatkan dalam program
untuk melakukan sesuatu operasi atau manipulasi, seperti menjumlahkan dua buah nilai,
memberikan nilai ke suatu variabel, membandingkan kesamaan dua buah nilai. Sebagian
operator C tergolong sebagai operator binary, yaitu operator yang dikenakan terhadap dua
buah nilai (operand). Contoh :
a + b
Simbol + merupakan operator untuk melakukan operasi penjumlahan dari kedua
operand-nya (yaitu a dan b). Karena operator penjumlahan melibatkan dua operator ini
tergolong sebagai operator binary.
-c
Simbol - (minus) juga merupakan operator. Simbol ini termasuk sebagai operator
unary, yaitu operator yang hanya memiliki sebuah operand (yaitu c pada contoh ini).
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
Jobsheet Pemograman Bahasa C
16
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file program
yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama file
sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan untuk
mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Tipe-tipe data dasar dalam C.
#include <stdio.h>
void main()
{
int var_bulat = 32767;
float var_pecahan1 = 339.2345678f;
double var_pecahan2 = 3.4567e+40;
char var_karakter = 'S';
printf("Variabel bulat
= %d\n", var_bulat);
printf("Variabel pecahan1 = %f\n", var_pecahan1);
printf("Variabel pecahan2 = %le\n", var_pecahan2);
printf("Variabel karakter = %c\n", var_karakter);
}
2. Mengenal beberapa operator dalam C.
#include <stdio.h>
void main()
{
Jobsheet Pemograman Bahasa C
17
int a, b, c, hasil;
printf("Masukkan nilai a = ");
scanf("%d", &a);
printf("Masukkan nilai b = ");
scanf("%d", &b);
printf("Masukkan nilai c = ");
scanf("%d", &c);
printf("\n");
hasil = a - b;
printf("Hasil pengurangan : a - b = %d\n", hasil);
printf("Hasil perkalian
: b * c = %d\n", b * c);
hasil = a / c;
printf("Hasil pembagian
printf("Hasil operasi
: a / c = %d\n", hasil);
: a + b * c = %d\n", a + b * c);
}
3. Operator Modulus
#include <stdio.h>
void main()
{
int a = 14, b = 2, c = 3, d = 4;
printf("a = %d, b = %d, c = %d, d = %d\n\n",a, b, c, d);
printf("Hasil a %% b = %d\n", a % b);
printf("Hasil a %% c = %d\n", a % c);
printf("Hasil a %% d = %d\n", a % d);
printf("Hasil a / d * d + a %% d = %d\n",a / d * d + a %
d);
}
4. Menghitung diskriminan pers kuadrat ax^2 + bx + c = 0
# include <stdio.h>
void main()
{
float a,b,c,d = 0;
Jobsheet Pemograman Bahasa C
18
a = 3.0f;
b = 4.0f;
c = 7.0f;
d = b*b-4*a*c;
printf("Diskriminan = %f\n",d);
}
5. Penggunaan pre & post Increment operator
#include <stdio.h>
void main()
{
int count = 0, loop;
loop = ++count;
/* count=count+1; loop=count; */
printf("loop = %d, count = %d\n", loop, count);
loop = count++;
/* loop=count;
count=count+1; */
printf("loop = %d, count = %d\n", loop, count);
}
6. Perbedaan format %g, %e dan %f
#include <stdio.h>
void main()
{
float x;
printf("Masukkan nilai pecahan yg akan ditampilkan : ");
scanf("%f", &x);
printf("format e
=> %e\n", x);
printf("format f
=> %f\n", x);
printf("format g
=> %g\n", x);
}
7. Penggunaan format panjang medan data
#include <stdio.h>
main()
{
Jobsheet Pemograman Bahasa C
19
int nilai1 = 20;
float nilai2 = 500.0f;
printf("Abad %5d\n", nilai1);
printf("%10.2f\n", nilai2);
printf("%10s\n", "Bahasa C");
/* String rata kanan */
printf("%-10s\n", "Bahasa C");
/* String rata kiri */
}
8. Menghitung keliling dan luas lingkaran
#include <stdio.h>
void main()
{
float radius, keliling, luas;
printf("Masukkan jari-jari lingkaran : ");
scanf("%f",&radius);
keliling = 2 * 3.14f * radius;
luas = 0.5f * 3.14f * radius * radius;
printf("\nData lingkaran\n");
printf("Jari-jari = %8.2f\n", radius);
printf("Keliling
= %8.2f\n", keliling);
printf("Luas
= %8.2f\n", luas);
}
F. SOAL
1. Pilihlah nama-nama variabel yang benar dan yang salah, mengapa ?
int
calloc
xxx
char
Xx
z
6_05
A$
floating
ReInitialize
_1312
alpha_beta_routine
2. Apa yang dihasilkan oleh program di bawah ini :
voi main()
{
char c, d;
c = 'd';
Jobsheet Pemograman Bahasa C
20
d = c;
printf("d = %c", d);
}
3. Buatlah program untuk mengevaluasi polynomial di bawah ini :
3x2 – 5x + 6
dengan nilai x merupakan masukan dari user.
4. Buatlah program untuk mengkonversi suhu dari Celcius ke Fahrenheit dengan rumus
F = C * 1.8 + 32
Input : suhu dalam Celcius
Output : suhu dalam Fahrenheit
Jobsheet Pemograman Bahasa C
21
PRAKTIKUM III
PENGAMBILAN KEPUTUSAN
A. Tujuan Instruksional Khusus
1. Menjelaskan tentang operator kondisi (operator relasi dan logika)
2. Menjelaskan penggunaan pernyataan if
3. Menjelaskan penggunaan pernyataan if-else
4. Menjelaskan penggunaan pernyataan if dalam if
5. Menjelaskan penggunaan pernyataan else-if
6. Menjelaskan penggunaan pernyataan switch
B. Dasar Teori
Statement if-else digunakan untuk menentukan pilihan dari suatu kondisi yang
diberikan. Cara kerjanya adalah melakukan perbandingan menggunakan Relational
Operator dan/atau Logical Operator, apabila suatu kondisi terpenuhi (benar) maka akan
mengerjakan proses A dan apabila kondisi tidak terpenuhi (salah) maka tidak akan
mengerjakan proses A atau dapat juga mengerjakan proses lain misalkan proses B. Proses
A dan B dapat berupa satu baris statement atau beberapa baris yang dikelompokkan
(Compound Statement). Statement if-else bersarang merupakan kombinasi dari beberapa
if-else,
dinama apabila ada beberapa kondisi yang harus diuji kebenarannya secara
bersama (if didalam if). Statement else-if adalah cara lain dari bentuk if-else, yang
digunakan untuk menentukan satu kondisi yang benar dari beberapa kondisi yang tersedia.
Statement switch-case adalah bentuk lain dari statement else-if, dengan mendaftar
kondisi secara vertical dalam satu kolom sehingga memudahkan dalam hal evaluasi
program.
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
Jobsheet Pemograman Bahasa C
22
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file program
yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama file
sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan untuk
mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Menghitung nilai discount menggunakan if.
#include <stdio.h>
void main()
{
double total_pembelian, discount = 0;
printf("Total pembelian
= Rp ");
scanf("%lf", &total_pembelian);
if(total_pembelian >= 100.000)
discount = 0.05 * total_pembelian;
printf("Besarnya discount = Rp %.2lf\n", discount);
}
2. Menghitung nilai absolut suatu bilangan.
#include <stdio.h>
void main()
Jobsheet Pemograman Bahasa C
23
{
int bil, abs;
printf("Masukkan bilangan bulat : ");
scanf("%d", &bil);
if(bil < 0)
abs = -bil;
printf("Nilai absolut dari %d adalah %d\n\n", bil,abs);
}
3. Mengamati penggunaan statement penentu keputusan sederhana, yaitu menentukan
apakah bilangan yang dimasukkan lebih kecil dari ndol?
#include <stdio.h>
void main()
{
int bil,absolut;
printf("Masukkan bilangan bulat: ");
scanf("%d", &bil);
if(bil < 0) absolut = -bil;
printf("Nilai
absolute
dari
%d
adalah
=
%d",
bil,
absolut);
getch();
}
4. Suatu bilangan apabila dapat dibagi dengan bilangan yang lain, maka tidak
menghasilkan suatu sisa nilai, sehingga dengan cara ini program dapat menentukan
apakah suatu bilangan habis dibagi atau tidak. Program dibawah ini menghitung sisa
pembagian menggunakan operator aritmatika yaitu ‘%’ (modulus).
#include <stdio.h>
void main()
{
int pembilang, penyebut, sisa;
printf("Masukkan pembilang : ");
scanf("%d", &pembilang);
printf("Masukkan penyebut
: ");
scanf("%d", &penyebut);
Jobsheet Pemograman Bahasa C
24
sisa = pembilang % penyebut;
puts(“”);
if(sisa)
printf("%d tidak habis dibagi %d\n", pembilang, penyebut);
else
printf("%d habis dibagi %d\n", pembilang, penyebut);
getch();
}
5. Compound Statement adalah mengelompokkan suatu proses menjadi satu blok.
Didalam if-else penggunaan Compound Statement adalah untuk mengelompokkan
proses-proses yang harus dikerjakan bila kondisi terpenuh ataupun bila kondisi tidak
terpenuhi
#include <stdio.h>
void main()
{
char tag;
printf("Masukkan tipe tag ( 2 / 4) : "); scanf("%c",
&tag);
if(tag==’2’) {
printf("Merk sepeda motor bertipe 2 tag\n\n");
printf("
1. YA MAHA");
printf("
2. YA SUZUKI");
printf("
3. YA HONDA");
} else {
printf("Merk sepeda motor bertipe 4 tag\n\n");
printf("
1. HONDA");
printf("
2. SUZUKI");
printf("
3. YAMAHA");
}
getch();
}
6.
Statement if-else tidak dapat digunakan untuk menentukan satu pilihan yang benar
diantara beberapa pilihan yang ada, oleh karena itu dapat digunakan statement else-
Jobsheet Pemograman Bahasa C
25
if
dimana dapat digunakan untuk menguji kondisi yang benar diantara beberapa
beberapa kondisi yang diberikan. Program dibawah ini adalah digunakan untuk
menentukan satu pilihan diantara beberapa pilihan yaitu memilih satu operator
(dimasukkan dari keyboard) yang sesuai diantara 4 Arithmetic Operator yaitu (+, -, /
dan *). Bila suatu operator dikenal maka dilanjutkan proses perhitungan sesuai
dengan operator yang dikenal tersebut, sedangkan bila tidak dikenal maka diberikan
komentar “Operator SALAH!”. Pengujian operator dilakukan secara bertahap dari
operator ‘*’, ‘/’, ‘+’ dan ‘-‘, bila keempat operator tidak ditemukan maka pada
statement penujian cukup dituliskan else tanpa if, yang menandakan pengujian
selesai dan tidak ditemukan operator yang sesuai.
#include <stdio.h>
void main()
{
int
char
float
valid_operator = 1;
operator;
bil1, bil2, hasil;
printf("Masukkan 2 bilangan dan sebuah operator.\n\n");
printf("Dengan format:\n\n");
printf("= bilangan-1 operator bilangan-2\n\n");
printf("= ");
scanf("%f %c %f", &bil1, &operator, &bil2);
if(operator == '*') {
hasil = bil1 * bil2;
} else if(operator == '/')
hasil = bil1 / bil2;
else if(operator == '+')
hasil = bil1 + bil2;
else if(operator == '-')
hasil = bil1 - bil2;
else
valid_operator = 0;
if(valid_operator) {
printf("\nHasil perhitungan\n\n");
Jobsheet Pemograman Bahasa C
26
printf("%g %c %g = %g\n",bil1,operator,bil2,hasil);
} else {
printf("\nOperator SALAH!\n");
printf(“\nGunakan operator +, -, / dan * saja!”);
}
getch();
}
F. SOAL
1. Buatlah program untuk menerima 2 buah bilangan bulat masukan. Tampilkan hasil
dari pembagian bilangan pertama dengan bilangan kedua, dengan ketelitian 3 desimal.
Input : bil1 dan bil2
Output : hasil bagi bil1 dengan bil2
Nilai tambah : program bisa mengecek pembagian dengan nol, yaitu jika bilangan kedua
adalah nol, maka tidak dilakukan proses pembagian, namun ditampilkan pesan
kesalahannya (division by zero).
2. Buatlah program untuk menghitung determinan dan mencari akar-akar dari persamaan
kuadrat : ax2 + bx + c = 0 , dengan ketentuan sbb :
D = b2 - 4ac

Jika D = 0 , maka terdapat 2 akar real yang kembar, yaitu : x1 = x2 = -b / 2a

Jika D > 0 , maka terdapat 2 akar real yang berlainan, yaitu :
x1 = (-b + sqrt(D)) / 2a
x2 = (-b - sqrt(D)) / 2a

Jika D < 0 , maka terdapat 2 akar imaginair yang berlainan, yaitu :
x1 = -b / 2a + (sqrt(-D) / 2a) i
x2 = -b / 2a - (sqrt(-D) / 2a) i
Input
: a, b, c (float)
Output : Nilai Determinan serta nilai akar-akar persamaan tsb (x1& x2).
Jobsheet Pemograman Bahasa C
27
Petunjuk : - untuk mencari akar dari x, gunakan : sqrt(x) yang didefinisikan pada
<math.h>.
- gunakan else if
3. Buatlah program untuk menampilkan menu dan melakukan proses sbb :
Menu :
1. Menghitung volume kubus
2. Menghitung luas lingkaran
3. Menghitung volume silinder.
Input : pilihan user (1, 2 atau 3)
Jika pilihan = 1, maka :
Input
: panjang sisi kubus
Output : Volume kubus (vol = sisi3)
Jika pilihan = 2, maka :
Input
: panjang jari-jari lingkaran
Output : Luas lingkaran (luas = 3.14 * r2)
Jika pilihan = 3, maka :
Input
: panjang jari-jari lingkaran & tinggi silinder
Output : Volume silinder (vol = 3.14 * r2 * t)
Jika pilihan selain 1, 2 & 3 (default) : Tampilkan pesan kesalahan.
Petunjuk : gunakan switch-case
Jobsheet Pemograman Bahasa C
28
PRAKTIKUM IV
PENGULANGAN PROSES
A. Tujuan Instruksional Khusus
1. Menjelaskan proses pengulangan menggunakan pernyataan for
2. Menjelaskan proses pengulangan menggunakan pernyataan while
3. Menjelaskan proses pengulangan menggunakan pernyataan do-while
4. Menjelaskan penggunaan pernyataan break
5. Menjelaskan penggunaan pernyataan continue
6. Menjelaskan penggunaan pernyataan goto
7. Menjelaskan loop di dalam loop (nested loop) dan contoh kasusnya
8. Menjelaskan penggunaan exit() untuk menghentikan eksekusi program dan contoh
kasusnya
B. Dasar Teori
1 Pernyataan for
Mengulang suatu proses merupakan tindakan yang banyak dijumpai dalam
pemrograman. Pada semua bahasa pemrograman, pengulangan proses ditangani dengan
suatu mekanisme yang disebut loop. Dengan menggunakan loop, suatu proses yang
berulang misalnya menampilkan tulisan yang sama seratus kali pada layar dapat
diimpelementasikan dengan kode program yang pendek.
Pernyataan pertama yang digunakan untuk keperluan pengulangan proses adalah
pernyataan for. Bentuk pernyataan ini :
for (ungkapan1; ungkapan2; ungkapan3)
pernyataan;
Kegunaan dari masing-masing ungkapan pada pernyataan for.

Ungkapan1 : digunakan untuk memberikan inisialisasi terhadap variabel pengendali
loop.

Ungkapan2 : dipakai sebagai kondisi untuk keluar dari loop.

Ungkapan3 : dipakai sebagai pengatur kenaikan nilai variabel pengendali loop.
Ketiga ungkapan dalam for tersebut harus dipisahkan dengan tanda titik koma (;). Dalam
hal ini pernyatan bisa berupa pernyataan tunggal maupun jamak. Jika pernyataannya
Jobsheet Pemograman Bahasa C
29
berbentuk jamak, maka pernyataan-pernyataan tersebut harus diletakkan di antara kurung
kurawal buka ({) dan kurung kurawal tutup (}), sehingga formatnya menjadi :
for (ungkapan1; ungkapan2; ungkapan3)
{
pernyataan;
pernyataan;
.
.
.
}
Untuk keperluan ini, pernyataan for yang digunakan berupa :
for (bilangan = 20; bilangan <= 100; bilangan += 10)
printf("%d\n", bilangan);
Kalau digambarkan dalam bentuk diagram alir, akan terlihat sbb :
bilangan = 20
salah
bilangan <=100
benar
Cetak bilangan
bilangan =
bilangan + 10
Keluar loop
Gambar 1. Diagram alir for
Jobsheet Pemograman Bahasa C
30
/* File program : for1.c
Contoh pemakaian for untuk membentuk deret naik */
#include <stdio.h>
main()
{
int bilangan;
for(bilangan = 20; bilangan <= 100; bilangan += 10)
printf("%d\n", bilangan);
}
Contoh eksekusi :
20
30
40
50
60
70
80
90
100
Pada program di atas, kenaikan terhadap variabel pengendali loop sebesar 10 (positif),
yang dinyatakan dengan ungkapan
bilangan += 10
yang sama artinya dengan
bilangan = bilangan + 10
Pada contoh yang melibatkan pernyataan for di atas, kenaikan variabel pengendali
loop berupa nilai positif. Sebenarnya kenaikan terhadap variabel pengendali loop bisa
diatur bernilai negatif. Cara ini dapat digunakan untuk memperoleh deret sebagai berikut :
60
50
40
30
20
10
Jobsheet Pemograman Bahasa C
31
Untuk itu selengkapnya program yang dibutuhkan adalah sebagai berikut :
/* File program : for2.c
Contoh pemakaian for untuk membentuk deret turun */
#include <stdio.h>
main()
{
int bilangan;
for (bilangan = 60; bilangan >= 10; bilangan -= 10)
printf("%d\n", bilangan);
}
Contoh eksekusi :
60
50
40
30
20
10
Kadang-kadang dijumpai adanya pernyataan for yang tidak mengandung bagian
ungkapan yang lengkap (beberapa ungkapan dikosongkan). Dengan cara ini, pernyataan
for (bilangan = 20; bilangan <= 100; bilangan += 10)
printf(“%d\n”, bilangan);
dapat ditulis menjadi :
bilangan = 20;
/* inisialisasi di luar for */
for ( ; bilangan <= 100; )
ungkapan
kosong
{
printf(“%d\n”, bilangan);
bilangan += 10;

Tampak bahwa ungkapan yang biasa dipakai untuk inisialisasi variabel pengendali loop tak
ada. Sebagai gantinya pengendalian loop diatur sebelum pernyataan for, berupa
bilangan = 20;
Pengosongan ini juga dilakukan pada ungkapan yang biasa dipakai untuk menaikkan nilai
variabel pengendali loop. Sebagai gantinya, di dalam tubuh loop diberikan pernyataan
untuk menaikkan nilai variabel pengendali loop, yaitu berupa
Jobsheet Pemograman Bahasa C
32
bilangan += 10;
Ungkapan yang tidak dihilangkan berupa bilangan <=100. Ungkapan ini tetap disertakan
karena dipakai sebagai kondisi untuk keluar dari loop.
Sesungguhnya ungkapan yang dipakai sebagai kondisi keluar dari loop juga bisa
dihilangkan, sehingga bentuknya menjadi
for (;;)
pernyataan
Suatu pertanyaan mungkin timbul “Lalu bagaimana caranya kalau ingin keluar dari loop
pada bentuk di atas?”. Caranya adalah dengan menggunakan pernyataan yang dirancang
khusus untuk keluar dari loop. Mengenai hal ini akan dibahas pada sub bab yang lain.
2 Pernyataan while
Pada pernyataan while, pengecekan terhadap loop dilakukan di bagian awal
(sebelum tubuh loop). Lebih jelasnya, bentuk pernyataan while adalah sebagai berikut :
while (kondisi)
pernyataan;
dengan pernyataan dapat berupa pernyataan tunggal, pernyataan majemuk ataupun
pernyataan kosong. Proses pengulangan terhadap pernyataan dijelaskan pada gambar
berikut :
salah
kondisi
benar
pernyataan
keluar loop
Gambar 2. Diagram alir while
Jobsheet Pemograman Bahasa C
33
Dengan melihat gambar 2, tampak bahwa ada kemungkinan pernyataan yang merupakan
tubuh loop tidak dijalankan sama sekali, yaitu kalau hasil pengujian kondisi while yang
pertama kali ternyata bernilai salah.
Contoh pemakaian while misalnya untuk mengatur agar tombol yang ditekan oleh
pemakai program berupa salah satu diantara 'Y','y', 'T' atau 't'. Impelementasinya :
/*File program : pilihan.c
Untuk membaca tombol Y atau T */
#include <stdio.h>
main()
{
char pilihan;
/* diberi nilai salah lebih dahulu */
int sudah_benar = 0;
printf("Pilihlah Y atau T.\n");
/* program dilanjutkan jika tombol Y,y,T atau t ditekan */
while(!sudah_benar)
{
pilihan = getchar();
/* baca tombol */
sudah_benar = (pilihan == 'Y') || (pilihan == 'y')||
(pilihan == 'T') || (pilihan == 't');
}
/* memberi keterangan tentang pilihan */
switch(pilihan)
{
case 'Y':
case 'y':
puts("\nPilihan anda adalah Y");
break;
case 'T':
case 't':
puts("\nPilihan anda adalah T");
}
}
Contoh eksekusi :
Pilihlah Y atau T
Pilihan anda adalah Y
Jobsheet Pemograman Bahasa C
34
Inisialisasi terhadap variabel sudah_benar yang akan dijalankan pada kondisi while dengan
memberi nilai awal bernilai false (sudah_benar = 0) dimaksudkan agar tubuh loop

pilihan = getchar( ); /* baca tombol */
sudah_benar = (pilihan == 'Y') || (pilihan== 'y')||
(pilihan == 'T') || (pilihan == 't');

dijalankan minimal sekali.
Contoh lain pemakaian while dapat dilihat pada program yang digunakan untuk
menghitung banyaknya karakter dari kalimat yang dimasukkan melalui keyboard
(termasuk karakter spasi). Untuk mengakhiri pemasukan kalimat, tombol ENTER (‘\n’)
harus ditekan. Karena itu, tombol ENTER inilah yang dijadikan kondisi penghitungan
jumlah spasi maupun karakter seluruhnya. Lengkapnya, kondisi yang dipakai dalam while
berupa :
while((kar = getchar()) != '\n')
Ungkapan di atas mempunyai arti :

Bacalah sebuah karakter dan berikan ke variabel kar

Kemudian bandingkan apakah karakter tersebut = ‘\n’ (ENTER)
Ungkapan menghasilkan nilai benar jika tombol yang ditekan bukan ENTER. Pada
program kalau tombol yang ditekan bukan ENTER , maka :

Jumlah karakter dinaikkan sebesar satu melalui pernyataan : jumkar++;

Kalau karakter berupa SPASI, maka jumlah spasi dinaikkan sebesar satu, melalui
pernyataan :
if (kar == ‘ ‘) jumspasi++;
/* File program : jumkar.c
Menghitung jumlah kata dan karakter dalam suatu kalimat */
#include <stdio.h>
main()
{
char kar;
int jumkar = 0, jumspasi = 0;
puts("Masukkan sebuah kalimat dan akhiri dgn ENTER.\n");
puts("Saya akan menghitung jumlah karakter ");
puts("pada kalimat tersebut.\n");
Jobsheet Pemograman Bahasa C
35
while((kar = getchar()) != '\n')
{
jumkar++;
if (kar == ' ') jumspasi++;
}
printf("\nJumlah karakter
printf("\nJumlah SPASI
= %d", jumkar);
= %d\n\n", jumspasi);
}
Contoh eksekusi :
Masukkan sebuah kalimat, akhiri dgn ENTER.
Saya akan menghitung jumlah karakter pada kalimat tersebut.
Belajar bahasa C sangat menyenangkan
Jumlah karakter
Jumlah SPASI
= 36
= 4
3 Pernyataan do-while
Bentuk pernyataan do-while
do
pernyataan;
while (kondisi)
Pada pernyataan do-while, tubuh loop berupa pernyataan,dengan pernyataan bisa
berupa pernyataan tunggal, pernyataan majemuk ataupun pernyataan kosong. Pada
pernyataan do, mula-mula pernyataan dijalankan. Selanjutnya, kondisi diuji. Sendainya
kondisi bernilai benar, maka pernyataan dijalankan lagi, kemudian kondisi diperiksa
kembali, dan seterusnya. Kalau kondisi bernilai salah pada saat dites, maka pernyataan
tidak dijalankan lagi. Untuk lebih jelasnya dapat dilihat pada Gambar 4.3. Berdasarkan
Gambar 4.3 terlihat bahwa tubuh loop minimal akan dijalankan sekali.
Jobsheet Pemograman Bahasa C
36
pernyataan
Tubuh loop
benar
kondisi
salah
keluar loop
Gambar 3. Diagram alir do-while
Program berikut memberikan contoh pemakaian do-while untuk mengatur
penampilan tulisan "BAHASA C" sebanyak sepuluh kali.
Contoh:
i = 0;
do

puts("BAHASA C");
i++;
} while(i<10);
Pada program di atas, variabel pencacah dipakai untuk menghitung jumlah tulisan yang
sudah ditampilkan pada layar. Selama nilai pencacah kurang dari 10, maka perintah
puts("BAHASA C");
akan dilaksanakan kembali
Penanganan pembacaan tombol pada contoh program pilihan.c yang memakai
while di atas, kalau diimplementasikan dengan memakai do-while adalah sebagai berikut
Jobsheet Pemograman Bahasa C
37
/* File program : pilihan2.c
Untuk membaca tombol Y atau T */
#include <stdio.h>
void main()
{
char pilihan;
int sudah_benar;
printf("Pilihlah Y atau T.\n");
/* program dilanjutkan kalau tombol Y,y,T atau t ditekan */
do
{
pilihan = getchar( ); /* baca tombol */
sudah_benar = (pilihan == 'Y') || (pilihan== 'y')||
(pilihan == 'T') || (pilihan == 't');
} while(! sudah_benar);
/* memberi keterangan tentang pilihan */
switch(pilihan)
{
case 'Y':
case 'y':
puts("\nPilihan anda adalah Y");
break;
case 'T':
case 't':
puts("\nPilihan anda adalah T");
}
}
Contoh eksekusi :
Pilihlah Y atau T
Pilihan anda adalah T
Jobsheet Pemograman Bahasa C
38
Mula-mula tombol dibaca dengan menggunakan getchar() dan kemudian diberikan ke
variabel pilihan. Sesudah itu, variabel sudah_benar akan diisi dengan nilai benar (1) atau
salah (0) tergantung dari nilai pilihan. Kalau pilihan berisi salah satu diantara ‘Y’,‘y’, ‘T’
atau ‘t’, maka sudah berisi salah satu diantara ‘Y’, ‘y’, ‘T’ atau ‘t’, maka sudah_benar
akan berisi benar. Nilai pada vaiabel sudah_benar ini selanjutnya dijadikan sebagai
kondisi do-while. Pengulangan terhadap pembacaan tombol akan dilakukan kembali
selama sudah_benar benilai salah.
4 Pernyataan break.
Pernyataan break sesungguhnya telah diperkenalkan pada pernyataan switch.
Pernyataan ini berfungsi untuk keluar dari loop for, do-while dan while. Sedangkan pada
switch yaitu untuk menuju ke akhir (keluar dari) struktur switch. Sebagai contoh dapat
dilihat pada gambar 4.4. Kalau pernyataan break dijalankan maka eksekusi akan
dilanjutkan ke pernyataan yang terletak sesudah akhir tubuh loop for.
for ( ; ; )

.
.
if ( …… )
break;
.
.
}
/* akhir tubuh loop for */
puts(“\nSelesai…”);
Gambar 4. Ilustrasi pengaruh break
Pada contoh potongan program berikut, pembacaan dan penampilan terhadap
tombol yang ditekan akan berakhir kalau tombol yang ditekan adalah ENTER (‘\n’).
Pernyataan yang digunakan untuk keperluan ini :
if (kar == ‘\n’)
break;
Jobsheet Pemograman Bahasa C
/* keluar dari loop for */
39
Yang menyatakan “Jika tombol yang ditekan berupa ENTER, maka keluarlah dari loop
for”. Untuk lebih jelasnya, perhatikan program di bawah ini.
/* File program : tamat.c
Pemakaian break untuk keluar dari looping */
#include <stdio.h>
main()
{
char kar;
printf("Ketik sembarang kalimat");
printf(" dan akhiri dengan ENTER\n\n");
for ( ; ; )
{
kar = getchar();
if(kar == '\n')
break;
}
printf("Selesai\n");
}
Contoh eksekusi :
Ketik sembarang kalimat dan akhiri dengan ENTER :
Menulis apa saja
Selesai
Jika pernyataan break berada dalam loop yang bertingkat (nested loop), maka pernyataan
break hanya akan membuat proses keluar dari loop yang bersangkutan (tempat break
dituliskan), bukan keluar dari semua loop.
5 Pernyataan Continue
Pernyataan continue digunakan untuk mengarahkan eksekusi ke iterasi (proses)
berikutnya pada loop yang sama. Pada do-while dan while, pernyataan continue
menyebabkan eksekusi menuju ke kondisi pengujian pengulangan, seperti yang dilukiskan
pada Gambar 4.5.
Pada loop for, pernyataan contunue menyebabkan bagian penaik
variabel pengendali loop dikerjakan (ungkapan3 pada struktur for) dan kondisi untuk
keluar dari loop for (ungkapan2 pada struktur for) diuji kembali.
Jobsheet Pemograman Bahasa C
40
Program ini digunakan untuk memasukkan data harus diulangi dan hal ini
dikendalikan dengan continue. Untuk mengakhiri pemasukan data, data yang dimasukkan
harus bernilai kurang dari 0. Perlu diketahui kondisi bernilai 1.
while (kondisi) do

continue;


continue;
 while (kondisi)
Gambar.5 Pengaruh continue pada while dan do-while
Menyatakan bahwa kondisi selalu dianggap benar. Untuk keluar dari loop, pernyataan yang
digunakan berupa break.
Pengaruh continue pada loop for diperlihatkan pada dibawah ini. Program ini
dipakai untuk menampilkan bilangan ganjil yang terletak antara 7 sampai dengan 25,
kecuali 15.
/* File program : ganjil.c
menampilkan bilangan ganjil antara 7 - 25 kecuali 15 */
#include <stdio.h>
main()
{
int x;
for (x = 7; x <= 25; x += 2)
{
if
(x == 15)
continue;
printf("%4d", x);
}
printf("\n");
}
Jobsheet Pemograman Bahasa C
41
Contoh eksekusi :
7
9 11 13 17 19 21 23 25
Pada program di atas, untuk menghindari agar nilai 15 tidak ditampilkan ke layar,
pernyataan yang digunakan berupa
if ( x == 15)
continue;
Artinya, jika kondisi x == 15 bernilai benar, pernyataan continue menyebabkan
pernyataan sisanya yaitu
printf(“%d”,x);
diabaikan dan eksekusi diarahkan kepada ungkapan :
x += 2
dan kemudian menguji kondisi :
x <= 25
Pada program di atas, pernyataan :
for (x = 7; x <= 25; x += 2)
{
if
(x == 15)
continue;
printf("%4d", x);
}
dapat ditulis dalam bentuk lain sebagai berikut :
for (x = 7; x <= 25; x += 2)
if (x != 15)
printf(“%4d”, x);
Jobsheet Pemograman Bahasa C
42
6 Loop Di Dalam Loop
Dalam suatu loop bisa terkandung loop yang lain. Loop yang terletak di dalam loop
biasa disebut dengan loop di dalam loop (nested loop). Salah satu contoh nested loop
misalnya pada permasalahan untuk membuat tabel perkalian:
1
2
3
4
5
6
7
8
1
1
2
3
4
5
6
7
8
2
2
4
6
8
10
12
14
16
3
3
6
9
12
15
18
21
24
4
4
8
12
16
20
24
28
32
5
5
10
15
20
25
30
35
40
6
6
12
18
24
30
36
42
48
7
7
14
21
28
35
42
49
56
8
8
16
24
32
40
48
56
64
Implementasi dalam program selengkapnya adalah sebagai berikut :
/* File program : tblkali.c
Loop for bersarang untuk membuat tabel perkalian */
#include <stdio.h>
#define MAKS 8
main()
{
int baris, kolom, hasil_kali;
for (baris = 1; baris <= MAKS; baris++)
{
for (kolom = 1; kolom <= MAKS; kolom++)
{
hasil_kali = baris * kolom;
printf ("%2d", hasil_kali);
}
printf("\n");
/* pindah baris */
}
}
Jobsheet Pemograman Bahasa C
43
Bagian yang terletak dalam bingkai di depan dapat dapat diperoleh melalui
for (baris = 1; baris <= MAKS; baris++)

hasil_kali = baris * kolom;
printf (“%2d”, hasil_kali);

dengan MAKS didefinisikan bernilai 8. Bagian loop yang terdalam :
for (kolom
= 1; kolom <= MAKS; kolom++)

hasil_kali = baris * kolom;
printf (“%2d”, hasil_kali);

digunakan untuk mencetak suatu deret hasil perkalian dalam satu baris. Untuk berpindah
ke baris berikutnya, pernyataan yang digunakan yaitu
printf(“\n”);
Adapun pencetakan untuk semua baris dikendalikan melalui
for (baris = 1; baris <= MAKS; baris++)
Pernyataan di atas mempunyai arti “dari baris ke-1 sampai dengan baris ke-MAKS”.
7. Pernyataan goto
Pernyataan goto merupakan intruksi untuk mengarahkan eksekusi ke pernyataan
yang diawali dengan suatu label. Label sendiri berupa suatu pengenal (identifier) yang
diikuti dengan tanda titik dua (:)
Contoh pemakaian goto ditujukan pada program dibawah ini:
Pernyataan
goto cetak;
Mengisyaratkan agar eksekusi dilanjutkan ke pernyataan yang diawali dengan label
cetak:
Jobsheet Pemograman Bahasa C
44
Pernyataan
if (++pencacah <= 10)
goto cetak;
Mempunyai arti :
 Naikkan nilai pencacah sebesar 1
 Kemudian, jika pencacah kurang dari atau sama dengan 10 maka eksekusi menuju ke
label cetak.
Penerapan goto biasanya dilakukan pada loop di dalam loop (nested loop), dengan
tujuan memudahkan untuk keluar dari loop terdalam menuju ke pernyataan yang terletak di
luar loop terluar.
8. Menggunakan exit ( ) Untuk Menghentikan Eksekusi Program.
Suatu eksekusi program dapat dihentikan (secara normal) melalui pemanggilan
fungsi exit( ). Hal ini biasa dilakukan, jika di dalam suatu eksekusi terdapat suatu kondisi
yang tak dikehendaki. Prototipe dari fungsi exit() didefinisikan pada file stdlib.h, yang
memiliki deklarasi sebagai berikut :
void exit(int status);
Menurut kebiasaan, nilai nol diberikan pada argumen exit() untuk menunjukkan
penghentian program yang normal. Sedangkan untuk menunjukkan kesalahan, nilai yang
diberikan pada argumen fungsi diisi dengan nilai bukan-nol. Pada contoh program berikut,
eksekusi program akan dihentikan hanya jika tombol ‘X’ ditekan
/* File program : keluar.c
Pemakaian exit() untuk menghentikan eksekusi program */
#include <stdio.h>
#include <stdlib.h>
main()
{
char kar;
printf("Tekanlah X untuk menghentikan program.\n");
for ( ; ;)
{
Jobsheet Pemograman Bahasa C
45
while ((kar = getchar()) == 'X')
exit(0);
}
}
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file program
yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama file
sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan untuk
mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Menghitung jumlah delapan triangular tanpa pernyataan for()
/* File program :triangular1.c */
#include <stdio.h>
main()
{
Jobsheet Pemograman Bahasa C
46
int jumlah = 0;
jumlah = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8;
printf("Jumlah delapan triangular adalah %d\n",jumlah);
}
2. Pemakaian for untuk membentuk deret naik.
/* File program : for1.c */
#include <stdio.h>
main()
{
int bilangan;
for(bilangan = 20; bilangan <= 100; bilangan += 10)
printf("%d\n", bilangan);
}
3. Pemakaian for untuk membentuk deret turun
/* File program : for2.c */
#include <stdio.h>
main()
{
int bilangan;
for (bilangan = 60; bilangan >= 10; bilangan -= 10)
printf("%d\n", bilangan);
}
4. Menghitung jumlah 200 triangular menggunakan for().
/* File program : triangular2.c */
#include <stdio.h>
main()
{
int n, jumlah = 0;
for (n=1; n<=200; n++)
jumlah = jumlah + n;
printf("Jumlah 200 triangular adalah %d\n", jumlah);
}
5. Membuat tabel dari jumlah triangular yang diinputkan
Jobsheet Pemograman Bahasa C
47
/* File program : triangular3.c */
#include <stdio.h>
main()
{
int n, bil, jumlah = 0;
printf("Masukkan bilangan triangular : ");
scanf("%d", &bil);
printf("\nTABEL PENJUMLAHAN TRIANGULAR\n\n");
printf("%3s%10s\n\n","n","Jumlah");
for (n=1; n<=bil; n++)
{
jumlah = jumlah + n;
printf("%3d %7d\n", n, jumlah);
}
}
6. Menghitung jumlah kata dan karakter dalam suatu kalimat
/* File program : jumkar.c */
#include <stdio.h>
main()
{
char kar;
int jumkar = 0, jumspasi = 0;
puts("Masukkan sebuah kalimat dan akhiri dengan ENTER.");
puts("Saya akan menghitung jumlah karakter ");
puts("pada kalimat tersebut.\n");
while((kar = getchar()) != '\n')
{
jumkar++;
if (kar == ' ') jumspasi++;
}
printf("\nJumlah karakter
printf("\nJumlah SPASI
= %d", jumkar);
= %d\n\n", jumspasi);
}
7. Membalik angka menggunakan pernyataan while().
Jobsheet Pemograman Bahasa C
48
/* File program : loop9.c */
#include <stdio.h>
main()
{
int bil, digit_kanan;
printf("Masukkan bilangan yang mau dibalik : ");
scanf("%d", &bil);
printf("Hasil pembalikannya = ");
while(bil != 0)
{
digit_kanan = bil % 10;
printf("%d", digit_kanan);
bil = bil / 10;
}
printf("\n");
}
8.Membaca tombol yang ditekan.
/*File program : pilihan.c */
#include <stdio.h>
main()
{
char pilihan;
int sudah_benar = 0; /* diberi nilai salah lebih dahulu */
printf("Pilihlah Y atau T.\n");
/* program dilanjutkan jika tombol Y,y,T atau t ditekan */
while(!sudah_benar)
{
pilihan = getchar();
/* baca tombol */
sudah_benar = (pilihan == 'Y') || (pilihan == 'y')||
(pilihan == 'T') || (pilihan == 't');
}
/* memberi keterangan tentang pilihan */
switch(pilihan)
{
case 'Y':
case 'y':
puts("\nPilihan anda adalah Y");
break;
case 'T':
case 't':
Jobsheet Pemograman Bahasa C
49
puts("\nPilihan anda adalah T");
}
}
9. Pemakaian break untuk keluar dari looping
/* File program : tamat.c */
#include <stdio.h>
main()
{
char kar;
printf("Ketik sembarang kalimat");
printf(" dan akhiri dengan ENTER\n\n");
for ( ; ; )
{
kar = getchar();
if(kar == '\n')
break;
}
printf("Selesai\n");
}
}
}
10. Loop for bersarang untuk membuat tabel perkalian
/* File program : tblkali.c */
#include <stdio.h>
}
#define MAKS 8
main()
{
int baris, kolom, hasil_kali;
for (baris = 1; baris <= MAKS; baris++)
{
for (kolom = 1; kolom <= MAKS; kolom++)
{
hasil_kali = baris * kolom;
printf ("%2d", hasil_kali);
}
printf("\n");
/* pindah baris */
}
}
11. Menampilkan bilangan ganjil antara 7 - 25 kecuali 15 menggunakan continue.
Jobsheet Pemograman Bahasa C
50
/* File program : ganjil.c */
#include <stdio.h>
main()
{
int x;
for (x = 7; x <= 25; x += 2)
{
if (x == 15)
continue;
printf("%4d", x);
}
printf("\n");
}
12. Pemakaian exit() untuk menghentikan eksekusi program.
/* File program : keluar.c */
#include <stdio.h>
#include <stdlib.h>
main()
{
char kar;
printf("Tekanlah X untuk menghentikan program.\n");
for ( ; ;)
{
while ((kar = getchar()) == 'X')
exit(0);
}
}
C. SOAL
1.} Buatlah program untuk menampilkan semua bilangan genap yang terletak antara 20
sampai dengan 120, dengan menggunakan for.
2. Buatlah program untuk menghitung jumlah angka dari suatu bilangan.
Contohnya : Jumlah angka dari bilangan 3255 = 3 + 2 + 5 + 5 = 15
Jumlah angka dari bilangan 4589 = 4 + 5 + 8 + 9 = 26
Jobsheet Pemograman Bahasa C
51
dan sebagainya.
3. Buatlah program untuk menerima daftar nilai mahasiswa sbb :
Input : - Jumlah data (n)
- Nilai ke-1 s/d Nilai ke-n
Output : - Nilai minimal
- Nilai maksimal
- Nilai rata-rata (rata-rata = nilai total / jumlah data)
(Petunjuk : Gunakan loop for dan seleksi kondisi dengan if)
4. Gunakan loop for untuk mendapatkan tampilan sbb :
1
22
333
4444
55555
5. Gunakan loop while untuk menampilkan bilangan integer antara 1 sampai dengan 10 di
layar sbb : 123456768910
Jobsheet Pemograman Bahasa C
52
PRAKTIKUM V
FUNGSI
A. Tujuan Instruksional Khusus
1. Memecah program dalam fungsi fungsi yang sederhana.
2. Menjelaskan tentang pemrograman terstruktur.
3. Mengetahui perbedaan antara variabel lokal, eksternal, statis dan register
B. Dasar Teori
Fungsi adalah suatu bagian dari program yang dirancang untuk melaksanakan tugas
tertentu dan letaknya dipisahkan dari program yang menggunakannya. Elemen utama dari
program bahasa C berupa fungsi-fungsi, dalam hal ini program dari bahasa C dibentuk dari
kumpulan fungsi pustaka (standar) dan fungsi yang dibuat sendiri oleh pemrogram. Fungsi
banyak digunakan pada program C dengan tujuan :
a. Program menjadi terstruktur, sehingga mudah dipahami dan mudah dikembangkan.
Dengan memisahkan langkah-langkah detail ke satu atau lebih fungsi-fungsi, maka
fungsi utama (main()) menjadi lebih pendek, jelas dan mudah dimengerti.
b. dapat mengurangi pengulangan (duplikasi) kode. Langkah-langkah program yang
sama dan dipakai berulang-ulang di program dapat dituliskan sekali saja secara terpisah
dalam bentuk fungsi-fungsi. Selanjutnya bagian program yang membutuhkan langkahlangkah ini tidak perlu selalu menuliskannya, tetapi cukup memanggil fungsi-fungsi
tersebut.
1.
Dasar Fungsi
Fungsi standar C yang mengemban tugas khusus contohnya adalah ;

printf() , yaitu untuk menampilkan informasi atau data ke layar.

scanf() , yaitu untuk membaca kode tombol yang diinputkan.
Pada umumnya fungsi memerlukan nilai masukan atau parameter yang disebut
sebagai argumen. Nilai masukan ini akan diolah oleh fungsi. Hasil akhir fungsi berupa
sebuah nilai (disebut sebagai return value atau nilai keluaran fungsi). Oleh karena itu
fungsi sering digambarkan sebagai "kotak gelap" seperti ditunjukkan pada gambar di
bawah ini.
Jobsheet Pemograman Bahasa C
53
Parameter
Keluaran
Fungsi
FUNGSI
Gambar 1 Fungsi sebagai sebuah kotak gelap
Penggambaran sebagai kotak gelap di antaranya menjelaskan bahwa bagian dalam
fungsi bersifat pribadi bagi fungsi. Tak ada suatu pernyataan di luar fungsi yang bisa
mengakses bagian dalam fungsi, selain melalui parameter (atau variabel eksternal yang
akan dibahas belakangan). Misalnya melakukan goto dari pernyataan di luar fungsi ke
pernyataan dalam fungsi adalah tidak diperkenankan.
Bentuk umum dari definisi sebuah fungsi adalah sebagai berikut ;
tipe-keluaran-fungsi nama-fungsi (deklarasi argumen)
{
tubuh fungsi
}
Keterangan :

tipe-keluaran-fungsi, dapat berupa salah satu tipe data C, misalnya char atau int .
Kalau penentu tipe tidak disebutkan maka dianggap bertipe int (secara default).

tubuh fungsi berisi deklarasi variabel (kalau ada) dan statemen-statemen yang akan
melakukan tugas yang akan diberikan kepada fungsi yang bersangkutan. Tubuh fungsi
ini ditulis di dalam tanda kurung kurawal buka dan kurung kurawal tutup.
Sebuah fungsi yang sederhana bisa saja tidak mengandung parameter sama sekali dan
tentu saja untuk keadaan ini deklarasi parameter juga tidak ada. Contoh ;
inisialisasi()
{
return(0);
}
Pada fungsi di atas :

tipe keluaran fungsi tidak disebutkan, berarti keluaran fungsi ber tipe int.

inisialisasi adalah nama fungsi
Jobsheet Pemograman Bahasa C
54

Tanda () sesudah nama fungsi menyatakan bahwa fungsi tak memiliki parameter.

Tanda { dan } adalah awal dan akhir fungsi

return(0) merupakan sebuah pernyataan dalam tubuh fungsi.
inisialisasi()
{
return(0);
}
Nama fungsi
Sepasang tanda kurung, tanpa argumen
Tak ada tanda titik koma
Awal fungsi
Tubuh fungsi
Akhir fungsi
Gambar 2 Penjelasan definisi sebuah fungsi
2 Memberikan Nilai Keluaran Fungsi
Suatu fungsi dibuat untuk maksud menyelesaikan tugas tertentu. Suatu fungsi
dapat hanya melakukan suatu tugas saja tanpa memberikan suatu hasil keluaran atau
melakukan suatu tugas dan kemudian memberikan hasil keluaran. Fungsi yang hanya
melakukan suatu tugas saja tanpa memberikan hasil keluaran misalnya adalah fungsi untuk
menampilkan hasil di layar.
Dalam tubuh fungsi, pernyataan yang digunakan untuk memberikan nilai keluaran
fungsi berupa return. Sebagai contoh, pada fungsi inisialisasi() di atas terdapat pernyataan
return(0);
merupakan pernyataan untuk memberikan nilai keluaran fungsi berupa nol.
Selengkapnya perhatikan program di bawah ini
/* File program : inisial.c
Contoh pembuatan fungsi */
int inisialisasi();
#include <stdio.h>
void main()
{
int x, y;
x = inisialisasi();
printf("x = %d\n", x);
y = inisialisasi();
printf("y = %d\n", y);
}
Jobsheet Pemograman Bahasa C
55
int inisialisasi()
{
return(0);
}
Contoh eksekusi :
x = 0
y = 0
Program di atas sekaligus menjelaskan bahwa suatu fungsi cukup didefinisikan satu kali
tetapi bisa digunakan beberapa kali. Pada keadaan semacam ini seandainya tubuh fungsi
mengandung banyak pernyataan, maka pemakaian fungsi dapat menghindari duplikasi
kode dan tentu saja menghemat penulisan program maupun kode dalam memori.
int inisialisasi()
{
return(0);
}
main()
{
int x, y;
x = inisialisasi();
printf("x = %d\n", x);
y = inisialisasi();
printf("y = %d\n", y);
}
definisi fungsi
pemanggilan fungsi
Gambar 3 Proses pemanggilan fungsi
Misalnya pada saat pernyataan
x = inisialisasi();
dijalankan, mula-mula eksekusi akan diarahkan ke fungsi inisialisasi(), selanjutnya
suatu nilai keluaran (hasil fungsi) akhir fungsi diberikan ke x. Proses yang serupa,
dilakukan untuk pernyataan
y = inisialisasi();
Bagi suatu fungsi, jika suatu pernyataan return dieksekusi, maka eksekusi terhadap
fungsi akan berakhir dan nilai pada parameter return akan menjadi keluaran fungsi. Untuk
fungsi yang tidak memiliki pernyataan return, tanda } pada bagian akhir fungsi akan
menyatakan akhir eksekusi fungsi.
Jobsheet Pemograman Bahasa C
56
Di bawah ini diberikan contoh sebuah fungsi yang mengandung dua buah
pernyataan return. Fungsi digunakan untuk memperoleh nilai minimum di antara 2 buah
nilai yang menjadi parameternya.
int minimum(int x, int y)
{
if (x < y)
return(x);
else
return(y);
}
Pada fungsi di atas terdapat dua buah parameter berupa x dan y. Oleh karena itu fungsi
juga mengandung bagian untuk mendeklarasikan parameter, yang menyatakan x dan y
bertipe int. Adapun penentuan nilai keluaran fungsi dilakukan pada tubuh fungsi, berupa
pernyataan
if (x < y)
return(x);
else
return(y);
yang menyatakan :

jika x < y maka nilai keluaran fungsi adalah sebesar nilai x.

untuk keadaan lainnya (x >= y) maka keluaran fungsi adalah sebesar y.
Selengkapnya perhatikan program di bawah ini.
/* File program : minimum1.c */
#include <stdio.h>
int minimum (int, int);
main()
{
int a, b, kecil;
printf("Masukkan nilai a : ");
scanf("%d", &a);
printf("Masukkan nilai b : ");
scanf("%d", &b);
kecil = minimum(a, b);
printf("\nBilangan terkecil antara %d dan %d adalah
Jobsheet Pemograman Bahasa C
57
%d\n\n", a, b, kecil);
}
int minimum(int x, int y)
{
if (x < y)
return(x);
else
return(y);
}
Contoh eksekusi :
Masukkan nilai a = 4
Masukkan nilai b = 2
Bilangan terkecil antara 4 dan 2 adalah 2
3. Fungsi Dengan Nilai Keluaran Bertipe Bukan Integer
Untuk fungsi yang mempunyai keluaran bertipe bukan integer, maka fungsi
haruslah didefiniskan dengan diawali tipe keluaran fungsinya (ditulis di depan nama
fungsi). Sebagai contoh untuk menghasilkan nilai terkecil di antara dua buah nilai real,
maka definisinya berupa :
float minimum(float x, float y)
{
if (x < y)
return(x);
else
return(y);
}
Perhatikan, di depan nama minimum diberikan tipe keluaran fungsi berupa float. Seluruh
parameter sendiri juga didefinisikan dengan tipe float.
Selengkapnya adalah sebagai
berikut :
/* File program : minimum2.c */
#include <stdio.h>
float minimum (float, float);
void main()
{
float a, b, kecil;
Jobsheet Pemograman Bahasa C
58
printf("Masukkan nilai a : ");
scanf("%f", &a);
printf("Masukkan nilai b : ");
scanf("%f", &b);
kecil = minimum(a, b);
printf("\nBilangan terkecil antara %g dan %g adalah
%g\n\n", a, b, kecil);
}
float minimum(float x, float y)
{
if (x < y)
return(x);
else
return(y);
}
Contoh eksekusi :
Masukkan nilai a = 5.5
Masukkan nilai b = 6.23
Bilangan terkecil antara 5 dan 6.23 adalah 5.5
Khusus untuk fungsi yang dirancang tanpa memberikan nilai keluaran (melainkan
hanya menjalankan suatu tugas khusus) biasa didefinisikan dengan diawali kata kunci void
(di depan nama fungsi). Sebagai contoh perhatikan program di bawah ini.
/* File program : void.c
Contoh fungsi tanpa nilai keluaran (pamakaian void) */
#include <stdio.h>
void info_program();
/* deklarasi fungsi */
main()
{
info_program();
/* pemanggilan fungsi */
}
void info_program()
/* definisi fungsi */
{
puts("==================================");
puts("Progam dibuat oleh Salahuddin, SST");
puts("Tanggal : 1 januari 2009
");
puts("
");
puts("Selamat menggunakannya.......
");
puts("==================================");
}
Jobsheet Pemograman Bahasa C
59
Contoh eksekusi :
==================================
Progam dibuat oleh Salahuddin, SST
Tanggal : 1 januari 2009
Selamat menggunakannya.......
==================================
a. Prototipe Fungsi
Prototipe fungsi digunakan untuk menjelaskan kepada kompiler mengenai :

tipe keluaran fungsi

jumlah parameter

tipe dari masing-masing parameter.
Bagi kompiler, informasi dalam prototipe akan dipakai untuk memeriksa keabsahan
(validitas) parameter dalam pemanggilan fungsi. Salah satu keuntungannya adalah,
kompiler akan melakukan konversi seandainya antara tipe parameter dalam fungsi dan
parameter saat pemanggilan fungsi tidak sama, atau akan menunjukan kesalahan bila
jumlah parameter dalam definisi dan saat pemanggilan berbeda.
Contoh prototipe fungsi;
float jumlah (float x, float y);
atau
float jumlah (float, float);
Penjelasannya adalah sbb :
Nama fungsi
float jumlah (float, float);
Diakhiri dengan titik koma
Tipe parameter kedua
Tipe parameter pertama
Tipe keluaran fungsi
Gambar 4 Prototipe fungsi
Jobsheet Pemograman Bahasa C
60
Perhatikan contoh program di bawah ini.
/* File program : jumlah.c
contoh pemakaian prototipe fungsi */
#include <stdio.h>
float jumlah(float, float);
/* prototipe fungsi */
main()
{
float a, b,c;
printf("Masukkan nilai a : ");
scanf("%f", &a);
printf("Masukkan nilai b : ");
scanf("%f", &b);
c = jumlah(a, b);
printf("\nHasil penjumlahan a + b = %g\n", c);
}
float jumlah(float x, float y)
{
return(x + y);
}
/* definisi fungsi */
Contoh eksekusi :
Masukkan nilai a : 4.5
Masukkan nilai b : 7.65
Hasil penjumlahan a + b = 12.15
Untuk fungsi yang tidak memiliki argumen (contoh program void.c), maka deklarasinya
adalah
void info_program(void);
menyatakan bahwa info_program()
tidak memiliki parameter
Catatan :

Untuk fungsi-fungsi pustaka, prototipe dari fungsi-fungsi berada di file-file judulnya
(header file). Misalnya fungsi pustaka printf() dan scanf() prototipenya berada pada
file dengan nama stdio.h
Jobsheet Pemograman Bahasa C
61

Untuk fungsi pustaka pencantuman pada prototipe fungsi dapat dilakukan dengan
menggunakan preprocessor directive #include.
5. Parameter formal dan Parameter Aktual
Parameter formal adalah variabel yang ada pada daftar parameter dalam definisi
fungsi. Pada contoh program di atas misalnya, maka dalam fungsi jumlah() variabel x dan
y dinamakan sebagai parameter formal. Adapun parameter aktual adalah parameter (tidak
selalu berupa variabel) yang dipakai dalam pemanggilan fungsi.
main()
{
...
c = jumlah(a, b);
...
}
float jumlah(float x, float y)
{
return(x + y);
}
parameter
formal
parameter
aktual
Gambar 5 Paramater formal dan parameter aktual
Pada pernyataan :
x = jumlah(a, b);
y = jumlah(20.1, 45.6);
a dan b merupakan parameter aktual dari fungsi jumlah() dalam hal ini parameter berupa
variabel. Demikian juga 20.1 dan 45.6 adalah parameter aktual, dalam hal ini berupa
konstanta. Bahkan bisa juga parameter aktual berupa ungkapan yang melibatkan operator,
misalnya :
printf("%g\n", jumlah(2+3, 3+6));
ungkapan
6. Cara melewatkan Parameter
Ada dua cara untuk melewatkan parameter kedalam fungsi, yaitu berupa ;

Pemanggilan dengan nilai (call by value)

Pemanggilan dengan referensi (call by reference)
Jobsheet Pemograman Bahasa C
62
Pemanggilan dengan nilai merupakan cara yang dipakai untuk seluruh fungsi
buatan yang telah dibahas didepan. Pada pemanggilan dengan nilai, nilai dari parameter
aktual akan disalin ke parameter formal. Dengan cara ini nilai parameter aktual tidak bisa
dirubah sekalipun nilai parameter formal berubah. Untuk lebih jelasnya lihat pada fungsi
tukar() pada contoh berikut ini.;
/* File program : tukar1.c
Untuk melihat pengaruh pemanggilan nilai pada fungsi untuk
penukaran dua data */
#include <stdio.h>
void tukar (int, int);
void main()
{
int a,b;
a = 88;
b = 77;
printf("Nilai sebelum pemanggilan fungsi\n");
printf("a = %d
b = %d\n", a, b);
tukar(a,b);
printf("\nNilai setelah pemanggilan fungsi\n");
printf("a = %d
b = %d\n", a, b);
}
void tukar(int x, int y)
{
int z;
z = x;
x = y;
y = z;
printf("\nNilai di akhir fungsi tukar()\n");
printf("x = %d
y = %d\n", x, y);
}
Contoh eksekusi :
Nilai sebelum pemanggilan fungsi
a = 88
b = 77
Jobsheet Pemograman Bahasa C
63
Nilai di akhir fungsi tukar()
x = 77
y = 88
Nilai setelah pemanggilan fungsi
a = 88
b = 77
Tampak bahwa sekeluarnya dari pemanggilan fungsi tukar(), variabel a dan b (yang
dilewatkan ke fungsi tukar() tidak berubah, walaupun pada fungsi tukar() telah terjadi
penukaran antara parameter x dan y . Mengapa hal ini bisa terjadi ? Sebab x hanyalah
salinan dari a dan y adalah salinan dari b (Lihat gambar 5.6 di bawah ini). Pada saat
pemanggilan fungsi, maka :

x bernilai 88 (nilai a)

y bernilai 77 (nilai b)
Sesudah pernyataan-pernyataan berikut dijalankan, maka :
z = x;
x = y;
y = z;
x akan bernilai 77 dan y bernilai 88.
x
y
z
x
y
z
88
77
?
88
77
88
mula-mula
sesudah : z = x
x
y
z
x
y
z
77
77
88
77
88
88
sesudah : x = y
sesudah : y = z
Gambar 6 Proses penukaran nilai
Gambar 5.6 menjelaskan bahwa a dan b tidak berubah. Yang berubah hanyalah parameter
x dan y.
Pemanggilan dengan referensi (call by reference) merupakan upaya untuk
melewatkan alamat dari suatu variabel ke dalam fungsi. Cara ini dapat dipakai untuk
mengubah isi suatu variabel di luar fungsi dengan pelaksanaan pengubahan dilakukan di
Jobsheet Pemograman Bahasa C
64
dalam fungsi. Sebagai contoh perhatikan program tukar2.c yang merupakan modifikasi
dari tukar1.c. Perubahan yang pertama terletak dalam definisi fungsi, yang kini berupa
void tukar(int *px, int *py)
{
int z;
z = *px;
*px = *py;
*py = z;
printf("\nNilai di akhir fungsi tukar()\n");
printf("x = %d
y = %d\n", *px, *py);
}
Adapun perubahan dalam parameter aktualnya menjadi :
tukar(&a,&b);
/* alamat a dan alamat b */
Dalam deklarasi parameter
int *px, int *py
menyatakan bahwa px dan py adalah suatu variabel pointer. Yang dimaksudkan sebagai
variabel pointer adalah suatu variabel yang menunjuk ke variabel lain. Lebih jelasnya,
variabel pointer berisi alamat dari variabel lain.
Adapun pada pemanggilan fungsi, &a dan &b masing-masing berarti "alamat a"
dan "alamat b". Dengan pemanggilan seperti ini, hubungan antara variabel pointer px dan
py dengan variabel a dan b adalah seperti ditunjukkan pada gambar 5.7. Dalam hal ini, px
dikatakan menunjuk variabel a dan py menunjuk variabel b.
px
py
alamat a
alamat b
a
b
Gambar 7
Variabel pointer px menunjuk variabel a dan variabel pointer py menunjuk variabel b
Jobsheet Pemograman Bahasa C
65
/* File program : tukar2.c
Untuk melihat pengaruh pemanggilan nilai pada fungsi untuk
penukaran dua data */
#include <stdio.h>
void tukar (int *px, int *py);
/* prototype fungsi */
void main()
{
int a,b;
a = 88;
b = 77;
printf("Nilai sebelum pemanggilan fungsi\n");
printf("a = %d
b = %d\n", a, b);
tukar(&a,&b);
/* alamat a dan alamat b */
printf("\nNilai setelah pemanggilan fungsi\n");
printf("a = %d
b = %d\n", a, b);
}
void tukar(int *px, int *py)
{
int z;
z = *px;
*px = *py;
*py = z;
printf("\nNilai di akhir fungsi tukar()\n");
printf("x = %d
y = %d\n", *px, *py);
}
Contoh eksekusi :
Nilai sebelum pemanggilan fungsi
a = 88
b = 77
Nilai di akhir fungsi tukar()
x = 77
y = 88
Nilai setelah pemanggilan fungsi
a = 77
b = 88
Jobsheet Pemograman Bahasa C
66
Setelah px menunjuk a dan py menunjuk b, proses penukaran isi a dan b dilakukan dengan
cara sebagai berikut :
z = *px;
*px = *py;
*py = z;
/* 1 */
/* 2 */
/* 3 */
Pertama variabel z diisi dengan nilai yang ditunjuk oleh px. Kedua, yang ditunjuk oleh px
diisi dengan yang ditunjuk oleh py (berarti a diisi dengan b). Ketiga, yang ditunjuk oleh
py diberi nilai z. Dengan melalui tiga pernyataan di atas, nilai a dab b dapat diubah di
dalam fungsi.
Catatan : Pembahasan lebih lanjut mengenai pointer dapat dilihat pada bab VIII.
7.
Penggolongan Variabel berdasarkan kelas Penyimpanan
Suatu variabel, di samping dapat digolongkan berdasarkan jenis/tipe data juga dapat
diklasifikasikan berdasarkan kelas penyimpanan (storage class).
Penggolongan
berdasarkan kelas penyimpanan berupa :

variabel lokal

variabel eksternal

variabel statis

variabel register
7.1
Variabel Lokal
Variabel lokal adalah variabel yang dideklarasikan dalam fungsi, dengan sifat :

secara otomatis diciptakan ketika fungsi dipanggil dan akan sirna (lenyap) ketika
eksekusi terhadap fungsi berakhir.

Hanya dikenal oleh fungsi tempat variabel tersebut dideklarasikan

Tidak ada inisialisasi secara otomatis (saat variabel diciptakan, nilainya tak menentu).
Dalam banyak literatur, variabel lokal disebut juga dengan variabel otomatis.
Variabel yang termasuk dalam golongan ini bisa dideklarasikan dengan menambahkan kata
kuci auto di depan tipe-data variabel. Kata kunci ini bersifat opsional, biasanya disertakan
sebagai penjelas saja. Contoh variabel lokal ditunjukkan pada gambar 8.
Jobsheet Pemograman Bahasa C
67
void
fung_x(void)
{
int x;
x adalah variabel lokal bagi
fungsi fung_x()
.
.
Gambar 8 Variabel lokal
.
Pada fung_x(), deklarasi
}
int x;
dapat ditulis menjadi
auto int x;
Penerapan variabel lokal yaitu bila variabel hanya dipakai oleh suatu fungsi (tidak
dimaksudkan untuk dipakai oleh fungsi yang lain). Pada contoh berikut, antara variabel i
dalam fungsi main() dan fung_1() tidak ada kaitannya, sebab masing-masing merupakan
variabel lokal.
/* File program : lokal.c */
#include <stdio.h>
void fung_1(void);
main()
{
int i = 20;
fung_1();
printf("nilai i di dalam main()
= %d\n", i);
}
void fung_1(void)
{
Jobsheet Pemograman Bahasa C
68
int i = 11;
printf("nilai i di dalam fung_1() = %d\n", i);
}
Contoh eksekusi :
nilai i di dalam fung_1() = 11
nilai i di dalam main()
= 20
7.2.Variabel Eksternal
Variabel eksternal merupakan variabel yang dideklarasikan di luar fungsi, dengan sifat :

dapat diakses oleh semua fungsi

kalau tak diberi nilai, secara otomatis diinisialisasi dengan nilai sama dengan nol.
Contoh variabel eksternal ada pda program ekstern1.c yaitu berupa variabel i. Pada
pendeklarasian
int i = 273;
menyatakan bahwa i merupakan variabel eksternal dan diberi nilai awal sama denan 273.
Nilai dari variabel i selanjutnya dapat diubah oleh fungsi tambah() maupun main().
Setiap fungsi tambah() dipanggil maka nilai i akan bertambah satu.
/* File program : ekstern1.c
Contoh program dengan variabel eksternal */
#include <stdio.h>
int i = 273;
void tambah(void);
void main()
{
printf("Nilai
i += 7;
printf("Nilai
tambah();
printf("Nilai
tambah();
printf("Nilai
}
Jobsheet Pemograman Bahasa C
/* variabel eksternal */
awal i = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
69
void tambah(void)
{
i++;
}
Contoh eksekusi :
Nilai
Nilai
Nilai
Nilai
awal i
i kini
i kini
i kini
=
=
=
=
273
280
281
282
Pada contoh di atas, terlihat bahwa i hanya dideklarasikan di bagian atas program, dan tak
dideklarasikan lagi dalam fungsi main() maupun tambah(). Oleh karena i merupakan
variabel eksternal maka dapat digunakan oleh kedua fungsi tsb. Namun ada satu hal yang
perlu diketahui, variabel eksternal haruslah dideklarasikan sebelum definisi fungsi yang
akan mempergunakannya.
Untuk memperjelas bahwa suatu variabel dalam fungsi merupakan variabel
eksternal, di dalam fungsi yang menggunakannya dapat mendeklarasikan variabel itu
kembali dengan menambahkan kata kunci extern di depan tipe data variabel. Sebagai
contoh, program ekstern1.c ditulis kembali menjadi seperti pada ekstern2.c.
/* File program : ekstern2.c
Contoh program yang menggunakan
memakai kata kunci extern */
variabel
eksternal
dan
#include <stdio.h>
int i = 273;
/* variabel eksternal */
void tambah(void);
main()
{
extern int i;
printf("Nilai
i += 7;
printf("Nilai
tambah();
printf("Nilai
tambah();
printf("Nilai
/* variabel eksternal */
awal i = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
}
Jobsheet Pemograman Bahasa C
70
void tambah(void)
{
extern int i;
/* variabel eksternal */
i++;
}
Contoh eksekusi :
Nilai
Nilai
Nilai
Nilai
awal i
i kini
i kini
i kini
=
=
=
=
273
280
281
282
Kalau dalam suatu program terdapat suatu variabel eksternal, suatu fungsi bisa saja
menggunakan nama variabel yang sama dengan variabel eksternal, namun diperlakukan
sebagai variabel lokal. Untuk lebih jelasnya perhatikan contoh program di bawah ini.
/* File program : ekstern3.c
Contoh program yang menggunakan variabel
variabel lokal dengan nama yang sama */
eksternal
dan
#include <stdio.h>
int i = 273;
/* variabel eksternal */
void tambah(void);
void main()
{
extern int i;
/* variabel eksternal */
printf("Nilai
i += 7;
printf("Nilai
tambah();
printf("Nilai
tambah();
printf("Nilai
awal i = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
}
void tambah(void)
{
int i;
/* variabel lokal */
i++;
}
Jobsheet Pemograman Bahasa C
71
Contoh eksekusi :
Nilai
Nilai
Nilai
Nilai
awal i
i kini
i kini
i kini
=
=
=
=
273
280
280
280
Pada program di atas, bagi fungsi main() i adalah variabel eksternal. Namun bagi fungsi
tambah(), i merupakan variabel lokal, sebab pada fungsi ini i dideklarasikan tanpa kata
kunci extern. Hal ini terlihat jelas dengan mengamati hasil eksekusi program. Pernyataan:
i++;
Pada fungsi tambah() tidak mempengaruhi nilai i yang ditampilkan pada fungsi main()
(bandingkan dengan hasil eksekusi pada ekstern2.c).
7.3 Variabel Statis
Variabel statis dapat berupa variabel internal (didefinisikan di dalam fungsi)
maupun variabel eksternal. Sifat variabel ini :

Kalau variabel statis bersifat internal, maka variabel hanya dikenal oleh fungsi tempat
variabel dideklarasikan

Kalau variabel statis bersifat eksternal, maka variabel dapat dipergunakan oleh semua
fungsi yang terletak pada file yang sama, tempat variabel statis dideklarasikan

Berbeda dengan variabel lokal, variabel statis tidak akan hilang sekeluarnya dari fungsi
(nilai pada variabel akan tetap diingat).

Inisialisasi akan dilakukan hanya sekali, yaitu saat fungsi dipanggil yang pertama kali.
Kalau tak ada inisialisasi oleh pemrogram secara otomatis akan diberi nilai awal nol
Variabel statis diperoleh dengan menambahkan kata kunci static di depan tipe data
variabel. Sebagai contoh perhatikan program di bawah ini.
/* File program : statis.c
Contoh variabel statis */
#include <stdio.h>
void fung_y(void);
void main()
Jobsheet Pemograman Bahasa C
72
{
int y = 20;
fung_y();
fung_y();
printf("Nilai y dalam main()
= %d\n", y);
}
void fung_y(void)
{
static int y;
y++;
printf("Nilai y dalam fung_y() = %d\n", y);
}
Contoh eksekusi :
Nilai y dalam fung_y() = 1
Nilai y dalam fung_y() = 2
Nilai y dalam main()
= 20
7.4 Variabel Register
Variabel register adalah variabel yang nilainya disimpan dalam register dan bukan
dalam memori RAM. Variabel yang seperti ini hanya bisa diterapkan pada variabel yang
lokal atau parameter formal, yang bertipe char atau int. Variabel register biasa diterapkan
pada variabel yang digunakan sebagai pengendali loop. Tujuannya untuk mempercepat
proses dalam loop. Sebab variabel yang dioperasikan pada register memiliki kecepatan
yang jauh lebih tinggi daripada variabel yang diletakkan pada RAM. Contoh
pemakaiannya bisa dilihat pada program di bawah ini.
/* File program : var_reg.c
Contoh variabel register */
#include <stdio.h>
Jobsheet Pemograman Bahasa C
73
void main()
{
register int i;
/* variabel register */
int jumlah = 0;
for(i = 1; i <= 100; i++)
jumlah = jumlah + i;
printf("1 + 2 + 3 + ... + 100 = %d\n", jumlah);
}
Contoh eksekusi :
1 + 2 + 3 + ... + 100 = 5050
8 Menciptakan Sejumlah Fungsi
Pada C, semua fungsi bersifat sederajat. Suatu fungsi tidak dapat didefinisikan di
dalam fungsi yang lain. Akan tetapi suatu fungsi diperbolehkan memanggil fungsi yang
lain, dan tidak tergantung kepada peletakan definisi fungsi pada program. Komunikasi
antara fungsi dalam C ditunjukkan dalam gambar 5.9. Gambar tersebut menjelaskan kalau
suatu fungsi katakanlah fungsi_a() memanggil fungsi_b(), maka bisa saja fungsi_b()
memanggil fungsi_a(). Contoh program yang melibatkan fungsi yang memanggil fungsi
yang lain ada pada program kom_fung.c, yaitu fungsi_1() dipanggil dalam main(),
sedangkan fungsi_2() dipanggil oleh fungsi_1().
fungsi_b()
fungsi_a()
fungsi_c()
Gambar 9 Komunikasi antar fungsi dalam C
Jobsheet Pemograman Bahasa C
74
/* File program : kom_fung.c
contoh fungsi yang memanggil fungsi yang lain */
#include <stdio.h>
void fungsi_1(void);
void fungsi_2(void);
void main()
{
fungsi_1();
}
void fungsi_1()
{
puts("fungsi 1 dijalankan");
fungsi_2();
}
void fungsi_2()
{
puts("fungsi 2 dijalankan");
}
Contoh eksekusi :
fungsi 1 dijalankan
fungsi 2 dijalankan
9 Rekursi
Fungsi dalam C dapat dipakai secara rekursi, dalam artian suatu fungsi dapat
memanggil dirinya sendiri.
Sebagai contoh penerapan fungsi
rekursi yaitu untuk
menghitung nilai
xn
dengan n berupa bilagnan bulat positif. Solusi dari persoalan ini dapat berupa :

Jika n = 1, maka xn = x

Selain itu maka xn = x * xn-1
Jobsheet Pemograman Bahasa C
75
Misalnya x = 2 dan n = 3, proses pemecahannya seperti diuraikan pada gambar 5.10.
23 = 2 *
21 = 2
22 = 2 *
22
1
2
4
8
2
Gambar.10 Pemecahan secara rekursi
Penuangan dalam bentuk program
/* File program : faktor.c
Contoh penerapan rekursi untuk memperoleh nilai factorial */
#include <stdio.h>
int faktorial(int);
void main()
{
int x;
puts("MENCARI FAKTORIAL DARI X!");
printf("Masukkan nilai x (bulat positif) : ");
scanf("%d", &x);
printf("Faktorial dari %d = %d\n", x, faktorial(x));
}
int faktorial(int m)
{
if(m == 1)
return(1);
else
return(m * faktorial(m-1));
}
Contoh eksekusi :
MENCARI FAKTORIAL DARI X!
Masukkan nilai x (bulat positif) : 4
Faktorial dari 4 = 24
Jobsheet Pemograman Bahasa C
76
Rekursi jarang dipakai, di antaranya disebabkan :

Biasanya rekursi akan menjadikan fungsi sulit dimengerti.
Hanya cocok untuk
persoalan tertentu saja (misalnya pada binary tree atau pohon biner). Untuk fungsi
rekursi pada program faktor.c di atas misalnya, akan lebih mudah dipahami kalau
ditulis menjadi :
int faktorial(int m)
{
int i, fak;
fak = 1;
for(i = 1; i <= m; i++)
fak = fak * i;
return(fak);
}

Memerlukan stack dengan ukuran yang lebih besar. Sebab setiap kali fungsi dipanggil,
variabel lokal dan parameter formal akan ditempatkan ke stack dan adakalanya akan
menyebabkan stack tak cukup lagi (stack overflow).
10 Pengenalan Konsep Pemrograman Terstruktur
Fungsi sangat bermanfaat untuk membuat program yang terstruktur. Suatu program
yang terstruktur dikembangkan dengan menggunakan “top-down design” (rancang atas
bawah). Pada C suatu program disusun dari sejumlah fungsi dengan tugas tertentu.
Selanjutnya masing masing fungsi dipecah-pecah lagi menjadi fungsi yang lebih kecil.
Pembuatan program dengan cara ini akan memudahkan dalam pencarian kesalahan ataupun
dalam hal pengembangan dan tentu saja mudah dipahami/ dipelajari.
Dalam bentuk diagram, model suatu program C yang terstruktur adalah seperti
yang tertera pada bagan berikut ini. Namun sekali lagi perlu diketahui, bahwa pada C
semua fungsi sebenarnya berkedudukan sederajat.
Fungsi main() terdiri dari fungsi_a() sampai dengan fungsi_n(), menegaskan
bahwa dalam program fungsi main() akan memanggil fungsi_a() sampai dengan
fungsi_n(). Adapun fungsi-fungsi yang dipanggil oleh fungsi main() juga bisa memanggil
fungsi-fungsi yang lain.
Jobsheet Pemograman Bahasa C
77
fungsi utama
main()
fungsi_a()
fungsi_a1()
…
…
fungsi_n()
fungsi_am()
Gambar 11 Model terstruktur Program C
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file
program yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama
file sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan
untuk mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
Jobsheet Pemograman Bahasa C
78
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Memanggil fungsi berulang-ulang
/* File program :ulang.c */
#include <stdio.h>
void cetak_pesan(void);
main()
{
int i;
for(i=1; i<=5; i++)
cetak_pesan();
printf("\n");
}
void cetak_pesan()
{
printf("Cetak pesan ini\n");
}
2. Fungsi untuk menghitung jumlah triangular n
/* File program : triangular.c */
#include <stdio.h>
void hitung_triangular(int);
void main()
{
hitung_triangular(10);
hitung_triangular(20);
hitung_triangular(50);
}
void hitung_triangular(int n)
{
int i, jumlah = 0;
for (i=1; i <= n; i++)
jumlah = jumlah + i;
printf("Jumlah triangular %d adalah %d\n",
n, jumlah);
}
Jobsheet Pemograman Bahasa C
79
3. Menentukan faktor pembagi terbesar dari 2 bilangan bulat positif.
/* File program : fpb1.c */
#include <stdio.h>
void fpb(int, int);
main()
{
fpb(150, 35);
fpb(1026, 405);
fpb(83, 240);
}
void fpb(int u, int v)
{
int tampung;
printf("FPB dari %d dan %d adalah ", u, v);
while(v != 0)
{
tampung = u % v;
u = v;
v = tampung;
}
printf("%d\n", u);
}
4. Menentukan faktor pembagi terbesar dari 2 bilangan bulat positif dan memberikan nilai
kembali (return value)-nya.
/* File program : fpb2.c */
#include <stdio.h>
int fpb(int, int);
void main()
{
int hasil;
hasil = fpb(150, 35);
printf("FPB dari 150 dan 35 adalah %d\n", hasil);
hasil = fpb(1026, 405);
printf("FPB dari 1026 dan 405 adalah %d\n", hasil);
printf("FPB dari 83 dan 240 adalah %d\n",
fpb(83, 240));
}
int fpb(int u, int v)
Jobsheet Pemograman Bahasa C
80
{
int tampung;
while(v != 0)
{
tampung = u % v;
u = v;
v = tampung;
}
return(u);
}
5. Menghitung nilai absolut
/* File program : absolut.c */
#include <stdio.h>
float nilai_absolut(float);
main()
{
float f1 = -15.5f, hasil;
hasil = nilai_absolut(f1);
printf("Nilai absolut dari %g adalah %g\n", f1, hasil);
printf("Nilai absolut dari -6/4 adalah %g\n",
nilai_absolut((-6)/4));
}
float nilai_absolut(float x)
{
if(x < 0)
x = -x;
return(x);
}
6. Fungsi dengan keluaran bertipe float.
/* File program : minimum.c */
#include <stdio.h>
float minimum (float, float);
main()
{
float a, b, kecil;
printf("Masukkan nilai a : ");
scanf("%f", &a);
Jobsheet Pemograman Bahasa C
81
printf("Masukkan nilai b : ");
scanf("%f", &b);
kecil = minimum(a, b);
printf("\nBilangan terkecil antara %g dan %g adalah
%g\n\n", a, b, kecil);
}
float minimum(float x, float y)
{
if (x < y)
return(x);
else
return(y);
}
7. Untuk melihat pengaruh pemanggilan nilai pada fungsi untuk penukaran dua bilangan.
/* File program : tukar.c */
#include <stdio.h>
void tukar (int, int);
main()
{
int a,b;
a=88;
b=77;
printf("Nilai sebelum pemanggilan fungsi\n");
printf("a = %d
b = %d\n", a, b);
tukar(a,b);
printf("\nNilai setelah pemanggilan fungsi\n");
printf("a = %d
b = %d\n", a, b);
}
void tukar(int x, int y)
{
int z;
z = x;
x = y;
y = z;
printf("\nNilai di akhir fungsi tukar()\n");
printf("x = %d
y = %d\n", x, y);
}
Jobsheet Pemograman Bahasa C
82
8. Ilustrasi variabel auto dan static.
/* File program : auto.c */
#include <stdio.h>
void demo(void);
/* ANSI function prototypes */
main()
{
int i=0;
while(i < 3) {
demo();
i++;
}
}
void demo(void)
{
auto int var_auto = 0;
static int var_static = 0;
printf("auto = %d, static = %d\n", var_auto, var_static);
++var_auto;
++var_static;
}
F. SOAL
1. Apa hasil eksekusi dari program berikut :
/* File program : lat1.c */
#include <stdio.h>
void fung_a(void);
void fung_b(void);
int x = 20;
main()
{
x += 2;
fung_a();
fung_a();
printf("\nNilai x dalam main() = %d\n\n", x);
}
void fung_a(void)
{
static x = 5;
Jobsheet Pemograman Bahasa C
83
x++;
printf("Nilai x dalam fung_a() = %d\n", x);
fung_b();
}
void fung_b(void)
{
x--;
printf("Nilai x dalam fung_b() = %d\n", x);
}
2.
Buatlah suatu fungsi ganjil() yang mengembalikan nilai 1 jika argumen yang
diberikan adalah bilangan ganjil dan mengembalikan nilai 0 jika argumen tsb bukan
bilangan ganjil.
3.
Buatlah program untuk menghitung faktorial dengan menggunakan 2 fungsi (main()
dan faktorial()). Fungsi faktorial() memberikan return value bertipe long int yang
akan dicetak ke layar dalam fungsi main().
4. Apa hasil eksekusi dari program berikut :
#include <stdio.h>
void ubah(int);
main()
{
int x;
printf("Masukkan nilai x : ");
scanf("%d", &x);
ubah(x);
printf("x = %d\n", x);
}
void ubah(int y)
{
y = 85;
}
5.
Buatlah sebuah fungsi yang berfungsi untuk menampilkan sebuah string (di layar) =
“Pilihan Menu” (misalkan nama fungsinya = menu). Fungsi tersebut tidak memiliki
nilai kembalian (return value) dan juga tidak menerima parameter masukan apapun.
Jobsheet Pemograman Bahasa C
84
PRAKTIKUM VI
ARRAY
A. Tujuan Instruksional Khusus
1. Mengerti konsep data array dalam bahasa C.
2. Mengerti cara melakukan pemrograman sederhana dengan menggunakan array.
3. Menjelaskan tentang array berdimensi satu
4. Menjelaskan tentang array berdimensi dua
5. Menjelaskan tentang array berdimensi banyak
6. Menjelaskan tentang inisialisasi array tak berukuran.
7. Menjelaskan array sebagai parameter fungsi
B. Dasar teori
Dalam beberapa literatur, array sering disebut (diterjemahkan) sebagai larik. Array
adalah kumpulan dari nilai-nilai data bertipe sama dalam urutan tertentu yang
menggunakan sebuah nama yang sama. Nilai-nilai data di suatu array disebut dengan
elemen-elemen array.
Letak urutan dari elemen-elemen array ditunjukkan oleh suatu
subscript atau indeks.
Array bisa berupa array berdimensi satu, dua, tiga atau lebih. Array berdimensi
satu (one-dimensional array) mewakili bentuk suatu vektor. Array berdimensi dua (twodimensional array) mewakili bentuk dari suatu matriks atau tabel. Array berdimensi tiga
(three-dimensional array) mewakili bentuk suatu ruang.
1 Array Berdimensi Satu
1.1 Mendeklarasikan Array
Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa :
tipe_data nama_var[ukuran];
dengan :

tipe_data : untuk menyatakan tipe dari elemen array, misalnya int, char, float.

nama_var : nama variabel array

ukuran
: untuk menyatakan jumlah maksimal elemen array.
Jobsheet Pemograman Bahasa C
85
Contoh pendeklarasian array :
float nilai_tes[5];
menyatakan bahwa array nilai_tes mengandung 10 elemen bertipe float.
1.2 Mengakses Elemen Array
Pada C, data array akan disimpan dalam memori yang berurutan. Elemen pertama
mempunyai indeks bernilai 0. Jika variabel nilai_tes dideklarasikan sebagai array dengan
5 elemen, maka elemen pertama memiliki indeks sama dengan 0, dan elemen terakhir
memiliki indeks 4. Gambar 6.1 di bawah ini menjelaskan urutan komponen dalam array.
tipe float
nilai_tes[0]
total 5 elemen
nilai_tes[1]
nilai_tes[2]
nilai_tes[3]
nilai_tes[4]
float nilai_tes[5]
Gambar 1 Array berdimensi satu
Bentuk umum pengaksesan array adalah sbb :
nama_var[indeks]
sehingga, untuk array nilai_tes, maka :
nilai_tes[0]
 elemen pertama dari nilai_tes
nilai_tes[4]
 elemen ke-5 dari nilai_tes
Contoh :
nilai_tes[0] = 70;/* contoh 1 */
scanf(“%f”, &nilai_tes[2]);
Jobsheet Pemograman Bahasa C
/* contoh 2 */
86
Contoh pertama merupakan pemberian nilai 70 ke nilai_tes[0]. Sedangkan contoh 2
merupakan perintah untuk membaca data bilangan dari keyboard dan diberikan ke
nilai_tes[2].
Pada contoh 2 ini
&nilai_tes[2]
berarti “alamat dari nilai_tes[2]”.
Perlu diingat bahwa scanf() memerlukan argumen
berupa alamat dari variabel yang digunakan untuk menyimpan nilai masukan.
Selengkapnya perhatikan contoh program di bawah ini
/* File program : nilai_tes.c
Pemakaian array utk menyimpan sejumlah nilai tes */
#include <stdio.h>
#define MAKS 5
void main()
{
int i;
float total = 0, rata;
float nilai_tes[MAKS];
/* deklarasi array */
for(i=0; i < MAKS; i++) /* pemasukan data nilai_tes */
{
printf("Nilai tes ke-%d : ", i+1);
scanf("%f", &nilai_tes[i]);
/* menghitung jumlah seluruh nilai */
total = total + nilai_tes[i];
}
rata = total / MAKS;
/* hitung nilai rata-rata */
/* cetak nilai rata-rata */
printf("\nNilai rata-rata = %g\n", rata);
}
Contoh eksekusi :
Nilai
Nilai
Nilai
Nilai
Nilai
tes
tes
tes
tes
tes
ke-1
ke-2
ke-3
ke-4
ke-5
:
:
:
:
:
56.5
67.75
80
77
78.5
Nilai rata-rata = 71.95
Jobsheet Pemograman Bahasa C
87
1.3 Inisialisasi Array Berdimensi Satu
Sebuah array dapat diinisialisasi sekaligus pada saat dideklarasikan.
Untuk
mendeklarasikan array, nilai-nilai yang diinisialisasikan dituliskan di antara kurung
kurawal ({}) yang dipisahkan dengan koma.
/* File program : jhari.c */
#include <stdio.h>
void main()
{
int bulan, tahun, jhari;
int jum_hari[12] =
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
puts("MEMPEROLEH JUMLAH HARI");
puts("PADA SUATU BULAN DAN SUATU TAHUN");
puts("--------------------------------");
printf("Masukkan bulan (1..12)
: ");
scanf("%d", &bulan);
printf("Masukkan tahunnya
: ");
scanf("%d", &tahun);
if(bulan == 2)
if((tahun % 4 == 0) && (tahun % 100 != 0))
jhari = 29;
else
jhari = 28;
else
jhari = jum_hari[bulan-1];
printf("\nJumlah hari dalam bulan %d tahun %d adalah %d
hari\n", bulan, tahun, jhari);
}
Contoh eksekusi :
MEMPEROLEH JUMLAH HARI
PADA SUATU BULAN DAN SUATU TAHUN
-------------------------------Masukkan bulan (1..12)
: 2
Masukkan tahunnya
: 1988
Jumlah hari dalam bulan 2 tahun 1988 adalah 29 hari
Pada program jhari.c di atas
Jobsheet Pemograman Bahasa C
88
int jum_hari[12] =
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
merupakan instruksi untuk mendeklarasikan array jum_hari yang memiliki 12 elemen
yang bersifat statis dan sekaligus melakukan inisialisasi terhadap masing-masing elemen
array.
/* File program : inisial.c */
#include <stdio.h>
void main()
{
int i;
int values[] = {1,2,3,4,5,6,7,8,9};
char word[] = {'H','e','l','l','o'};
for(i = 0; i < 9; ++i )
printf("values[%d] is %d\n", i, values[i]);
printf("\n");
for(i = 0; i < 6; ++i )
printf("word[%d] is %c\n", i, word[i]);
}
Contoh eksekusi :
values[0]
values[1]
values[2]
values[3]
values[4]
values[5]
values[6]
values[7]
values[8]
word[0]
word[1]
word[2]
word[3]
word[4]
is
is
is
is
is
is
is
is
is
is
is
is
is
is
1
2
3
4
5
6
7
8
9
H
e
l
l
o
Perhatikan, pada contoh inisial.c di atas, pendeklarasian nama variabel array tidak disertai
ukuran yang mengindikasikan besarnya array.
Dalam kondisi seperti ini, C akan
menginisialisasi ukuran array tersebut sejumlah elemen yang diberikan di dalam kurung
Jobsheet Pemograman Bahasa C
89
kurawal pada saat proses inisialisasi. Sehingga array values terdiri atas 9 elemen dan array
word memiliki 5 elemen.
1.4 Beberapa Variasi dalam Mendeklarasikan Array
Ada beberapa variasi cara mendeklarasikan sebuah array (dalam hal ini yang
berdimensi satu), di antaranya adalah sebagai berikut :

int

int numbers[10] = { 34, 27, 16 };

int numbers[] = { 2, -3, 45, 79, -14, 5, 9, 28, -1, 0 };

char text[] = "Welcome to New Zealand.";

float radix[12] = { 134.362, 1913.248 };

double radians[1000];
numbers[10];
2 Array Berdimensi Dua
Data seperti yang disajikan pada Tabel 6-1, dapat disimpan pada sebuah array
berdimensi dua. Dimensi pertama dari array digunakan untuk menyatakan kode program
kursus dan dimensi kedua untuk menyatakan tahun kursus.
Tabel 1. Data Kelulusan Siswa Pada Sebuah Kursus Komputer
Tahun
1998
1999
2000
80
15
8
10
540
83
12
129
1032
301
15
257
Program
1. (INTRO)
2. (BASIC)
3. (PASCAL)
4. (C)
2.1 Mendeklarasikan Array Berdimensi Dua
Pendeklarasian yang diperlukan untuk menyimpan data kelulusan siswa pada Tabel
1 adalah:
int data_lulus[4][3];
Jobsheet Pemograman Bahasa C
90
Nilai 3 untuk menyatakan banyaknya tahun dan 4 menyatakan banyaknya program kursus.
Gambar 2 memberikan ilustrasi untuk memudahkan pemahaman tentang array berdimensi
dua.
0
1
2
3
indeks pertama
(program kursus)
0
1
2
80
15
8
10
540
83
12
129
1032
301
15
257
indeks kedua
(tahun)
int data_lulus[4][3];
Gambar.2 Array berdimensi dua
Sama halnya pada array berdimensi satu, data array aka ditempatkan pada memori
yang berurutan. Perhatikan Gambar 3.
80
540
1032
15
83
301
80
Gambar .3 Model penyimpanan array dimensi dua pada memori
2.2 Mengakses Elemen Array
Array seperti data_lulus dapat diakses dalam bentuk
data_lulus[indeks pertama, indeks kedua]
Contoh :
(1) data_lulus[0][1] = 540;
merupakan instruksi untuk memberikan nilai 540 ke array data_lulus untuk indeks
pertama = 0 dan indeks kedua bernilai 1.
(2) printf(“%d”,data_lulus[2][0]);
merupakan perintah untuk menampilkan elemen yang memiliki indeks pertama = 2 dan
indeks kedua = 0.
Jobsheet Pemograman Bahasa C
91
0
0
1
2
3
1
2
540
data_lulus[0][1] = 540;
Gambar 4. Pemberian nilai ke array berdimensi dua
Perhatikan contoh program di bawah ini.
/* File program : lulus.c
Contoh pemakaian array berdimensi dua */
#include <stdio.h>
void main( )
{
int tahun, kode_program;
int data_lulus[4][3] ;
/* Memberikan data ke array */
data_lulus[0][0] = 80;
data_lulus[0][1] = 540;
data_lulus[0][2] = 1032;
data_lulus[1][0] = 15;
data_lulus[1][1] = 83;
data_lulus[1][2] = 301;
data_lulus[2][0] = 8;
data_lulus[2][1] = 12;
data_lulus[2][2] = 15;
data_lulus[3][0] = 10;
data_lulus[3][1] = 129;
data_lulus[3][2] = 257;
/* proses utk memperoleh informasi jml siswa yg lulus */
printf("Masukkan tahun dr data yg ingin anda ketahui ");
printf("(1998..2000) : ");
scanf("%d", &tahun);
printf("Masukkan kode program kursus yang ingin anda
ketahui");
printf("(1 = INTRO, 2 = BASIC, 3 = PASCAL, 4 = C) : ");
Jobsheet Pemograman Bahasa C
92
scanf("%d", &kode_program);
printf("\nTotal kelulusan program tsb = %d\n",
data_lulus[kode_program - 1][tahun - 1998] );
}
Contoh eksekusi :
Masukkan tahun dr data yg ingin anda ketahui (1998…2000) :
2000
Masukkan kode program kursus dari data yang ingin anda
ketahui (1 = INTRO, 2 = BASIC, 3 = PASCAL, 4 = C) : 3
Total kelulusan program tsb = 15
2.3 Inisialisasi Array Berdimensi Dua
Gambar berikut memberikan penjelasan tentang inisialisasi yang dilakukan
terhadap array berdimensi dua :
0
1
1
1
1
1
0
0
0
0
1
1
1
1
0
1
1
1
1
1
1
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
1
1
1
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
Gambar 5 Representasi inisialisasi array berdimensi dua
Untuk itu, deklarasi dan inisialisasi yang dilakukan berupa :
INT HURUF_A[8][8] = {
{
{
{
{
{
{
{
{
0,
0,
0,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
1,
1,
0,
1,
0,
0,
1,
0,
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0
0
0
0
0
0
0
0
}
}
}
}
}
}
}
}
,
,
,
,
,
,
,
};
Jobsheet Pemograman Bahasa C
93
atau bisa juga ditulis sebagai berikut :
int huruf_A[8][8]
{ 0, 1, 1, 1,
0, 1, 0, 0,
0, 1, 0, 0,
1, 1, 1, 1,
1, 1, 0, 0,
1, 1, 0, 0,
1, 1, 0, 0,
0, 0, 0, 0,
};
=
1,
0,
0,
1,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0
Contoh program berikut memenfaatkan data yang ada pada array huruf_A untuk
membentuk karakter A dengan ukuran besar. Setiap nilai satu pada array akan diganti
dengan karakter ber-ASCII 219 (DBh) dan nilai 0 akan diganti dengan karakter spasi.
/* File program : hurufA.c
Contoh inisialisasi array dimensi dua
*/
#include <stdio.h>
void main()
{
int i,j;
int huruf_A[8][8] = {
{ 0, 1, 1, 1, 1,
{ 0, 1, 0, 0, 0,
{ 0, 1, 0, 0, 0,
{ 1, 1, 1, 1, 1,
{ 1, 1, 0, 0, 0,
{ 1, 1, 0, 0, 0,
{ 1, 1, 0, 0, 0,
{ 0, 0, 0, 0, 0,
};
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0
0
0
0
0
0
0
0
}
}
}
}
}
}
}
}
,
,
,
,
,
,
,
for(i = 0; i < 8; i++)
{
for(j = 0; j < 8; j++)
if(huruf_A[i][j] !=0 )
putchar('\xDB\n');
else
putchar (' ');
putchar('\n');
}
/* spasi */
}
Jobsheet Pemograman Bahasa C
94
Contoh eksekusi :
3. Array Berdimensi Banyak.
C memungkinkan untuk membuat array yang dimensinya lebih dari dua. Bentuk
umum pendeklarasian array berdimensi banyak :
tipe nama_var[ukuran 1][ukuran2}…[ukuranN];
sebagai contoh :
int data_huruf[2][8][8];
merupakan pendeklarasian array data_huruf sebagai array berdimensi tiga.
Sama halnya dengan array berdimensi satu atau dua, array berdimensi banyak juga
bisa diinisialisasi. Contoh inisialisasi array berdimensi tiga :
int data_huruf [2][8][8] =
{ { { 0, 1, 1, 1, 1, 1,
{ 0, 1, 0, 0, 0, 1,
{ 0, 1, 0, 0, 0, 1,
{ 1, 1, 1, 1, 1, 1,
{ 1, 1, 0, 0, 0, 0,
{ 1, 1, 0, 0, 0, 0,
{ 1, 1, 0, 0, 0, 0,
{ 0, 0, 0, 0, 0, 0,
},
{ {1,
{1,
{1,
{1,
{1,
{1,
{1,
{0,
}
Jobsheet Pemograman Bahasa C
1,
0,
0,
1,
1,
1,
1,
0,
1,
0,
0,
1,
0,
0,
1,
0,
1,
0,
0,
1,
0,
0,
1,
0,
1,
0,
0,
1,
0,
0,
1,
0,
1,
1,
1,
1,
0,
0,
1,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
,
,
,
,
,
,
,
,
,
,
,
,
,
,
95
};
atau bisa juga ditulis menjadi
int data_huruf [2][8][8]
0, 1, 1, 1, 1,
0, 1, 0, 0, 0,
0, 1, 0, 0, 0,
1, 1, 1, 1, 1,
1, 1, 0, 0, 0,
1, 1, 0, 0, 0,
1, 1, 0, 0, 0,
0, 0, 0, 0, 0,
1, 1, 1, 1, 1,
1, 0, 0, 0, 0,
1, 0, 0, 0, 0,
1, 1, 1, 1, 1,
1, 1, 0, 0, 0,
1, 1, 0, 0, 0,
1, 1, 1, 1, 1,
0, 0, 0, 0, 0,
};
=
1,
1,
1,
1,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
1,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
Program berikut merupakan pengembangan dari Program 8 – 4, digunakan untuk
menampilkan dua buah huruf dengan ukuran besar.
/* File program: data_huruf.c
Contoh inisialisasi array dimensi tiga
# include <stdio.h>
void main()
{
int i, j, k;
int data_huruf[2][8][8] = {
{{ 0, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 0 },
{ 1, 1, 0, 0, 0, 0, 1, 0 },
{ 1, 1, 0, 0, 0, 0, 1, 0 },
{ 1, 1, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 }
},
{{1, 1, 1, 1, 1, 1, 0, 0 },
{1, 0, 0, 0, 0, 1, 0, 0 },
{1, 0, 0, 0, 0, 1, 0, 0 },
{1, 1, 1, 1, 1, 1, 1, 0 },
{1, 1, 0, 0, 0, 0, 1, 0 },
{1, 1, 0, 0, 0, 0, 1, 0 },
{1, 1, 1, 1, 1, 1, 1, 0 },
{0, 0, 0, 0, 0, 0, 0, 0 }
Jobsheet Pemograman Bahasa C
*/
96
}
};
for(i = 0; i < 2; i++)
/*
{
for(j = 0; j < 8; j++)
{
for(k = 0; k < 8; k++)
if(data_huruf[i][j][k]
putchar('\xDB');
else
putchar(' '); /*
printf("\n");
/*
}
printf("\n");
/*
}
Tampilkan huruf */
!= 0)
spasi */
pindah baris */
pindah baris */
}
Contoh Eksekusi :
4. Inisialisasi Array Tak Berukuran
Inisialisasi array yang tak berukuran dapat dilakukan untuk array berdimensi satu
atau lebih. Untuk array berrdimensi lebih dari satu, dimensi terkirilah yang boleh tak
berukuran. Dengan cara ini tabel dalam array dapat diperluas atau dikurangi tanpa
mengubah ukuran array. Sebagai contoh :
tak berukuran
int skala[] =
{ 1, 2, 4, 6, 8 };
Jobsheet Pemograman Bahasa C
97
merupakan pendeklarasian array berdimensi satu yang tak berukuran. Secara otomatis
skala[ 0 ] bernilai 1
skala[ 1 ] bernilai 2
skala[ 2 ] bernilai 4
skala[ 3 ] bernilai 6
skala[ 4 ] bernilai 8
Contoh lain :
char konversi[][2] =
{ ’A’, ’T’,
’E’, ’M’,
’I’, ’V’,
’O’, ’S’,
’U’, ’J’,
};
Pada contoh ini,
konversi[0][0] bernilai ’A’
konversi[0][1] bernilai ’T’
konversi[1][0] bernilai ’E’
konversi[1][1] bernilai ’M’
……..
Contoh berikut akan menyandikan suatu kalimat yang dimasukkan melalui keyboard
dengan menggunakan data yang ada pada tabel konversi. Misal, huruf A akan diganti
menjadi T, huruf T akan diganti menjadi A.
/* File program : sandi.c
contoh inisialisasi array tak berukuran */
#include <stdio.h>
#include <stdlib.h>
#define JUM_KOLOM 2
#define MAX_KAR 256
void main()
{
char konversi[][JUM_KOLOM] = {
'A', 'T',
'a', 't',
Jobsheet Pemograman Bahasa C
98
'E',
'e',
'I',
'i',
'O',
'o',
'U',
'u',
'M',
'm',
'V',
'v',
'S',
's',
'J',
'j'
};
char kalimat[MAX_KAR], karakter;
int i = 0, j, jum_kar, jum_penyandi;
printf("Masukkan sebuah kalimat dan akhiri dengan
ENTER\n");
printf("Kemudian kalimat tsb akan saya sandikan\n");
printf("Kalimat: ");
/* Memasukkan data karakter ke array kalimat */
while((kalimat[i] = getchar()) != '\n')
i++;
jum_kar = i ;
/* sandikan dan menampilkan ke layar */
printf("\nHasil setelah disandikan: ");
jum_penyandi = sizeof(konversi) / JUM_KOLOM;
for(i = 0; i < jum_kar; i++)
{
karakter = kalimat [i];
for(j = 0; j < jum_penyandi; j++)
{
if(karakter == konversi[j][0])
{
karakter = konversi[j][1];
break; /* keluar dari for terdalam */
}
if(karakter == konversi[j][1])
{
karakter = konversi[j][0];
break; /* keluar dari for terdalam */
}
}
putchar (karakter);
}
printf("\n\n");
}
Jobsheet Pemograman Bahasa C
99
Contoh Eksekusi :
Masukkan sebuah kalimat dan akhiri dengan ENTER
Kemudian kalimat tsb akan saya sandikan
Kalimat : Saya belajar
Hasil setelah disandikan: Otyt bmltutr
Pada program diatas ,
sizeof(konversi)/JUM_KOLOM)
merupakan ungkapan untuk memperoleh banyaknya baris (ukuran dari dimensi pertama)
dalam array konversi. Dengan cara ini tabel konversi dapat diperluas tanpa perlu
memberitahu banyaknya jumlah dimensi pertama secara ekplisit.
5. Array Sebagai Parameter
Array juga dapat dilewatkan sebagai parameter fungsi. Sebagai contoh ditujukan
pada program sorting.c. Program digunakan untuk memasukkan sejumlah data, kemudian
data tersebut diurutkan naik (ascending) dan dicetak ke layar.
Untuk melakukan sorting (proses pengurutan data), cara yang dipakai yaitu metode
buble sort (suatu metode pengurutan yang paling sederhana, dan memiliki kecepatan
pengurutan yang sangat lambat).
Algoritma pada metode pengurutan ini adalah sebagai berikut :
1. Atur i bernilai 0
2. Bandingkan x[i] dengan x[j], dengan j berjalan dari i + 1 sampai dengan n-1.
3. Pada setiap pembandingan, jika x[i] > x[j], maka isi x[i] dan x[j] ditukarkan
4. Bila i < (n – 1), ulangi mulai langkah 2.
Catatan:
i
= indeks array
x
= nama array untuk menyimpan data
n
= jumlah data
Jobsheet Pemograman Bahasa C
100
/* File program : sorting.c */
#include <stdio.h>
#define MAKS 20
void pemasukan_data(float [], int *);
void pengurutan_data(float [], int);
void penampilan_data(float [], int);
voi main()
{
float data[MAKS];
int jum_data;
pemasukan_data(data, &jum_data);
pengurutan_data(data, jum_data);
penampilan_data(data, jum_data);
}
void pemasukan_data(float x[], int *pjumlah)
{
int jum, i;
printf("Jumlah data = ");
scanf("%d", &jum);
for(i=0; i<jum; i++)
{
printf("Data ke-%d : ", i+1);
scanf("%f", &x[i]);
}
*pjumlah = jum;
}
Jobsheet Pemograman Bahasa C
101
void pengurutan_data(float x[], int jumlah)
{
int i, j;
float smtr;
for(i=0; i<jumlah-1; i++)
for(j=i+1; j<jumlah; j++)
if(x[i] > x[j])
/* penukaran data */
{
smtr = x[i];
x[i] = x[j];
x[j] = smtr;
}
}
void penampilan_data(float x[], int jumlah)
{
int i;
printf("\nData setelah diurutkan :\n\n");
for (i=0; i<jumlah; i++)
printf("Data ke-%d : %g\n", i+1, x[i]);
}
Contoh Eksekusi :
Jumlah data = 5
Data ke-1 : 50.5
Data ke-2 : 30.3
Data ke-3 : 20.2
Data ke-4 : 25.2
Data ke-5 : 31.3
Data setelah diurutkan
Data
Data
Data
Data
Data
ke-1
ke-2
ke-3
ke-4
ke-5
:
:
:
:
:
20.2
25.2
30.3
31.3
50.5
Jobsheet Pemograman Bahasa C
102
Pada fungsi main( );

float data[MAKS];
merupakan instruksi untuk mendeklarasikan array data dengan elemen bertipe float dan
jumlahnya sebanyak MAKS elemen.

pemasukan_data(data, &jum_data);
merupakan instruksi untuk memanggil fungsi pemasukan_data ( ). Pada pemanggilan
fungsi, data merupakan array. Yang perlu diperhatikan, parameter array ditulis tanpa
diawali dengan &, sekalipun tujuan dari pemanggilan fungsi yaitu untuk mengisikan
data ke array. Sebab nama array tanpa kurung siku dalam parameter fungsi berarti
”alamat dari array”.
Sedangkan &jum_data berarti ”alamat dari jum_data”. Tanda & harus disertakan
sebab variabel jum_data akan diisi oleh fungsi pemasukan_data ().

pengurutan_data(data, jum_data);
Merupakan instruksi untuk menjalankan fungsi pengurutan _data (), dalam hal ini
data dilewatkan ke fungsi dengan referensi (memberikan alamat array), karena
memang hal ini merupakan cara satu-satunya untuk melewatkan array. Sedangkan
jumlah data dilewatkan ke fungsi dalam bentuk nilai (pemanggilan dengan nilai).

penampilan_data(data,jum_data);
Merupakan instruksi untuk memanggil fungsi penampilan_data().
Pada fungsi untuk pemasukan data, pengurutan data maupun penampilan data,
data[i]
menyatakan elemen data ke-i.
Beberapa hal tambahan yang perlu diketahui:

Untuk menyatakan alamat dari suatu elemen array, bentuk umumnya adalah
&nama_array[indeks]
Misalnya,
&data[1]
Jobsheet Pemograman Bahasa C
103
menyatakan alamt dari elemen ke-1. Adapun
&data[0]
sama saja dengan:
data

Suatu array berdimensi satu dalam parameter formal dideklarasikan dengan bentuk
tipe nama_array[]
dengan di dalam tanda kurung siku tak disebutkan mengenai jumlah elemen. Jumlah
elemen dinyatakan dalam parameter tersendiri (atau dinyatakan dalam bentuk variabel
eksternal). Untuk array berdimensi lebih dari satu, kurung siku terkirilah yang kosong.
C. Daftar Alat dan Bahan.
1.CPU
2.Monitor
3.Keyboard
4.Mouse
5.Printer
6.Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file
program yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama
file sesuai keinginan praktikan.
Jobsheet Pemograman Bahasa C
104
9. compile program tersebut untuk melihat kebenaran pengetikan program dan
untuk mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Mengisi dan menampilkan beberapa variabel array
/* File program : isi.c */
#include <stdio.h>
void main()
{
int nilai[10];
int indeks;
/* menginisialisasi array supaya berisi 0 */
for(indeks=0; indeks<10; indeks++)
nilai[indeks] = 0;
nilai[0] = 197;
nilai[2] = -100;
nilai[5] = 350;
nilai[3] = nilai[0] + nilai[5];
nilai[9] = nilai[5] / 10;
--nilai[2];
for(indeks = 0; indeks < 10; indeks++)
printf("nilai[%d] = %d\n", indeks, nilai[indeks]);
}
2. Mencetak 15 angka pertama dalam deret Fibonacci.
/* fibonacci1.c */
#include <stdio.h>
void main()
{
int fibo[15], i;
fibo[0] = 0;
fibo[1] = 1;
for(i = 2; i < 15; i++)
{
Jobsheet Pemograman Bahasa C
105
fibo[i] = fibo [i-1] + fibo[i-2];
printf("%5d", fibo[i]);
}
printf("\n\n");
}
3. Menginisialisasi elemen array bertipe integer
/* File program : inisial1.c */
#include <stdio.h>
main()
{
int i;
static int nilai[10] = {0, 1, 4, 9, 16};
/* dgn sendirinya nilai lainnya diset nol */
for(i=5; i<10; i++)
nilai[i] = i * i;
for(i=0; i<10; i++)
printf("nilai[%d] = %d\n", i, nilai[i]);
}
4. Menginisialisasi elemen array bertipe karakter.
/* File program : inisial2.c */
#include <stdio.h>
main()
{
int i;
static char word[] = {'H', 'e', 'l', 'l', 'o', '!'};
for(i=0; i<6; i++)
printf("%c", word[i]);
printf("\n");
}
5. Menentukan nilai maksimum dari sederetan nilai yang sudah diinisialisasi dan disimpan
dalam array; mengirim array sebagai parameter sebuah fungsi.
/* File program : maksimum.c */
#include <stdio.h>
int findmax(int [], int); /* prototype fungsi dlm ANSI */
void main()
{
static int data1[] = { 5, 34, 56, -12, 3, 19 };
Jobsheet Pemograman Bahasa C
106
static int data2[] = { 1, -2, 34, 207, 93, -12 };
printf("nilai maksimum dari data1[] adalah %d\n",
findmax(data1, 6));
printf("nilai maksimum dari data2[] adalah %d\n",
findmax(data2, 6));
}
int findmax(int nilai[], int jml_data)
{
int terbesar, i;
terbesar = nilai[0];
for(i = 1; i < jml_data; ++i )
if(nilai[i] > terbesar)
terbesar = nilai[i];
return terbesar;
}
6. Menentukan nilai minimum dari sederetan nilai masukan yang disimpan dalam array;
mengirim array sebagai parameter sebuah fungsi.
/* File program : minimum.c */
#include <stdio.h>
int minimum(int []);
/* prototype fungsi dlm ANSI */
void main()
{
int nilai[10], i, kecil;
printf("Masukkan 10 bil integer dipisahkan dgn spasi :
\n");
for (i=0; i<10; i++)
scanf("%d", &nilai[i]);
kecil = minimum(nilai);
printf("\nBilangan terkecil adalah %d\n", kecil);
}
int minimum(int nilai[10])
{
int min, j;
min = nilai[0];
for (j=1; j < 10; j++)
if (nilai[j] < min)
min = nilai[j];
Jobsheet Pemograman Bahasa C
107
return(min);
}
7. Menjumlahkan dua buah array yang ; mengirim array sebagai parameter sebuah fungsi.
/* File program : jml2array.c */
#include <stdio.h>
int jml2array(int [][5], int);
/* prototype fungsi */
main()
{
int jml;
int bil[][5] = {
{1, 2, 35, 7, 10},
{6, 7, 4, 1, 0}
};
jml = jml2array(bil, 2);
printf("Hasil penjumlahan 2 array tsb adalah = %d\n",
jml);
}
int jml2array(int data[][5], int jmlbrs)
{
int total = 0, kolom, baris;
for(baris = 0; baris < jmlbrs; baris++ )
for(kolom = 0; kolom < 5; kolom++ )
total += data[baris][kolom];
return total;
}
F. SOAL
1. Buat program untuk menghitung nilai rata-rata sbb :
Input
: jumlah data (n), data ke-1 s/d data ke-n
Output : nilai maks, nilai min, nilai rata-rata
2. Ubahlah program di atas sehingga mendapatkan tampilan seperti di bawah ini:
No. Nilai
Total
Rata-rata
1.
85
85
85.00
2.
95
180
90.00
3.
60
240
80.00
Jobsheet Pemograman Bahasa C
108
4.
80
320
80.00
5.
50
370
74.00
6.
100
470
78.33
Nilai maks
= 100
Nilai min
= 50
Nilai rata-rata = 78.33
Nilai terbaik adalah nilai ke = 6
3. Buat program untuk menampilkan deret Fibonacci sbb :
Input
: jumlah deret
Output
: deret[i] = deret[i-1] + deret[i-2]
Contoh : jumlah deret = 10
0
1
1
2
3
5
8
13
21
34
4. Buat program untuk mengurutkan data masukan dengan urutan naik (ascending)
Input : jumlah data (n), data ke-1 s/d data ke-n
Output : Tampilan data dalam keadaan terurut
Contoh :
Jumlah data = 3
Data ke-1 = 50
Data ke-2 = 43
Data ke-3 = 45
Data terurut naik:
Data ke-1 = 43
Data ke-2 = 45
Data ke-3 = 50
5. Data nilai mahasiswa :
No.
1.
Nama Mhs
Ahmad
2.
Adang
50
83
87
3.
Dani
89
55
65
4.
Edi
77
70
92
Jobsheet Pemograman Bahasa C
PROG-1
81
MAT-1
90
BIG1
62
109
Dapatkan output dengan tampilan sbb :
No. Mhs
Rata-rata
-------------------------1
77.67
2
73.33
3
69.67
4
79.67
--------------------------Petunjuk :
Asumsikan Ahmad mengikuti kelas Prog1, Mat1, dan BIG1.
Nilai pada masing-masing kelas dijumlahkan dan dihitung rata-ratanya (gunakan array 2
dimensi).
Jobsheet Pemograman Bahasa C
110
PRAKTIKUM VII
STRING
A. Tujuan Instruktional Khusus
1. Menjelaskan tentang konsep string
2. Menjelaskan operasi I/O pada string.
3. Menjelaskan cara mengakses elemen string
4. Menjelaskan berbagai fungsi mengenai string
B. Teori Dasar
1 Konstanta dan Variabel String
String merupakan bentuk data yang biasa dipakai dalam bahasa pemrograman
untuk keperluan menampung dan memanipulasi data teks, misalnya untuk menampung
(menyimpan) suatu kalimat. Pada bahasa C, string bukanlah merupakan tipe data
tersendiri, melainkan hanyalah kumpulan dari nilai-nilai karakter yang berurutan dalam
bentuk array berdimensi satu.
1.1 Konstanta String
Suatu konstanta string ditulis dengan diawali dan diakhiri tanda petik ganda,
misalnya:
“ABCDE”
Nilai string ini disimpan dalam memori secara berurutan dengan komposisi sebagai
berikut:
memori rendah
A
B C
memori tingi
D
E \0
Gambar 1 Komposisi penyimpanan string dalam memori
Setiap karakter akan menempati memori sebesar 1 byte. Byte terakhir otomatis
akan berisi karakter NULL (\0). Dengan mengetahui bahwa suatu string diakhiri nilai
NULL, maka akhir dari nilai suatu string akan dapat dideteksi. Sebagai sebuah array
Jobsheet Pemograman Bahasa C
111
karakter, karakter pertama dari nilai string mempunyai indeks ke-0, karakter kedua
mempunyai indeks ke-1, dan seterusnya.
1.2 Variabel String
Variabel string adalah variabel yang dipakai utuk menyimpan nilai string.
Misalnya :
char name[15];
merupakan instruksi untuk mendeklarasikan variabel string dengan panjang maksimal 15
karakter (termasuk karakter NULL). Deklarasi tersebut sebenarnya tidak lain merupakan
deklarasi array bertipe char.
2 Inisialisasi String
Suatu variabel string dapat diinisialisasi seperti halnya array yang lain. Namun
tentu saja elemen terakhirnya haruslah berupa karakter NULL. Sebagai contoh :
char name[] = {'R','I','N', 'I',’\0’};
yang menyatakan bahwa name adalah variabel string dengan nilai awal berupa string :
“RINI” . Bentuk inisialisasi yang lebih singkat :
char name[] = “RINI”;
Pada bentuk ini, karakter NULL tidak perlu ditulis. Secara implisit akan disisipkan oleh
kompiler. Perlu diperhatikan, bila name dideklarasikan sebagai string, penugasan
(assignment) suatu string ke variabel string seperti
name = “RINI”;
3 Input Output Data String
3.1 Memasukkan Data String
Pemasukan data string ke dalam suatu variabel biasa dilakukan dengan fungsi gets()
atau scanf(). Bentuk umum pemakaiannya adalah sebagai berikut :
#include <stdio.h>
gets(nama_array);
atau
Jobsheet Pemograman Bahasa C
112
#include <stdio.h>
scanf(“%s”, nama_array);
Perhatikan :
 nama_array adalah variabel bertipe array of char yang akan digunakan
untuk menyimpan string masukan.
 Di depan nama_array tidak perlu ada operator & (operator alamat),
karena nama_array tanpa kurung siku sudah menyatakan alamat yang
ditempati oleh elemen pertama dari array tsb.
 Kalau memakai scanf(), data string masukan tidak boleh mengandung
spasi.
Di bawah ini diberikan contoh program untuk memasukkan data nama seseorang ke dalam
array bernama name.
/* File program : yourname.c
Contoh memasukkan data string dari keyboard */
#include <stdio.h>
void main()
{
char name[15];
printf("Masukkan nama Anda : ");
gets(name);
printf("\nHalo, %s.
Selamat belajar string.\n", name);
}
Contoh eksekusi :
Masukkan nama Anda :
Halo, SAIFUDDIN.
SAIFUDDIN
Selamat belajar string.
Ruang yang disediakan setelah deklarasi: char name[15];
name :
Jobsheet Pemograman Bahasa C
113
Setelah data yang dimasukkan berupa : SAIFUDDIN
name :
S A I F U D D I N \0
karakter NULL
byte sisa tak dipakai
Gambar.2 Variabel string dan data string
Pada gambar di atas nama array tanpa kurung siku (name) menyatakan alamat dari lokasi
data string. Dan dengan pemasukan data seperti di atas, lokasi memori yang terletak
sesudah lokasi yang berisi ‘N’ akan secara otomatis terisi karakter NULL (lihat gambar
7.2)
Perlu diketahui, fungsi gets() akan membaca seluruh karakter yang diketik melalui
keyboard sampai tombol ENTER ditekan. Dalam hal ini tidak ada pengecekan terhadap
batasan panjang array yang merupakan argumennya.
Jika string yang dimasukkan
melebihi ukuran array, maka sisa string (panjang string masukan dikurangi ukuran array
plus karakter NULL) akan ditempatkan di lokasi sesudah bagian akhir dari array tersebut.
Tentu saja kejadian seperti ini bisa menimbulkan hal yang tidak diinginkan, misalnya
berubahnya isi variabel yang dideklarasikan sesudah array tersebut karena tertumpuki oleh
string yang dimasukkan (overwrite), atau perilaku program yang sama sekali berbeda
dengan kemauan user yang dalam hal ini pelacakan kesalahannya (debugging) sangat sulit
dilakukan, atau bahkan terjadi penghentian program secara tidak normal.
Untuk mengatasi hal itu, disarankan untuk menggunakan fungsi fgets() untuk
menggantikan fungsi gets() dalam memasukkan data string.
Bentuk umum pemakaian fgets() adalah :
#include <stdio.h>
fgets(nama_array, sizeof nama_array, stdin);
Untuk lebih jelasnya, perhatikan contoh penggunaan fungsi fgets() ini pada contoh
program untuk menghitung karakter masukan (hitkar.c) di halaman
Jobsheet Pemograman Bahasa C
??????.
114
3.2 Menampilkan Isi Variabel String
Untuk menampilkan isi variabel string, fungsi yang digunakan adalah puts() atau
printf(). Bentuk umum pemakaiannya adalah sebagai berikut :
#include <stdio.h>
puts(var_string);
atau
printf("%s",var_string);
Dalam hal ini var_string adalah sebuah variabel yang berupa sebuah array of char. Fungsi
puts() akan menampilkan isi dari var_string dan secara otomatis menambahkan karakter
'\n' di akhir string. Sedangkan fungsi printf() akan menampilkan isi variabel string tanpa
memberikan tambahan '\n'.
Sehingga, agar kedua pernyataan di atas memberikan
keluaran yang sama, maka pada pernyataan printf() dirubah menjadi :
printf("%s\n", var_string);
Contoh program berikut akan menampilkan isi variabel kompiler_c, berdasarkan dua
bentuk inisialisasi string
/* File program : initstr.c
Contoh inisialisasi string */
#include <stdio.h>
void bentuk1(void);
void bentuk2(void);
void main()
{
bentuk1();
bentuk2();
}
void bentuk1(void)
{
char kompiler_c[] =
Jobsheet Pemograman Bahasa C
115
{'V','i','s','u','a','l',' ','C','+','+','\0'};
puts(kompiler_c);
}
void bentuk2(void)
{
char kompiler_c[] = "Visual C++";
printf("%s\n", kompiler_c);
}
Contoh eksekusi :
Visual C++
Visual C++
4 Mengakses Elemen String
Variabel string merupakan bentuk khusus dari array bertipe char. Oleh karena itu,
elemen dari variabel string dapat diakses seperti halnya pengaksesan elemen pada array.
Program berikut menunjukkan cara mengakses elemen array untuk menghitung total
karakter dari string yang dimasukkan melalui keyboard.
/* File Program : hitkar.c
Contoh untuk menghitung banyaknya karakter dari suatu string
yang dimasukkan melalui keyboard */
#include <stdio.h>
#define MAKS 256
void main()
{
int i, jumkar = 0;
char teks[MAKS];
puts("Masukkan suatu kalimat (maks 255 karakter).");
puts("Saya akan menghitung jumlah karakternya.\n");
fgets(teks, sizeof teks, stdin);
for(i=0; teks[i]; i++)
jumkar++;
Jobsheet Pemograman Bahasa C
116
printf("\nJumlah karakter = %d\n", jumkar);
}
Contoh eksekusi :
Masukkan satu kalimat (maks 255 karakter).
Saya akan menghitung jumlah karakternya.
SAYA SUKA BELAJAR BAHASA C
Jumlah karakter = 26
Perhitungan jumlah karakter dari string teks dapat dilakukan dengan memeriksa elemen
dari string dimulai dari posisi yang pertama (indeks ke-0) sampai ditemukannya karakter
NULL. Elemen yang ke-i dari teks dinyatakan dengan
teks[i]
Pemeriksaan terhadap teks[i] selama tidak berupa karakter NULL (dimulai dari indeks ke0) dilakukan dengan instruksi
for(i=0; teks[i]; i++)
jumkar++;
Kondisi teks[i] pada for mempunyai makna yang secara implisit berupa
teks[i] != ‘\0;
atau “karakter yang ke-i dari teks tidak sama dengan karakter NULL”
Contoh berikut ini akan memberikan gambaran mengenai cara menyalin nilai ke suatu
variabel string.
/* File program : salinstr.c
Contoh menyalin suatu string */
#include <stdio.h>
#define MAKS 30
void main()
{
int i;
char keterangan[] = “Saya menyukai bahasa C”;
Jobsheet Pemograman Bahasa C
117
char kalimat[MAKS];
i=0;
while (keterangan[i] != ‘\0’)
{
kalimat[i] = keterangan[i];
i++;
}
kalimat[i] = ‘\0’; /* beri karakter NULL */
printf(“Isi kalimat : %s\n”, kalimat);
}
Contoh eksekusi :
Isi kalimat : Saya menyukai bahasa C
Untuk menyalin isi variabel string keterangan ke kalimat, pernyataan yang digunakan
berupa
i=0;
while (keterangan[i] != ‘\0’)
{
kalimat[i] = keterangan[i];
i++;
}
Selama keterangan[i] tidaklah berupa karakter NULL, maka keterangan[i] disalin ke
kalimat[i]. Jelas bahwa di dalam loop while tidak terdapat penyalinan karakter NULL dari
keterangan ke kalimat. Oleh karena itu sekeluarnya dari loop while, pemberian karakter
NULL ke kalimat perlu dilakukan. Pernyataan yang digunakan berupa
kalimat[i] = ‘\0’;
Bentuk yang lebih singkat untuk melakukan penyalinan dari keterangan ke kalimat berupa
i=0;
while (kalimat[i] = keterangan[i])
i++;
Jobsheet Pemograman Bahasa C
118
Dengan penulisan seperti di atas, penyalinan karakter NULL juga akan dilakukan secara
otomatis.
Setelah menyalin karakter NULL (karena kondisi bernilai NULL) maka
eksekusi terhadap loop akan dihentikan. Dengan demikian sekeluarnya dari loop tidak
perlu lagi ada pernyataan.
kalimat[i] = ‘\0’;
5 Fungsi-Fungsi Mengenai String
Berikut ini akan dibahas beberapa fungsi pustaka yang umumnya disediakan oleh
kompiler C untuk mengoperasikan suatu nilai string. Fungsi-fungsi pustaka untuk operasi
string, prototype-prototype nya berada di file judul string.h. Beberapa di antara fungsi
pustaka untuk operasi string akan dibahas di bawah ini.
5.1 Fungsi strcpy() untuk Menyalin Nilai String
Bentuk pemakaian :
#include <string.h>
strcpy(tujuan, asal)
Fungsi ini dipakai untuk menyalin string asal ke variabel string tujuan termasuk
karakter '\0'. Keluaran dari fungsi ini (return value) adalah string tujuan. Dalam hal ini,
variabel tujuan haruslah mempunyai ukuran yang dapat digunakan untuk menampung
seluruh karakter dari string asal.
Contoh implementasinya bisa dilihat pada program
salinstr2.c di bawah ini.
/* File program :salinstr2.c
Contoh menyalin isi str2 ke str1 */
#include <stdio.h>
#include <string.h>
#define MAKS 80
void main()
{
char str1[MAKS];
Jobsheet Pemograman Bahasa C
119
char str2[]="ABCDE";
strcpy(str1, str2);
/* menyalin isi str2 ke str1 */
printf("String pertama adalah : %s\n", str1);
printf("String kedua adalah
: %s\n", str2);
}
Contoh eksekusi :
String pertama adalah : ABCD
String kedua adalah
: ABCD
Fungsi strlen() untuk Mengetahui Panjang Nilai String
Bentuk pemakaian :
#include <string.h>
strlen(var_string);
Fungsi ini digunakan untuk memperoleh banyaknya karakter di dalam string yang
menjadi argumennya (var_string). Keluaran dari fungsi ini adalah panjang dari var_string.
Karakter NULL tidak ikut dihitung. Contoh implementasinya bisa dilihat pada program
panjangstr.c di bawah ini.
/* File program : panjangstr.c
Contoh memperoleh panjang suatu string */
#include <stdio.h>
#include <string.h>
void main()
{
char salam[] = "Halo";
printf("Panjang string = %d karakter\n",
strlen(salam));
}
Contoh eksekusi :
Panjang string = 4 karakter
Jobsheet Pemograman Bahasa C
120
5.3 Fungsi strcat() untuk Menggabung Nilai String
Bentuk pemakaian :
#include <string.h>
strcat(tujuan, sumber);
Menggabungkan dua buah nilai string tidak dapat dilakukan dengan operator ‘+’,
karena operator ini bukan operator untuk operasi string. Penggabungan dua buah nilai
string dapat dilakukan dengan fungsi pustaka strcat() dengan menambahkan string sumber
ke bagian akhir dari string tujuan. Keluaran dari fungsi ini adalah string tujuan. Contoh
implementasinya bisa dilihat pada program gabungstr.c di bawah ini.
/* File program :gabungstr.c
Contoh menggabungkan isi string1 dengan string2 */
#include <stdio.h>
#include <string.h>
#define PJG 15
void main()
{
char str1[PJG], str2[PJG];
strcpy(str1, “sala”); /* str1 diisi “sala” */
strcpy(str2, “tiga”); /* str2 diisi “tiga” */
strcat(str1, str2);
/* tambahkan str2 ke akhir str1 */
printf(“str1  %s
str2  %s\n”, str1, str2);
}
Contoh eksekusi :
str1  salatiga
Jobsheet Pemograman Bahasa C
str2  tiga
121
Dalam hal ini str1 (“sala”) digabungkan dengan str2 (“tiga”) dengan hasilnya berada di
str1 (“salatiga”).
5.4 Fungsi strcmp() untuk Membandingkan Dua Nilai String
Membandingkan dua nilai string juga tidak dapat digunakan dengan operator
hubungan, karena operator tersebut tidak untuk operasi string. Membandingkan dua buah
nilai string dapat dilakukan dengan fungsi pustaka strcmp().
Contoh bentuk pemakaian fungsi :
#include <string.h>
strcmp(str1, str2);
Fungsi ini dipakai untuk membandingkan string str1 dengan string str2. Keluaran
dari fungsi ini bertipe int yang berupa nilai :

-1, jika str1 kurang dari str2

0, jika str1 sama dengan str2

1, jika str1 lebih dari str2
Pembandingan dilakukan untuk karakter pada posisi yang sama dari str1 dan str2,
dimulai dari karakter terkiri. Acuan pembandingan dari dua buah karakter didasarkan oleh
nilai ASCII-nya. Misal, karakter ‘A’ lebih kecil daripada ‘B’ dan karakter ‘B lebih kecil
daripada ‘C’. Contoh implementasinya bisa dilihat pada program bandingstr.c di bawah
ini.
/* File program :bandingstr.c
Contoh membandingkan isi dua buah string */
#include <stdio.h>
#include <string.h>
void main()
{
char str1[]="HALO”;
char str2[]="Halo";
char str3[]="HALO”;
printf(“Hasil pembandingan %s dengan %s --> %d\n”,
str1, str2, strcmp(str1, str2));
Jobsheet Pemograman Bahasa C
122
printf(“Hasil pembandingan %s dengan %s --> %d\n”,
str2, str1, strcmp(str2, str1));
printf(“Hasil pembandingan %s dengan %s --> %d\n”,
str1, str3, strcmp(str1, str3));
}
Contoh eksekusi :
Hasil pembandingan HALO dengan Halo --> -1
Hasil pembandingan Halo dengan HALO --> 1
Hasil pembandingan HALO dengan HALO --> 0
5.5 Fungsi strchr() untuk Mencari Nilai Karakter dalam String
Bentuk pemakaian :
#include <string.h>
strchr(var_string, kar);
Fungsi ini dapat digunakan untuk mencari suatu nilai karakter yang berada dalam
suatu nilai string. Dalam hal ini adalah mencari karakter kar dalam string var_string.
Keluaran dari fungsi ini adalah alamat posisi dari karakter pertama pada nilai string, yang
sama dengan karakter yang dicari. Jika karakter yang dicari tidak ada dalam nilai string,
maka fungsi ini akan memberikan hasil nilai pointer kosong (null).
Contoh
implementasinya bisa dilihat pada program carikar.c di bawah ini.
/* File program : carikar.c
Contoh mencari karakter dalam sebuah string */
#include <stdio.h>
#include <string.h>
void main()
{
char str[]="ABcde”;
/* inisialisasi string */
char *hasil1,*hasil2;
Jobsheet Pemograman Bahasa C
123
/* var bertipe pointer to char, agar bisa ditampilkan isi
dari alamat yang ditunjuk oleh hasil1 & hasil2 */
hasil1 = strchr(str, ‘B’);
hasil2 = strchr(str, ‘X’);
printf(“Dari string ABcde\n”);
printf(“Mencari karakter B = %s\n”, hasil1);
printf(“Mencari karakter X = %s\n”, hasil2);
}
Contoh eksekusi :
Dari string ABcde
Mencari karakter B = Bcde
Mencari karakter X = (null)
Contoh di atas menunjukkan penggunaan fungsi strchr() untuk mencari nilai
karakter ‘B’ dan karakter ‘X’ dalam string ‘ABcde’. Karakter ‘B’ ada dalam nilai string
yang dicari, sehingga fungsi strchr() memberikan hasil alamat dari karakter B tersebut
yang kemudian alamat ini disimpan dalam variabel pointer hasil1. Jika variabel pointer
hasil1 ini ditampilkan dengan menggunakan kode format untuk nilai string (%s), maka
mulai dari alamat tersebut sampai dengan akhir dari nilai string yang bersangkutan akan
ditampilkan, sehingga didapatkan keluaran :
Mencari karakter B = Bcde
Sedangkan pencarian karakter ‘X’ memberikan hasil null karena karakter tersebut tidak
ditemukan dalam string ‘ABcde”, sehingga didapatkan keluaran :
Mencari karakter X = (null)
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
Jobsheet Pemograman Bahasa C
124
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file program
yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama file
sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan untuk
mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Memasukkan data string dari keyboard
/* File program : nama.c */
#include <stdio.h>
#define MAKS 15
Void main()
{
char nama[MAKS];
printf("Masukkan nama Anda : ");
gets(nama);
printf("\nHalo, %s.
Selamat belajar string.\n", nama);
}
Jobsheet Pemograman Bahasa C
125
2. Variasi dalam menginisialisasi string.
/* File program : initStr.c */
#include <stdio.h>
void bentuk1(void);
void bentuk2(void);
void main()
{
bentuk1();
bentuk2();
}
void bentuk1(void)
{
char kompiler_c[] =
{'V','i','s','u','a','l',' ','C','+','+','\0'};
puts(kompiler_c);
}
void bentuk2(void)
{
char kompiler_c[] = "Visual C++";
printf("%s\n", kompiler_c);
}
3. Menghitung banyaknya karakter dari suatu string yang dimasukkan melalui keyboard.
/* File Program : hitkar.c */
#include <stdio.h>
#define MAKS 256
Void main()
{
int i, jumkar;
char teks[MAKS];
puts("Masukkan suatu kalimat (maks 255 karakter).");
puts("Saya akan menghitung jumlah karakternya.\n");
fgets(teks, sizeof teks, stdin);
jumkar = 0;
for(i=0; teks[i]; i++)
jumkar++;
printf("\nJumlah karakter = %d\n", jumkar);
}
Jobsheet Pemograman Bahasa C
126
4. Menyalin sebuah string masukan.
/* File program : salinstr1.c */
#include <stdio.h>
#define MAKS 256
main()
{
int i = 0;
char keterangan[MAKS], kalimat[MAKS];
printf("Masukkan kalimat yang mau disalin :\n");
fgets(keterangan, sizeof keterangan, stdin);
while (keterangan[i] != '\0')
{
kalimat[i] = keterangan[i];
i++;
}
kalimat[i] = '\0';
/* beri karakter NULL */
printf("\nIsi salinan kalimat :\n%s\n", kalimat);
}
5. Menyalin isi string1 ke string2 menggunakan fungsi strcpy().
/* File program :salinstr2.c */
#include <stdio.h>
#include <string.h>
Void main()
{
char str1[80];
char str2[]="ABCDE";
strcpy(str1, str2);
/* menyalin isi str2 ke str1 */
printf("String pertama adalah : %s\n", str1);
printf("String kedua adalah
: %s\n", str2);
}
6. Menghitung suatu string masukan menggunakan fungsi strlen().
/* File program : panjangstr.C */
#include <stdio.h>
#include <string.h>
#define MAKS 256
Void main()
{
Jobsheet Pemograman Bahasa C
127
char kal[MAKS];
printf("Masukkan kalimat yang akan dihitung
panjangnya :\n");
fgets(kal, sizeof kal, stdin);
printf("\nPanjang string tsb = %d karakter\n",
strlen(kal));
}
7. Menggabungkan isi string1 dengan string2 menggunakan fungsi strcat().
/* File program :gabungstr.c */
#include <stdio.h>
#include <string.h>
#define PJG 15
Void main()
{
char str1[PJG], str2[PJG];
strcpy(str1, "sala");
strcpy(str2, "tiga");
/* str1 diisi "sala" */
/* str2 diisi "tiga" */
strcat(str1, str2);
/* tambahkan str2 ke akhir st1 */
printf("str1 --> %s
str2 --> %s\n", str1, str2);
}
8. Membandingkan isi string1 dengan string2 menggunakan fungsi strcmp().
/* File program : bandingstr1.c */
#include <stdio.h>
#include <string.h>
Void main()
{
char string1[]="ABcde";
char string2[]="ABCDE";
int hasil;
hasil = strcmp(string1, string2);
if(hasil == 0)
printf("String1 sama dengan string2\n");
else if(hasil < 0)
printf("String1 lebih kecil dari string2\n");
else
printf("String1 lebih besar dari string2\n");
}
Jobsheet Pemograman Bahasa C
128
9. Membandingkan isi string1 dengan string2 menggunakan fungsi strcmp().
/* File program : bandingstr2.c */
#include <stdio.h>
#include <string.h>
Void main()
{
char str1[]="HALO";
char str2[]="Halo";
char str3[]="HALO";
printf("Hasil pembandingan %s dengan %s --> %d\n",
str1, str2, strcmp(str1, str2));
printf("Hasil pembandingan %s dengan %s --> %d\n",
str2, str1, strcmp(str2, str1));
printf("Hasil pembandingan %s dengan %s --> %d\n",
str1, str3, strcmp(str1, str3));
}
10. Mencari karakter dalam sebuah string menggunakan fungsi strchr().
/* File program : carikar.c */
#include <stdio.h>
#include <string.h>
Void main()
{
char str[]="ABcde";
char *hasil1;
char *hasil2;
hasil1 = strchr(str, 'B');
hasil2 = strchr(str, 'X');
printf("Dari string ABcde\n");
printf("Mencari karakter B = %s\n", hasil1);
printf("Mencari karakter X = %s\n", hasil2);
}
11. String sebagai parameter fungsi
/* File program : kiri.c */
#include <stdio.h>
#include <string.h>
#define MAKS 30
void strkiri(char [], int, char []);
Jobsheet Pemograman Bahasa C
129
void main()
{
char kata[MAKS], tampung[MAKS];
int pj, i;
printf("Kata yang ditampilkan : ");
scanf("%s",kata);
pj = strlen(kata);
printf("\n");
for (i=pj; i>0; i--)
{
strkiri(kata, pj-i, tampung);
printf("%s\n", tampung);
}
printf("\n");
}
void strkiri(char asal[], int n, char hasil[])
{
int i;
for(i=0; i<=n; i++)
hasil[i] = asal[i];
hasil[i] = '\0';
/* beri karakter NULL */
}
F. SOAL
1. Ketikkan sebuah kalimat melalui keyboard dengan menggunakan gets() (atau
fgets()) kemudian didapatkan keluaran berupa laporan tentang jumlah huruf kecil
dan huruf kapital dalam kalimat tsb.
2. Masukkan nama Anda, rubah ke dalam huruf besar semua, balikkan urutan
hurufnya, selanjutnya tampilkan hasilnya di layar.
3. Ketikkan sebuah kalimat, hitung dan tampilkan jumlah spasinya.
4. Ketikkan sebuah kalimat, kemudian tampilkan kalimat tsb satu kata perbaris.
Asumsikan ada satu spasi yang memisahkan setiap kata dan kalimat diakhiri
dengan sebuah tanda titik.
Jobsheet Pemograman Bahasa C
130
5. Ketikkan sebuah kalimat melalui keyboard kemudian didapatkan keluaran berupa
laporan apakah kalimat tsb palindrom ataukah bukan. Misal :
Kalimat : KASUR RUSAK
Termasuk PALINDROM
Kalimat : MAKAN MALAM
Bukan PALINDROM
Catatan : disebut palindrom adalah bila urutan kalimat dibalik akan menghasilkan
kalimat yang sama. Gunakan berbagai fungsi berkaitan dengan string
yang sudah dijelaskan di atas.
Jobsheet Pemograman Bahasa C
131
PRAKTIKUM VIII
POINTER
A. Tujuan Instruktional Khusus
1. Menjelaskan tentang konsep dari variabel pointer
2. Menjelaskan tentang pointer array
3. Menjelaskan tentang pointer string
4. Menjelaskan tentang array pointer
5. Menjelaskan tentang pointer dalam fungsi
6. Menjelaskan tentang pointer sebagai parameter fungsi
7. Menjelaskan tentang pointer yang menunjuk pointer.
B. Dasar Teori.
1. Konsep Dasar Pointer
Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain.
Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu
obyek yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variabel pointer
dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat
awal) 1000, maka px akan berisi 1000. Sebagaimana diilustrasikan pada gambar 8.1 di
bawah ini
px
zzzz
1000
Address
1000
?
x
Gambar 1 Variabel pointer px menunjuk ke variabel x
2. Mendeklarasikan Variabel Pointer
Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :
tipe *nama_variabel
Jobsheet Pemograman Bahasa C
132
dengan tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab sebelumnya,
maupun bab-bab berikutnya. Adapun nama_variabel adalah nama dari variabel pointer.
Sebagai contoh :
int px;
char *pch1, *pch2;
/ *contoh 1 */
/ *contoh 2 */
Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu
data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer
yang menunjuk ke data bertipe char.
menyatakan variabel
pointer
char *pch1, *pch2;
tanda akhir pernyataan deklarasi
nama variabel pointer
tipe data yang ditunjuk
oleh variabel pointer
Gambar 8.2 Ilustrasi pendeklarasian variabel pointer
3. Mengatur Pointer agar Menunjuk ke Variabel Lain
Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan
alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel,
operator & (operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya
di depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int,
maka
&x
berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu variabel
pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu :
px = &x;
Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelah
pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x.
Jobsheet Pemograman Bahasa C
133
4. Mengakses Isi Suatu Variabel Melalui Pointer
Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer
tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui
pointer (pengaksesan tak langsung).
Pengaksesan tak langsung dilakukan dengan
menggunakan operator indirection (tak langsung) berupa simbol * (bersifat unary).
Contoh penerapan operator * yaitu :
*px
yang menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px” . Sebagai
contoh jika y bertipe int, maka sesudah dua pernyataan berikut
px = &x;
y = *px;
y akan berisi nilai yang sama dengan nilai x. Untuk lebih jelasnya perhatikan contoh
program ptr1.c
/* Program : ptr1.c */
#include <stdio.h>
Void main()
{
int y, x = 87;
/* x & y bertipe int */
int *px;
/* var pointer yang menunjuk ke data yang bertipe int */
x = 87;
px = &x;
y = *px;
/* px diisi dengan alamat dari variabel x */
/* y diisi dengan nilai yg ditunjuk oleh px */
printf("Alamat x
= %p\n", &x);
printf("Isi px
= %p\n", px);
printf("Isi x
= %d\n", x);
printf("Nilai yang ditunjuk oleh px = %d\n", *px);
printf("Nilai y
= %d\n", y);
}
Contoh eksekusi :
Alamat x
= 0012FF78
Isi px
= 0012FF78
Isi x
= 87
Nilai yang ditunjuk oleh px = 87
Nilai y
= 87
Jobsheet Pemograman Bahasa C
134
Pada program di atas, dua pernyataan
px = &x;
y = *px;
sebenarnya dapat digantikan dengan sebuah pernyataan berupa
y = x;
Seandainya pada program di atas tidak terdapat pernyataan
px = &x;
namun terdapat pernyataan
y = *px;
maka y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk ke variabel x. Hal
seperti ini harap diperhatikan. Kalau program melibatkan pointer, dan pointer belum
diinisialisasi, ada kemungkinan akan terjadi masalah yang dinamakan “bug” yang bisa
mengakibatkan komputer tidak dapat dikendalikan (hang).
Selain itu tipe variabel pointer dan tipe data yang ditunjuk harus sejenis. Bila tidak
sejenis maka akan terjadi hasil yang tidak diinginkan. Lebih jelasnya perhatikan contoh
program ptr2.c.
/* Program : ptr2.c */
#include <stdio.h>
Void main()
{
int *pu;
int nu;
int u = 1234;
pu = &u;
nu = *pu;
printf("Alamat dari u = %p\n", &u);
printf("Isi pu
= %p\n", pu);
printf("Isi u
= %d\n", u);
printf("Nilai yang ditunjuk oleh pu = %d\n", *pu);
printf("Nilai nu
= %d\n", nu);
}
Pada contoh di atas, saat penugasan
Jobsheet Pemograman Bahasa C
135
pu = &u;
maka pu akan menunjuk data berukuran 4 byte (tipe float) sekalipun u berukuran 2 byte
(tipe int). Oleh karena itu, pernyataan
nu = *pu;
tidak akan membuat nu berisi nilai u. untuk lebih jelasnya lihat gambar berikut.
float *pu;
float nu;
int u;
--------
u
data yang
ditunjuk oleh pu
bukan bagian dari
u
pu = &u;
Gambar .3 Ilustrasi kesalahan yang terjadi karena tipe tidak sejenis
5. Mengakses dan Mengubah isi suatu variabel Pointer
Contoh berikut memberikan gambaran tentang pengubahan isi suatu variabel secara
tak langsung (yaitu melalui pointer). Mula-mula pd dideklarasikan sebagai pointer yang
menunjuk ke suatu data bertipe float dan d sebagai variabel bertipe float. Selanjutnya
d = 54.5;
digunakan untuk mengisikan nilai 54,5 secara langsung ke variabel d. Adapun
pd = &d;
digunakan untuk memberikan alamat dari d ke pd. Dengan demikian pd menunjuk ke
variabel d. Sedangkan pernyataan berikutnya
*pd = *pd + 10;
(atau: *pd += 10; )
merupakan instruksi untuk mengubah nilai variabel d secara tak langsung. Perintah di atas
berarti “jumlahkan yang ditunjuk pd dengan 10 kemudian berikan ke yang ditunjuk oleh
pd”, atau identik dengan pernyataan
d = d + 10;
Akan tetapi, seandainya tidak ada instruksi
Jobsheet Pemograman Bahasa C
136
pd = &d;
maka pernyataan
*pd = *pd + 10;
tidaklah sama dengan
d = d + 10;
/* Program : ptr3.c */
#include <stdio.h>
main()
{
float d = 54.5f, *pd;
printf("Isi d mula-mula = %g\n", d);
pd = &d;
*pd += 10;
printf("Isi d sekarang
= %g\n", d);
}
Contoh eksekusi :
Isi d mula-mula
Isi d sekarang
= 54.5
= 64.5
5. Pointer dan Array
Hubungan antara pointer dan array pada C sangatlah erat. Sebab sesungguhnya array
secara internal akan diterjemahkan dalam bentuk pointer. Pembahasan berikut akan
memberikan gambaran hubungan antara pointer dan array.
Misalnya dideklarasikan di dalam suatu fungsi
static int tgl_lahir[3] = { 01, 09, 64 };
dan
int *ptgl;
Kemudian diberikan instruksi
ptgl = &tgl_lahir[0];
Jobsheet Pemograman Bahasa C
137
maka ptgl akan berisi alamat dari elemen array tgl_lahir yang berindeks nol. Instruksi di
atas bisa juga ditulis menjadi
ptgl = tgl_lahir;
sebab nama array tanpa tanda kurung menyatakan alamat awal dari array. Sesudah
penugasan seperti di atas,
*ptgl
dengan sendirinya menyatakan elemen pertama (berindeks sama dengan nol) dari array
tgl_lahir. Hal ini bisa dilihat melalui pembuktian program berikut.
/* Program : ptr4.c */
#include <stdio.h>
Void main()
{
static int tgl_lahir[] = {16, 4, 1974};
int *ptgl;
ptgl = tgl_lahir;
printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
printf("Nilai dari tgl_lahir[0] = %d\n", tgl_lahir[0]);
}
Contoh eksekusi :
Nilai yang ditunjuk oleh ptgl = 16
Nilai dari tgl_lahir[0]
= 16
/* Program : ptr5.c */
#include <stdio.h>
Void main()
{
static int tgl_lahir[] = {16, 4, 1974};
int *ptgl, i;
ptgl = tgl_lahir;
printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
for (i=0; i<3; i++)
printf("Nilai dari tgl_lahir[i] = %d\n",
*(ptgl+i));
}
Jobsheet Pemograman Bahasa C
138
Contoh eksekusi:
Nilai yang ditunjuk oleh ptgl = 16
Nilai dari tgl_lahir[0]
= 16
Nilai dari tgl_lahir[1]
= 4
Nilai dari tgl_lahir[2]
= 1974
/* Program : ptr6.c */
#include <stdio.h>
Void main()
{
static int tgl_lahir[] = {16, 4, 1974};
int i;
int *ptgl;
ptgl = tgl_lahir;
printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
for (i=0; i<3; i++)
printf("Nilai dari tgl_lahir[i] = %d\n", *ptgl++);
}
Keterangan : tgl_lahir[i]
=
*(ptgl+i)
=
*ptgl++
6 Pointer dan String
Contoh hubungan pointer dan string ditunjukkan pada program berikut.
/* Program : ptr4.c */
#include <stdio.h>
main()
{
/* pkota menunjuk konstanta string “SEMARANG” */
char *pkota = “SEMARANG”;
printf(“String yang ditunjuk olej pkota = ”);
puts(pkota);
}
Contoh eksekusi :
String yang ditunjuk oleh pkota = SEMARANG
Pada program di atas,
char *pkota = “SEMARANG”;
Jobsheet Pemograman Bahasa C
139
akan menyebabkan kompiler

mengalokasikan variabel pkota sebagai variabel pointer yang menunjuk ke obyek
bertipe char dan menempatkan konstanta “SEMARANG” dalam suatu memori

kemudian pointer pkota akan menunjuk ke lokasi string “SEMARANG”.
pkota
Lokasi awal string
“SEMARANG”
S E M A R A N G \
0
Gambar 4 Pointer menunjuk data
string
Pernyataan di atas menyerupai pernyataan
char kota[] = “SEMARANG”;
tetapi sebenarnya kedua pernyataan inisialisasi di depan tidaklah tepat sama. Sebab pkota
adalah pointer (menyatakan alamat) yang dengan mudah dapat diatur agar menunjuk ke
string lain (bukan string “SEMARANG”), sedangkan kota adalah array (array menyatakan
alamat yang konstan, tak dapat diubah). Perhatikan dua program di bawah ini
/* Program : arrnama.c
Menukarkan isi 2 string tanpa pemakaian pointer */
#include <stdio.h>
#include <string.h>
#define PANJANG 20
char nama1[PANJANG] = "JAMES BOND";
char nama2[PANJANG] = "HERCULE POIROT";
void main()
{
char namax[PANJANG];
puts("SEMULA : ");
printf("nama1 --> %s\n", nama1);
printf("nama2 --> %s\n", nama2);
strcpy(namax, nama1);
strcpy(nama1, nama2);
strcpy(nama2, namax);
puts("KINI : ");
printf("nama1 --> %s\n", nama1);
printf("nama2 --> %s\n", nama2);
}
Jobsheet Pemograman Bahasa C
140
/* Program : ptrnama.c
Menukarkan isi 2 string dengan fasilitas pointer */
#include <stdio.h>
#include <string.h>
char *nama1 = "JAMES BOND";
char *nama2 = "HERCULE POIROT";
void main()
{
char *namax;
puts("SEMULA : ");
printf("nama1 --> %s\n", nama1);
/* nama1:pointer yg menunjuk ke string JAMES BOND */
printf("nama2 --> %s\n", nama2);
/* nama2:pointer yg menunjuk ke string HERCULE POIROT */
namax = nama1;
nama1 = nama2;
nama2 = namax;
puts("KINI : ");
printf("nama1 --> %s\n", nama1);
printf("nama2 --> %s\n", nama2);
}
7. Array dari Pointer

Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai contoh:
char *namahari[10];
merupakan pernyataan untuk mendeklarasikan array pointer. Array namahari terdiri
dari 10 elemen berupa pointer yang menunjuk ke data bertipe char.
xxx
x
?
?
?
?
?
namahari
Gambar 5 Array pointer
Jobsheet Pemograman Bahasa C
141

Array pointer bisa diinisialisasi sewaktu pendeklarasian. Sebagai contoh:
static char *namahari[] =
{“Senin”,
“Selasa”,
“Rabu”,
“Kamis”,
“Jumat”,
“Sabtu”,
“Minggu”
};
Pada contoh ini,
namahari[0] berisi alamat yang menunjuk ke string “Senin”.
namahari[1] berisi alamat yang menunjuk ke string “Selasa”.
namahari[2] berisi alamat yang menunjuk ke string “Rabu”.
dan sebagainya.
8. Pointer menunjuk Pointer
Suatu pointer bisa saja menunjuk ke pointer lain. Gambar berikut memberikan
contoh mengenai pointer menunjuk pointer.
Pointer
ptr2
Pointer
ptr1
Variabel
var_x
alamat
ptr1
alamat
ptr1
nilai
Gambar 6 Pointer yang menunjuk pointer

Untuk membentuk rantai pointer seperti pada gambar di atas, pendeklarasian yang
diperlukan berupa
int var_x;
int *ptr1;
int **ptr2;
Perhatikan pada deklarasi di depan:

var_x adalah variabel bertipe int.

ptr1 adalah variabel pointer yang menunjuk ke data bertipe int.

ptr2 adalah variabel pointer yang menunjuk ke pointer int.
(itulah sebabnya deklarasinya berupa int **ptr2; )
Jobsheet Pemograman Bahasa C
142

Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa
ptr1 = &var_x;

Sedangkan supaya ptr2 menunjuk ke ptr1, instruksi yang diperlukan adalah
ptr2 = &ptr1;

Contoh berikut memberikan gambaran cara pengaksesan nilai pada var_x melalui
pointer ptr2 dan ptr1.
/* File program : ppointer.c
Contoh program untuk pointer yang menunjuk pointer */
#include <stdio.h>
main()
{
int var_x = 273;
int *ptr1;
int **ptr2;
ptr1 = &var_x;
ptr2 = &ptr1;
printf("Nilai var_x = %d\n", *ptr1);
printf("Nilai var_x = %d\n", **ptr2);
}
Contoh eksekusi :
Nilai var_x
Nilai var_x
=
=
273
273
9. Pointer dalam Fungsi
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi :

Pointer sebagai parameter fungsi

Pointer sebagai keluaran fungsi
9.1 Pointer sebagai parameter fungsi

Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu variabel
internal dapat diubah oleh fungsi yang dipanggil.

Sebagai contoh dapat dilihat pada fungsi berikut.
Jobsheet Pemograman Bahasa C
143
void naikkan_nilai (int *x, int *y)
{
*x = *x + 2;
*y = *y + 2;
}

Fungsi di atas dimaksudkan agar kalau dipanggil, variabel yang berkenaan dengan
parameter aktual dapat diubah nilainya, masing-masing dinaikkan sebesar 2. Contoh
pemanggilan :
naikkan_nilai(&a, &b);

Perhatikan, dalam hal ini variabel a dan b harus ditulis diawali operator alamat (&)
yang berarti menyatakan alamat variabel, sebab parameter fungsi dalam pendefinisian
berupa pointer.
/* Program : argptr.c
Fungsi dengan argumen berupa pointer
*/
#include <stdio.h>
void naikkan_nilai(int *x, int *y);
void main()
{
int a = 3;
int b = 7;
printf("SEMULA : a = %d
b = %d\n", a, b);
naikkan_nilai(&a, &b);
printf("KINI
: a = %d
b = %d\n", a, b);
}
void naikkan_nilai(int *x, int *y)
{
*x = *x + 2;
*y = *y + 2;
}
Contoh eksekusi :
Semula : a = 3
Kini
: a = 5
b = 7
b = 9
Jobsheet Pemograman Bahasa C
144
9.2 Pointer sebagai keluaran fungsi (return value)

Suatu fungsi dapat dibuat agar keluarannya berupa pointer. Misalnya, suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string nama_bulan, seperti
pada contoh berikut.
char *nama_bulan(int n)
{
static char *bulan[]=
{“Kode bulan salah”, “Januari”, “Februari”, Maret”,
“April”, “Mei”, “Juni”, “Juli”, "Agustus”,
“September”, “Oktober”, “Nopember”,“Desember”
};
return ( (n<1 | | n>12) ? bulan[0] : bulan[n] );
}

Pada definisi fungsi di atas,
char *nama_bulan()
menyatakan bahwa keluaran fungsi nama_bulan() berupa pointer yang menunjuk ke
obyek char (atau string).

Dalam fungsi nama_bulan(), mula-mula array bernama bulan dideklarasikan dan
sekaligus diinisialisasi agar menunjuk sejumlah string yang menyatakan nama bulan.
Di bagian akhir fungsi, pernyataan
return ( (n<1 || n>12) ? bulan[0] : bulan[n] );
menyatakan bahwa hasil fungsi berupa pointer yang menunjuk ke
 string “Kode bulan salah” (bulan[0]) jika masukan fungsi n<1 atau n>12
 bulan[n] untuk n yang terletak antara 1 sampai dengan 12.
/* File program : pbulan.c
Fungsi dengan keluaran berupa pointer yang menunjuk string */
#include <stdio.h>
char *nama_bulan(int n);
main()
{
int bl;
printf("Bulan 1..12 : ");
scanf("%d", &bl);
Jobsheet Pemograman Bahasa C
145
printf("Bulan ke-%d adalah %s\n", bl, nama_bulan(bl));
}
char *nama_bulan(int n)
{
static char *bulan[] = {
"Kode bulan salah",
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
};
return ((n<1||n>12) ? bulan[0] : bulan[n]);
}
C. Daftar Alat dan Bahan.
1.CPU
2.Monitor
3.Keyboard
4.Mouse
5.Printer
6.Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file
program yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
Jobsheet Pemograman Bahasa C
146
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama
file sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan
untuk mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Mengakses isi suatu variabel melalui pointer.
/* Program : ptr1.c */
#include <stdio.h>
Void main()
{
int y, x = 87;
/* x & y bertipe int */
int *px;
/* var pointer yg menunjuk ke data yang bertipe int */
px = &x;
y = *px;
/* px diisi dgn alamat dari variabel x */
/* y diisi dgn nilai yang ditunjuk oleh px */
printf("Alamat x
= %p\n", &x);
printf("Isi px
= %p\n", px);
printf("Isi x
= %d\n", x);
printf("Nilai yang ditunjuk oleh px = %d\n", *px);
printf("Nilai y
= %d\n", y);
}
2. Mengakses isi suatu variabel melalui pointer. Tipe variabel pointer dan tipe data yang
ditunjuk harus sejenis.
/* Program : ptr2.c */
#include <stdio.h>
Void main()
{
int *pu;
int nu;
int u = 1234;
pu = &u;
nu = *pu;
printf("Alamat dari u
printf("Isi pu
printf("Isi u
Jobsheet Pemograman Bahasa C
= %p\n", &u);
= %p\n", pu);
= %d\n", u);
147
printf("Nilai yang ditunjuk oleh pu = %d\n", *pu);
printf("Nilai nu
= %d\n", nu);
}
3. Mengubah isi suatu variabel melalui pointer.
/* Program : ptr3.c */
#include <stdio.h>
Void main()
{
float d = 54.5f, *pd;
printf("Isi d mula-mula = %g\n", d);
pd = &d;
*pd += 10;
printf("Isi d sekarang
= %g\n", d);
}
4. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan
indeksnya menunjukkan alamat elemen pertama dari array (versi 1).
/* Program : ptr4.c */
#include <stdio.h>
Void main()
{
static int tgl_lahir[] = {16, 4, 1974};
int *ptgl;
printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
printf("Nilai dari tgl_lahir[0] = %d\n", tgl_lahir[0]);
}
5. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan
indeksnya menunjukkan alamat elemen pertama dari array (versi 2).
/* Program : ptr5.c */
#include <stdio.h>
Void main()
{
static int tgl_lahir[] = {16, 4, 1974};
int *ptgl, i;
ptgl = tgl_lahir;
Jobsheet Pemograman Bahasa C
148
printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
for (i=0; i<3; i++)
printf("Nilai dari tgl_lahir[i] = %d\n", *(ptgl+i));
}
6. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan
indeksnya menunjukkan alamat elemen pertama dari array (versi 3).
/* Program : ptr6.c */
#include <stdio.h>
Void main()
{
static int tgl_lahir[] = {16, 4, 1974};
int i;
int *ptgl;
ptgl = tgl_lahir;
printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
for (i=0; i<3; i++)
printf("Nilai dari tgl_lahir[i] = %d\n", *ptgl++);
}
7. Menukarkan isi 2 string tanpa pemakaian pointer.
/* Program : arrnama.c */
#include <stdio.h>
#include <string.h>
#define PANJANG 20
char nama1[PANJANG] = "GATUTKACA";
char nama2[PANJANG] = "HANOMAN";
void main()
{
char namax[PANJANG];
puts("SEMULA : ");
printf("nama1 --> %s\n", nama1);
printf("nama2 --> %s\n", nama2);
strcpy(namax, nama1);
strcpy(nama1, nama2);
strcpy(nama2, namax);
puts("KINI : ");
printf("nama1 --> %s\n", nama1);
printf("nama2 --> %s\n", nama2);
}
Jobsheet Pemograman Bahasa C
149
8. Menukarkan isi 2 string dengan fasilitas pointer.
/* Program : ptrnama.c
Menukarkan isi 2 string dengan fasilitas pointer */
#include <stdio.h>
#include <string.h>
char *nama1 = "GATUTKACA";
char *nama2 = "HANOMAN";
void main()
{
char *namax;
puts("SEMULA : ");
printf("nama1 --> %s\n",
/* nama1 adl pointer yg
printf("nama2 --> %s\n",
/* nama2 adl pointer yg
nama1);
menunjuk ke string GATUTKACA*/
nama2);
menunjuk ke string HANOMAN*/
namax = nama1;
nama1 = nama2;
nama2 = namax;
puts("KINI : ");
printf("nama1 --> %s\n", nama1);
printf("nama2 --> %s\n", nama2);
}
9. Pointer yang menunjuk ke pointer yang lain.
/* Program : ppointer1.c */
#include <stdio.h>
Void main()
{
int a, *b, **c;
a = 155;
b = &a;
c = &b;
printf("Nilai a = %d atau %d
printf("b = %p = alamat a di
printf("c = %p = alamat b di
printf("alamat c di memori =
atau %d\n", a, *b, **c);
memori\n", b);
memori\n", c);
%p\n", &c);
}
Jobsheet Pemograman Bahasa C
150
10. Pointer yang menunjuk ke pointer yang lain.
/* Program : ppointer2.c */
#include <stdio.h>
main()
{
int var_x = 273;
int *ptr1;
int **ptr2;
ptr1 = &var_x;
ptr2 = &ptr1;
printf("Nilai var_x = *ptr1 = %d\n", *ptr1);
printf("Nilai var_x = **ptr2 = %d\n\n", **ptr2);
printf("ptr1 = &var_x = %p\n", ptr1);
printf("ptr2 = &ptr1 = %p\n", ptr2);
printf("
&ptr2 = %p\n", &ptr2);
}
11. Fungsi dengan argumen berupa pointer.
/* Program : argptr.c */
#include <stdio.h>
void naikkan_nilai(int *x, int *y);
main()
{
int a = 3;
int b = 7;
printf("SEMULA : a = %d
b = %d\n", a, b);
naikkan_nilai(&a, &b);
printf("KINI
: a = %d
b = %d\n", a, b);
}
void naikkan_nilai(int *x, int *y)
{
*x = *x + 2;
*y = *y + 2;
}
Jobsheet Pemograman Bahasa C
151
12. Fungsi dengan keluaran berupa pointer yang menunjuk string.
/* Program : pbulan.c */
#include <stdio.h>
char *nama_bulan(int n);
main()
{
int bl;
printf("Bulan 1..12 : ");
scanf("%d", &bl);
printf("Bulan ke-%d adalah %s\n", bl, nama_bulan(bl));
}
char *nama_bulan(int n)
{
static char *bulan[] =
{
"Kode bulan salah",
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
};
return ((n<1||n>12) ? bulan[0] : bulan[n]);
}
C. SOAL
Perkirakan hasil eksekusi dari program-program di bawah ini :
1. /* Program : lat1.c */
#include <stdio.h>
Void main()
{
int z = 20, s = 30;
int *pz, *ps;
pz = &z;
ps = &s;
Jobsheet Pemograman Bahasa C
152
*pz += *ps;
printf("z = %d\n", z);
printf("s = %d\n", s);
}
2. /* Program : ps1.c */
#include <stdio.h>
Void main()
{
char c = 'Q';
char *char_pointer = &c;
printf("%c %c\n", c, *char_pointer);
c = '/';
printf("%c %c\n", c, *char_pointer);
*char_pointer = '(';
printf("%c %c\n", c, *char_pointer);
}
3. /* Program : ps2.c */
#include <stdio.h>
Void main()
{
int i1, i2, *p1, *p2;
i1
p1
i2
p2
=
=
=
=
5;
&i1;
*p1 / 2 + 10;
p1;
printf("i1 = %d, i2 = %d, *p1 = %d, *p2 = %d\n", i1, i2,
*p1,*p2);
}
4. /* Program : pstring1.c */
#include <stdio.h>
Void main()
{
char *text_pointer = "Good morning!";
while(*text_pointer != '\0')
{
printf("%c", *text_pointer);
text_pointer++;
};
printf("\n\n");
}
Jobsheet Pemograman Bahasa C
153
PRAKTIKUM IX
STRUKTUR
A. TUJUAN INSTRUKSIONAL KHUSUS
1. Menjelaskan cara mendeklarasikan struktur
2. Menjelaskan cara menginisialisasi struktur
3. Menjelaskan cara mengakses elemen struktur
4. Menjelaskan pemebentukan array dari struktur (array of struct)
5. Menjelaskan tentang hubungan antara struktur dengan fungsi
6. Menjelaskan tentang hubungan antara struktur dengan pointer
B. Dasar Teori
Struktur adalah pengelompokan variabel-variabel yang bernaung dalam satu nama
yang sama. Berbeda dengan larik (array) yang berisi kumpulan variabel-variabel yang
bertipe sama dalam satu nama, maka suatu struktur dapat terdiri atas variabel-variabel yang
berbeda tipenya dalam satu nama struktur. Struktur biasa dipakai untuk mengelompokkan
beberapa informasi yang berkaitan menjadi sebuah kesatuan (dalam bahasa PASCAL,
struktur disebut dengan record).
Variabel-variabel yang membentuk suatu struktur, selanjutnya disebut sebagai
elemen dari struktur atau field. Dengan demikian dimungkinkan suatu struktur dapat
berisi elemen-elemen data berbeda tipe seperti char, int, float, double, dan lain-lain.
Contoh sebuah struktur adalah informasi data tanggal (date) yang berisi :
-
day
-
month, dan
-
year
1. Mendefinisikan & Mendeklarasikan Struktur
Suatu struktur didefinisikan dengan menggunakan kata kunci struct.
Contoh
pendefinisian sebuah tipe data struktur :
struct date {
int month;
Jobsheet Pemograman Bahasa C
154
int
int
day;
year;
};
yang mendefinisikan sebuah tipe data struktur bernama date yang memiliki tiga buah
elemen (field) berupa :
- day
- month
- year
nama tipe struktur
kata kunci
mengawali dan
mengakhiri
elemen-elemen
struktur
struct date
{ int month;
int day;
int year;
};
masing-masing
disebut field atau
elemen struktur
Gambar 1 Pendefinisian tipe struktur
Untuk mendeklarasikan sebuah variabel today yang bertipe struktur date
pernyataan yang diperlukan adalah sebagai berikut:
struct date today;
nama tipe struktur
variabel struktur
Gambar 2 Pendeklarasian variabel bertipe struktur
Pernyataan di atas menyatakan bahwa variabel today bertipe struktur date.
Dalam mendefinisikan sebuah struktur, elemen yang terkandung di dalamnya bisa
juga berupa sebuah struktur, contoh :
struct date {
int month, day, year;
};
struct person {
char name[30];
struct date birthday;
};
struct person student;
Jobsheet Pemograman Bahasa C
155
Diagram struktur data dari variabel student dapat digambarkan sbb :
name
student
month
birthday
day
year
Gambar 3. Struktur data dari variabel student
2. Mengakses Elemen Struktur
Elemen dari suatu variabel struktur dapat diakses dengan menyebutkan nama
variabel struktur diikuti dengan operator titik (‘.’) dan nama dari elemen strukturnya. Cara
penulisannya sebagai berikut
variabel_struktur.nama_field
Untuk memberikan data nama ke field name dari variabel student di atas, maka
pernyataan yang diperlukan misalnya adalah :
strcpy(student.name, "MUHAMMAD IHSAN");
Pada pernyataan di atas, student.name dapat dibaca sebagai "field name dari student".
Contoh berikut merupakan instruksi untuk mengisikan data pada field birthday :
student.birthday.day = 10;
Sedangkan untuk mendapatkan isi suatu field dari variabel struktur, contohnya :

tgl = student.birthday.day;

puts(student.name);
Contoh pertama merupakan instruksi untuk memberikan isi dari field day ke variabel tgl.
Sedangkan contoh kedua merupakan instruksi untuk menampilkan isi dari field name.
Program berikut merupakan contoh yang melibatkan variabel struktur. Mulamula field dari struktur diisi dengan suatu data, kemudian isinya ditampilkan.
Jobsheet Pemograman Bahasa C
156
/* File program : student1.c
Mengisi field dr variabel struktur kemudian menampilkannya */
#include <stdio.h>
#include <string.h>
struct date {
int month;
int day;
int year;
};
/* definisi global dari tipe date */
struct person {
/* definisi global dari tipe person */
char name[30];
struct date birthday;
};
/* deklarasi global dari variabel student*/
struct person student;
main()
{
/* memberikan nilai kepada field dari struktur student */
strcpy(student.name, "MUHAMMAD IHSAN");
student.birthday.month = 8;
student.birthday.day = 10;
student.birthday.year = 1970;
/* menampilkan isi semua field dari struktur student */
printf("Name
: %s\n", student.name);
printf("Birthday : %d-%d-%d\n",student.birthday.month,
student.birthday.day, student.birthday.year );
}
Contoh eksekusi :
Name
: MUHAMMAD IHSAN
Birthday : 8-10-1970
3. Menginisialisasi Struktur
Sebuah struktur juga bisa diinisialisasi pada saat dideklarasikan. Hal ini serupa
dengan inisialisasi array, yaitu elemen-elemennya dituliskan di dalam sepasang kurung
kurawal (‘{ }‘) dengan masing-masing dipisahkan dengan koma.
Deklarasi struktur
didahului dengan kata kunci static, contoh
static struct zodiak bintang =
{"Sagitarius", 22, 11, 21, 12};
Jobsheet Pemograman Bahasa C
157
Selengkapnya perhatikan contoh program di bawah ini.
/* File program : zodiak.c
Menentukan zodiak berdasarkan data tanggal lahir masukan */
#include <stdio.h>
main()
{
struct zodiak {
char nama[11];
int tgl_awal;
int bln_awal;
int tgl_akhir;
int bln_akhir;
};
static struct zodiak bintang =
{"Sagitarius", 22, 11, 21, 12};
int tgl_lhr, bln_lhr, thn_lhr;
printf("Masukkan tgl lahir Anda (XX-XX-XXXX): ");
scanf("%d-%d-%d",&tgl_lhr, &bln_lhr, &thn_lhr);
if((tgl_lhr >= bintang.tgl_awal && bln_lhr ==
bintang.bln_awal) || (tgl_lhr <= bintang.tgl_akhir &&
bln_lhr == bintang.bln_akhir))
printf("Bintang Anda adalah %s\n", bintang.nama);
else
printf("Bintang Anda bukan %s\n", bintang.nama);
}
Contoh eksekusi :
Masukkan tgl lahir Anda (XX-XX-XXXX): 23–11-1972
Bintang Anda adalah Sagitarius
4. Array dan Struktur
Elemen-elemen dari suatu array juga dapat berbentuk sebuah struktur. Misalnya
array yang dipakai untuk menyimpan sejumlah data siswa (struct student). Array struktur
berdimensi satu ini membentuk suatu tabel, dengan barisnya menunjukkan elemen dari
array-nya dan kolomnya menunjukkan elemen dari struktur. Dalam hal ini maka deklarasi
yang dibutuhkan adalah sebagai berikut :
#define MAKS 20
.
.
.
Jobsheet Pemograman Bahasa C
158
struct date {
int month;
int day;
int year;
};
/* definisi dari tipe date */
struct person { /* definisi dari tipe person */
char name[30];
struct date birthday;
};
/* deklarasi dari variabel array student */
struct person student[MAKS];
yang artinya, mendeklarasikan array student yang memiliki elemen yang bertipe struct
person sebanyak MAKS.
Setelah array student dideklarasikan, maka ruang yang
disediakan ditunjukkan dalam gambar 9.4 di bawah ini.
birthday
name
month
day
year
0
1
18
19
Gambar 4 Array dari struktur
Elemen-elemen dari array stuktur tersebut bisa diakses dengan cara sebagai berikut :
for (i=0; i<MAKS; i++)
{
printf("Name
: ");
fgets(student[i].name, sizeof student[i].name,
stdin);
printf("Birthday (mm-dd-yyyy): ");
scanf("%d-%d-%d", &student[i].birthday.month,
&student[i].birthday.day,
&student[i].birthday.year);
printf("\n");
Jobsheet Pemograman Bahasa C
159
/* hapus sisa data dalam penampung keyboard */
fflush(stdin);
};
Selengkapnya perhatikan contoh program di bawah ini.
/* File program : student2.c
Array struktur untuk menyimpan data-data student */
#include <stdio.h>
#define MAKS 20
struct date {
/* definisi global dr tipe date */
int month;
int day;
int year;
};
struct person {
/* definisi global dr tipe person */
char name[30];
struct date birthday;
};
/* deklarasi global dari variabel student */
struct person student[MAKS];
main()
{
int i=0, sudah_benar, jml;
char lagi;
/* memasukkan data */
do
{
printf("Name
: ");
fgets(student[i].name, sizeof student[i].name,
stdin);
printf("Birthday (mm-dd-yyyy): ");
scanf("%d-%d-%d", &student[i].birthday.month,
&student[i].birthday.day,
&student[i].birthday.year);
printf("\n");
i++;
printf("Mau memasukkan data lagi [Y/T] ? ");
do
{
Jobsheet Pemograman Bahasa C
160
lagi = getchar( ); /* baca tombol */
sudah_benar = (lagi == 'Y') || (lagi== 'y')||
(lagi == 'T') || (lagi == 't');
} while(! sudah_benar);
/* hapus sisa data dalam penampung keyboard */
fflush(stdin);
printf("\n");
} while(lagi == 'Y' || lagi == 'y');
jml = i;
/* menampilkan data */
printf("DATA SISWA\n");
for (i=0; i<jml; i++)
{
printf("%d. Name
: %s", i+1, student[i].name);
printf("
Birthday : %d-%d-%d\n\n",
student[i].birthday.month,student[i].birthday.day,
student[i].birthday.year );
};
}
Contoh eksekusi :
Name
: Salsabila
Birthday (mm-dd-yyyy) : 10-25-1979
Mau memasukkan data lagi [Y/T] ? y
Name
: Wildan
Birthday (mm-dd-yyyy) : 4-16-1974
Mau memasukkan data lagi [Y/T] ? t
DATA SISWA
1. Name
Birthday
: Salsabila
: 10-25-1979
2. Name
Birthday
: Wildan
: 4-16-1974
Di samping cara pendeklarasian di atas, struktur juga dapat dideklarasikan dalam
berbagai bentuk yang lain, di antaranya sbb :
Jobsheet Pemograman Bahasa C
161
struct date {
int month, day, year;
} today, tomorrow;
struct person {
char name[30];
struct date birthday;
} student[MAKS];
yaitu mendefinisikan struktur date, sekaligus mendeklarasikan variabel today dan
tomorrow dengan tipe struktur date.
Demikian juga mendefinisikan struktur person,
sekaligus mendeklarasikan variabel array student sebanyak MAKS elemen dengan tipe
struktur
person.
Atau
cara
lainnya
mendefinisikan,
mendeklarasikan
sekaligus
menginisialisasi struktur, sebagai berikut :
struct date {
int month, day, year;
} today = {5,14,2001};
5. Struktur dan Fungsi
Melewatkan sebuah struktur untuk menjadi parameter sebuah fungsi dapat
dilakukan sama dengan pengiriman parameter berupa variabel biasa.
Fungsi yang
mendapat kiriman parameter tersebut juga bisa mengirimkan hasil baliknya yang juga
berupa sebuah struktur (pass by reference).
5.1 Melewatkan Elemen Struktur ke dalam Fungsi
Melewatkan parameter berupa elemen struktur dapat dilakukan sebagaimana
pengiriman parameter berupa variabel biasa, dapat dilakukan baik secara nilai (pass by
value) maupun secara acuan (pass by reference).
/* File program : cetak1.c
Melewatkan elemen struktur sbg parameter fungsi scr nilai */
#include <stdio.h>
void cetak_tanggal(int mm, int dd, int yy);
main()
{
struct date {
Jobsheet Pemograman Bahasa C
/* definisi lokal dari tipe date */
162
int month;
int day;
int year;
} today;
printf("Enter the current date (mm-dd-yyyy): ");
scanf("%d-%d-%d", &today.month, &today.day, &today.year);
cetak_tanggal(today.month, today.day, today.year);
}
void cetak_tanggal(int mm, int dd, int yy)
{
static char *nama_bulan[] = {
"Wrong month", "January", "February", "March",
"April", "May", "June", "July", "August",
"September", "October", "November", "December"
};
printf("Todays date is %s %d, %d\n\n",
nama_bulan[mm],dd,yy);
}
Contoh eksekusi :
Enter the current date (mm-dd-yyyy): 5-29-2001
Todays date is May 29, 2001
Tampak bahwa elemen dari struktur dilewatkan ke fungsi memakai bentuk pengaksesan
elemen struktur, berupa :
cetak_tanggal(today.month, today.day, today.year);
Apabila nilai suatu elemen struktur diharapkan akan diubah oleh fungsi, maka yang
dilewatkan haruslah berupa alamat dari elemen struktur (pass by reference).
Untuk
keperluan ini, operator alamat ditempatkan di depan nama variabel struktur (bukan di
depan nama elemen struktur).
/* File program : posisi1.c
Melewatkan elemen struktur sbg parameter fungsi scr acuan */
#include <stdio.h>
void tukar_xy(int *a, int *b);
main()
{
Jobsheet Pemograman Bahasa C
163
struct koordinat {
int x;
int y;
} posisi;
printf("Masukkan koordinat posisi (x, y) : ");
scanf("%d, %d", &posisi.x, &posisi.y);
printf("x, y semula
= %d, %d\n", posisi.x, posisi.y);
tukar_xy(&posisi.x, &posisi.y);
printf("x, y sekarang = %d, %d\n", posisi.x, posisi.y);
}
void tukar_xy(int *a, int *b)
{
int z;
z = *a;
*a = *b;
*b = z;
}
Contoh eksekusi :
Masukkan koordinat posisi (x, y) : 34, 21
x, y semula
= 34, 21
x, y sekarang = 21, 34
5.2.
Melewatkan Struktur dalam Fungsi
Pada program cetak1.c di atas misalnya, semua elemen dari struktur dikirimkan ke
fungsi cetak_tanggal(), dengan maksud nilai elemen dari struktur akan ditampilkan di
layar. Untuk keadaan seperti ini, lebih baik kalau parameter fungsi diubah menjadi bentuk
struktur, sehingga parameter fungsi tidak lagi sebanyak tiga buah, melainkan hanya satu.
Selengkapnya, perhatikan program di bawah ini.
/* File program : cetak2.c
Melewatkan struktur sebagai parameter fungsi */
#include <stdio.h>
struct date {
int month;
int day;
int year;
Jobsheet Pemograman Bahasa C
/* definisi global dari tipe date */
164
};
void cetak_tanggal(struct date now);
main()
{
struct date today;
printf("Enter the current date (mm-dd-yyyy): ");
scanf("%d-%d-%d", &today.month, &today.day, &today.year);
cetak_tanggal(today);
}
void cetak_tanggal(struct date now)
{
static char *nama_bulan[] = {
"Wrong month", "January", "February", "March",
"April", "May", "June", "July", "August",
"September", "October", "November", "December"
};
printf("Todays date is %s %d, %d\n\n",
nama_bulan[now.month], now.day, now.year);
}
Contoh eksekusi :
Enter the current date (mm-dd-yyyy): 5-29-2001
Todays date is May 29, 2001
6. Struktur dan Pointer (Pointer ke Struktur)
Jika sebuah struktur mengandung banyak field dan diputuskan bahwa keseluruhan
field-nya akan diubah oleh fungsi, maka cara yang efisien adalah dengan melewatkan
(passing) alamat dari struktur. Dengan demikian pada pendefinisian fungsi, parameter
formalnya berupa pointer yang menunjuk ke struktur.
Masalah pointer ke struktur dapat diterapkan dalam program posisi1.c. Argumen
dari fungsi tukar_xy() dapat disederhanakan menjadi satu argumen saja, yakni sebagai
berikut :
void tukar_xy(struct koordinat *pos_xy)
{
int z;
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
Jobsheet Pemograman Bahasa C
165
(*pos_xy).y = z;
}
Pada definisi fungsi di atas,
struct koordinat *pos_xy
menyatakan bahwa pos_xy adalah pointer yang menunjuk ke obyek bertipe struktur
koordinat. Adapun penulisan :
(*pos_xy).x
menyatakan : elemen bernama x yang ditunjuk oleh pointer pos_xy
Perlu diperhatikan bahwa penulisan tanda kurung seperti pada contoh (*pos_xy).x
merupakan suatu keharusan. Sebab
*pos_xy.x
mempunyai makna yang berbeda dengan
(*pos_xy).x
Ungkapan *pos_xy.x mempunyai makna yaitu : "yang ditunjuk oleh pos_xy.x " (sebab
operator titik mempunyai prioritas yang lebih tinggi daripada operator *).
/* File program : posisi2.c
Fungsi parameternya berupa pointer yg menunjuk ke struktur */
#include <stdio.h>
struct koordinat
{ int x;
int y;
};
void tukar_xy(struct koordinat *pos_xy);
main()
{
struct koordinat posisi;
printf("Masukkan koordinat posisi (x, y) : ");
Jobsheet Pemograman Bahasa C
166
scanf("%d, %d", &posisi.x, &posisi.y);
printf("x, y semula
= %d, %d\n", posisi.x, posisi.y);
tukar_xy(&posisi);
printf("x, y sekarang = %d, %d\n", posisi.x, posisi.y);
}
void tukar_xy(struct koordinat *pos_xy)
{
int z;
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
}
Contoh eksekusi :
Masukkan koordinat posisi (x, y) : 34, 21
x, y semula
= 34, 21
x, y sekarang = 21, 34
Bentuk semacam :
*pos_xy).x
dapat ditulis dengan bentuk lain menjadi
pos_xy->x
Dalam C operator -> (berupa tanda minus - diikuti dengan tanda lebih dari >) disebut
sebagai operator panah. Dengan menggunakan operator panah, maka fungsi tukar_xy()
dalam program posisi2.c dapat ditulis menjadi
void tukar_xy(struct koordinat *pos_xy)
{
int z;
z = pos_xy->x;
pos_xy->x = pos_xy->y;
pos_xy->y = z;
}
Jobsheet Pemograman Bahasa C
167
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file program
yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama file
sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan untuk
mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Ilustrasi sebuah variabel struktur.
/* File program : tanggal.c */
#include <stdio.h>
struct tanggal {
int tgl;
int bulan;
int tahun;
};
Jobsheet Pemograman Bahasa C
/* definisi global dr tipe tanggal */
168
Void main()
{
struct tanggal sekarang;
sekarang.tgl = 14;
sekarang.bulan = 05;
sekarang.tahun = 2001;
printf("Tanggalnya adalah %d/%d/%d.\n\n", \
sekarang.tgl, sekarang.bulan, sekarang.tahun );
}
2. Mencetak tanggal yang dimasukkan versi 1
/* File program : info_tgl1.c */
#include <stdio.h>
void cetak_tgl(int tgl, int bln, int thn);
void main()
{
struct data_tgl {
int tanggal;
int bulan;
int tahun;
} sekarang;
/* definisi lokal dr tipe tanggal */
printf("Masukkan tanggal hari ini (tgl/bln/thn) : ");
scanf("%d/%d/%d", &sekarang.tanggal, &sekarang.bulan,
&sekarang.tahun);
cetak_tgl(sekarang.tanggal, sekarang.bulan,
sekarang.tahun);
}
void cetak_tgl(int tgl, int bln, int thn)
{
static char *nama_bulan[] =
{"Kode bulan salah", "Januari", "Februari", "Maret",
"April", "Mei", "Juni", "Juli", "Agustus",
"September", "November", "Desember"
};
printf("Tanggal sekarang adalah : %d %s %d\n", tgl,
nama_bulan[bln], thn);
}
Jobsheet Pemograman Bahasa C
169
3. Mencetak tanggal yang dimasukkan versi 2
/* File program : info_tgl2.c */
#include <stdio.h>
struct data_tgl {
int tanggal;
int bulan;
int tahun;
};
/* definisi global dr tipe tanggal */
void cetak_tgl(struct data_tgl now);
void main()
{
struct data_tgl sekarang;
printf("Masukkan tanggal hari ini (tgl/bln/thn) : ");
scanf("%d/%d/%d", &sekarang.tanggal, &sekarang.bulan,
&sekarang.tahun);
cetak_tgl(sekarang);
}
void cetak_tgl(struct data_tgl now)
{
static char *nama_bulan[] =
{"Kode bulan salah", "Januari", "Februari", "Maret",
"April", "Mei", "Juni", "Juli", "Agustus",
"September", "November", "Desember"
};
printf("Tanggal sekarang adalah : %d %s %d\n",
now.tanggal, nama_bulan[now.bulan], now.tahun);
}
4. Menampilkan satu record siswa
/* File program : student1.c */
#include <stdio.h>
#include <string.h>
struct date { /* global definition of type date */
int day;
int month;
int year;
};
struct person {
char name[30];
Jobsheet Pemograman Bahasa C
/* global definition of type person */
170
struct date birthday;
};
struct person student;
student */
/* global declaration of variable
main()
{
/* assign values to fields of struct student */
strcpy(student.name, "MUHAMMAD IHSAN");
student.birthday.day = 10;
student.birthday.month = 8;
student.birthday.year = 1970;
printf("Nama
: %s\n", student.name);
printf("Tgl Lahir : %d-%d-%d\n\n",student.birthday.day,
student.birthday.month, student.birthday.year );
}
5. Memasukkan data siswa ke array struktur dan menampilkan seluruh isinya
/* student2.c */
#include <stdio.h>
#define MAKS 20
struct date {
int day;
int month;
int year;
};
/* definisi global dr tipe date */
struct person {
/* definisi global dr tipe person */
char name[30];
struct date birthday;
};
/* deklarasi global dr variabel student */
struct person student[MAKS];
main()
{
int i=0, sudah_benar, jml;
char lagi;
/* memasukkan data */
do
{
Jobsheet Pemograman Bahasa C
171
printf("Nama : ");
fgets(student[i].name, sizeof student[i].name,
stdin);
printf("Tgl Lahir (tgl/bln/thn): ");
scanf("%d/%d/%d", &student[i].birthday.day,
&student[i].birthday.month,
&student[i].birthday.year);
printf("\n");
i++;
printf("Mau memasukkan data lagi [Y/T] ? ");
do
{
lagi = getchar( ); /* baca tombol */
sudah_benar = (lagi == 'Y') || (lagi== 'y')||
(lagi == 'T') || (lagi == 't');
} while(! sudah_benar);
/* hapus sisa data dalam penampung keyboard */
fflush(stdin);
printf("\n");
} while(lagi == 'Y' || lagi == 'y');
jml = i;
/* menampilkan data */
printf("DATA SISWA\n");
for (i=0; i<jml; i++)
{
printf("%d. Nama
: %s", i+1,
student[i].name);
printf("
Tgl Lahir : %d/%d/%d\n\n",
student[i].birthday.day,
student[i].birthday.month,
student[i].birthday.year );
};
}
6. Menukarkan posisi koordinat versi 1
/* File program : xy1.c */
#include <stdio.h>
void tukar_xy(int *x, int *y);
main()
{
struct koordinat {
int x;
Jobsheet Pemograman Bahasa C
172
int y;
} posisi;
printf("Masukkan koordinat posisi (x,y) : ");
scanf("%d, %d", &posisi.x, &posisi.y);
printf("x,y semula
= %d,%d\n", posisi.x, posisi.y);
tukar_xy(&posisi.x, &posisi.y);
printf("x,y sekarang = %d,%d\n", posisi.x, posisi.y);
}
void tukar_xy(int *x, int *y)
{
int z;
z = *x;
*x = *y;
*y = z;
}
7. Menukarkan posisi koordinat versi 2
/* File program : xy2.c */
#include <stdio.h>
struct koordinat {
int x;
int y;
};
void tukar_xy(struct koordinat *pos_xy);
main()
{
struct koordinat posisi;
printf("Masukkan koordinat posisi (x,y) : ");
scanf("%d,%d", &posisi.x, &posisi.y);
printf("x,y semula
= %d,%d\n", posisi.x, posisi.y);
tukar_xy(&posisi);
printf("x,y sekarang = %d,%d\n", posisi.x, posisi.y);
}
void tukar_xy(struct koordinat *pos_xy)
Jobsheet Pemograman Bahasa C
173
{
int z;
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
/* z = pos_xy->x; */
/* pos_xy->x = pos_xy->y; */
/* pos_xy->y = z; */
}
8. Menampilkan zodiak dari tanggal lahir yang dimasukkan
/* File program : zodiak1.c */
#include <stdio.h>
main()
{
struct zodiak {
char nama[11];
int tgl_awal;
int bln_awal;
int tgl_akhir;
int bln_akhir;
};
struct zodiak bintang =
{"Sagitarius", 22, 11, 21, 12};
int tgl_lhr, bln_lhr, thn_lhr;
printf("Masukkan tgl lahir Anda (tgl/bln/thn) : ");
scanf("%d/%d/%d",&tgl_lhr, &bln_lhr, &thn_lhr);
if((tgl_lhr >= bintang.tgl_awal && bln_lhr ==
bintang.bln_awal) || (tgl_lhr <= bintang.tgl_akhir &&
bln_lhr == bintang.bln_akhir))
printf("Bintang Anda adalah %s\n", bintang.nama);
else
printf("Bintang Anda bukan %s\n", bintang.nama);
}
F. SOAL
Buatlah potongan program untuk soal-soal di bawah ini
1. Masukkan 5 buah data tanggal, simpan dalam sebuah array struktur kemudian
tampilkan semua isi array tsb.
Jobsheet Pemograman Bahasa C
174
2. Kembangkanlah program zodiak1.c di atas sehingga dapat dipakai untuk
menentukan bintang sesuai tanggal kelahiran. Sebagai acuan, gunakan data berikut :

Aries
: 21 Maret – 19 April

Taurus
: 20 April – 20 Mei

Gemini
: 21 Mei – 20 Juni

Cancer
: 21 Juni – 22 Juli

Leo
: 23 Juli – 22 Agustus

Virgo
: 23 Agustus – 22 September

Libra
: 23 September – 22 Oktober

Scorpio
: 23 Oktober – 21 November

Sagitarius
: 22 November – 21 Desember

Capricorn
: 22 Desember – 19 Januari

Aquarius
: 20 Januari – 18 Februari

Pisces
: 19 Februari – 20 Maret
Gunakan array untuk mengimplementasikan programnya.
3. Masukkan data tanggal hari ini, carilah data tanggal untuk besok dan tampilkan
hasilnya.
Petunjuk :
- gunakan struktur untuk menyimpan data tanggal hari ini dan besok
- gunakan sebuah array untuk menyimpan jumlah hari setiap bulan dalam satu tahun
(Jan, Feb, Mar, …, Des).
- Jangan lupa untuk merubah tanggal, bulan atau tahun untuk besok, jika diperlukan
(misal telah mencapai akhir bulan atau akhir tahun)
Contoh :
Masukkan tahun sekarang (1900 – 2100) : 2001
Masukkan bulan sekarang (1 -12)
: 3
Masukkan tanggal sekarang (1 –31)
: 31
Besok adalah tanggal 1 April 2001
Jobsheet Pemograman Bahasa C
175
PRAKTIKUM X
TIPE DATA LANJUT
A. Tujuan Instruksional Khusus
1. Menjelaskan tentang tipe data union
2. Menjelaskan penggunaan bitfield
3. Menjelaskan tentang tipe data enumerasi
4. Menjelaskan penggunaan typedef
5. Menjelaskan penggunaan ternary operator
6. Menjelaskan tentang konversi tipe data (type casting)
B. Dasar Teori
1 Union
Pada C, union memungkinkan suatu lokasi memori ditempati oleh dua atau lebih
variabel yang bisa saja tipenya berlainan. Di bawah ini diberikan contoh pendefinisian tipe
union yang dinamakan sebagai bil_bulat, yang digunakan untuk menyatakan data bertipe
karakter atau integer.
union bil_bulat {
unsigned int di;
unsigned char dc[2];
};
Berikutnya, pendeklarasian suatu variabel union bernama bil_x yang bertipe bil_bulat
dilakukan dengan cara penulisan sebagai berikut
union bil_bulat bil_x;
Catatan : Cara lain untuk mendefinisikan atau mendeklarasikan union adalah seperti pada
struktur.
Gambar 10.1 memperlihatkan di dan dc berbagi tempat pada lokasi yang sama (di dan
dc[0] mempunyai alamat yang sama)
Jobsheet Pemograman Bahasa C
176
dc[0]
di
dc[1]
Gambar 1. Variabel union dalam memori
Dalam hal ini, kompiler dengan bijaksana akan menyediakan ruangan yang cukup
untuk menampung field atau elemen pada union yang membutuhkan memori paling besar.
Pada pendeklarasian variabel bil_x misalnya, memori yang ditempati variabel ini adalah 2
byte (yaitu ukuran dari tipe int). Seandainya tipe elemen dalam union berupa float, int dan
char, memori yang dibutuhkan adalah sebesar ukuran float.
Elemen dari sebuah union dapat diakses dalam bentuk sebagai berikut :
variabel_union.nama_elemen
misal : bil_x.di = 321;
adalah contoh untuk mengisikan 321 ke elemen union bernama di. Dengan pengisian nilai
ini, maka dc[0] akan bernilai byte ke-0 dari di, sedangkan dc[1] bernilai byte ke-1
dari di.
/* File program : union1.c
Contoh pendeklarasian dan pengaksesan variabel union */
#include <stdio.h>
main()
{
union
{
unsigned int di;
unsigned char dc[2];
} bil_x; /* variabel union */
bil_x.di = 321;
printf("di = %d dc[0] = %d dc[1] = %d\n", bil_x.di,
bil_x.dc[0], bil_x.dc[1]);
}
Jobsheet Pemograman Bahasa C
177
Contoh eksekusi :
di = 321
dc[0] = 65 dc[1] = 1
Program di atas menjelaskan cara ntuk mengakses byte ke-0 atau byte ke-1 dari di,
dc[0] atau dc[1] yang digunakan.
321
1
Nilai 321 dalam kesatuan unsigned int
Nilai 321 jika dinyatakan dalam dua buah unsigned char
65
Byte rendah (byte ke-0)
Byte rendah (byte ke-0)
Seperti halnya pada struktur, suatu variabel union dapat dilewatkan ke dalam suatu
fungsi sebagai parameter. Di bawah ini contoh program yang memberikan gambaran
tentang cara mengubah isi suatu variabel union melalui pemanggilan suatu fungsi. Dalam
hal ini, yang dilewatkan ke dalam fungsi berupa alamat dari variabel union.
/* File program : union2.c
Contoh untuk mengubah nilai variabel union melalui fungsi */
#include <stdio.h>
union bil_bulat
{
unsigned int di;
unsigned char dc[2];
};
/* definisi tipe union */
void beri_nilai(union bil_bulat *x);
main()
{
union bil_bulat bil_x;
/*deklarasi fungsi */
/* deklarasi var union */
/* melewatkan alamat union */
beri_nilai(&bil_x);
printf("di = %d
dc[0] = %d
dc[1] = %d \n",
bil_x.di, bil_x.dc[0], bil_x.dc[1]);
}
void beri_nilai(union bil_bulat *x)
{
x -> di = 321;
/* elemen di yang ditunjuk */
}
/* oleh x diberi nilai 321 */
Jobsheet Pemograman Bahasa C
178
Contoh eksekusi :
di = 321
dc[0] = 65
dc[1] = 1
2. Bitfield
Suatu bit atau beberapa bit dalam sebuah data berukuran satu byte atau dua byte
dapat diakses dengan mudah melalui bitfield. Dengan cara ini, suatu bit atau beberapa bit
dapat diakses tanpa melibatkan operator pemanipulasi bit (seperti &, |). Selain itu, satu
atau dua byte memori dapat dipakai untuk menyimpan sejumlah informasi.
Sebagai contoh, untuk memperoleh informasi masing-masing bit dari suatu data
satu byte, penulisan medan bit berupa
struct info_byte
{ unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
};
Jika disajikan dalam bentuk gambar, gambaran suatu struktur yang memiliki tipe seperti di
atas adalah sebagai berikut :
7
6
5
4
3
2
1
0
b
i
t
7
b
i
t
6
b
i
t
5
b
i
t
4
b
i
t
3
b
i
t
2
b
i
t
1
b
i
t
0
bit
Gambar 2 Susunan bit dari memori sebuah data bertipe info_byte
Pada pendefinisian struktur info_byte di atas,

Nilai 1 setelah tanda titik-dua (:) menyatakan panjang dari bitfield

unsigned menyatakan bahwa bitfield dinyatakan dalam keadaan tak-bertanda (untuk
contoh berikutnya, nantinya setiap bitfield memiliki kemungkinan nilai berkisar 1 atau
0).
Jobsheet Pemograman Bahasa C
179
nama tipe struktur yang terdiri atas sejumlah bitfield
struct info_byte
{ unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
};
panjang/jumlah bit
nama variabel bitfield
Catatan : sebuah variabel bitfield haruslah dideklarasikan berupa salah satu di antara int,
unsigned dan signed.
Contoh berikut memberikan gambaran tentang cara memberikan nilai kepada
variabel struktur yang mengandung elemen berupa bitfield, dan cara mengakses setiap nilai
dari bitfield.
/* File program : bitf1.c
Bitfield utk menampilkan bentuk biner dr karakter masukan */
#include <stdio.h>
main()
{
struct info_byte
/* definisi tipe
{
unsigned bit0:1;
/* bit
unsigned bit1:1;
/* bit
unsigned bit2:1;
/* bit
unsigned bit3:1;
/* bit
unsigned bit4:1;
/* bit
unsigned bit5:1;
/* bit
unsigned bit6:1;
/* bit
unsigned bit7:1;
/* bit
};
bitfield */
ke-0
ke-1
ke-2
ke-3
ke-4
ke-5
ke-6
ke-7
*/
*/
*/
*/
*/
*/
*/
*/
/* deklarasi variabel union dan elemen bitfield */
union
{
unsigned char karakter;
struct info_byte byte;
} ascii;
printf(“Masukkan sebuah karakter : ”);
scanf(“%c”, &ascii.karakter);
Jobsheet Pemograman Bahasa C
180
printf(“\nKode ASCII dari karakter %c adalah %d\n”,
ascii.karakter, ascii.karakter);
printf("Bentuk biner dari nilai %d adalah ",
ascii.karakter);
printf("%d%d%d%d%d%d%d%d\n",ascii.byte.bit7,
ascii.byte.bit6, ascii.byte.bit5, ascii.byte.bit4,
ascii.byte.bit3, ascii.byte.bit2, ascii.byte.bit1,
ascii.byte.bit0);
}
Contoh eksekusi :
Masukkan sebuah karakter : A
Kode ASCII karakter A adalah 65
Bentuk biner dari nilai 65 adalah 01000001
Pada program di atas, setelah pernyataan :
scanf(“%c”, &ascii.karakter);
dan user memasukkan karakter : ‘A’ , berarti nilai ascii.karakter = ‘A’. Maka hal itu
memberikan efek elemen byte juga akan bernilai seperti karakter, sebab byte dan karakter
berbagi data pada memori yang sama. Namun, walaupun adanya sifat demikian, pernyataan
:
ascii.byte = 'A';
akan dianggap salah (saat kompilasi), sebab suatu variabel struktur yang mengandung
elemen bitfield memang tidak diijinkan untuk diberi nilai secara langsung. Pengaksesan
nilai dapat dilakukan melalui variabel bitfield, misalnya :
printf("%d", ascii.byte.bit7);
untuk mengambil nilai dari bitfield bit 7. Contoh lain
ascii.byte.bit7 = 0;
untuk mengubah bit7 agar bernilai 0.
Kalau di depan sudah dibicarakan bitfield dengan panjang 1 bit, contoh berikut
akan memberikan gambaran tentang bitfield dengan panjang 2 bit.
Jobsheet Pemograman Bahasa C
181
struct data_gambar
{
unsigned piksel1:2;
unsigned piksel2:2;
unsigned piksel3:2;
unsigned piksel4:2;
} koord;
Pada contoh di atas, variabel koord yang bertipe data_gambar akan menempati memori 1
byte (8 bit) dengan 4 informasi terkandung di dalamnya (masing-masing 2 bit), atau
memegang nilai bulat antara 0 sampai dengan 3 (22 – 1).
Untuk memberikan nilai kepada piksel1 misalnya, bisa digunakan pernyataan
sebagai berikut :
koord.piksel1 = 3;
yang mengisikan 3 ke dalam bitfield tersebut.
Bitfield biasanya dipakai untuk menghemat memori. Misalnya ada dua informasi
dengan keterangan sebagai berikut :

informasi pertama (info_x) memiliki kemungkinan nilai bilangan bulat antara 0 sampai
dengan 3, dan

informasi kedua (info_y) memiliki kemungkinan nilai bilangan bulat 0 atau 1 saja.
Seandainya kedua informasi itu disimpan dalam memori (secara terpisah) sebagai tipe char,
maka akan diperlukan total memori sebesar 2 byte. Namun jika disajikan dalam bentuk
bitfield, memori yang dibutuhkan cukup 1 byte. Dalam hal ini info_x akan dinyatakan
dalam 2 bit dan info_y dinyatakan dalam 1 bit. Penuangan deklarasinya adalah sebagai
berikut :
struct info
{
unsigned info_x:2;
unsigned info_y:1;
} status;
atau
struct info
{
unsigned info_x:2;
unsigned info_y:1;
Jobsheet Pemograman Bahasa C
182
unsigned
} status;
:5;
Pada pendeklarasian terakhir :
unsigned
:5;
fungsinya hanya untuk memperjelas bahwa total bit dari bitfield adalah 8 bit (1 byte).
Perhatikan, bahwa karena 5 bit terakhir tidak diperlukan, maka nama bitfield boleh tidak
disertakan. Kalaupun mau diberi nama (misalnya : kosong), maka bentuk deklarasinya
adalah :
struct info
{
unsigned info_x:2;
unsigned info_y:1;
unsigned kosong:5;
} status;
/* File program : BITF2.C */
#include <stdio.h>
main()
{
/* definisi tipe bitfield */
struct info
{
unsigned info_x:2;
unsigned info_y:1;
unsigned kosong:5; /* bisa dihilangkan */
} status;
status.info_x = 3;
status.info_y = 1;
printf("info_x = %d\n", status.info_x);
printf("info_y = %d\n", status.info_y);
}
Contoh eksekusi :
info_x = 3
info_y = 1
Jobsheet Pemograman Bahasa C
183
3. Enumerasi
Tipe enumerasi merupakan himpunan dari konstanta integer yang diberi nama.
Contoh enumerasi yaitu berupa jenis kelamin manusia yang berupa
pria, wanita
Dalam C, suatu tipe data enumerasi dideklarasikan dengan bentuk :
enum nama_tipe_enumerasi {
konstanta_1, konstanta_2,…
} variabel_1, …, variabel_n;
Sedangkan contoh deklarasi variabel enumerasi :
enum manusia jns_kelamin;
Pada contoh di atas, jns_kelamin adalah variabel enumerasi yang bertipe manusia.
Selanjutnya variabel jns_kelamin dapat diisi dengan konstanta pria dan wanita.
/* File program : enum1.c
Contoh penggunaan enumerasi */
#include <stdio.h>
main()
{
enum manusia {
pria, wanita
};
enum manusia jns_kelamin;
/* definsi tipe */
/* deklarasi var */
jns_kelamin = pria;
/* diisi dgn pria */
printf("Isi jns_kelamin = %d\n", jns_kelamin);
jns_kelamin = wanita;
/* diisi dgn wanita */
printf("Isi jns_kelamin = %d\n", jns_kelamin);
}
Contoh eksekusi :
Isi jns_kelamin = 0
Isi jns_kelamin = 1
Jobsheet Pemograman Bahasa C
184
Dengan adanya pendefinisan seperti :
enum manusia {pria, wanita};
degnan sendirinya pria merupakan konstanta dengan nilai sama dengan 0, sedangkan
wanita bernilai 1. Sehingga pernyataan
jns_kelamin = pria;
merupakan pernyataan untuk mengisikan konstanta pria (atau nilai 0) ke variabel
jns_kelamin.
Contoh lain, yaitu ;
enum data_hari {senin, selasa, rabu, kamis, jumat,
sabtu, minggu};
Pada pendefinisian di atas,
senin
menyatakan nilai 0
selasa menyatakan nilai 1
rabu
menyatakan nilai 3
kamis
menyatakan nilai 4
jumat
menyatakan nilai 5
sabtu
menyatakan nilai 6
minggu menyatakan nilai 7
Pemakaian enumerasi biasanya untuk memperjelas dokumentasi program C, seperti yang
ditunjukkan dalam contoh program di bawah ini.
/* File program : enum2.c
Contoh pemakaian enumerasi */
#include <stdio.h>
main()
{
/* definisi tipe data enumerasi */
enum data_hari {senin, selasa, rabu, kamis, jumat,
sabtu, minggu};
Jobsheet Pemograman Bahasa C
185
/* keterangan nama hari */
static char str[][7] = {"SENIN", "SELASA", "RABU",
"KAMIS", "JUMAT", "SABTU", "MINGGU"};
/* deklarasi variabel enumerasi */
enum data_hari hari_kerja;
int jam_kerja;
int total_jam = 0;
/* cetak nama hari dari senin s/d jumat */
for(hari_kerja=senin; hari_kerja<=jumat; hari_kerja++)
{
printf ("Jumlah jam kerja hari ");
printf("%-6s (jam) : ", str[hari_kerja]);
scanf("%d", &jam_kerja);
total_jam = total_jam + jam_kerja;
}
printf("\nTotal jam kerja = %d\n", total_jam);
}
Contoh eksekusi :
Jumlah
Jumlah
Jumlah
Jumlah
Jumlah
jam
jam
jam
jam
jam
kerja
kerja
kerja
kerja
kerja
hari
hari
hari
hari
hari
SENIN
SELASA
RABU
KAMIS
JUMAT
(jam)
(jam)
(jam)
(jam)
(jam)
:
:
:
:
:
8
8
8
8
6
Total jam kerja = 38
Penggalan pernyataan berikut
for(hari_kerja=senin; hari_kerja<=jumat; hari_kerja++);
lebih memberi kejelasan daripada penulisan :
for(hari_kerja=0; hari_kerja<=5; hari_kerja++);
Jika dikehendaki, nilai urutan sebuah enumerasi juga bisa dirubah (yang secara default
akan dimulai dari 0 dan naik satu demi satu berdasarkan urutan konstanta dalam
pendefinisian). Sehingga dengan mendefinisikan seperti berikut :
Jobsheet Pemograman Bahasa C
186
enum {
staff = 4, manajer, direktur
} jenjang_jab;
maka staff tidak lagi berupa nilai 0, melainkan berupa nilai 4. Dengan sendirinya, manajer
bernilai 5 dan direktur bernilai 6.
/* File program : enum3.c
Contoh mengubah nilai default dari suatu tipe enumerasi */
#include <stdio.h>
main()
{
/* definisi tipe data enumerasi */
enum {
staff = 4, manajer, direktur
} jenjang_jab;
for(jenjang_jab = staff; jenjang_jab <= direktur;
jenjang_jab++)
printf("%d\n", jenjang_jab);
}
Contoh eksekusi :
4
5
6
4. Typedef
Untuk kepentingan memperjelas dokumentasi program C, user bisa menamakan
suatu tipe data dengan pengenal (identifier) yang lebih memberi arti atau mudah diingat.
Caranya adalah dengan memakai typedef.
Sebagai contoh pengenal BYTE dapat
digunakan untuk menyatakan unsigned char.
Bentuk umum pernamaan suatu tipe data menggunakan typedef :
typedef tipe_data nama_baru;
Jobsheet Pemograman Bahasa C
187
Contoh :
typedef unsigned char BYTE;
Contoh tsb menyatakan bahwa BYTE identik dengan unsigned char.
Sesudah
pendefinisian tersebut, BYTE dapat digunakan untuk mendeklarasikan variabel atau jenis
parameter fungsi, bahkan juga keluaran fungsi. Misalnya :
BYTE kode;
untuk mendeklarasikan variabel kode agar bertipe BYTE (atau unsigned char) . Contoh
lain :
BYTE beri_nilai_awal(void);
Menyatakan bahwa keluaran fungsi beri_nilai _awal() bertipe BYTE.
/* File program : typedef.c
Contoh penggunaan typedef */
#include <stdio.h>
/* BYTE merupakan nama baru dari unsigned char */
typedef unsigned char BYTE;
BYTE beri_nilai_awal(void);
main()
{
BYTE kode;
/* deklarasi fungsi */
/* deklarasi variabel karakter */
kode = beri_nilai_awal();
printf("Isi kode = %u\n", kode);
}
BYTE beri_nilai_awal(void)
{
return(143);
}
Contoh eksekusi :
Jobsheet Pemograman Bahasa C
188
Isi kode = 143
Contoh lain penamaan tipe dengan typedef :

typedef char *STRING;
menyatakan bahwa tipe STRING adalah tipe pointer yang menunjuk data char
(pointer to char).

typedef struct data_karakter {
unsigned char ascii;
unsigned char atribut;
} karakter_layar;
Pada contoh ini, karakter_layar adalah nama lain dari
struct data_karakter {
unsigned char ascii;
unsigned char atribut;
};
5. Ternary Operator
C menyediakan sebuah operator yang tergolong sebagai operator ternary, yakni
operator yang memiliki tiga buah operand. Operator tersebut dinamakan sebagai operator
kondisi. Bentuk ungkapan yang menggunakan operator ini :
kondisi1 ? ungkapan1 : ungkapan2;
Maksud dari ungkapan kondisi :

Jika kondisi bernilai benar, maka nilai ungkapan kondisi berupa ungkapan1

Jika kondisi bernilai salah, maka nilai ungkapan kondisi berupa ungkapan2
Contoh penggunaan misalnya untuk memperoleh nilai terbesar di antara dua buah
bilangan (berupa nila1 dan nilai2). Misalkan nilai terbesar tersebut diberikan (di-assign)
ke variabel max. Penggunaannya :
max = (nilai1 > nilai2) ? nilai1 : nilai2;
Pada contoh di atas, kalau kondisi (nilai1 < nilai2) bernilai benar, maka max akan bernilai
nilai1, dan keadaan sebaliknya akan bernilai nilai2.
Jobsheet Pemograman Bahasa C
189
salah
benar
max = (nilai1 > nilai2) ? nilai1 : nilai2;
Catatan : penulisan kondisi (nilai1 < nilai2) sebenarnya bisa ditulis menjadi nilai1 < nilai2
tanpa menyertakan kurung, disebabkan operator > memiliki prioritas lebih tinggi
daripada operator kondisi (?). Pemberian tanda kurung hanya untuk menambah
kejelasan.
Pernyataan :
max = (nilai1 > nilai2) ? nilai1 : nilai2;
kalau ditulis dengan menggunakan if-else adalah sebagai berikut :
if (nilai1 > nilai2)
max = nilai1;
else max = nilai2;
Sebagai contoh perhatikan program di bawah ini
/* File program : max.c
Menentukan nilai terbesar dengan ternary operator */
#include <stdio.h>
main()
{
float nilai1, nilai2, max;
printf("Masukkan dua buah nilai : ");
scanf("%f %f", &nilai1, &nilai2);
max = (nilai1 > nilai2) ? nilai1 : nilai2;
printf("Nilai terbesar = %g\n", max);
}
Contoh eksekusi :
Masukkan dua buah nilai : 9 10.5
Nilai terbesar = 10.5
Jobsheet Pemograman Bahasa C
190
a.
Type Cast
Type cast merupakan upaya untuk mengkonversikan suatu tipe data menjadi tipe
yang lain. Bentuk umum type cast adalah :
(tipe) ungkapan
dengan tipe dapat berupa pengenal tipe char, int.
Misalnya, jika x dideklarasikan bertipe int. Bila dikehendaki agar ungkapan :
x/2 menghasilkan nilai pecahan (float), maka ungkapan x/2 perlu ditulis menjadi :
(float) x/2;
Perbedaan penggunaan type cast dengan yang tidak menggunakannya dapat dilihat pada
contoh program di bawah ini.
/* File program : typecast.c
Melihat efek cast dalam konversi tipe */
#include <stdio.h>
main()
{
int x = 21;
float y;
y = x/2;
printf("y = x/2
= %f\n", y);
y = (float) x/2;
printf("y = (float) x/2
= %f\n", y);
y = (float) (x/2);
printf("y = (float) (x/2) = %f\n", y);
}
Contoh eksekusi :
y = x/2
= 10.000000
y = (float) x/2
= 10.500000
y = (float) (x/2) = 10.000000

Tampak bahwa jika ungkapan y = x/2 tidak menggunakan type cast, maka variabel y
akan bernilai 10.000000 untuk x = 21, tetapi jika ditulis y = (float) x/2, maka didapat
nilai y = 10.500000.
Jobsheet Pemograman Bahasa C
191

Adanya (float) x/2 mengakibatkan x bertipe float. Berdasarkan sifat konversi, jika
salah satu operand bertipe real, dengan sendirinya yang lain juga akan bertipe real.
Oleh karena itu ungkapan (float) x/2 menghasilkan pembagian real.

Pada ungkapan y = x/2, baik x maupun 2 bertipe integer, maka yang terjadi adalah
operasi pembagian bulat, baru kemudian hasil pembagiannya dikonversikan secara
otomatis (karena adanya tanda assignment '=') dengan tipe data dari y, sehingga y =
10.000000.

Penulisan (float) x/2 berbeda dengan (float) (x/2).
Pada (float) (x/2), yang
dikonversikan ke float adalah hasil dari x/2, sedangkan operasi pembagian x/2 sendiri
dianggap sebagai operasi pembagian bulat.
b. Penggolongan Variabel berdasarkan kelas Penyimpanan
Suatu variabel, di samping dapat digolongkan berdasarkan jenis/tipe data juga dapat
diklasifikasikan berdasarkan kelas penyimpanan (storage class). Penggolongan
berdasarkan kelas penyimpanan berupa :

variabel lokal

variabel eksternal

variabel statis

variabel register
7.1.
Variabel Lokal
Variabel lokal adalah variabel yang dideklarasikan dalam fungsi, dengan sifat :

secara otomatis diciptakan ketika fungsi dipanggil dan akan sirna (lenyap) ketika
eksekusi terhadap fungsi berakhir.

Hanya dikenal oleh fungsi tempat variabel tersebut dideklarasikan

Tidak ada inisialisasi secara otomatis (saat variabel diciptakan, nilainya tak menentu).
Dalam banyak literatur, variabel lokal disebut juga dengan variabel otomatis.
Variabel yang termasuk dalam golongan ini bisa dideklarasikan dengan menambahkan kata
kuci auto di depan tipe-data variabel. Kata kunci ini bersifat opsional, biasanya disertakan
sebagai penjelas saja. Contoh variabel lokal ditunjukkan pada gambar 5.8.
void
fung_x(void)
Jobsheet Pemograman Bahasa C
192
{
int x;
x adalah variabel lokal bagi
fungsi fung_x()
Gambar 3 Variabel lokal
Pada fung_x(), deklarasi
int x;
dapat ditulis menjadi
auto int x;
Penerapan variabel lokal yaitu bila variabel hanya dipakai oleh suatu fungsi (tidak
dimaksudkan untuk dipakai oleh fungsi yang lain). Pada contoh berikut, antara variabel i
dalam fungsi main() dan fung_1() tidak ada kaitannya, sebab masing-masing merupakan
variabel lokal.
/* File program : lokal.c */
#include <stdio.h>
void fung_1(void);
main()
{
int i = 20;
fung_1();
printf("nilai i di dalam main()
= %d\n", i);
}
void fung_1(void)
{
Jobsheet Pemograman Bahasa C
193
int i = 11;
printf("nilai i di dalam fung_1() = %d\n", i);
}
Contoh eksekusi :
nilai i di dalam fung_1() = 11
nilai i di dalam main()
= 20
7.2.
Variabel Eksternal
Variabel eksternal merupakan variabel yang dideklarasikan di luar fungsi, dengan
sifat :

dapat diakses oleh semua fungsi

kalau tak diberi nilai, secara otomatis diinisialisasi dengan nilai sama dengan nol.
Contoh variabel eksternal ada pda program ekstern1.c yaitu berupa variabel i. Pada
pendeklarasian
int i = 273;
menyatakan bahwa i merupakan variabel eksternal dan diberi nilai awal sama denan 273.
Nilai dari variabel i selanjutnya dapat diubah oleh fungsi tambah() maupun main().
Setiap fungsi tambah() dipanggil maka nilai i akan bertambah satu.
/* File program : ekstern1.c
Contoh program dengan variabel eksternal */
#include <stdio.h>
int i = 273;
void tambah(void);
main()
{
printf("Nilai
i += 7;
printf("Nilai
tambah();
printf("Nilai
tambah();
printf("Nilai
}
Jobsheet Pemograman Bahasa C
/* variabel eksternal */
awal i = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
194
void tambah(void)
{
i++;
}
Contoh eksekusi :
Nilai awal i =
Nilai i kini =
Nilai i kini =
Nilai i kini =
273
280
281
282
Pada contoh di atas, terlihat bahwa i hanya dideklarasikan di bagian atas program, dan tak
dideklarasikan lagi dalam fungsi main() maupun tambah(). Oleh karena i merupakan
variabel eksternal maka dapat digunakan oleh kedua fungsi tsb. Namun ada satu hal yang
perlu diketahui, variabel eksternal haruslah dideklarasikan sebelum definisi fungsi yang
akan mempergunakannya.
Untuk memperjelas bahwa suatu variabel dalam fungsi merupakan variabel
eksternal, di dalam fungsi yang menggunakannya dapat mendeklarasikan variabel itu
kembali dengan menambahkan kata kunci extern di depan tipe data variabel. Sebagai
contoh, program ekstern1.c ditulis kembali menjadi seperti pada ekstern2.c.
/* File program : ekstern2.c
Contoh program yang menggunakan
memakai kata kunci extern */
variabel
eksternal
dan
#include <stdio.h>
int i = 273;
void tambah(void);
main()
{
extern int i;
printf("Nilai
i += 7;
printf("Nilai
tambah();
printf("Nilai
tambah();
printf("Nilai
/* variabel eksternal */
/* variabel eksternal */
awal i = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
}
void tambah(void)
Jobsheet Pemograman Bahasa C
195
{
extern int i;
/* variabel eksternal */
i++;
}
Contoh eksekusi :
Nilai awal i =
Nilai i kini =
Nilai i kini =
Nilai i kini =
273
280
281
282
Kalau dalam suatu program terdapat suatu variabel eksternal, suatu fungsi bisa saja
menggunakan nama variabel yang sama dengan variabel eksternal, namun diperlakukan
sebagai variabel lokal. Untuk lebih jelasnya perhatikan contoh program di bawah ini.
/* File program : ekstern3.c
Contoh program yang menggunakan variabel
variabel lokal dengan nama yang sama */
#include <stdio.h>
int i = 273;
void tambah(void);
main()
{
extern int i;
printf("Nilai
i += 7;
printf("Nilai
tambah();
printf("Nilai
tambah();
printf("Nilai
}
void tambah(void)
{
int i;
i++;
}
Contoh eksekusi :
Nilai awal i = 273
Nilai i kini = 280
Nilai i kini = 280
Nilai i kini = 280
Pada program di atas, bagi
eksternal
dan
/* variabel eksternal */
/* variabel eksternal */
awal i = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
i kini = %d\n", i);
/* variabel lokal */
fungsi main() i adalah variabel eksternal. Namun bagi fungsi
tambah(), i merupakan variabel lokal, sebab pada fungsi ini i dideklarasikan tanpa kata
kunci extern. Hal ini terlihat jelas dengan mengamati hasil eksekusi program. Pernyataan:
Jobsheet Pemograman Bahasa C
196
i++;
Pada fungsi tambah() tidak mempengaruhi nilai i yang ditampilkan pada fungsi main()
(bandingkan dengan hasil eksekusi pada ekstern2.c).
7.3 Variabel Statis
Variabel statis dapat berupa variabel internal (didefinisikan di dalam fungsi)
maupun variabel eksternal. Sifat variabel ini :

Kalau variabel statis bersifat internal, maka variabel hanya dikenal oleh fungsi tempat
variabel dideklarasikan

Kalau variabel statis bersifat eksternal, maka variabel dapat dipergunakan oleh semua
fungsi yang terletak pada file yang sama, tempat variabel statis dideklarasikan

Berbeda dengan variabel lokal, variabel statis tidak akan hilang sekeluarnya dari fungsi
(nilai pada variabel akan tetap diingat).

Inisialisasi akan dilakukan hanya sekali, yaitu saat fungsi dipanggil yang pertama kali.
Kalau tak ada inisialisasi oleh pemrogram secara otomatis akan diberi nilai awal nol
Variabel statis diperoleh dengan menambahkan kata kunci static di depan tipe data
variabel. Sebagai contoh perhatikan program di bawah ini.
/* File program : statis.c
Contoh variabel statis */
#include <stdio.h>
void fung_y(void);
main()
{
int y = 20;
fung_y();
fung_y();
printf("Nilai y dalam main()
= %d\n", y);
}
Jobsheet Pemograman Bahasa C
197
void fung_y(void)
{
static int y;
y++;
printf("Nilai y dalam fung_y() = %d\n", y);
}
Contoh eksekusi :
Nilai y dalam fung_y() = 1
Nilai y dalam fung_y() = 2
Nilai y dalam main()
= 20
7.4 Variabel Register
Variabel register adalah variabel yang nilainya disimpan dalam register dan bukan
dalam memori RAM. Variabel yang seperti ini hanya bisa diterapkan pada variabel yang
lokal atau parameter formal, yang bertipe char atau int. Variabel register biasa diterapkan
pada variabel yang digunakan sebagai pengendali loop. Tujuannya untuk mempercepat
proses dalam loop. Sebab variabel yang dioperasikan pada register memiliki kecepatan
yang jauh lebih tinggi daripada variabel yang diletakkan pada RAM.
Contoh
pemakaiannya bisa dilihat pada program di bawah ini.
/* File program : var_reg.c
Contoh variabel register */
#include <stdio.h>
main()
{
register int i;
/* variabel register */
int jumlah = 0;
for(i = 1; i <= 100; i++)
jumlah = jumlah + i;
Jobsheet Pemograman Bahasa C
198
printf("1 + 2 + 3 + ... + 100 = %d\n", jumlah);
}
Contoh eksekusi :
1 + 2 + 3 + ... + 100 = 5050
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file program
yang sudah dibuat sebelumnya.
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama file
sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan untuk
mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Contoh bitfield utk menampilkan bentuk biner dari kode ascii masukan.
Jobsheet Pemograman Bahasa C
199
/* File program : BITF1.C*/
#include <stdio.h>
main()
{
/* definisi tipe bitfield */
struct info_byte
{
unsigned bit0:1;
/* bit ke-0 */
unsigned bit1:1;
/* bit ke-1 */
unsigned bit2:1;
/* bit ke-2 */
unsigned bit3:1;
/* bit ke-3 */
unsigned bit4:1;
/* bit ke-4 */
unsigned bit5:1;
/* bit ke-5 */
unsigned bit6:1;
/* bit ke-6 */
unsigned bit7:1;
/* bit ke-7 */
};
/* deklarasi variabel union dan elemen bitfield */
union
{
unsigned char karakter;
struct info_byte byte;
} ascii;
printf("Masukkan karakter : ");
scanf("%c", &ascii.karakter);
printf("\nKarakter %c nilai ascii-nya adalah %d\n",
ascii.karakter, ascii.karakter);
printf("Bentuk biner dari nilai %d adalah ",
ascii.karakter);
printf("%d%d%d%d%d%d%d%d\n",ascii.byte.bit7,
ascii.byte.bit6, ascii.byte.bit5,
ascii.byte.bit4, ascii.byte.bit3,
ascii.byte.bit2, ascii.byte.bit1,
ascii.byte.bit0);
}
2. Contoh bitfield kedua
/* File program : BITF2.C */
#include <stdio.h>
main()
{
/* definisi tipe bitfield */
struct info
{
unsigned info_x:2;
unsigned info_y:1;
unsigned kosong:5;
} status;
Jobsheet Pemograman Bahasa C
200
status.info_x = 3;
status.info_y = 1;
printf("info_x = %d\n", status.info_x);
printf("info_y = %d\n", status.info_y);
}
3. Contoh penggunaan enumerasi pertama
/* File program : enum1.c*/
#include <stdio.h>
main()
{
enum manusia {pria, wanita};
/* definsi tipe */
enum manusia jns_kelamin; /* deklarasi variabel */
jns_kelamin = pria;
/* diisi dengan pria */
printf("Isi jns_kelamin = %d\n", jns_kelamin);
jns_kelamin = wanita;
/* diisi dengan wanita */
printf("Isi jns_kelamin = %d\n", jns_kelamin);
}
4. Contoh penggunaan enumerasi kedua
/* File program : enum2.c*/
#include <stdio.h>
main()
{
/* definisi tipe data enumerasi */
enum data_hari {senin, selasa, rabu, kamis, jumat,
sabtu, minggu};
/* keterangan nama hari */
static char str[][8] = {"SENIN", "SELASA", "RABU",
"KAMIS", "JUMAT", "SABTU", "MINGGU"};
/* deklarasi variabel enumerasi */
enum data_hari hari_kerja;
int jam_kerja;
int total_jam = 0;
/* cetak nama hari dari senin s/d jumat */
for(hari_kerja = senin; hari_kerja <= jumat;
hari_kerja++)
{
printf ("Jumlah jam kerja hari ");
Jobsheet Pemograman Bahasa C
201
printf("%-6s (jam) : ", str[hari_kerja]);
scanf("%d", &jam_kerja);
total_jam = total_jam + jam_kerja;
}
printf("\nTotal jam kerja = %d\n", total_jam);
}
5. Contoh mengubah nilai default dari suatu tipe enumerasi
/* File program : enum3.c */
#include <stdio.h>
main()
{
/* definisi tipe data enumerasi */
enum {
staff = 4, manajer, direktur
} jenjang_jab;
for(jenjang_jab = staff; jenjang_jab <= direktur;
jenjang_jab++)
printf("%d\n", jenjang_jab);
}
6. Contoh penggunaan ternary operator
/* File program : max.c */
#include <stdio.h>
main()
{
float nilai1, nilai2, max;
printf("Masukkan dua buah nilai : ");
scanf("%f %f", &nilai1, &nilai2);
max = (nilai1 > nilai2) ? nilai1 : nilai2;
printf("Nilai terbesar = %g\n", max);
}
7. Melihat efek cast dalam konversi tipe
/* File program : typecast.c */
#include <stdio.h>
main()
{
int x = 21;
float y;
y = x/2;
Jobsheet Pemograman Bahasa C
202
printf("y = x/2
= %f\n", y);
y = (float) x/2;
printf("y = (float) x/2
= %f\n", y);
y = (float) (x/2);
printf("y = (float) (x/2) = %f\n", y);
}
8. Contoh penggunaan typedef
/* File program : typedef.c */
#include <stdio.h>
/* BYTE merupakan nama baru dari unsigned char */
typedef unsigned char BYTE;
BYTE beri_nilai_awal(void); /* deklarasi fungsi */
main()
{
BYTE kode;
/* deklarasi variabel karakter */
kode = beri_nilai_awal();
printf("Isi kode = %u\n", kode);
}
BYTE beri_nilai_awal(void)
{
return(143);
}
9. Contoh pendeklarasian dan pengaksesan variabel union
/* File program : UNION1.C */
#include <stdio.h>
main()
{
union
{
unsigned int di;
unsigned char dc[2];
} bil_x;
/* variabel union */
bil_x.di = 321;
printf("di = %d dc[0] = %d dc[1] = %d\n", bil_x.di,
bil_x.dc[0],
bil_x.dc[1]);
}
Jobsheet Pemograman Bahasa C
203
10. Contoh untuk mengubah nilai variabel union melalui fungsi
/* File program : UNION2.C */
#include <stdio.h>
union bil_bulat
{
unsigned int di;
unsigned char dc[2];
};
/* definisi tipe union */
/* deklarasi fungsi */
void beri_nilai(union bil_bulat *x);
main()
{
union bil_bulat bil_x;
/* deklarasi variabel union */
beri_nilai(&bil_x);
/* melewatkan alamat union */
printf("di = %d
dc[0] = %d
dc[1] = %d \n",
bil_x.di, bil_x.dc[0], bil_x.dc[1]);
}
void beri_nilai(union bil_bulat *x)
{
x -> di = 321; /* elemen di yang ditunjuk */
}
/* oleh x diberi nilai 321 */
PRAKTIKUM XI
OPERASI FILE
Jobsheet Pemograman Bahasa C
204
A. Tujuan Instruksional Khusus
1. Menjelaskan tentang struktur file
2. Menjelaskan tentang tahap-tahap operasi pada file
3. Menjelaskan tentang fungsi untuk penyimpanan dan pembacaan file per-karakter
4. Menjelaskan tentang file biner dan file teks
5. Menjelaskan tentang operasi penyimpanan dan pembacaan file per-int
6. Menjelaskan tentang operasi penyimpanan dan pembacaan file per-blok
7. Menjelaskan cara membaca dan menyimpan data string pada file
8. Menjelaskan cara mengakses file biner secara acak
9. Menjelaskan cara menghapus file
10. Menjelaskan cara mengganti nama file
B. Dasar Teori
1. Struktur File
Kebanyakan program melibatkan media disk sebagai tempat untuk membaca atau
merekam data. Data sendiri disimpan dalam disk dalam bentuk suatu kesatuan yang
disebut file. Suatu file merupakan organisasi dari sejumlah record. Masing-masing record
dapat terdiri atas satu atau beberapa field dan setiap field terdiri atas satu atau beberapa
byte. Adapun byte merupakan susunan dari 8 bit. Untuk lebih jelasnya, perhatikan gambar
11.1 di bawah ini.
Catatan : record adalah nama lain dari struktur (struct).
FILE
RECORD
BYTE
…
RECORD
FIELD
FIELD
…
BYTE
FIELD
(8 BIT)
Gambar 1 Struktur-data dari file
2.
Tahapan Operasi File
Jobsheet Pemograman Bahasa C
205
Operasi pada file pada dasarnya meliputi tiga tahapan, yaitu :
1. Membuka/mengaktifkan file
2. Melaksanakan proses file
3. Menutup file
i.
Membuka / Mengaktifkan File
Sebelum file dapat diakses (dibaca atau ditulisi), mula-mula file haruslah
diaktifkan terlebih dahulu. Untuk keperluan ini fungsi yang digunakan yaitu fopen().
Bentuk deklarasinya adalah sebagai berikut :
FILE *fopen(char namafile, char mode);
dengan :

namafile berupa nama dari file yang akan diaktifkan

mode berupa jenis operasi yang akan dilakukan terhadap file

prototipe ada pada file stdio.h
Jenis operasi file dapat berupa salah satu di antara mode berikut :

r menyatakan file hanya akan dibaca.
Dalam hal ini, file yang akan diproses haruslah sudah ada dalam disk.

w menyatakan bahwa file baru diciptakan. Selanjutnya operasi yang akan dilakukan
terhadap file adalah operasi perekaman data. Seandainya file tersebut sudah ada
dalam disk, isinya yang lama akan terhapus.

a untuk membuka file yang sudah ada dalam disk, dan operasi yang akan dilakukan
adalah penambahan data pada file.
Data baru akan ditempatkan di bagian
belakang dari file. Seandainya file belum ada, secara otomatis file akan diciptakan
terlebih dahulu.
 r+ untuk membuka file yang sudah ada, dan operasi yang akan dilakukan berupa
pembacaan serta penulisan.
 w+ untuk membuka file dengan tujuan untuk pembacaan atau penulisan. Jika file
sudah ada, isinya akan dihapus.
 a+ untuk membuka file, dengan operasi yang dapat dilakukan berupa perekaman
maupun pembacaan. Jika file sudah ada, isinya tak akan dihapus.
Jobsheet Pemograman Bahasa C
206
Keluaran fungsi fopen() berupa pointer yang menunjuk ke tipe FILE, yaitu tipe
struktur yang definisinya ada pada stdio.h (oleh karena itu program yang menggunakan
fopen() harus melibatkan file stdio.h).
Berhasil tidaknya operasi pengaktifan file dapat dilihat pada keluaran fungsi
fopen(). Jika keluaran fungsi berupa NULL (suatu makro yang didefinisikan pada file
stdio.h), berarti operasi pengaktifan file gagal. Kejadian seperti ini bisa terjadi misalnya
saat membuka file dengan mode “r” ternyata file yang dibuka tidak ada dalam disk.
Contoh pemakaian fungsi fopen() :
pf = fopen(“COBA.TXT”, “w”);
dengan variabel pf dideklarasikan sebagai berikut :
FILE *pf;
Maksud dari pernyataan pf = fopen(“COBA.TXT”, “w”); adalah

menciptakan dan mengaktifkan file bernama “COBA.TXT”

dengan mode yaitu “w” (mode penulisan ke file)

dan menempatkan pointer-ke-FILE ke variabel pointer pf
Dengan instruksi di atas, seandainya file “COBA.TXT” sudah ada dalam disk, maka isi file tersebut akan menjadi hilang
(data lama akan terhapus).
pf
Informasi file
COBA.TXT
pointer-ke-FILE
struct FILE
Gambar 2 Pointer-ke-FILE pf menunjuk ke file COBA.TXT
Bentuk yang biasa dipakai untuk mengaktifkan file beserta pemeriksaan
keberhasilannya adalah semacam berikut :
if (pf = fopen(“COBA.TXT”, “w”) == NULL)
{
printf(“File tidak dapat diciptakan !\n”);
exit(1);
/* keluar dari program */
}
Jobsheet Pemograman Bahasa C
207
Mula-mula pf diisi dengan keluaran dari fungsi fopen(). Seandainya nilainya adalah
NULL (berarti operasi pengaktifan gagal), maka

pada layar ditampilkan tulisan : File tidak dapat diciptakan !

program dihentikan (selesai).
ii.
Menutup File
Apabila suatu file sudah tidak diproses lagi, maka file tersebut perlu ditutup. Hal
seperti ini sangat penting terutama jika melakukan pemrosesan file yang jumlahnya lebih
dari satu. Alasannya di antaranya adalah karena adanya keterbatasan jumlah file yang
dapat dibuka secara serentak. Untuk menutup file, fungsi yang digunakan adalah fclose(),
dengan bentuk deklarasi sebagai berikut :
int fclose(FILE *pf);
dengan prototipe ada pada stdio.h.
Pada waktu pemanggilan fungsi ini, pf haruslah berupa variabel pointer bertipe
FILE yang digunakan dalam pengaktifan file. Fungsi fclose() menghasilkan keluaran
berupa nol jika operasi penutupan berhasil dilakukan.
Di samping fclose(), terdapat pula fungsi bernama fcloseall() yang digunakan
untuk menutup semua file yang sedang terbuka. Bentuk deklarasinya :
int fcloseall(void);
Fungsi ini menghasilkan nilai EOF (EOF didefinisikan pada stdio.h, yaitu bernilai –1) jika
terjadi kegagalan.
Sedangkan bila berhasil, keluaran fungsi berupa jumlah file yang
ditutup.
3. Operasi Penyimpanan dan Pembacaan File Per Karakter
3.1 Fungsi fputc()
Sebuah karakter dapat disimpan dalam file dengan menggunakan fungsi fputc().
Bentuk deklarasi dari fungsi ini :
int fputc(int kar, FILE *ptr_file);
Jobsheet Pemograman Bahasa C
208
dengan ptr_file adalah pointer-ke-FILE yang berisi keluaran dari fopen(), dan kar berupa
karakter yang akan disimpan dalam file. Sekalipun kar bertipe int (2 byte), sebenarnya
hanya byte terendah dari kar yang akan disimpan ke dalam file. Byte tertinggi tak ikut
disimpan.
Seandainya operasi fputc() berjalan dengan sempurna, keluaran fungsi sama
dengan nilai kar. Bila tak berhasil melaksanakan penyimpanan, keluaran fungsi berupa
EOF (-1). Contoh program untuk menciptakan file dan digunakan untuk menyimpan
sejumlah karakter :
/* File program: fputc.c
Menciptakan & mengisi file dgn data karakter dr keyboard */
#include
#include
main()
{
FILE
char
<stdio.h>
<stdlib.h>
*pf;
kar;
/* Pointer-ke-FILE */
/* Ciptakan file */
if ((pf = fopen("COBA.TXT","w")) == NULL)
{
printf("file tak dapat diciptakan!\r\n");
exit(1);
/* selesai */
}
printf("Ketikkan apa saja, akhiri dengan ENTER.\n");
printf("Program akan membaca perkarakter");
printf(" dan menyimpannya dalam file COBA.TXT\n\n");
while((kar=getchar()) != '\n') /*baca kar dr keyboard*/
fputc(kar, pf);
/*tulis ke file per karakter*/
fclose(pf);
}
Contoh eksekusi :
/* tutup file */
Ketikkan apa saja, akhiri dengan ENTER.
Program akan membaca perkarakter dan
COBA.TXT
Mencoba menulis ke file COBA.TXT
Jobsheet Pemograman Bahasa C
menyimpannya
dalam
file
209
Program mula-mula menciptakan dan membuka file melalui pemanggilan fungsi fopen(),
dengan mode file “w”.
Kalau keluaran fungsi bernilai NULL, program dihentikan
melalui exit( ). Kalau file COBA.TXT berhasil dibuka, maka pernyataan
while((kar=getchar()) != ‘\n’)
fputc(kar, pf);
akan dijalankan, yang memungkinkan untuk memasukkan sejumlah karakter, sampai
tombol ENTER ditekan (ENTER tidak ikut disimpan dalam file). Jika tombol ENTER
ditekan, file akan ditutup dan eksekusi program selesai. Sedangkan file COBA.TXT yang
dihasilkan oleh program di atas merupakan file teks, sehingga isinya bisa dilihat dengan
menggunakan bantuan sebuah teks editor misalnya Notepad.
3.2 Fungsi fgetc()
Untuk melihat isi file hasil program di atas, bisa juga melalui program dengan
memakai fungsi fgetc(), yang digunakan untuk pembacaan per karakter dari isi file.
Prototipe dari fungsi ini ada di stdio.h. Bentuk deklarasi fgetc() :
int fgetc(FILE *ptr_file);
Keluaran fungsi berupa nilai bertipe int dari sebuah karakter yang dibaca dari file. Jika
akhir file ditemukan atau terjadi kegagalan membaca, keluaran fungsi berupa EOF.
Program berikut digunakan untuk membaca isi file COBA.TXT dengan langkahlangkah sebagai berikut :
1. Buka file COBA.TXT dengan mode “r”
Jika tidak berhasil dibuka maka
- beri keterangan pada layar bahwa file tak ada
- selesai
2. Baca sebuah karakter dari file
Jika karakter sama dengan EOF (tanda akhir file) maka ke langkah 4
3. Tampilkan karakter ke layar dan kembali ke langkah 2
4. Tutup file
5. Selesai
Jobsheet Pemograman Bahasa C
210
/* File program: fgetc.c
contoh membaca isi file per karakter */
#include
#include
main()
{
FILE
char
<stdio.h>
<stdlib.h>
*pf;
kar;
if((pf=fopen("COBA.TXT","r")) == NULL ) /* buka file */
{
printf("file tak dapat dibuka !\r\n");
exit(1);
/* selesai */
}
while((kar=fgetc(pf)) != EOF)
putchar(kar);
printf("\n");
fclose(pf);
/* baca kar dari file */
/* tampilkan ke layar*/
/* tutup file */
}
Contoh eksekusi :
Mencoba menulis ke file COBA.TXT
4 File Biner dan File Teks
Pada saat file dibuka, file bisa diperlakukan sebagai file biner atau file teks. File
biner adalah file yang pola penyimpanan di dalam disk berbentuk biner, yaitu seperti
bentuk pada memori RAM (komputer). Misalnya data bertipe int selalu akan menempati
ruang 2 byte, berapapun harganya.
Sedangkan file teks merupakan file yang pola penyimpanan datanya dalam bentuk
karakter. Bilangan bertipe int misalnya, bisa saja menempati ruang 1 byte, 2 byte atau
lebih bergantung kepada nilai dari bilangannya.
Sebagai contoh, bilangan 54 akan
disimpan dalam 2 byte (berupa karakter 5 dan 4), tetapi bilangan 123 akan disimpan dalam
3 byte. File seperti ini bisa dilihat langsung dengan perintah TYPE melalui prompt DOS
atau memakai editor teks (seperti Notepad).
File teks biasanya dipakai untuk menyimpan data bertipe karakter atau string.
Sedangkan file biner dipakai untuk menyimpan data bilangan atau data kompleks, seperti
struktur (struct).
Jobsheet Pemograman Bahasa C
211
Penambahan yang perlu dilakukan untuk menentukan mode teks atau mode biner
berupa :

t untuk mode teks

b untuk mode biner
Contoh :

"rt"
Berarti mode file adalah teks dan file hendak dibaca

"rt+"
Berarti mode file adalah teks dan file bisa dibaca dan ditulisi.
Bentuk penulisan yang lain (tetapi maknanya sama) : "r+t"

"rb"
Berarti mode file adalah biner dan file hendak dibaca.
Catatan :

Jika pada mode file tidak terdapat karakter t atau b, mode file akan ditentukan oleh
variabel global bernama _fmode (deklarasinya ada pada file fcntl.h). Jika _fmode
tidak dilibatkan dalam program, maka mode file yang tak mengandung t atau b akan
diperlakukan sebagai file teks (secara default).

Variabel _fmode bisa diisi dengan O_BINARY untuk menyatakan file biner, atau
O_TEXT untuk menyatakan file teks. Contoh :
_fmode = O_BINARY;
pf = fopen("TEST1", "r");
Berarti bahwa "TEST1" adalah file biner dan hendak dibaca.

O_TEXT ataupun O_BINARY didefinisikan pada file fcntl.h
5. Operasi Penyimpanan dan Pembacaan File Per Int
Untuk keperluan menyimpan atau membaca membaca file bertipe int, C
menyediakan fungsi _putw() dan _getw(). Betuk deklarasinya :
int _putw(int nilai, FILE *ptr_file);
int _getw(FILE *ptr_file);
Dengan prototipe ada pada stdio.h. Kegunaan masing-masing adalah :

_getw() untuk membaca sebuah data bertipe int dari file
Jobsheet Pemograman Bahasa C
212

_putw() untuk menyimpan sebuah data (yang disimpan dalam variabel nilai) yang
bertipe int ke file.
Contoh berikut merupakan program untuk menyimpan sejumlah data bertipe int ke dalam
file bertipe biner bernama BILANGAN.DAT. Dalam hal ini, file BILANGAN.DAT akan
diperlakukan sebagai file biner.
/* File program: _putw.c
contoh menyimpan data bertipe int menggunakan putw() */
#include <stdio.h>
#include <stdlib.h>
main( )
{
FILE *pf;
int nilai, sudah_benar;
char jawab;
/* ptr-ke-FILE */
if((pf=fopen("BILANGAN.DAT", "wb")) == NULL )
/* ciptakan file*/
{
printf("file gagal diciptakan!\n");
exit(1);
}
printf("MENYIMPAN DATA INTEGER KE FILE\n");
do {
printf("\nBilangan yang akan disimpan: ");
scanf("%d", &nilai);
/* baca nilai dr keyboard */
_putw(nilai, pf);
/* baca bilangan ke file */
printf("memasukkan data lagi (Y/T)?
");
do
{
jawab = getchar(); /* baca jawaban dr keyboard */
sudah_benar = ((jawab == 'Y') || (jawab == 'y')
|| (jawab == 'T') || (jawab == 't'));
} while(! sudah_benar);
}
while
(jawab == 'y'|| jawab == 'Y');
printf("\nOke. Data sudah disimpan dalam file.\n");
fclose(pf);
/* menutup file */
}
Contoh eksekusi :
Program untuk menyimpan data integer ke file
Bilangan yang akan disimpan: 60
Memasukkan data lagi (Y/T)? y
Jobsheet Pemograman Bahasa C
213
Bilangan yang akan disimpan: 998
Memasukkan data lagi (Y/T)? y
Bilangan yang akan disimpan: -75
Memasukkan data lagi (Y/T)? t
Oke. Data sudah disimpan dalam file.
Program yang digunakan untuk menampilkan isi file BILANGAN.DAT pada
dasarnya sama dengan program fgetc.c yang menampilkan isi file teks COBA.TXT di
atas. Hanya saja, untuk mendeteksi akhir dari file, diperlukan makro bernama feof(), yang
memiliki bentuk deklarasi
int feof(FILE *ptr_file);
dengan prototipe dan definisinya ada pada file stdio.h
Keluaran feof() berupa nilai nol (NULL) jika operasi pembacaan yang terakhir
membaca tanda akhir file. Sebagai contohnya, perhatikan implementasi pada program di
bawah ini.
/* File program : _getw.c
Contoh membaca isi file biner menggunakan getw() */
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *pf;
/* ptr ke file */
int nilai, nomor = 0;
/* Buka file biner untuk dibaca */
if((pf=fopen("BILANGAN.DAT","rb")) == NULL)
{
printf("File gagal dibuka.\n");
exit(1);
}
printf("Isi file BILANGAN.DAT : \n");
while(1)
{
nilai = _getw(pf);
if (feof(pf) != 0)
break;
printf("%2d.
/* file berhasil dibuka */
/* Baca sebuah int dr file */
/*Jika akhir file, keluar loop*/
/* Tampilkan ke layar */
%d \n", ++nomor, nilai);
}
fclose(pf);
/* Tutup file */
}
Jobsheet Pemograman Bahasa C
214
Contoh eksekusi :
Isi file BILANGAN.DAT :
1. 60
2. 998
3. –75
6. Operasi Penyimpanan dan Pembacaan File Per Blok
Ada dua fungsi yang memungkinkan untuk menyimpan atau membaca data file
dalam bentuk kesatuan blok (sejumlah byte), misalnya untuk menyimpan data bertipe float
atau data bertipe struct. Kedua fungsi tersebut adalah fread() dan fwrite(), yang memiliki
bentuk deklarasi sbb :
int fread(void *buffer, int n, FILE *ptr_file);
int fwrite(void *buffer, int jum_byte, int n,
FILE *ptr_file);
dengan :

buffer adalah
- pointer yang menunjuk ke daerah memori yang akan ditempati data dari file disk
(untuk fread()), atau
- pointer yang menunjuk ke daerah memori yang akan berisi data yang akan
disimpan ke file disk (untuk fwrite()).

jum_byte menyatakan jumlah byte yang akan dibaca atau disimpan.

n menentukan banyaknya blok data berukuran jum_byte yang akan ditulis atau dibaca.

ptr_file berupa pointer-ke-FILE yang berisi nilai keluaran dari fopen().
Program berikut ini memberikan contoh penyimpanan data bertipe struktur ke
dalam file disk bernama DAFBUKU.DAT.
/* File program : fwrite.c
Menyimpan data bertipe struktur ke file memakai fwrite() */
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *f_struktur;
char jawaban;
int sudah_benar;
struct {
char judul[26];
Jobsheet Pemograman Bahasa C
215
char pengarang[20];
int jumlah;
} buku;
/* variabel buku bertipe struktur */
/* Buka file */
if((f_struktur = fopen("DAFBUKU.DAT", "wb")) == NULL)
{
printf("File tidak dapat diciptakan !\n");
exit(1);
}
do {
fflush(stdin); /* Hapus isi penampung keyboard */
printf("Judul buku
: ");
gets(buku.judul);
printf("Nama pengarang
: ");
gets(buku.pengarang);
printf("Jumlah buku
: ");
scanf("%d", &buku.jumlah);
fflush(stdin); /* Hapus isi penampung keyboard */
/* Rekam sebuah data bertipe struktur */
fwrite(&buku, sizeof(buku), 1, f_struktur);
printf("\nMau merekam data lagi [Y/T] ?");
do {
jawaban = getchar();
sudah_benar = ((jawaban == 'Y') || (jawaban ==
'y')||(jawaban == 'T') || (jawaban == 't'));
} while(!sudah_benar);
printf("\n");
} while(jawaban == 'Y' || jawaban == 'y');
fclose(f_struktur);
/* Tutup file */
}
Contoh eksekusi :
Judul buku
: Relational Database Design
Nama pengarang : Igor T. Hawryszkiewycz
Jumlah
: 1
Mau merekam data lagi [Y/T] ? Y
Judul buku
: C Programming FAQs
Nama pengarang : Steve Summit
Jumlah
: 4
Mau merekam data lagi [Y/T] ? Y
Judul buku
: The C Programming Language
Nama pengarang : Brian WK & Dennis MR
Jumlah
: 2
Mau merekam data lagi [Y/T] ? T
Jobsheet Pemograman Bahasa C
216
Pada program di atas, instruksi untuk menyimpan sebuah data bertipe struct ke file adalah
fwrite(&buku, sizeof(buku), 1, f_struktur);
yang menyatakan data sebanyak 1 x ukuran variabel struct buku (dalam satuan byte) dari
lokasi buku (dinyatakan dengan &buku) disimpan dalam file f_struktur (nama filenya
adalah DAFBUKU.DAT). Untuk membaca data yang ada pada file DAFBUKU.DAT,
programnya adalah sbb :
/* File program : fread.c
Membaca data bertipe struktur ke file menggunakan fread() */
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *f_struktur;
int i=1;
struct {
char judul[30];
char pengarang[30];
int jumlah;
} buku;
/* variabel buku bertipe struktur */
/* Buka file */
if((f_struktur = fopen("DAFBUKU.DAT", "rb")) == NULL)
{
printf("File tidak dapat dibuka !\n");
exit(1);
}
printf("%2s. %-30s %-30s %s\n\n", "No", "Judul Buku",
"Nama Pengarang", "Jumlah");
/* diulang selama masih ada record yg terbaca dlm file */
while(fread(&buku, sizeof(buku), 1, f_struktur) == 1)
printf("%2d. %-30s %-30s %4d\n", i++, buku.judul,
buku.pengarang, buku.jumlah);
printf("\n");
fclose(f_struktur);
/* Tutup file */
}
Contoh eksekusi :
No Judul Buku
1. Relational Database Design
2. C Programming FAQs
3. The C Programming Language
a.
Nama Pengarang
Jumlah
Igor T. Hawryszkiewycz
1
Steve Summit
4
Brian WK & Dennis MR
2
Menyimpan dan Membaca Data String pada File
Jobsheet Pemograman Bahasa C
217
Dua fungsi yang dipakai untuk membaca data string pada file yaitu fgets() dan
fputs(). Bentuk deklarasinya :
int fputs(char *str, FILE *ptr_file);
char fgets(char *str, int n, FILE *ptr_file);
dengan prototipe pada file stdio.h
Kegunaannya :

fputs() untuk menyimpan string str ke dalam file.

fgets() untuk membaca string dari file sampai ditemukannya karakter baris baru '\n'
atau setelah (n-1) karakter, dengan n adalah panjang maksimal string yang dibaca per
waktu-baca.
Keluaran fungsi :

untuk fputs(): - Jika penyimpanan berhasil dilaksanakan, hasilnya berupa karakter
yang terakhir ditulis ke file.
- Jika gagal, hasilnya berupa EOF.

untuk fgets() : - Jika pembacaan berhasil dilaksanakan, hasilnya berupa pointer yang
menunjuk string yang ditunjuk oleh str.
- Jika gagal, hasilnya berupa NULL.
Catatan :

Pada saat menyimpan string ke file, fputs() tidak menambahkan karakter baris-baru
('\n') dengan sendirinya, dan karakter null tidak ikut disimpan.

Pada saat pembacaan dengan fgets(), jika string yang dibaca mengandung karakter
baris baru (CR/LF), hanya karakter LF yang akan disertakan pada string. Secara
otomatis string akan diakhiri dengan karakter null

Baik fgets() maupun fputs() digunakan untuk file teks.
Perhatikan program-program di bawah ini :
/* File program : fgets.c
Membaca isi file teks */
#include <stdio.h>
#include <stdlib.h>
#define PANJANG 256
main()
Jobsheet Pemograman Bahasa C
218
{
FILE *f_teks;
char string[PANJANG];
char namafile[65];
printf("PROGRAM UNTUK MELIHAT ISI FILE TEKS\n\n");
printf("Masukkan nama file : ");
gets(namafile);
printf("\nIsi file %s adalah sbb :\n", namafile);
if((f_teks=fopen(namafile,"rt")) == NULL)
{
printf("File gagal dibuka\n");
exit(1);
}
while(fgets(string, sizeof string, f_teks)!= NULL);
printf("%s\n\n", string);
fclose(f_teks);
}
Contoh eksekusi :
PROGRAM UNTUK MELIHAT ISI FILE TEKS
Masukkan nama file : coba.txt
Isi file %s adalah sbb :
Mencoba menulis ke file COBA.TXT
/* File program : fputs.c
Membaca kemudian menyalin isi file teks */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PANJANG 256
main()
{
FILE *pf_input, *pf_output;
char string[PANJANG];
char namafile_inp[65], namafile_out[65];
printf("PROGRAM UNTUK MENYALIN ISI FILE TEKS\n\n");
printf("Masukkan nama file input : ");
gets(namafile_inp);
printf("Masukkan nama file output: ");
gets(namafile_out);
/* Buka file input */
if((pf_input=fopen(namafile_inp,"r+")) == NULL)
Jobsheet Pemograman Bahasa C
219
{
printf("File input gagal dibuka\n");
exit(1);
}
/* Buka file output */
if((pf_output=fopen(namafile_out,"w+")) == NULL)
{
printf("File output gagal dibuka\n");
exit(1);
}
/* menampilkan isi file input, merubahnya ke huruf besar
& menyalinnya ke file output */
while(fgets(string, sizeof string, pf_input) != NULL)
{
printf("\nIsi file %s adalah :\n",namafile_inp);
printf("%s\n", string);
strupr(string);
/* ubah menjadi huruf besar */
fputs(string, pf_output); /*menyalin ke file output*/
}
fcloseall();
/* Buka file output */
if((pf_output=fopen(namafile_out,"r+")) == NULL)
{
printf("File output gagal dibuka\n");
exit(1);
}
/* tampilkan isi file output */
printf("\nIsi dari file %s adalah : \n",namafile_out);
while(fgets(string, sizeof string, pf_output) != NULL)
printf("%s\n\n",string);
fclose(pf_output);
}
Contoh eksekusi :
PROGRAM UNTUK MENYALIN ISI FILE TEKS
Masukkan nama file input : coba.txt
Masukkan nama file output: out.txt
Isi file coba.txt adalah :
Mencoba menulis ke file COBA.TXT
Isi file out.txt adalah :
MENCOBA MENULIS KE FILE COBA.TXT
Jobsheet Pemograman Bahasa C
220
b.
Mengakses File Biner secara Acak
C juga menyediakan fasilitas yang memungkinkan pembacaan file secara random
(acak). Dengan adanya fasilitas ini, seandainya diinginkan untuk membaca data yang
berada di tengah file, tidaklah perlu untuk membaca record demi record dimulai dari awal
file. Oleh karenanya pengaksesan suatu data dapat dilaksanakan dengan cepat.
Untuk keperluan pengaksesan secara random, fungsi yang digunakan adalah
fseek(). Bentuk deklarasinya :
int fseek(FILE *ptr_file, long int offset, int posisi);
dengan :
 ptr_file adalah pointer yang berasal dari keluaran fopen()
 offset menyatakan jumlah byte terhadap posisi
 posisi dapat diisi dengan salah satu nilai yang tertera pada tabel 11.1
Kegunaan fungsi fseek() yaitu untuk menempatkan penunjuk file ke suatu lokasi
dalam file, berdasarkan offset dan posisi.
Tabel 1 Konstanta untuk menentukan posisi pada pengaksesan file secara acak
Konstanta
Nilai Lokasi file
SEEK_SET
0
Awal file
SEEK_CUR
1
Posisi penunjuk file saat ini
SEEK_END
2
Akhir file
Catatan :
 Konstanta simbolis SEEK_SET, SEEK_CUR dan SEEK_END didefinisikan pada file
stdio.h
 Prototipe fseek() ada pada stdio.h
Beberapa contoh :
(1) fseek(pf, 3, SEEK_SET);
Pernyataan seperti ini akan menempatkan penunjuk file ke posisi 3 byte sesudah awal file
(SEEK_SET).
Jobsheet Pemograman Bahasa C
221
3 byte dari
awal file
awal file
posisi semula
penunjuk file
posisi kini penunjuk file
Gambar 3 Ilustrasi penggunaan SEEK_SET
(2)
fseek(pf, 3, SEEK_END);
Pernyataan seperti ini akan menempatkan penunjuk file ke posisi 3 byte sebelum akhir file
(SEEK_END).
posisi semula
penunjuk file
3 byte dari
akhir file
posisi kini penunjuk file
akhir file
Gambar 11.4 Ilustrasi
penggunaan SEEK_END
(3)
fseek(pf, 3, SEEK_CUR);
Pernyataan seperti ini akan menempatkan penunjuk file ke posisi 3 byte sesudah posisi
penunjuk file sedang berada saat ini.
posisi semula
penunjuk file
posisi kini penunjuk file
3 byte terhadap
posisi semula
Gambar 5 Ilustrasi penggunaan SEEK_CUR
/* File program : baca_acak.c
Membaca isi file secara random */
Jobsheet Pemograman Bahasa C
222
#include <stdio.h>
#include <stdlib.h>
main()
{
struct {
char judul[30];
char pengarang[30];
int jumlah;
} buku;
/* variabel buku bertipe struktur */
FILE *pf;
char jawab;
int i, no_record, sudah_benar;
long int offset_byte;
/* Buka file */
if((pf = fopen("DAFBUKU.DAT", "rb")) == NULL)
{
printf("File tidak dapat dibuka !\n");
exit(1);
}
do
{
i = 1;
printf("Nomor record dr data yg mau ditampilkan : ");
scanf("%d", &no_record);
offset_byte = (no_record-1) * sizeof(buku);
fseek(pf, offset_byte, SEEK_SET);
if(fread(&buku, sizeof(buku), 1, pf) == 0)
printf("Nomor record tdk dikenali!\n");
else
{
printf("\n%2s. %-30s %-30s %s\n\n", "No",
"Judul Buku", "Nama Pengarang", "Jumlah");
printf("%2d. %-30s %-30s %4d\n", i++, buku.judul,
buku.pengarang, buku.jumlah);
}
printf("\nMau mencoba lagi (Y/T)? ");
do
{
jawab = getchar(); /*baca jawaban dr keyboard */
sudah_benar = ((jawab == 'Y') || (jawab == 'y')
||(jawab == 'T') || (jawab == 't'));
} while(! sudah_benar);
Jobsheet Pemograman Bahasa C
223
} while (jawab == 'y' || jawab == 'Y');
printf("\n");
fclose(pf);
/* Tutup file */
}
Contoh eksekusi :
Nomor record dr data yg mau ditampilkan : 1
No. Judul Buku
1. Relational Database Design
Nama Pengarang
Jumlah
Igor T. Hawryszkiewycz
1
Mau mencoba lagi (Y/T)? Y
Nomor record dari data yg mau ditampilkan : 3
No. Judul Buku
1. The C Programming Language
Nama Pengarang
Brian WK & Dennis MR
Jumlah
2
Mau mencoba lagi (Y/T)? Y
Nomor record dari data yg mau ditampilkan : 7
Nomor record tidak dikenali!
Mau mencoba lagi (Y/T)? T
Mula-mula program menanyakan nomor record dari data yang ingin ditampilkan.
Selanjutnya penunjuk file ditempatkan pada posisi data yang akan ditampilkan, melalui
instruksi
offset_byte = (no_record-1) * sizeof(buku);
fseek(pf, offset_byte, SEEK_SET);
Langkah berikutnya, membaca data file dengan menggunakan fread(). Kalau keluaran
fread() bernilai 0, maka di layar akan dimunculkan pesan : "Nomor record tidak
dikenali!"
Kegunaan fseek() selain untuk membaca data secara random, juga memungkinkan
untuk mengubah data secara acak, seperti pada program di bawah ini.
/* File program : gantirec.c
Mengganti isi suatu record secara random */
#include <stdio.h>
#include <stdlib.h>
#define SATU_RECORD 1
Jobsheet Pemograman Bahasa C
224
main()
{
struct {
char judul[30];
char pengarang[30];
int jumlah;
} buku;
/* variabel buku bertipe struktur */
FILE *pf;
/* pointer ke FILE */
char jawab;
int no_record, sudah_benar, hasil_baca;
long int offset_byte;
/* Buka file yg berisi data buku */
if((pf = fopen("DAFBUKU.DAT", "rb+")) == NULL)
{
printf("File tidak dapat dibuka !\n");
exit(1);
}
/* Baca record secara random */
do
{
printf("Nomor record dari data yg mau diubah : ");
scanf("%d", &no_record);
/* atur penunjuk posisi-file ke record tsb */
offset_byte = (no_record-1) * sizeof(buku);
fseek(pf, offset_byte, SEEK_SET);
/*Baca record yg ditunjuk oleh penunjuk posisi_file*/
hasil_baca = fread(&buku, sizeof(buku), SATU_RECORD,
pf);
if(hasil_baca == 0)
printf("Nomor record tdk dikenali!\n");
else
{
printf("\n%-30s %-30s %s\n\n","Judul Buku",
"Nama Pengarang", "Jumlah");
printf("%-30s %-30s %4d\n\n", buku.judul,
buku.pengarang, buku.jumlah);
printf("Jumlah buku tsb kini = ");
scanf("%d", &buku.jumlah);
/*Atur penunjuk posisi-file ke posisi seblmnya */
fseek(pf, offset_byte, SEEK_SET);
Jobsheet Pemograman Bahasa C
225
/* Rekam ulang */
fwrite(&buku, sizeof(buku), SATU_RECORD, pf);
}
printf("\nMau mengubah lagi (Y/T)? ");
do
{
jawab = getchar(); /*baca jawaban dr keyboard */
sudah_benar = ((jawab == 'Y') || (jawab == 'y')
||(jawab == 'T') || (jawab == 't'));
} while(! sudah_benar);
} while (jawab == 'y' || jawab == 'Y');
printf("\n");
fclose(pf);
/* Tutup file */
}
Contoh eksekusi :
Nomor record dari data yg mau diubah : 2
Judul Buku
Nama Pengarang
C Programming FAQs
Steven Summit
Jumlah
4
Jumlah buku tsb kini = 5
Mau mengubah lagi (Y/T) ? T
Proses penggantian data record dilakukan dengan mula-mula menempatkan penunjuk file
pada posisi dari data yang akan diganti. Selanjutnya data dibaca (dengan fread()), dan
akan ditampilkan di layar. Setelah data jumlah buku yang baru dimasukkan dari keyboard,
penunjuk file ditempatkan kembali ke posisi tempat data yang dibaca tadi. Kemudian data
baru (satu record) direkam ulang dengan fwrite().
c. Menghapus File
C menyediakan fungsi yang berguna untuk menghapus file yaitu remove(). Bentuk
deklarasinya :
int remove (char *namafile);
dengan namafile adalah pointer yang menunjuk ke nama file yang akan dihapus.
Jobsheet Pemograman Bahasa C
226
Fungsi ini menghasilkan keluaran berupa nilai nol bila operasi penghapusan file
berhasil dilaksanakan. Kalu terjadi kegagalan, keluaran fungsi berupa selain nol. Prototipe
dari fungsi ini ada pada stdio.h
/* File program : hapusfile.c
Contoh program untuk menghapus file */
#include <stdio.h>
#include <stdlib.h>
#define PJG 65
main()
{
int kode;
char namafile[PJG];
printf("Nama file yang akan dihapus : ");
gets(namafile);
kode = remove(namafile);
if(kode == 0)
printf("File sudah dihapus\n");
else
printf("Gagal dalam menghapus file\n");
}
Contoh eksekusi :
Nama file yang akan dihapus : bilangan.dat
File sudah dihapus
d.
Mengganti Nama File
Untuk mengganti nama file, fungsi yang digunakan yaitu rename().
Bentuk
deklarasinya :
int rename(char *namafilelama, char *namafilebaru);
Jika operasi penggantian nama file lama menjadi nama file baru ini berhasil, maka keluaran
fungsi berupa nol. Jika terjadi kegagalan, keluaran fungsi berupa selain nol. Prototipe dari
fungsi ini ada pada file stdio.h
/* File program : gantinama.c
Contoh program untuk mengganti nama file */
#include <stdio.h>
#include <stdlib.h>
Jobsheet Pemograman Bahasa C
227
#define PJG 65
main()
{
int kode;
char namafilelama[PJG], namafilebaru[PJG];
printf("Nama file yang akan diganti : ");
gets(namafilelama);
printf("Nama file yang baru
: ");
gets(namafilebaru);
kode = rename(namafilelama, namafilebaru);
if(kode == 0)
printf("Nama file sudah diganti\n");
else
printf("Gagal dalam mengganti nama\n");
}
Contoh eksekusi :
Nama file yang akan diganti : bilangan.dat
Nama file yang baru
: bilangan1.dat
Nama file sudah diganti
C. Daftar Alat dan Bahan.
1.
CPU
2.
Monitor
3.
Keyboard
4.
Mouse
5.
Printer
6.
Job Sheet Praktikum
D. Langkah Kerja.
1. Hidupkan Komputer sampai menyala dan mengeluarkan layar Windows.
2. Pilih Start pada ujung kiri bawah monitor.
3. Pilih Program.
4. Pilih Program Turbo C atau TC for windows.
5. Jika Layar Turbo C sudah keluar, Pilih File.
6. Pilih News untuk membuka Program baru, atau open untuk membuka file program
yang sudah dibuat sebelumnya.
Jobsheet Pemograman Bahasa C
228
7. Ketik Program sesuai dengan di data program.
8. Setelah selesai pengetikan, pilih file dan save as program tersebut dengan nama file
sesuai keinginan praktikan.
9. compile program tersebut untuk melihat kebenaran pengetikan program dan untuk
mengubah file dengan extension .cpp menjadi file .hex, .bin dan. .obj.
10. Setelah sukses dicompile maka pilih run untuk menjalankan program tersebut.
11. Lihat hasilnya dimonitor dan catat, kemudian analisa hasil percobaan tersebut.
12. Lakukan praktikum untuk file program berikutnya dengan cara yang sama.
E. Data Program
1. Menciptakan dan mengisi file dengan data karakter dari keyboard
/* File program: fputc.c */
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *pf;
char kar;
/* Pointer-ke-FILE */
/* Ciptakan file */
if ((pf = fopen("COBA.TXT","w")) == NULL)
{
printf("file tak dapat diciptakan!\r\n");
exit(1);
/* selesai */
}
printf("Ketikkan apa saja, akhiri dengan ENTER.\n");
printf("Program akan membaca perkarakter");
printf(" dan menyimpannya dalam file COBA.TXT\n\n");
while((kar=getchar()) != '\n') /* baca kar dr keyboard */
fputc(kar, pf);
/* tulis ke file */
fclose(pf);
/* tutup file */
}
2. Membaca isi file per karakter
/* File program: fgetc.c */
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *pf;
Jobsheet Pemograman Bahasa C
229
char kar;
if((pf=fopen("COBA.TXT","r")) == NULL ) /* buka file */
{
printf("file tak dapat dibuka !\r\n");
exit(1);
/* selesai */
}
while((kar=fgetc(pf)) != EOF)
putchar(kar);
/* baca kar dari file */
/* tampilkan ke layar*/
printf("\n");
fclose(pf);
/* tutup file */
}
3. Menyimpan data bertipe int menggunakan putw()
/* File program: _putw.c */
#include <stdio.h>
#include <stdlib.h>
main( )
{
FILE *pf;
int nilai, sudah_benar;
char jawab;
/* ptr-ke-FILE */
/* ciptakan file*/
if((pf=fopen("BILANGAN.DAT", "wb")) == NULL )
{
printf("file gagal diciptakan!\n");
exit(1);
}
printf("MENYIMPAN DATA INTEGER KE FILE\n");
do {
printf("\nBilangan yang
scanf("%d", &nilai);
_putw(nilai, pf);
printf("memasukkan data
akan disimpan: ");
/* baca nilai dr keyboard */
/* baca bilangan ke file */
lagi (Y/T)?
");
do
{
jawab = getchar(); /* baca jawaban dari keyboard */
sudah_benar = ((jawab == 'Y') || (jawab == 'y') ||
(jawab == 'T') || (jawab == 't'));
} while(! sudah_benar);
} while (jawab == 'y'|| jawab == 'Y');
Jobsheet Pemograman Bahasa C
230
printf("\nOke. Data sudah disimpan dalam file.\n");
fclose(pf);
/*menutup file */
}
4. Membaca isi file biner menggunakan getw()
/* File program : _getw.c */
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *pf;
int nilai;
int nomor = 0;
/* ptr ke file */
/* Buka file biner untuk dibaca */
if((pf=fopen("BILANGAN.DAT","rb")) == NULL)
{
printf("File gagal dibuka.\n");
exit(1);
}
printf("Isi file BILANGAN.DAT : \n");
while(1)
{
nilai = _getw(pf); /*
if (feof(pf) != 0) /*
break;
/* Tampilkan ke layar
printf("%2d. %d \n",
}
fclose(pf);
/* file berhasil dibuka */
Baca sebuah int dari file */
Jika akhir file, keluar loop */
*/
++nomor, nilai);
/* Tutup file */
}
5. Menyimpan data bertipe struktur ke file menggunakan fwrite()
/* File program : fwrite.c */
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *f_struktur;
char jawaban;
int sudah_benar;
struct {
char judul[30];
char pengarang[30];
int jumlah;
Jobsheet Pemograman Bahasa C
231
} buku;
/* var buku bertipe struktur */
/* Buka file */
if((f_struktur = fopen("DAFBUKU.DAT", "wb")) == NULL)
{
printf("File tidak dapat diciptakan !\n");
exit(1);
}
do {
fflush(stdin);
/* Hapus isi penampung keyboard */
printf("Judul buku
: ");
gets(buku.judul);
printf("Nama pengarang
: ");
gets(buku.pengarang);
printf("Jumlah buku
: ");
scanf("%d", &buku.jumlah);
fflush(stdin);
/* Hapus isi penampung keyboard */
/* Rekam sebuah data bertipe struktur */
fwrite(&buku, sizeof(buku), 1, f_struktur);
printf("\nMau merekam data lagi [Y/T] ?");
do {
jawaban = getchar();
sudah_benar = ((jawaban == 'Y') || (jawaban == 'y')
||(jawaban == 'T') || (jawaban == 't'));
} while(!sudah_benar);
printf("\n");
} while(jawaban == 'Y' || jawaban == 'y');
fclose(f_struktur);
/* Tutup file */
}
6. Membaca data bertipe struktur ke file menggunakan fread()
/* File program : fread.c */
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *f_struktur;
int i=1;
struct {
char judul[30];
char pengarang[30];
int jumlah;
Jobsheet Pemograman Bahasa C
232
} buku;
/* var buku bertipe struktur */
/* Buka file */
if((f_struktur = fopen("DAFBUKU.DAT", "rb")) == NULL)
{
printf("File tidak dapat dibuka !\n");
exit(1);
}
printf("%2s. %-30s %-30s %s\n\n", "No", "Judul Buku",
"Nama Pengarang", "Jumlah");
/* diulang selama masih ada sebuah record terbaca dalam
file */
while(fread(&buku, sizeof(buku), 1, f_struktur) == 1)
printf("%2d. %-30s %-30s %4d\n", i++, buku.judul,
buku.pengarang, buku.jumlah);
printf("\n");
fclose(f_struktur);
/* Tutup file */
}
7. Membaca isi file teks
/* File program : fgets.c */
#include <stdio.h>
#include <stdlib.h>
#define PANJANG 256
main()
{
FILE *f_teks;
char string[PANJANG];
char namafile[65];
printf("PROGRAM UNTUK MELIHAT ISI FILE TEKS\n\n");
printf("Masukkan nama file : ");
gets(namafile);
printf("\nIsi file %s adalah sbb :\n", namafile);
if((f_teks=fopen(namafile,"rt")) == NULL)
{
printf("File gagal dibuka\n");
exit(1);
}
while(fgets(string, sizeof string, f_teks)!= NULL);
printf("%s\n\n", string);
Jobsheet Pemograman Bahasa C
233
fclose(f_teks);
}
8. Membaca kemudian menyalin isi file teks
/* File program : fputs.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PANJANG 256
main()
{
FILE *pf_input, *pf_output;
char string[PANJANG];
char namafile_inp[65], namafile_out[65];
printf("PROGRAM UNTUK MENYALIN ISI FILE TEKS\n\n");
printf("Masukkan nama file input : ");
gets(namafile_inp);
printf("Masukkan nama file output: ");
gets(namafile_out);
/* Buka file input */
if((pf_input=fopen(namafile_inp,"r+")) == NULL)
{
printf("File input gagal dibuka\n");
exit(1);
}
/* Buka file output */
if((pf_output=fopen(namafile_out,"w+")) == NULL)
{
printf("File output gagal dibuka\n");
exit(1);
}
/* menampilkan isi file input, merubahnya ke huruf besar
dan menyalinnya ke file output */
while(fgets(string, sizeof string, pf_input) != NULL)
{
printf("\nIsi file %s adalah :\n",namafile_inp);
printf("%s\n", string);
strupr(string);
fputs(string, pf_output);
}
fcloseall();
/* Buka file output */
Jobsheet Pemograman Bahasa C
234
if((pf_output=fopen(namafile_out,"r+")) == NULL)
{
printf("File output gagal dibuka\n");
exit(1);
}
/* tampilkan isi file output */
printf("\nIsi dari file %s adalah : \n",namafile_out);
while(fgets(string, sizeof string, pf_output) != NULL)
printf("%s\n\n",string);
fclose(pf_output);
}
9. Membaca isi file secara random
/* File program : baca_acak.c */
#include <stdio.h>
#include <stdlib.h>
main()
{
struct {
char judul[30];
char pengarang[30];
int jumlah;
} buku;
/* var buku bertipe struktur */
FILE *pf;
char jawab;
int i, no_record, sudah_benar;
long int offset_byte;
/* Buka file */
if((pf = fopen("DAFBUKU.DAT", "rb")) == NULL)
{
printf("File tidak dapat dibuka !\n");
exit(1);
}
do
{
i = 1;
printf("Nomor record dari data yg mau ditampilkan : ");
scanf("%d", &no_record);
offset_byte = (no_record-1) * sizeof(buku);
fseek(pf, offset_byte, SEEK_SET);
Jobsheet Pemograman Bahasa C
235
if(fread(&buku, sizeof(buku), 1, pf) == 0)
printf("Nomor record tdk dikenali!\n");
else
{
printf("\n%2s. %-30s %-30s %s\n\n", "No",
"Judul Buku", "Nama Pengarang", "Jumlah");
printf("%2d. %-30s %-30s %4d\n", i++, buku.judul,
buku.pengarang, buku.jumlah);
}
printf("\nMau mencoba lagi (Y/T)? ");
do
{
jawab = getchar();
/* baca jawaban dr keyboard */
sudah_benar = ((jawab == 'Y') || (jawab == 'y') ||
(jawab == 'T') || (jawab == 't'));
} while(! sudah_benar);
} while (jawab == 'y' || jawab == 'Y');
printf("\n");
fclose(pf);
/* Tutup file */
}
10. Mengganti isi suatu record secara random
/* File program : gantirec.c */
#include <stdio.h>
#include <stdlib.h>
#define SATU_RECORD 1
main()
{
struct {
char judul[30];
char pengarang[30];
int jumlah;
} buku;
/* var buku bertipe struktur */
FILE *pf;
char jawab;
int i, no_record, sudah_benar;
long int offset_byte;
/* Buka file */
if((pf = fopen("DAFBUKU.DAT", "rb")) == NULL)
{
printf("File tidak dapat dibuka !\n");
Jobsheet Pemograman Bahasa C
236
exit(1);
}
do
{
i = 1;
printf("Nomor record dari data yg mau ditampilkan : ");
scanf("%d", &no_record);
offset_byte = (no_record-1) * sizeof(buku);
fseek(pf, offset_byte, SEEK_SET);
if(fread(&buku, sizeof(buku), 1, pf) == 0)
printf("Nomor record tdk dikenali!\n");
else
{
printf("\n%2s. %-30s %-30s %s\n\n", "No", "Judul
Buku", "Nama Pengarang", "Jumlah");
printf("%2d. %-30s %-30s %4d\n", i++, buku.judul,
buku.pengarang, buku.jumlah);
}
printf("\nMau mencoba lagi (Y/T)? ");
do
{
jawab = getchar();
/* baca jawaban dr keyboard */
sudah_benar = ((jawab == 'Y') || (jawab == 'y') ||
(jawab == 'T') || (jawab == 't'));
} while(! sudah_benar);
} while (jawab == 'y' || jawab == 'Y');
printf("\n");
fclose(pf);
/* Tutup file */
}
11. Mengganti nama file
/* File program : gantinama.c */
#include <stdio.h>
#include <stdlib.h>
#define PJG 65
main()
{
int kode;
char namafilelama[PJG], namafilebaru[PJG];
printf("Nama file yang akan diganti : ");
gets(namafilelama);
Jobsheet Pemograman Bahasa C
237
printf("Nama file yang baru
gets(namafilebaru);
: ");
kode = rename(namafilelama, namafilebaru);
if(kode == 0)
printf("Nama file sudah diganti\n");
else
printf("Gagal dalam mengganti nama\n");
}
12. Menghapus file
/* File program : hapusfile.c */
#include <stdio.h>
#include <stdlib.h>
#define PJG 65
main()
{
int kode;
char namafile[PJG];
printf("Nama file yang akan dihapus : ");
gets(namafile);
kode = remove(namafile);
if(kode == 0)
printf("File sudah dihapus\n");
else
printf("Gagal dalam menghapus file\n");
}
F. SOAL
1. a. Buatlah program untuk menambahkan tulisan :
BELAJAR BAHASA C
ke dalam file COBA.TXT yang dipakai pada program fputc.c di atas. Caranya,
ubahlah mode “w” pada program tsb dengan mode “a” dan gantilah komentar “File
tidak dapat diciptakan!” dengan “File tidak dapat dibuka!”
b. Tampilkan isi file COBA.TXT yang baru dengan menggunakan NOTEPAD atau
dengan menjalankan program fgetc.c. Perhatikan hasilnya.
Jobsheet Pemograman Bahasa C
238
Download