Dasar Pemrograman Komputer Pengantar Bahasa C Catur Supriyanto, S.Kom, M.CS • • • • • Setiap komputer memahami bahasa mesinnya sendiri Bahasa mesin adalah ‘bahasa natural’ dari tiap mesin Umumnya terdiri dari sederatan angka Akan diterjemahkan menjadi bahasa biner, terdiri dari 1 dan 0 Machine-dependent, sebuah bahasa mesin hanya bisa digunakan pada satu tipe komputer Pengantar Bahasa C - TIF UB 2010 Bahasa Mesin 2 Bahasa Mesin +1300042774 +1400593419 +1200274027 Menambahkan gaji lembur ke gaji pokok dan menyimpan hasilnya ke gaji kotor Pengantar Bahasa C - TIF UB 2010 • Jauh dari bahasa manusia • Contoh: 3 • Bahasa mesin terlalu sulit dan lama untuk memrogram • Ketika komputer semakin populer, muncul bahasa assembly • Bahasa assembly menggunakan kata-kata atau singkatan berbahasa Inggris • Kode dalam bahasa assembly dikonversi menjadi bahasa mesin melalui assembler Pengantar Bahasa C - TIF UB 2010 Bahasa Assembly 4 Bahasa Assembly LOAD GAJIPOKOK ADD GAJILEMBUR STORE GAJIKOTOR Menambahkan gaji lembur ke gaji pokok dan menyimpan hasilnya ke gaji kotor Pengantar Bahasa C - TIF UB 2010 • Contoh: 5 • Bahasa assembly masih butuh banyak instruksi untuk menyelesaikan suatu tugas sederhana • Bahasa level tinggi dikembangkan untuk mengatasi kesulitan ini • Bahasa level tinggi menggunakan instruksi dengan bahasa Inggris dan notasi umum matematika • Kode dalam bahasa level tinggi dengan compiler atau interpreter • C/C++ termasuk bahasa level tinggi Pengantar Bahasa C - TIF UB 2010 Bahasa Tingkat Tinggi (High-level Languages) 6 Bahasa Tingkat Tinggi • Contoh: Pengantar Bahasa C - TIF UB 2010 gajiKotor = gajiPokok + gajiLembur Menambahkan gaji lembur ke gaji pokok dan menyimpan hasilnya ke gaji kotor 7 Sejarah C • Dirancang oleh Denis M. Ritchie & diimplementasikan pertama kali tahun 1972 di Bell Labs. • Dibantu Brian W. Kernighan, Ritchie menulis buku The C Programming Language (1978). Dikenal dengan nama K&R C atau “C klasik” atau “traditional C” • Versi C yang lebih baru ANSI C, 1989, untuk menyediakan definisi yang tidak ambigu dan independen terhadap mesin. C89. (ANSI: American National Standards Institute) Pengantar Bahasa C - TIF UB 2010 • Pengembangan dari bahasa BCPL (Martin Richard, 1967) dan bahasa B (Ken Thompson, 1970) 8 Mengapa C? • Bahasa tingkat tinggi yang mendekati bahasa tingkat rendah namun masih mudah dimengerti. • Bahasa yang banyak digunakan dalam ilmu komputer untuk membuat sistem operasi dan program aplikasi. (e.g. berbagai varian UNIX (C), Windows (C/C++), berbagai varian Linux (C/C++), MySql (C++), etc) • Didukung oleh banyak pustaka (libraries) Pengantar Bahasa C - TIF UB 2010 • Dipakai mulai dari komputer mikro sampai superkomputer 9 Struktur program • Bahasa C adalah salah satu bahasa pemrograman yang terstruktur • Bahasa C juga bersifat prosedural, terdiri dari fungsi-fungsi • Program akan dieksekusi dimulai dari pernyataan (statement) pertama pada fungsi “main” itu • Huruf besar dengan huruf kecil diartikan berbeda (casesensitive) • Setiap pernyataan (statement) sederhana diakhiri dengan titik koma (semi-colon (;)) Pengantar Bahasa C - TIF UB 2010 • Setiap program C mempunyai satu fungsi dengan nama “main” (program utama) 10 Pengantar Bahasa C - TIF UB 2010 Struktur program 11 Struktur program /*---------------------------------Program Pertama ----------------------------------*/ //Program mencetak tulisan Salam Super #include <stdio.h> int main() { printf(“Salam Super!\n”); return 0; } Pengantar Bahasa C - TIF UB 2010 • Contoh “Salam Super” 12 Struktur program • Format penulisan fungsi main 1. main() { statements; 3. } 2. void main() { statements; } 4. main() { statements; return (0); } int main() { statements; return (0); 13 } Pengantar Bahasa C - TIF UB 2010 Pola Deklarasi Fungsi tipe_data nama_fungsi (parameter){ //letakkan variabel lokal di sini //letakkan pernyataan C di sini } 14 Fungsi main() • Merupakan fungsi utama yang harus ada pada program C. • Fungsi ini menjadi titik awal dan titik akhir eksekusi program. • Biasanya ditempatkan di paling atas kode, untuk memudahkan penelusuran. 15 Fungsi main() -- lanjutan • Sintaks : void main () { /* tubuh fungsi */ } • void menunjukkan bahwa fungsi main tidak mengembalikan nilai apapun 16 Fungsi printf() • Merupakan fungsi standar C untuk menampilkan suatu keluaran pada layar/monitor • Bentuk umum : • printf(“string keluaran”, daftar argumen) 17 Fungsi printf() -- lanjutan • String keluaran dapat berupa : • • • • %d untuk menampilkan bil. bulat(integer) %f untuk menampilkan bil.pecahan %c untuk menampilkan karakter %s untuk menampilkan string/teks • Contoh : #include <stdio.h> void main(){ printf(“Hello World”); } 18 Fungsi printf() -- lanjutan • Menampilkan tulisan “Hello World” • printf(“Hello World”); • Penggunaan tanda ‘\’ : • • • • • \” menampilkan karakter petik ganda \\ menampilkan karakter backslash \t menyatakan karakter tab \n pindah kursor ke baris baru \a membunyikan bel sistem 19 Komentar pada Program • Digunakan untuk keperluan dokumentasi • Diawali dengan tanda “/*” dan diakhiri dengan tanda “*/” • Untuk komentar satu baris : “//” 20 Contoh Komentar //penggunaan directive #include <stdio.h> void main(){ /*mencetak ke layar*/ printf(“Hello World”); } 21 Struktur program • Sering dijumpai beberapa format penulisan fungsi main seperti contoh diatas, tetapi tidak semua compiler mengenalnya. • Contoh: • dengan menggunakan compiler Turbo C 2.0 (DOS) dan Microsoft Visual C++ (Windows), (2), (3) dan (4) => Success, tetapi (1) warning • dengan menggunakan compiler Dev-C (windows), dan gcc (linux) (1), (3) dan (4) => Success, tetapi (2) warning • return (0); menyatakan program exit secara normal. • Penulisan return 0; sama artinya dengan return (0); 22 • • • • • • Characters (karakter) Identifiers (nama) Keywords (kata kunci) Data types (tipe data) Variables (variabel) Constants (symbolic and literal) (konstanta simbolik dan konstanta literal) Pengantar Bahasa C - TIF UB 2010 Elemen-elemen dalam source code 23 • • • • • Expressions (Ekspresi) Statements (Pernyaatan) Comments or non-extecutable statements (Komentar) Functions (Fungsi) Pre-processor commands/directives (Perintah/pengarah preprocessor) Pengantar Bahasa C - TIF UB 2010 Elemen-elemen dalam source code 24 Characters • • • • Huruf besar A .. Z Huruf kecil a .. z Digit 0 .. 9 Karakter khusus seperti ‘!’ , ‘&’, ‘+’, ‘\’, ‘_’ dan sebagainya. • ASCII: American Standards Committee for Information Interchange Pengantar Bahasa C - TIF UB 2010 • Program C ditulis menggunakan subset karakter ASCII yaitu: 25 26 Pengantar Bahasa C - TIF UB 2010 Pengantar Bahasa C - TIF UB 2010 Extended ASCII Codes 27 Identifiers • Nama berbagai elemen program seperti nama variabel, fungsi, konstanta, dsb • Huruf besar dianggap berbeda dengan huruf kecil (case sensitive) • Panjang maksimum Identifier tergantung dari compiler sebagai contoh Turbo C 2.0 (DOS), max 32 karakter • Tidak boleh menggunakan keyword (misal for, while, dll.) Pengantar Bahasa C - TIF UB 2010 • Diawali dengan huruf atau garis bawah (underscore) _ dan diikuti dengan huruf, digit atau _ • Contoh identifier : name, x1, _total, cubic • Contoh identifier yang salah: 1kali, int 28 • Keywords adalah kata-kata yang mempunyai arti khusus pada bahasa pemrograman komputer dan tidak dibolehkan dipakai untuk identifier lain. • Contoh: Keyw o rd s 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 Pengantar Bahasa C - TIF UB 2010 Keywords 29 Keywords Pada Visual C++ keyword dicetak dengan warna biru Pada Dev-C keyword dicetak BOLD Pengantar Bahasa C - TIF UB 2010 • Beberapa compiler akan memberikan warna yang berbeda untuk keyword, seperti pada Dev-C atau Visual C++, dibawah ini. 30 Variables • Variabel (variable) : sesuatu yang memiliki alamat memori tertentu (di RAM) untuk menyimpan nilai data. • Nilai data atau isi variabel dapat diubah saat run time • Format deklarasi variabel: <tipe> <nama [, ...]>; <tipe> <nama = nilai_awal [, ...]>; • Contoh: int a, b, c, jumlah; float gaji, bonus; int jml_mhs = 20; Pengantar Bahasa C - TIF UB 2010 • Setiap variabel memiliki nama/identifier, alamat, tipe, size (rentang nilai) dan data. 31 Pengantar Bahasa C - TIF UB 2010 Variables 32 Variables • Variabel dapat dideklarasikan di setiap awal block statement. • Block statement disebut juga “compound statement” adalah statement-statement yang berada diantara { dan }. • Contoh deklarasi variabel: int int int x; y; z; Pengantar Bahasa C - TIF UB 2010 • Deklarasi Variabel: atau bisa ditulis : int x, y, z; atau bisa juga ditulis : int x; int y; int z; 33 Data types • Pada dasarnya tipe data primitif (primitive data types) pada bahasa pemrograman C berjumlah 5: 1. 2. 3. 4. 5. Character Integer Floating point Double floating point Void 1. 2. 3. 4. 5. char int float double void Kemudian tipe primitif ini bertambah dengan adanya 4 modifiers. Pengantar Bahasa C - TIF UB 2010 Tipe Data Primitif/Bawaan Keyword 34 Data types signed unsigned long short • Tipe data dalam bahasa C merupakan kombinasi antara tipe data primitif yang dasar dengan modifier di atas. • Contoh : signed char, unsigned int, long int, dll. Pengantar Bahasa C - TIF UB 2010 • Empat modifiers: 35 Data types Contoh tipe data dan rentang nilai pada Turbo C dan Borland C++ untuk tipe data 16-bit Tipe Data Penulisan Memori Rentang Nilai character unsigned char char 1 Byte 1 Byte 0 s/d 255 -128 s/d 127 integer unsigned int int short int unsigned long long 2 Byte 2 Byte 1 Byte 4 Byte 4 Byte 0 s/d 65535 -32768 s/d 32767 -128 s/d 127 0 s/d 4294967295 -2147483648 s/d 2147483647 float float double long double 4 Byte 8 Byte 16 Byte 3.4E-38 s/d 3.4E+38 1.7E-308 s/d 1.7E+308 3.4E-4932 s/d 1.1E+4932 Pengantar Bahasa C - TIF UB 2010 36 Data types • Default-nya signed (bilangan bertanda), sehingga penulisan int sama artinya dgn signed int • Contoh : short int x; sama artinya dgn signed short int x; • Rentang Nilai (range) dari tipe data dalam bahasa C tergantung dari compiler dan sistem operasi. • Contoh : Tipe integer pada Turbo C 2.0 (DOS), rentang nilainya 2 byte (-32768 s/d 32767) Tipe integer pada Dev-C (Windows), rentang nilainya 4 byte (-2147483648 s/d 2147483647) Borland C++ 5.02 menyediakan tipe integer untuk 2 byte dan 4 byte Pengantar Bahasa C - TIF UB 2010 int x; sama artinya dgn signed int x; 37 Data types • Mengapa tipe char rentang nilainya dari -128 s/d 127 ? msb = most significant bit; bit yg paling kiri 10000000 s/d 11111111 (msb = 1 untuk bil negatif) -128 -128 32 64 8 4 2 1 Pengantar Bahasa C - TIF UB 2010 • 1 Byte = 8-bit 00000000 s/d 01111111 (msb = 0 untuk bil positif) 16 38 Jika dijumlahkan hasilnya = -128 Jika dijumlahkan hasilnya = -1 Data types Pengantar Bahasa C - TIF UB 2010 Rentang nilai tipe data signed char 39 Data types Pengantar Bahasa C - TIF UB 2010 Rentang nilai tipe data unsigned char 40 Data types char c = 127; int i = 127; c = c + 1; i = i + 1; Berapa nilai c dan i ? Pengantar Bahasa C - TIF UB 2010 • Contoh 41 Data types char c = 127; int i = 127; c = c + 1; i = i + 1; Berapa nilai c dan i ? Jawaban : c bernilai -128 bukan 128 dan i bernilai 128 Pengantar Bahasa C - TIF UB 2010 • Contoh 42 Data types • Tipe data void : adalah tipe data yang bisa diubah menjadi tipe apa saja (akan dibahas lebih lanjut pada saat membahas pointer) Pengantar Bahasa C - TIF UB 2010 • Keyword void disamping digunakan dalam fungsi yang tidak mengembalikan nilai, juga digunakan sebagai tipe data. 43 • Konstanta adalah nilai yang tidak berubah selama proses dalam program • Konstanta bisa berupa konstanta literal atau berupa konstanta simbolik • Konstanta literal adalah nilai yang ditulis pada kode program. Contoh: panjang = 5; // 5 adalah konstanta literal printf(“x = %c”, ‘A’); // ‘A’ adalah konstanta literal Pengantar Bahasa C - TIF UB 2010 Constants 44 Constants • Dengan preprocessor directive #define. Contoh: #define UKURAN 25 • Dengan kata kunci const. Contoh: const int X = 50; Pengantar Bahasa C - TIF UB 2010 • Konstanta simbolik dibuat untuk memberi nama pada suatu nilai literal. • Konstanta simbolik bisa dibuat dengan 2 cara: 45 Symbolic constants #define Pi 3.14 int main(){ Pi=3.1475;//Error return 0; } int main(){ const float Pi=3.14; Pi=3.1475; //Error return 0; } #define Pi 3.14 int main(){ float PHI=3.14; PHI = 3.1475; //OK Pi=3.1475; //Error return 0; } 46 Literal constants Jenis-jenis konstanta literal: • Integer constants -5 •Floating-point constants 3.14 •Character constants 'C' '1' '$‘ •Escape sequence \n \t \'' •String constants ‘‘Universitas Brawijaya‘‘ 47 sizeof • sizeof adalah sebuah operator untuk mengetahui jumlah memori (byte) yang diperlukan oleh suatu tipe data pada bahasa C • Sintaknya : sizeof(expression) • Contoh : sizeof(int)// bernilai 4 pada Dev-C++ (Windows) sizeof(int)// bernilai 2 pada Turbo C versi 2.0 (DOS) 48 Cast • Cast adalah proses untuk mengkonversi tipe data pada bahasa C • Sintaksis: (type) • Contoh : int x; float fx = 3.134; x = (int)fx; Cast 49 Suffix • Untuk konstanta literal bilangan floating point, bahasa C menyediakan suffix (akhiran) berikut: • F atau f untuk tipe data float • L atau l untuk tipe data long double • Tipe default (jika tanpa suffix ) untuk konstanta literal bilangan floating point adalah double. • Contoh: • 3.14 => (double) • 3.14f => (float) • 3.14L => (long double) 50 Suffix • Untuk konstanta literal bilangan integer, bahasa C menyediakan suffix (akhiran) berikut: • U atau u untuk tipe unsigned integer • L atau l untuk tipe long integer • UL atau ul atau LU atau lu untuk tipe bilangan unsigned long integer • Tipe default (jika tanpa suffix) untuk konstanta literal bilangan integer adalah integer. • Contoh: • 174 => (integer) • 174u => (unsigned integer) • 174L => (long integer) • 174ul => (unsigned long integer) 51 Suffix • Beberapa compiler (mis. pada Visual C++) akan memberikan peringatan terhadap operasi “lintas tipe data” seperti berikut: float x; x = 3.14; warning : truncation from 'const double' to 'float’ • Cara menghindari peringatan: float x; x = (float)3.14;//menggunakan cast atau x = 3.14f; //menggunakan suffix 52 Suffix #include <stdio.h> #include <conio.h> int main() { char ch; printf("Size of floating point constants:\n"); printf(" – with suffix f = %d\n",sizeof(3.14f)); printf(" - without suffix = %d\n",sizeof(3.14)); printf(" - with suffix L = %d\n",sizeof(3.14L)); } ch=getch(); return 0; Output : Size of floating point constants : - with suffix f = 4 - without suffix = 8 - with suffix L = 12 53 • Menggunakan pasangan /* dan */ atau // • Digunakan agar program lebih mudah dibaca dan dimengerti • Diabaikan oleh compiler • Untuk komentar 1 (satu) baris cukup menggunakan tanda // diawal baris • Contoh comments dalam program C sederhana: /*---------------------------------Program Pertama ----------------------------------*/ Pengantar Bahasa C - TIF UB 2010 Comments //Program mencetak tulisan Helloworld #include <stdio.h> void main() { printf(“Hello World \n”); } 54 • Contoh: void main() { printf(”Hello World”); } #include <stdio.h> void main() { printf(”Hello World”); } Jika di kompilasi dengan Dev-C++ program ini akan error, dgn Error Message: ‘printf’ undeclared. #include adalah sebuah directive/arahan untuk memberitahu compiler bahwa function prototype untuk fungsi printf ada pada header file stdio.h Pengantar Bahasa C - TIF UB 2010 Pre-processor directives 55 Preprocessor directives • #include <stdio.h> • File stdio.h akan dicari mulai dari directory tempat header file tersebut di-install. Jika tidak ditemukan, file ini dicari di current / working directory. • Contoh, pada Turbo C 2.0, stdio.h diinstalasikan pada directory … \ INCLUDE sedangkan pada Dev-C++ di directory ...\Dev-Cpp\include 56 Preprocessor directives • #include ”stdio.h” • File stdio.h akan dicari mulai dari current / working directory, dan jika tidak ditemukan akan dicari di directory tempat header file tersebut disimpan pada saat compiler-nya diinstalasi. • Directive #include umumnya ditulis di awal program 57 Program Sederhana I [1] • Contoh program untuk menampilkan sebaris teks Selamat menggunakan bahasa C! pada layar: PEDATI - Fasilkom UI 2005 1. /* Program pertama dalam bahasa C */ 2. #include <stdio.h> 3. /* fungsi main mulai eksekusi program */ 4. int main( void ) 5. { 6. printf( “Selamat menggunakan bahasa C!\n" ); 7. return 0; /* indikasi program berakhir dengan sukses */ 8. } /* akhir fungsi main */ Selamat menggunakan bahasa C! Program Output 58 Program sederhana I [2] 3. /* fungsi main mulai eksekusi program */ 4. int main( void ) 5. { 6. printf( “Selamat menggunakan bahasa C!\n" ); 7. return 0; /* indikasi program berakhir dengan sukses */ 8. } /* akhir fungsi main */ komentar preprocessor main function statement function body PEDATI - Fasilkom UI 2005 1. /* Program pertama dalam bahasa C */ 2. #include <stdio.h> 59 Program sederhana II [1] • Modifikasi 1: mencetak 1 baris dengan 2 buah perintah printf 1 /* Fig. 2.3: fig02_03.c Printing on one line with two printf statements */ 2 3 #include <stdio.h> 5 /* function main begins program execution */ 6 int main() 7 { 8 printf( "Welcome " ); 9 printf( "to C!\n" ); PEDATI - Fasilkom UI 2005 4 10 11 return 0; /* indicate that program ended successfully */ 12 13 } /* end function main */ Welcome to C! Program Output 60 Program sederhana II [2] • Modifikasi 2: mencetak banyak baris dengan sebuah perintah printf 1 /* Fig. 2.4: fig02_04.c Printing multiple lines with a single printf */ 2 3 #include <stdio.h> 5 /* function main begins program execution */ 6 int main() 7 { 8 PEDATI - Fasilkom UI 2005 4 printf( "Welcome\nto\nC!\n" ); 9 10 return 0; /* indicate that program ended successfully */ 11 12 } /* end function main */ Welcome to C! Program Output 61 Program sederhana III [1] PEDATI - Fasilkom UI 2005 • Membaca 2 buah bilangan bulat dari keyboard dan menampilkan hasil penjumlahannya 62 1 /* Fig. 2.5: fig02_05.c Addition program */ 2 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main() 7 { 8 int integer1; /* first number to be input by user 9 int integer2; /* second number to be input by user */ 10 int sum; */ /* variable in which sum will be stored */ 11 12 printf( "Enter first integer\n" ); /* prompt */ 13 scanf( "%d", &integer1 ); /* read an integer */ 15 printf( "Enter second integer\n" ); /* prompt */ 16 scanf( "%d", &integer2 ); /* read an integer */ sum = integer1 + integer2; /* assign total to sum */ printf( "Sum is %d\n", sum ); /* print sum */ PEDATI - Fasilkom UI 2005 14 17 18 19 20 21 22 return 0; /* indicate that program ended successfully */ 23 24 } /* end function main */ Enter first integer 45 Enter second integer 72 Sum is 117 Program Output 63 • Baris ke-1 hingga ke-7 serupa dengan program I • int integer1, integer2, sum; • Pendefinisian variable-variabel • Variabel: lokasi di memori tempat sebuah nilai disimpan • int berarti variabel dapat menyimpan bilangan bulat (-1, 3, 0, 47) • Nama-nama variabel (identifier) • integer1, integer2, sum • Identifier: mengandung huruf,angka (tidak boleh dimulai dengan angka) dan underscores( _ ) • Case sensitive (huruf besar dan kecil dibedakan) • Deklarasi variabel harus muncul sebelum eksekusi statement yang menggunakannya • Jika eksekusi statement mengacu kepada variabel yang belum dideklarasikan maka akan menghasilkan syntax (compiler) error PEDATI - Fasilkom UI 2005 Program sederhana III [2] 64 • scanf( "%d", &integer1 ); • Mengambil sebuah nilai dari user • scanf menggunakan standar input (biasanya keyboard) • scanf statement ini memiliki dua buah argumen • %d - menunjukkan data yang diambil adalah bilangan bulat desimal • &integer1 – berlokasi di memori untuk menyimpan nilai variabel tsb • Tanda & dapat membingungkan di awal – untuk saat ini sertakan pada nama variabel pada statement scanf • Ketika program dieksekusi user merespon statement scanf dengan mengetik sebuah bilangan kemudian menekan tombol enter (return) • = (assignment operator) • Assigns (memberi) sebuah nilai kepada sebuah variabel • Merupakan sebuah operator biner (memiliki dua buah operand) sum = variable1 + variable2; sum memperoleh hasil dari variable1 + variable2; • Variabel penerima nilai berada di sebelah kiri PEDATI - Fasilkom UI 2005 Program sederhana III [3] 65 • printf( "Sum is %d\n", sum ); • Serupa dengan pada scanf • %d berarti bilangan bulat desimal akan ditampilkan/dicetak • Nilai variabel sum menentukan bilangan bulat yang akan ditampilkan/dicetak • Perhitungan dapat langsung dilakukan dalam statement printf printf( "Sum is %d\n", integer1 + integer2 ); PEDATI - Fasilkom UI 2005 Program sederhana III [4] 66