KONSEP DASAR BAHASA C 1.1 SEJARAH DAN STANDAR C Akar dari bahasa C adalah bahasa BCPL yang dikembangkan oleh Martin Richard pada tahun 1967. Bahasa ini memberkan ide kepada ken thompson yang kemudian mengembangkan bahasa yang disebut dengan B pada tahun 1970. Perkembangan selanjutnya dari bahasa B adalah bahasa C oleh Dennis Ricthie sekitar tahun 1970-an di Bell Telephone Laboratories Inc. ( sekarang adalah AT&T Bell Laboratories). Kepopuleran bahasa C membuat versi-versi dari bahasa ini banyak dibuat untuk komputer mikro. Untuk membuat versi-versi tersebut standar, ANSI (American National Standards Institute) kemudian menetapkan standar ANSI untuk bahasa C. Standar ANSI ini didasarkan dari standar UNIX yang diperluas. Standar ANSI menetapkan sebanyak 32 buah kata-kata kunci (keyword) standar. Ke 32 kata kunci ini adalah : auto
break
case
char
const
continue default
do
double else
enum
extern
float
for
goto
if
int
long
register return short
signed
sizeof
static
struct
switch typedef
union
unsigned void
volatile while
1.2 ALASAN-ALASAN MENGGUNAKAN BAHASA C Beberapa alasan dapat dicatat mengapa bahasa C banyak digunakan, diantaranya adalah sebagai berikut : 1. Bahasa C tersedia hampir disemua jenis komputer 2. Kode bahasa C sifatnya adalah portabel Aplikasi yang ditulis dengan bahasa C untuk suatu komputer tertentu dapat digunakan di komputer lain hanya dengan sedikit modifikasi.
3. Bahasa C hanya menyediakan sedikit kata-kata kunci 4. Proses executable program bahasa C lebih cepat 5. Dukungan pustaka yang banyak Keandalan bahasa C dicapai dengan adanya fungsi-fungsi pustaka.
6. C adalah bahasa yang terstruktur Bahasa C mempunyai struktur yang baik sehingga mudah untuk dipahami. C mempunyai fungsi-fungsi sebagai program bagiannya.
7. Selain bahasa tingkat tinggi, C juga dianggap sebagai bahasa tingkat menengah. Bahasa C mampu menggabungkan kemampuan bahasa tingkat tingkat tinggi dengan bahasa tingkat tingkat rendah.
8. Bahasa C adalah kompiler Karena C sifatnya adalah kompiler, maka akan menghasilkan executable program yang banyak dibutuhkan oleh program-program komersial.
1.3 STRUKTUR PROGRAM C Untuk dapat memahami bagaimana suatu program ditulis, maka struktur dari program harus dimengerti terlebih dahulu, atau sebagai pedoman penulis program (programmer) bagaimana seharusnya program tersebut ditulis. Struktur dari program C dapat diihat sebagai kumpulan dari sebuah atau lebih fungsi-fungsi. Fungsi pertama yang harus ada di di program C yang sudah ditentukan
Bahasa C
1
namanya, yaitu fungsi main(). Artinya program C minimal memiliki satu fungsi (fungsi main()). Berikut ini adalah struktur dari program C. main() { statemen_1; statemen_2; …….. statemen_n; } fungsi_lain() { statemen_statemen; }
Fungsi Utama
Fungsi-fungsi lain yang ditulis oleh pemrogram komputer
Gambar 1.1 Struktur program C Keterangan : 1. Dimulai dari tanda { hingga tanda } disebut tubuh fungsi / blok. 2. Tanda ( ) digunakan untuk mengapit argumen fungsi, yaitu nilai yang dilewatkan ke fungsi. Pada fungsi main( ) tidak ada argumen yang diberikan, maka tidak ada entri di dalam ( ). 3. Kata void menyatakan bahwa fungsi ini tidak memiliki nilai balik. 4. Tanda { menyatakan awal eksekusi program dan tanda } menyatakan akhir eksekusi program. 5. Didalam tanda { } bisa tergantung sejumlah unit yang disebut pernyataan (statemen). Umumnya pernyataan berupa instruksi untuk : • memerintah komputer melakukan proses menampilkan string ke layar. • menghitung operasi matematika. • membaca data dari keyboard. • dll. Berikut ini adalah suatu program C yang sederhana : /*--- Program C Sederhana --*/ #include <stdio.h> main( ) { printf(“Masukkan Nilai Celcius ? \n“);
}
1.4
FILE JUDUL / HEADER FILE File judul (header file) merupakan file yang berisi dengan prototype (judul, nama dan sintak) dari sekumpulan fungsi-fungsi pustaka tertentu. Jadi file ini hanya berisi dengan prototype dari fungsi-fungsi pustaka, sedangkan fungsi-fungsi pustakanya sendiri disimpan di file pustaka (library file dengan extention file .LIB). Misalnya prototype dari fungsi-fungsi pustaka printf() dan scanf() terdapat di file judul stdio.h, sehingga jika fungsi-fungsi ini akan digunakan di program, maka nama file judulnya harus dilibatkan dengan menggunakan preprocessor directive #include. File judul stdio.h berisi
Bahasa C
2
prototype fungsi-fungsi pustaka untuk operasi input dan output standar. Ada dua cara untuk melibatkan file judul di suatu program C, yaitu sebagai berikut : #include <stdio.h> atau #include “stdio.h” 1.5
NAMA PENGENAL Nama pengenal (Identifier name) adalah nama-nama yang ditentukan sendiri oleh pembuat program. yang nantinya nama tersebut digunakan dalam pemrograman. Fungsinya untuk menyatakan : Variabel, Tipe Data, Konstanta, Fungsi, Label dan Obyek. Aturan penamaan pengenal : 1. Karakter pertama harus huruf atau garis bawah. 2. Karakter berikutnya boleh huruf, bilangan, atau garis bawah. 3. Panjang maksimal 32 karakter. 4. Nama pengenal tidak boleh sama dengan kata kunci (reserved word) 5. Pengenal bersifat case sensitif. Huruf kecil dan huruf besar (kapital) pada suatu pengenal tidak dianggap sama : Contoh : NAMA, Nama, nama = menyatakan pengenal yang berbeda. Contoh penamaan : Benar Salah dan alasanya Nama 2semester ( tidak boleh diawali angka ) NAMA nama-barang ( tanda – tidak diperbolehkan ) Nama_barang #barang (simbol # tidak diperbolehkan ) Kuartal_2 Nama barang ( tidak boleh mengandung spasi ) 1.6
KOMENTAR PROGRAM Komentar merupakan bagian terpenting dari program. Kehadirannya sangat membantu pemrograman ataupun orang lain dalam memahami program, karena berupa penjelasan-penjelasan mengenai program atau bagian-bagian program. Hal ini penjelasannya bisa berupa : • tujuan / fungsi program • saat program dibuat atau direvisi • keterangan-keterangan lain tentang kegunaan sejumlah pernyataan dalam program. Pada C suatu komentar di awali dengan tanda ( /* ) dan diakhiri dengan tanda ( */ ). Semua string atau tulisan yang terletak sesudah tanda /* hingga akhir baris dengan sendirinya akan diperlukan sebagai keterangan. Bagi kompiler hal ini tidak berguna dan akan di abaikan pada saat kompilasi. Contoh : / * ------------------------------------------------------------------- * / / * PROGRAM_1.C */ / * contoh program yang menggunakan komentar */ / * --------------------------------------------------------------------*/ 1.7
STATEMENT Suatu statemen (statement) adalah pernyataan yang menyebabkan suatu tindakan akan dilakukan oleh komputer. Tindakan tersebut dapat berupa tindakan untuk menghitung, menampilkan hasil, menerima input data, mengendalikan proses program
Bahasa C
3
dan lain-lain. Suatu statemen dibahasa C di tulis dengan diakhiri oleh tanda titik koma (;). Contoh : X = X + 1; printf(“ Nilai X = %f \n”,X); 1.8 TIPE DATA Bahasa C memiliki lima tipe data utama, yaitu karakter (char), integer (int), Floating point (float0, double floating(double) dan valualess/kosong (void). Untuk int, float, double dan char dapat dikombinasikan dengan modifier signed, unsigned, long, short, maka hasilnya sbb : Penanda signed tidak perlu dituliskan. Tipe Int Signed int Signed short int Signed long int Unsigned int Unsigned short int Unsigned long int Float Float Double Long double Char Signed char Unsigned char
Lebar Jangkauan nilai 16 bit 16 bit 32 bit 16 bit 16 bit 32 bit
-32768 s/d 32767 -32768 s/d 32767 -2147483647 s/d 2147483647 0 s/d 65535 0 s/d 65535 0 s/d 4294967295
32 bit 3.4E-38 s/d 3.4E+38 64 bit 1.7E-308 s/d 1.7E+308 80 bit 3.4E-4932 s/d 3.4E+4932 8 bit 8 bit
-128 s/d 127 0 s/d 255
1.9 KONSTANTA Adalah suatu nilai yang tidak pernah berubah selama proses program. Dibagi menjadi : a. Numeric integer Dapat berupa integer bertanda dan integer tidak bertanda. Untuk unsigned integer diberi huruf u atau U pada akhir nilai, untuk signed long diberi tanda l atau L dan unsigned long diberi tanda ul atau UL. Contoh : 43 (signed int), -123 (signed int), -75000L (signed long int), 261062UL (unsigned long int). b. Numerik pecahan Merupakan nilai numeric yang dapat mempunyai pecahan dibelakang titik decimal. Bilangan yang diberikan dapat diikuti huruf F untuk float atau huruf L untuk long double. Contoh : 1.5 (float) , 253.67(float), 12.34E-99 (double), 1000.1F (float), 1.2E+4930 (long double). c. String dan character. Bahasa C
4
Merupakan nilai yang ditulis diantara tanda petik ganda untuk string dan tunggal untuk karakter. Contoh : “A” string A dan ‘A’ karakter A. d. Karakter Escape Karakter ini digunakan untuk menampilkan hasil tertentu dan diawali dengan tanda ‘\’. Berikut table karakter escape : Karakter \a \b \f \n \r \t \v \0 \’ \” \\
Fungsi Bunyi bell atau alert Mundur 1 spasi (backspace) Form feed (ganti halaman) New line (ganti baris) Carriage return (ke kolom pertama,baris yg sama Tabulasi horizontal Tabulasi vertical Nilai kosong (null) Tanda petik Petik ganada Backslash
e. Konstanta Bernama Konstanta bernama adalah suatu pengenal yang berhubungan dengan nilai tetap (variabel konstan). C++ memungkinkan pendefinisian suatu konstanta bernama. Hal ini dilakukan dengan menggunakan kata kunci const. Bentuk umum : const tipe_data nama_konstanta = nilai; Contoh : const int bulan = 12; const float phi = 3.14285; 1.10
VARIABEL Variabel adalah suatu pengenal yang digunakan untuk menyimpan suatu nilai dan nilai dari variabel tersebut dapat berubah-ubah selama proses program. 1.1 Mendeklarasikan Variabel Bentuk umum deklarasi typedata namavariabel; Contoh : int jumlah; float rata_rata; char nama;
b Pendeklarasian dan penugasan variabel Nilai awal suatu variabel dapat langsung diberikan pada saat mendeklarasikannya.
Bentuk umum typedata namavariabel = nilai;
Bahasa C
5
Contoh : int jumlah = 5; float rata_rata = 2.5; char karakter = ‘A’ char string[10] ; 1.11 FUNGSI DEFINE #define digunakan untuk mendefinisikan suatu konstanta, makro ataupun nama. 1. Sebagai konstanta #include <stdio.h> #define Alamat “jl.mawar no.1 “ main () { printf(Alamat) ; } out : jl.mawar no.1 2. sebagai Makro #define kuadarat(x) (x)*(x) Maka statement Luas = 3.14 * kuadrat(3); Sama artinya Luas = 3.14 * 3 * 3 ; 3. Sebagai nama #define pecahan float Maka deklarasi variable pecahan derajat; Sama dengan float pecahan; 1.12 OPERATOR 1. Assigment Operator Operator Assigment digunakan untuk memberikan nilai ke suatu variabel. Operator yang digunakan adalah opertor ’=’ Contoh : A = 5; (memberi nilai 5 ke dalam variabel A) B = B * 5 ; (membei nilai B*5 ke dalam vaiabel B) A = B = 5 ; (memberi nilai 5 ke dala var A dan B) 2. Operator Aritmatika Operator * (perkalian) / (pembagian) % (modulo) + (tambah) – (pengurangan)
Jenjang 3 3 3 4 4
Contoh 1: int x, y ; float z; x = 7; y = 3; z = x/y ; printf( ”z = %f ”, z); ket :
Bahasa C
x dan y bertipe int, maka hasil 7 / 3 didapatkan nilai int juga, yaitu 2 yang disimpan dalam var z, walaupun z bertipe float. Maka output : z = 2.000000.
6
Untuk operasi dengan tipe data yang berbeda, compiler C akan mengoperasikan operand yang berbeda tipe : 1. Tipe char akan dikonversikan ke tipe int 2. Tipe float dikonversikan ke tipe double 3. jenjang tertinggi dimulai dari long double, double, long int, unsigned int dan int. Jika doble dioperasikan dengan int, maka hasilnya adalah double. 3. Operator Unary Merupakan operator yang hanya menggunkan sebuah operand saja. Operator Unary memiliki jenjang ke-2 Operator ++ -(tipe) sizeof ! ~ & *
Arti Unary minus Increamen dengan penambahan 1 Decreamen dengan pengurangan 1 Cast Ukuran dari operan dalam byte Unary NOT Komplemen satu (Bitwise NOT) Operator pointer Operator pointer
a. Unary Minus Contoh : A = -B A = B + -C * D
jika B = 5 maka A bernilai -5 sama artinya A = B+ (-C) * D
b. Operator Increament (+ +) dan Decreament (--) a++; sama artinya a = a+1 a--; sama artinya a = a-1 Contoh : 1. X = 5; sama artinya A = ++X ; Hasil X = 6 A = 6 2. X = 5; sama artinya A = X++; Hasil X = 6 A = 5 3. X = 6, A = --X ; Hasil X = 5 A = 5
X = X + 1 A = X A = X B = X + 1
Contoh : int a = 8, b = 4; printf(“ hasil = %d dan %d”, ++a + b, b++ * a); out :
c. Type casting Operator (tipe) Operator ini digunakan untuk menconvesi tipe data yang sudah dibeikan ke tipe data yang lain. Contoh : int i; float f = 3.14; i = (int) f; /*hasilnya i = 3 karena nilai f int*/
Bahasa C
7
Pada contoh1. Z = X/Y menghasilkan tipe int meskipun z bertipe float. Untuk itu gunakan operator Tipe untuk menghasilkan tipe float. Z = (float) X/Y; Maka hasilnya Z = 2.333333 bukan lagi 2.000000 Operator sizeof( )
d.
Digunakan untuk mengetahui ukuran memori dari operand. Operator ini menerima 1 parameter, dapat berupa type variabel atau variabel itu sendiri dan mengembalikan ukurannya type atau object tersebut dalam bytes : Contoh : char c; int I; printf(”ukuran karakter = %d byte\n”, sizeof c); printf(”ukuran integer = %d byte\n”, sizeof(I)); printf(”ukuran float = %d byte\n”, sizeof(float)) Out:
ukuran karakter = 1 byte ukuran integer = 2 byte ukuran float = 4 byte
4. Operator Logika Operator ini digunakan untuk membandingkan dua buah nilai logika. Nilai logika adalah nilai benar (1) atau salah (0).
Operator ! && ||
Arti Logika NOT Logika DAN (AND) Logika ATAU (OR)
Jenjang 2 11 12
Tabel Hubungan Logika X 0 0 1 1
Y 0 1 0 1
X&&Y 0 0 0 1
X||Y 0 1 1 1
!X 1 1 0 0
Contoh : out : cara:
it A = 5, B = 7; char C = ‘A’ ; printf(“ hasil = %d “, A < B || hasil = 1 A
B==7
&& C > ‘Z’ );
||
B = = 7 && C > ‘Z’ 1 AND 0 OR 1 1
5.
Operator Relasi (hubungan) Digunakan untuk menunjukkan hubunga antara 2 operand. Menghasilkan nilai boolean true (1) atau false (0).
Bahasa C
8
Operator : jenjang ke-6 : < , <=, >, >= jenjang ke-7 : = =, ! = Contoh : out :
int A = 5, B = 7; printf(”%d < %d hasilnya d\n”, A, B, A
6. Condisional Operator (? : ) Disebut operator ternary. Bentuk : Kondisi ? pernyataan1 : pernyataan2 Jika kondisi bernilai benar (true) maka akan menghasilkan pernyataan1 dan jika salah (false) akan menghasilkan penyataan2. Contoh : 1. 7= = 5 ? 4 : 3 hasilnya adalah 3 2. bil 1 = 5 ; bil 2 = 10; bil3 = 15; printf(“hasil = %i “,bil1 < bil2 && bil2 > bil3 ? bil1 : (bil 1 < bil3 ? bil3 : bil2); 5 < 10 AND 10 > 15 ? 5 : 15 1 AND 0 ? 5 : 15 0 , maka dipilih 15 out : hasil = 15 7.
Bitwise Operator Digunakan untuk memanipulasi bit-bit nilai data di memori. Operator << >> & ^ |
Arti Pergeseran bit ke kiri (shift left) Pergeseran bit ke kanan (shift right) Bitwise AND Bitwise XOR Bitwise OR
Jenjang 5 5 8 9 10
Contoh : int x = 0x2d, y = 0x1b, z = 25; int A,B; A = x & y; B = Z>>2; printf(“Nilai A = %d”, A); printf(“\nNilai B = %d, B); printf(“\n%x ^ %x hasilnya = %x”,x ,y, x ^ y); printf(“\n%d << 2 hasilnya = %d”, z, z << 2); Hasil : Nilai A = 9 Nilai B = 6 2d ^ 1b hasilnya = 36 25 << 2 hasilnya = 100 Cara : Ubah semua ke dalam bilangan biner dan perhatikan panjang bit setiap tipe data. Mis int 16 bit. X = 0x2d = 0010 1101 Bahasa C
9
Y = 0xb = 0001 1011 A = x & y = 0000 1001 (AND) , maka A = %d = 9 B = Z>>2 = 25 >> 2 = 11001 >> 2 = 110 = 6 atau 25/22 = 25/ 4 = 6 2d ^ 1b = 0010 1101 0001 1011 0011 0110 (XOR) parity ganjil, hasil %x = 36(hexa) 25<<2 = 11001 << 2 = 1100100 , hasil %d = 100 atau 2*22 = 25*4 = 100 8. Coumpound Assigment Operator. Operator : jenjang ke-14 : += , - = , * = , / = , %= Jenjang ke-15 : >>= , <<= , | = , ^ = , &= Contoh ; I+=3 sama dengan I = I + 3 I /=2 sama dengan I = I / 2 I &= 2 sama dengan I = I & 2 9. Operator koma (,) Digunakan untuk menggabungkan beberapa ungkapan dengan proses yang berurutan dari ungkapan sebelah kiri koma ke ungkapan sebelah kanan koma. Memilik jenjang ke-16 Contoh : X = (B=5, B*2) → B = 5 X = 5*2 X = (B=B+5, B*2) → B = B+5 X = (B+5) *2 X = (A=3, A=A+5, B= A*2) → A = 8 B = 16 X = B=16
Bahasa C
10