Modul 1 - Schematics-NPC-2021/Tutorial-Schematics-NPC-Junior-2021 GitHub Wiki

Daftar Isi

IDE (Integrated Development Environment)

Sebelum memulai menulis kode (atau ngoding), kita membutuhkan IDE untuk menyederhanakan proses pengkodean. Apa itu IDE? Sederhananya, IDE atau Intregated Development Environment adalah aplikasi editor kode yang menyertakan compiler. Berikut ini adalah daftar aplikasi IDE bahasa C yang dapat digunakan.

Pengenalan Bahasa C

Statement

Dalam suatu program, sebuah statement atau pernyataan adalah intruksi/perintah yang mempunyai makna tertentu sehingga menyebabkan program tersebut dapat melakukan suatu tindakan.

Analoginya, untuk berbicara kepada seseorang, kita menggunakan bahasa tertentu yang dapat dimengerti, sehingga kita dapat menyampaikan apa yang ingin disampaikan. Nah, seperti itulah statement. Apa yang kita sampaikan kepada orang lain layaknya statement pada program yang kita sampaikan kepada komputer.

Program "Hello, world."

Mari kita mulai dengan membuat program sederhana, yakni program untuk menampilkan kalimat “Hello, world!” pada layar (konsol). Berikut adalah kode program tersebut.

#include <stdio.h>  

int main()
{
    printf("Hello, world!\n");  
    return 0;  
}  

Salinlah kode di atas pada IDE, kemudian compile dan jalankan. Proses compilation akan menghasilkan output sebagai berikut.

Hello, world!

Struktur Program

Untuk menjelaskan cara kerja program di atas, mari kita pisahkan bagian-bagian kode satu per satu.

Header File

Baris 1 pada kode di atas disebut dengan preprocessor directive. Preprocessor yang digunakan dalam hal ini adalah #include.

Preprocessor #include menjelaskan bahwa program tersebut menyertakan file header <stdio.h>. File header tersebut merupakan library bawaan C yang berisi fungsi-fungsi penting yang dibutuhkan oleh program, misalnya pada kasus ini, program membutuhkan fungsi printf() untuk mencetak kalimat “Hello, world!”. Tanpa adanya library, program tersebut tidak akan bisa di-compile.

Fungsi main()

Fungsi main() pada kode tersebut ditunjukan pada baris ke 3 hingga baris ke 7.

int main()
{
    printf("Hello, world!\n");  
    return 0;  
}

Dalam bahasa C, fungsi main() adalah fungsi utama yang harus ada. Hal ini dikarenakan eksekusi kode akan dimulai dari awal fungsi main().

  • Baris 3 menunjukkan nama dari fungsi dan tipe return dari fungsi tersebut. int merupakan tipe return dari fungsi yang bernama main(). Kemudian terdapat tanda { yang menandakan awal pembuka dari fungsi main().
  • Baris 4 s.d 6 merupakan tubuh dari fungsi main().
  • Baris 8 terdapat tanda } yang menandakan akhir dari fungsi main(). Pada dasarnya, tubuh dari sebuah fungsi berada di antara tanda { }.

Whitespace

Dapat diperhatikan pada kode bahwa baris 2 dan 4 kosong (tidak terdapat karakter apapun). Ini disebut dengan whitespace. Whitespace adalah area kosong pada kode, dan biasanya dtujukan agar kode mudah dibaca.

Terdapat tiga jenis whitespace, yakni space, tab, dan new line. Baris 2 dan 4 adalah contoh dari new line.

Statement

Di dalam fungsi main(), terdapat dua statement yang ditunjukkan pada baris 5 dan 6. Sebagian besar statement diakhiri oleh tanda titik-koma (;).

printf("Hello, world!\n");  
return 0;  

Statement pada baris 5 menginstruksikan program untuk memanggil fungsi printf(). Fungsi printf() adalah fungsi yang tersedia dalam library header <stdio.h> dan digunakan untuk mencetak output pada konsol (layar). Dalam hal ini, fungsi printf() menerima argumen string bertuliskan “Hello, world!\n”. Tanda ‘\n’ dalam string tersebut merupakan karakter spesial yang berfungsi untuk mencetak new line.

Sedangkan statement pada baris 6 disebut dengan return statement. Perintah return 0 pada fungsi main() digunakan untuk mengakhiri program dan menandakan program tersebut sukses dieksekusi.

Komentar

Komentar (comment) adalah bagian dari program yang tidak akan dieksekusi. Komentar sangat berguna untuk mendeskripsikan program yang dibuat, misalnya saja untuk menjelaskan bagian dari kode agar mudah dipahami oleh programmer lainnya. Terdapat dua jenis komentar dalam bahasa C.

Komentar Single-Line

Seperti namanya, komentar single-line hanya bekerja pada satu baris. Komentar single-line diawali dengan simbol // . Semua karakter (pada satu baris) dibelakang simbol // akan diabaikan.

// Ini adalah komentar single-line  
  
// Fungsi untuk mencetak ke layar  
printf("HALO\n");  

Komentar Multi-Line

Sedangkan komentar multi-line dapat bekerja pada lebih dari satu baris. Pasangan simbol /* dan */ digunakan untuk membuat komentar multi-line. Semua karakter yang berada di antara dua simbol tersebut akan diabaikan.

/* 
Ini adalah komentar multi-line 
Semua yang berada di sini akan 
diabaikan 
*/  

< Kembali ke Daftar Isi

Keyword dan Identifier

Keyword

Keyword merupakan kata khusus yang telah dipesan (reserved) pada bahasa pemograman. Kata-kata khusus tersebut mempunyai makna tersendiri bagi compiler, dan kata-kata tersebut merupakan bagian dari sintaks dan tidak dapat digunakan sebagai identifier. Berikut adalah daftar keyword pada bahasa C.

auto double int struct
break else long switch
case enum register typedef
char extern return union
continue for signed void
do if static while
default goto sizeof volatile
const float short unsigned

Identifier

Identifier merujuk kepada penamaan sebuah entitas, seperti pada variabel, fungsi, structures dan lain-lain. Karena identifier menamai sebuah entitas, maka nama dari identifier harus unik (dua entitas tidak boleh mempunyai nama identifier yang sama).

Aturan penamaan identifier:

  • Identifier bukan merupakan keyword.
  • Identifier hanya boleh terdiri dari huruf lowercase, huruf uppercase, digit, dan simbol underscore ( _ ).
  • Identifier tidak boleh mengandung whitespace.
  • Identifier harus dimulai dengan huruf atau simbol underscore. Tidak boleh dimulai dengan digit/angka.
  • Bersifat case-sensitive, artinya identifier variable berbeda dengan vAriaBle.

< Kembali ke Daftar Isi

Variabel

Pengenalan Variabel

Variabel adalah suatu tempat yang digunakan untuk menampung data atau nilai pada memori yang mempunyai nilai yang dapat berubah–ubah selama proses program. Dalam bahasa C, variabel menyimpan data/nilai dengan tipe data tertentu. Seperti halnya variabel yang menyimpan suatu angka yang termasuk bilangan bulat (integer).

Variabel dapat dianalogikan sebagai sebuah gelas. Gelas dalam hal ini disebut sebagai variabel. Pada umumnya, gelas digunakan untuk menampung cairan. Dalam hal ini cairan adalah tipe datanya. Kemudian, contoh dari cairan adalah air, yakni dalam hal ini data yang akan disimpan oleh gelas.

Pada dasarnya program bekerja dengan mengolah data-data. Data-data inilah yang kemudian disimpan pada variabel.

Deklarasi dan Definisi Variabel

Pada bahasa C, variabel harus dideklarasikan terlebih dahulu sebelum bisa digunakan. Seperti halnya gelas tadi, gelas tersebut harus ada terlebih dahulu sebelum bisa digunakan.

Untuk mendeklarasikan sebuah variabel, sintaksnya adalah sebagai berikut.

<tipe_data> <identifier>

Misalkan, potongan kode berikut mendeklarasikan variabel x yang bertipe int.

int x

Jika ingin mendeklarasikan lebih dari satu variabel dengan tipe yang sama, bisa menggunakan operator koma (,).

<tipe_data> <variabel1>, <variabel2>, ... dst;
int x, y;

Pengisian Nilai Pada Variabel

Setelah dideklarasikan, variabel dapat diisi oleh sebuah nilai. Untuk melakukannya, gunakan operator assignment (simbol =).

identifier_variabel = <nilai yang bersesuaian>

Contoh:

int x, y;  
x = 10;  
y = -2; 

Dalam hal ini, variabel x dan y akan mempunyai nilai masing-masing 10 dan -2.

Inisialisasi Variabel

Deklarasi dan pengisian nilai pada variabel dapat dilakukan dalam satu instruksi sekaligus. Hal ini disebut dengan inisialisasi. Dengan melakukan inisialisasi variabel, berarti kita memberikan nilai awal pada variabel tersebut.

tipe_data identifier_variabel = <nilai yang bersesuaian>;

Contoh:

int x = 10;

< Kembali ke Daftar Isi

Konstanta dan Literal

Konstanta dan Literal

Istilah konstanta merujuk pada suatu nilai tetap, tidak dapat berubah/diubah bahkan oleh program itu sendiri. Literal adalah konstanta yang nilainya kita tulis secara eksplisit pada kode. Contohnya:

5       // Literal bilangan bulat  
1.23    // Literal bilangan real  
'S'     // Literal karakter  
"Hai"   // Literal string  

Berikut adalah jenis-jenis literal dalam bahasa C.

Jenis Literal Contoh Tipe Default
Bilangan bulat 10, 0, -1 dll. int
Bilangan real (floating) 202.15, 33.24, -12.45 dll. double
Karakter ‘A’, ‘1’, ‘#’ char
String "Hai" const char[4]

Bilangan Bulat

Terdapat tiga cara untuk menuliskan literal bilangan bulat. Yakni menggunakan basis 10 (desimal), basis 8 (oktal) dan basis 16 (heksadesimal).

  • Desimal - ditulis seperti bilangan pada umumnya. Contohnya 100, -22.
  • Oktal - diawali dengan angka "0", kemudian diikuti bilangan oktal. Contohnya 077, 033.
  • Heksadesimal - diawali dengan "0x", kemudian diikuti bilangan heksadesimal. Contohnya 0x7f, 0x521.

Bilangan Real (floating)

Bilangan real (floating) dituliskan dengan menggunakan pemisah tanda titik (.) antara bilangan bulat dan bilangan pecahannya. Contohnya 2.321, -11.22, 0.00012.

Karakter

Literal karakter dituliskan dengan mengapitnya menggunakan tanda petik. Misalnya karakter A ditulis ‘A’. Selain karakter normal, terdapat karakter khusus dalam bahasa C yang mempunyai fungsi-fungsi khusus atau karakter yang tidak bisa begitu saja dituliskan dengan bentuk aslinya. Misalnya, “new line” direpresentasikan dengan ‘\n’, simbol backslash direpresentasikan dengan ‘\’. Karakter-karakter tersebut disebut dengan escape sequence. Berikut adalah escape sequence yang terdapat dalam bahasa C.

Escape Sequence Karakter
\b Backspace
\f Form feed
\n Newline
\r Return
\t Tab horisontal
\v Tab vertikal
\\ Backslash
\’ Tanda petik
\” Tanda petik dua
\? Tanda tanya
\0 Karakter null
\b Backspace

String

String adalah kumpulan dari satu karakter atau lebih. Literal string diapit oleh tanda kutip. Misalnya, “Hello, world.”. Representasi string dalam bahasa C menggunakan array bertipe char. Kita akan mempelajarinya di bagian selanjutnya.

Mendefinisikan Konstanta

Untuk mendefinisikan konstanta, dapat dilakukan dengan cara-cara seperti berikut.

Mendefinisikan Variabel Konstan

Variabel juga dapat dibuat konstan nilainya agar tidak dapat berubah/diubah selama program berjalan. Variabel konstan dibuat dengan menambahkan keyword const saat pendefinisian variabel.

const tipe_data nama_var = <nilai yang bersesuaian>

Perlu diperhatikan bahwa definisi variabel konstan harus disertai inisialisasinya. Contoh:

const int    konstInt = 23;  
const double konstDouble = 23.12;

Segala bentuk perubahan yang dilakukan terhadap variabel konstan akan menghasilkan error.

const int konstInt = 23;  
konsInt = 11; // Error

Menggunakan #define

Cara lainnya adalah menggunakan prepocessor directive #define. Sintaksnya adalah sebagai berikut.

#define nama <nilai yang bersesuaian>

Contoh:

#define konstInt    23  
#define konstDouble 23.11  
  
int main()  
{  
    int    a = konstInt;  
    double b = konstDouble;  
}  

< Kembali ke Daftar Isi

Tipe Data Dasar

Secara sederhana tipe data adalah jenis data dan ukuran data yang akan ditampung dan oleh variabel (atau objek secara umum). Tipe data menentukan tipe dan jenis data seperti apa yang akan dimiliki oleh suatu variabel.

Dalam bahasa C terdapat beberapa jenis tipe data. Di antaranya adalah tipe data dasar, tipe data turunan, dan void. Untuk kali ini kita akan berfokus pada tipe data dasar.

Tipe Bilangan Bulat (integer)

Bilangan Bulat adalah bilangan yang tidak mempunyai nilai pecahan (real). Tipe data bilangan bulat pada bahasa C diantaranya sebagai berikut.

Tipe Data Memori (Byte) Jangkauan Nilai Format Specifier
Min Max
short 2 -215 s.d 215 - 1 %hi
unsigned short 2 - 4 0 s.d 216 - 1 %hu
int 4 -231 s.d 231 - 1 %d
unsigned int 4 0 s.d 232 - 1 %u
long 4 -231 s.d 231 - 1 %ld
unsigned long 4 0 s.d 232 - 1 %lu
long long 8 -263 s.d 263 - 1 %lld
unisgned long long 8 0 s.d 264 - 1 %llu

Seperti namanya, tipe-tipe data di atas adalah tipe data yang digunakan untuk merepresentasikan bilangan bulat (positif dan negatif) dan bilangan 0. Misalnya, 0, -5, 12, -1, 200 dsb. Perlu ditekankan bahwa tipe-tipe data di atas tidak dapat digunakan untuk merepresentasikan bilangan floating-point (bilangan real).

Jika diperhatikan, terdapat dua jenis tipe data antara lain signed dan unsigned. Lalu apa perbedaan dari kedua jenis tersebut? Perbedaannya adalah terletak pada kemampuan untuk menampung bilangan negatif. signed dapat menampung bilangan negatif, sedangkan unsigned tidak.

Tipe Bilangan Real (floating)

Bilangan Real atau floating-point adalah bilangan yang mempunyai nilai pecahan (real). Tipe data bilangan real pada bahasa C di antaranya adalah sebagai berikut.

Tipe Data Memori (Byte) Jangkauan Nilai Format Specifier
float 4 ±3.4 x 10±38 (estimasi) %f
double 8 ±1.7 x 10±308 (estimasi) %lf

Tipe data di atas digunakan untuk menyimpan data berupa bilangan real (floating-point)/bilangan berkoma. Misalnya, 2.35, -12.246, 0.005 dsb.

Tipe Karakter

Karakter dalam bahasa C sebenarnya adalah bilangan bulat. Setiap karakter mempunyai kode tersendiri yang disebut dengan ASCII dan kode tersebut dapat direpresentasikan sebagai sebuah bilangan bulat.

Tipe Data Memori (Byte) Jangkauan Nilai Format Specifier
char 1 -27 s.d 27 - 1 %c
unsigned char 1 0 s.d 28 - 1 %c

Penggunaan paling umum dari tipe data di atas adalah untuk merepresentasikan satu karakter. Misalnya, ‘A’, ‘-‘, dan sebagainya.

< Kembali ke Daftar Isi

Input dan Output Dasar

Program yang kita buat dapat dijadikan program yang interaktif. Kita dapat menginstruksikannya untuk menerima input (dari keyboard) lalu menampilkan hasil output (pada konsol layar). Fungsi-fungsi yang berkaitan dengan input/output ada di dalam library <stdio.h> (standard input output).

Output Dasar

Fungsi printf()

Untuk mencetak output pada konsol, fungsi yang digunakan adalah fungsi printf(). Seperti yang sudah kita ketahui sebelumnya, fungsi printf() dapat menerima string sebagai argumen.

#include <stdio.h>  
  
int main()   
{  
    printf("Ini adalah sebuah string\n");  
    return 0;  
} 

Output

Ini adalah sebuah string

Kita juga dapat menambahkan escape sequence pada string. Misalkan, kita ubah statement printf() di atas menjadi:

printf("Ini adalah sebuah string\nAku adalah new-line\n\tAku adalah karakter \\tab");
Ini adalah sebuah string
Aku adalah new-line
    Aku adalah karakter \tab

Memisahkan dua statement printf() pada baris berbeda bukan berarti mencetak pada baris berbeda juga.

#include <stdio.h>  
  
int main()   
{  
    printf("Pikirmu aku akan");  
    printf("Berpindah baris?");  
    return 0;  
}  

Output

Pikirmu aku akanBerpindah baris?

Potongan-potongan kode di atas adalah contoh untuk mencetak string tetap. Lalu bagaimana jika kita ingin mencetak string bersama dengan nilai dari suatu variabel?

Output Dengan Format Specifier

Untuk mencetak nilai dari suatu variabel, kita perlu menambahkan argumen pada fungsi printf(). Argumen pertama pada fungsi printf() selalu berupa string. Kita dapat memasukkan variabel/nilai pada argumen ke-2, 3, 4 dan seterusnya sesuai kebutuhan. Ingat, pada chapter Tipe Data Dasar, setiap tipe data mempunyai format specifier masing-masing. Nah, format specifier inilah yang akan kita gunakan untuk mencetak nilai dari suatu variabel.

printf(“<format string>”, var1, var2, var3, ... dst);

Misalnya saja, kita mempunyai dua variabel bertipe int dan char yakni a = 2 dan b = ‘X’. Kita hendak mencetak nilai dari a dan b dipisahkan oleh spasi, maka programnya seperti:

#include <stdio.h>  
  
int main()   
{  
    int  a = 2;  
    char b = 'X';  
    printf("%d %c", a, b);  
    return 0;  
}

Output

2 X

Perhatikan ilustrasi di bawah.

a

Dengan menyertakan format specifier dari tipe data yang bersesuaian, kita dapat mencetak nilai dari variabel tersebut.

  • Fungsi printf() di atas mencetak string dengan nilai dua variabel (dua format specifier yang dipisahkan spasi).
  • Format specifier pertama adalah format specifier tipe data int dan akan merujuk pada variabel pertama yang dimasukkan, yakni a.
  • Format specifier kedua adalah format specifier tipe data char dan akan merujuk pada variabel kedua, yakni b.
  • Dan begitu seterusnya, satu format specifier untuk satu variabel berurutan. Dengan begitu, kita dapat menyertakan format specifier bersamaan dengan string.
printf("Nilai dari a = %d, dan b = '%c'", a, b);    
Nilai dari a = 2, dan b = ‘X’

Input Dasar

Fungsi scanf()

Umumnya kita melakukan input untuk menerima data/nilai dari user. Kemudian, data/nilai tersebut akan dimasukkan pada variabel yang akan diproses kemudian. Untuk melakukan input dari keyboard fungsi yang digunakan adalah fungsi scanf(). Parameter dari fungsi scanf() sama persis dengan fungsi printf(). Kita menggunakan format specifier untuk menentukan jenis tipe data yang kita input, kemudian nilai input tersebut akan di-assign pada variabel.

Contoh:

Program di bawah menerima input berupa bilangan bulat yang disimpan pada variabel n, kemudian mencetak nilai variabel n dengan format “n mempunyai nilai = n”.

#include <stdio.h>  
  
int main()   
{  
    int n;  
    scanf("%d", &n);  
    printf("n mempunyai nilai = %d", n);  
    return 0;  
} 

Input

3

Output

n mempunyai nilai = 3

< Kembali ke Daftar Isi

Operator

Operator dapat dipahami sebagai sesuatu yang dapat melakukan operasi pada operan (variabel/nilai). Contohnya, operator + digunakan untuk operasi penjumlahan.

Dilihat dari jumlah operannya, operator dibagi menjadi tiga jenis, yaitu:

  • Unary – yakni operator yang bekerja pada satu operan, misalnya -5.
  • Binary – yakni operator yang bekerja pada dua operan, misalnya 2 + 3.
  • Ternary – yakni operator yang bekerja pada tiga operan. (Akan dibahas pada bagian selanjutnya).

Dilihat dari kegunaannya, berikut adalah jenis-jenis operator pada bahasa C.

Operator Assignment

Operator Assignment digunakan untuk mengisikan (assign) sebuah nilai ke variabel. Simbol yang biasa digunakan adalah tanda sama dengan =. Contohnya:

int x, y;  
x = 4;  
y = 3;  
x = x + y; // x = 7  
y = x + x; // y = 14 

Operator Aritmatika

Seperti namanya, operator aritmatika melakukan operasi layaknya pada matematika seperti penjumlahan, pengurangan, pembagian dsb. Beberapa operator menggunakan simbol yang sama pada matematika (penjumlahan dengan simbol ‘+’, pengurangan dengan ‘-‘, dst.). Operator-operator aritmatika pada bahasa C adalah sebagai berikut.

Simbol Operasi Contoh
+ Penjumlahan pada dua operan a + b
- Pengurangan pada dua operan a - b
* Perkalian pada dua operan a * b
/ Pembagian pada dua operan a / b
% Menghitung sisa pembagian dua operan (operasi modulo) a % b

Operator Increment dan Decrement

Operator ++ disebut dengan operator increment, sedangkan operator -- merupakan operator decrement. Kedua operator ini digunakan untuk menambah (increment)/mengurangi (decrement) nilai dari suatu variabel sebanyak satu.

Terdapat dua cara untuk menggunakan operator ini.

  • Prefix - yakni dengan meletakkan operator increment/decrement didepan nama variabel.

    int a, b;  
    a = 5;  
    ++a; // Nilai a sekarang adalah 6  
    --a; // Nilai a sekarang adalah 5

    Cara kerja dari operator increment/decrement prefix adalah dengan menambahkan/mengurangi nilai variabel sebanyak satu terlebih dahulu, sebelum operan tersebut digunakan pada operasi lainnya pada sekuens intstruksi yang sama. Untuk lebih jelasnya, perhatikan potongan kode berikut

    int a, b;  
    a = 5;  
    b = ++a; // Nilai b sekarang adalah 6  
    a = --b; // Nilai a sekarang adalah 5 

    Di sini, saat instruksi b = ++a; dieksekusi, yang terjadi pertama kali adalah nilai dari a ditambahkan satu terlebih dahulu, kemudian baru di-assign nilainya ke variabel b.

  • Postfix - yakni dengan meletakkan operator increment/decrement di belakang nama variabel. Cara kerja dari operator increment/decrement postfix berbeda dari prefix. Pada postfix, nilai variabel akan ditambah satu setelah operan digunakan pada operasi lainnya pada sekuens instruksi yang sama. Perhatikan potongan kode berikut.

    int a, b;  
    a = 5;  
    b = a++; // Nilai b sekarang adalah 5  
    a = b--; // Nilai a sekarang adalah 5 

    Di sini, saat instruksi b = a++; dieksekusi, yang terjadi pertama kali adalah nilai dari a akan di-assign terlebih dahulu ke variabel b, kemudian baru ditambahkan satu. Karena itulah variabel b mendapat nilai dari a sebelum terjadi penambahan.

Operator Relasional

Operator Relasional digunakan untuk memeriksa relasi dan membandingkan nilai dari dua operan. Jika benar akan menghasilkan nilai TRUE (direpresentasikan angka 1), jika salah maka akan menghasilkan nilai FALSE (direpresentasikan angka 0).

Berikut adalah operator relasional dalam bahasa C.

Operator Simbol Keterangan Contoh
Sama dengan == Digunakan untuk memeriksa apakah kedua operan memiliki nilai yang sama. 5 == 2 (FALSE)
5 == 5 (TRUE)
Tidak Sama dengan != Digunakan untuk memeriksa apakah kedua operan memiliki nilai yang tidak sama. 5 != 2 (TRUE)
5 != 5 (FALSE)
Lebih besar > Digunakan untuk membandingkan apakah operan pertama lebih besar nilainya dari operan kedua. 5 > 2 (TRUE)
5 > 5 (FALSE)
2 > 4 (FALSE)
Lebih kecil < Digunakan untuk membandingkan apakah operan pertama lebih kecil nilainya dari operan kedua. 5 < 2 (FALSE)
5 < 5 (FALSE)
2 < 4 (TRUE)
Lebih besar sama dengan >= Digunakan untuk membandingkan apakah operan pertama lebih besar atau sama nilainya dari operan kedua. 5 >= 2 (TRUE)
5 >= 5 (TRUE)
2 >= 4 (FALSE)
Lebih kecil sama dengan <= Digunakan untuk membandingkan apakah operan pertama lebih kecil atau sama nilainya dari operan kedua. 5 <= 2 (FALSE)
5 <= 5 (TRUE)
2 <= 4 (TRUE)

Operator Logika

Operator Logika digunakan untuk melakukan tes pada kondisi/ekspresi, apakah kondisi tersebut benar atau salah. Operator logika hanya akan menghasilkan nilai TRUE (jika benar) atau FALSE (jika salah). TRUE direpresentasikan oleh angka 1, sedangkan FALSE oleh angka 0.

Operator-operator logika dalam bahasa C adalah sebagai berikut.

Operator Simbol Keterangan Nilai Kebenaran
Logical NOT ! Operator NOT digunakan untuk membalikkan kondisi, TRUE menjadi FALSE dan FALSE menjadi TRUE. !1 = 0
!0 = 1
Logical AND && Operator AND akan menghasilkan nilai TRUE jika kedua operan mempunyai nilai TRUE. 1 && 1 = 1
0 && 1 = 0
1 && 0 = 0
0 && 0 = 0
Logical OR || Operator OR akan menghasilkan nilai TRUE jika salah satu operan mempunyai nilai TRUE. 1 || 1 = 1
0 || 1 = 1
1 || 0 = 1
0 || 0 = 0

Operator Logika NOT merupakan operator unary yang artinya hanya pada bekerja pada satu operan

Operator logika pada umumnya digunakan bersamaan dengan operator relasional untuk melakukan tes pada ekspresi yang berhubungan dengan kebenaran suatu kondisi. Penggunaan paling umum adalah untuk melakukan percabangan (akan dipelajari di bagian selanjutnya).

Contoh:

int a, b, c, d;  
a = 11;  
b = 24;  
c = 11;  
d = ((a == c) && (b > a));               // 1 (TRUE)  
d = ((a >= b) || (a < c));               // 0 (FALSE)  
d = ((b != b) || (b > c)) && (c == a);   // 1 (TRUE) 

Operator Bitwise

Operator Bitwise, seperti namanya digunakan untuk melakukan operasi pada dua operan dalam skala biner (bilangan basis 2). Sebelum mempelajari lebih lanjut cara kerja operasi bitwise, sebaiknya kamu harus paham terlebih dahulu mengenai bilangan dalam basis biner.

Terdapat 6 jenis operator bitwise, yakni AND, OR, XOR, COMPELEMENT, SHIFT LEFT, dan SHIFT RIGHT. Untuk lebih memahami perbedaan cara kerja operator bitwise, perhatikan tabel berikut.

Operator Simbol Keterangan
Bitwise AND & Mengevaluasi bit dari dua operan. Menghasilkan 1 apabila keduanya 1, jika tidak menghasilkan nilai 0.
Bitwise OR | Mengevaluasi bit dari dua operan. Menghasilkan 1 apabila salah satu nilainya 1, jika keduanya 0, maka menghasilkan nilai 0.
Bitwise XOR ^ Mengevaluasi bit dari dua operan. Menghasilkan 1 apabila bit pada kedua operan nilainya berbeda. Jika sama, maka menghasilkan nilai 0.
Bitwise COMPLEMENT ~ Membalik semua nilai bit, dari 1 menjadi 0 dan 0 menjadi 1 (dalam panjang bit).
Bitwise SHIFT LEFT << Menggeser bit ke kiri sebanyak n (operan kedua).
Bitwise SHIFT RIGHT >> Menggeser bit ke kanan sebanyak n (operan kedua).

Contoh penggunaan operator bitwise:

Misal 12 dan 5. Representasi 12 dan 5 dalam basis biner adalah 12 = (1100) dan 5 = (0101). Maka, operasi bitwise adalah sebagai berikut.

  • Bitwise AND

    12 = (1100)
     5 = (0101)
    ------------ &
     4 = (0100)
    
  • Bitwise OR

    12 = (1100)
     5 = (0101)
    ------------ | 
    13 = (1101)
    
  • Bitwise XOR

    12 = (1100)
     5 = (0101)
    ------------ ^
     9 = (1001)
    
  • Bitwise COMPLEMENT

     12 = (1100)
    ~12 = (0011)
    
  • Bitwise SHIFT LEFT

    Misal kita hendak menggeser bit bilangan 13 ke kiri sebanyak 2, maka 13 << 2.

         13 = (001101)
    13 << 2 = (110100) 
    

    Bisa diperhatikan, bit paling kanan setelah digeser akan diisi oleh 0. Maka hasil dari 13 << 2 = 52.

  • Bitwise SHIFT RIGHT

    Misal kita hendak menggeser bit bilangan 13 ke kanan sebanyak 2, maka 13 >> 2.

         13 = (001101)
    13 >> 2 = (000011)
    

    Bisa diperhatikan, bit paling kiri setelah digeser akan diisi oleh 0. Maka hasil dari 13 >> 2 = 3.

Operator Gabungan

Operator Gabungan adalah operator yang terdiri dari gabungan dua operator. Tujuan dari operator gabungan adalah untuk mempersingkat penulisan kode. Berikut adalah operator gabungan dalam bahasa C.

Operator Contoh Ekuivalen Dengan
+= a += b a = a + b
-= a -= b a = a - b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b
&= a &= b a = a & b
|= a |= b a = a | b
^= a ^= b a = a ^ b
>>= a >>= b a = a >> b
<<= a <<= b a = a << b

Operator Lain

Selain operator-operator yang telah dijelaskan sebelumnya, terdapat beberapa operator lain yang terdapat pada bahasa C. Berikut penjelasannya.

Operator sizeof()

Walaupun mempunyai bentuk seperti sebuah fungsi, namun dalam standardisasi bahasa C menganggap operator sizeof() sebagai operator. Kegunaan dari operator ini adalah untuk mengetahui besarnya alokasi memori sebuah operan (berupa variabel atau tipe data) dalam satuan byte.

Contoh:

sizeof(int);

Operator Address-of (&)

Operator ini mengembalikan alamat memori dari sebuah operan berupa variabel.

Contoh:

int var;
printf("%d\n", &var);

Operator Dereference (*)

Berbeda dari operator address-of (&), operator deference (*) mengembalikan nilai dari variabel pointer (akan dijelaskan pada modul pointer).

Meskipun menggunakan simbol yang sama seperti operator perkalian, operator deference mempunyai fungsi yang benar-benar berbeda dari operator perkalian.

Operator Kondisional (? :)

Operator kondisial merupakan satu-satunya operator ternary (bekerja pada tiga operan) dalam bahasa C. Fungsi dari operator kondisional layaknya percabangan menggunakan if - else (akan dijelaskan pada modul percabangan).

Operator Koma (,)

Tanda koma (,) sebagai operator dalam bahasa C merupakan binary operator yang akan mengevaluasi operan pertama, kemudian akan membuang hasilnya. Lalu mengevaluasi operan kedua dan akan mengembalikan nilainya.

int number = (5, 23);   // number bernilai 23, bukan 5

Selain berfungsi sebagai operator, tanda koma (,) juga berfungsi sebagai separator (pemisah) antar statement. Misalkan saat deklarasi lebih dari satu variabel.

int var1, var2, var3;   
// Menggunakan tanda koma untuk memisahkan deklarasi tiap variabel

Tidak semua statement dapat dipisahkan oleh tanda koma.

Operator Subscript ([])

Penggunaan paling umum operator ini adalah untuk melakukan pengaksesan terhadap elemen suatu array (akan dibahas pada modul array).

Operator lain yang belum ter-cover pada modul ini akan dibahas pada modul-modul selanjutnya.

< Kembali ke Daftar Isi

Control Flow

Control Flow adalah cara kita mengatur jalan penyataan, instruksi, dan pemanggilan fungsi suatu program. Tanpa control flow, program kita hanya bergerak dari atas ke bawah saja (sequential). Control flow bahasa C ada 2, yaitu percabangan (selection) dan perulangan (repetition). Di Modul ini, kita akan memfokuskan pembahasan di percabangan terlebih dahulu.

Percabangan

Percabangan memungkinkan kita untuk menentukan kode manakah yang akan kita eksekusi berdasarkan suatu kondisi. Percabangan di bahasa C ada 4, yaitu if, if-else, if-else if, dan switch.

Percabangan If

Sintaks yang digunakan dalam percabangan menggunakan if adalah sebagai berikut.

if (<Ekspresi/Kondisi>) {

    // Kode yang akan dieksekusi jika kondisi tersebut benar

}

Cara kerja percabangan if yaitu memeriksa dan mengevaluasi suatu kondisi untuk menentukan apakah instruksi selanjutnya dalam bracket akan dijalankan atau tidak oleh program.

  • Jika kondisi tersebut bernilai TRUE (1), kode yang di dalam bracket akan dieksekusi.
  • Sebaliknya jika kondisi tersebut bernilai FALSE (0), kode yang di dalam bracket tidak akan dieksekusi.

Contoh

Sebagai contoh, di dashboard mobil terdapat indikator bahan bakar yang akan menyala jika bahan bakar yang tersisa kurang dari level tertentu (misal kurang dari 10 liter) dengan kondisi “Apakah bahan bakar kurang dari 10 liter?”.

Pada kasus ini terdapat kondisi

  • Jika bahan bakar kurang dari 10 liter maka nyalakan lampu indikator.
#include <stdio.h>
int main()
{
    int gasoline = 0;
    gasoline = 3;
    if (gasoline < 10) //jika bahan bakar kurang dari 10 liter
    {
        // Apa yang perlu dilakukan ketika kondisi terpenuhi?
        printf("Lampu Indikator menyala!\n");
    }
}

Output

Lampu Indikator menyala!

Percabangan If-Else

Sintaks yang digunakan dalam percabangan menggunakan if-else adalah sebagai berikut.

if (<Ekspresi/Kondisi>) {

    // Kode yang akan dieksekusi jika kondisi tersebut benar

} else {

    // Kode yang akan dieksekusi jika kondisi tersebut salah

}

Cara kerja percabangan if-else yaitu memeriksa kondisi dalam if.

  • Jika kondisi tersebut bernilai TRUE (1), Program akan menjalankan kode di dalam bracket if.
  • Sebaliknya jika kondisi tersebut bernilai FALSE (0), kode di bawah else lah yang akan dijalankan.

Sebagai contoh, kita ingin mencari tahu apakah seseorang absen dari kelas atau tidak. Apabila ia tidak hadir, maka absensinya akan dicoret (bernilai X), dan apabila hadir, maka absensinya akan di centang (bernilai V).

Sehingga dari kasus tersebut, didapat dua alternatif kondisi.

  • Apabila ia hadir, maka muncul V
  • Apabila ia tidak hadir, maka muncul X
#include <stdio.h>
#define DATANG 1

int main()
{
    int hadir = DATANG;
    if (hadir) // Jika orang tersebut hadir
    {
        printf("V\n");
    } else {
        printf("X\n");
    }
}

Output

V

Percabangan If-Else if

Sintaks yang digunakan dalam percabangan menggunakan if-else if adalah sebagai berikut.

if (<Ekspresi/Kondisi>) {

    // Kode yang akan dieksekusi jika kondisi tersebut benar

}else if (<Ekspresi/Kondisi>) {

    // Kode yang akan dieksekusi jika kondisi tersebut salah

}
// Boleh menambahkan else{} apabila perlu

Cara kerja percabangan if-else yaitu memeriksa kondisi dalam if.

  • Jika kondisi tersebut bernilai TRUE (1), Program akan menjalankan kode di dalam bracket if.
  • Apabila kondisi pertama tidak memenuhi, maka ia akan memerika kondisi didalam else-if, apabila bernilai TRUE (1), maka ia akan menjalankan perintah dalam bracket tersebut, apabila tidak maka ia akan menjalankan sequence selanjutnya.
  • Apabila kita menyediakan statement else diakhir, maka ketika seluruh kondisi if dan else-if tidak memenuhi atau FALSE (0), maka secara otomatis ia akan menjalankan perintah di dalam else tersebut.

Percabangan Switch-Case

Selain penggunaan statement if untuk memilih diantara banyak alternatif, terdapat pula statement switch yang memiliki fungsi yang sama, untuk memilih diantara banyak alternatif berdasarkan sebuah kondisi. Kondisi pada statemen switch berisi ekspresi yang dapat menggunakan sebuah variable tunggal bertipe int atau char yang akan diperiksa nilainya di setiap blok case.

Sintaks untuk Switch-Case:

switch(ekspresi) {

    case ekspresi-konstan:
        statement;
        break;

    case ekspresi-konstan:
        statement;
        break;
  
    /* Anda bisa memiliki jumlah case sebanyak mungkin */

    /* Anda harus mengakhiri blok kode Switch-Case dengan "default",
       yaitu bagian kode yang akan dieksekusi jika tidak ada case yang memenuhi */

    default: 
        statement;
}

Setiap blok, case harus ditambahkan statement break, karena apabila tidak maka ia akan tetap menjalankan blok case di bawahnya hingga bertemu break lain atau pada akhir blok switch.

Contoh

#include <stdio.h>

int main()
{
    char platNomor;
    printf("Masukkan huruf awal plat nomor anda: ");
    scanf("%c", &platNomor);

    switch(platNomor)
    {
        case 'L':
            printf("Surabaya");
            break;

        case 'B':
            printf("Jakarta");
            break;

        case 'D':
            printf("Bandung");
            break;

        case 'N':
            printf("Malang/Lumajang");
            break;

        default:
            printf("Karakter plat nomor tidak diketahui");
    } 
    return 0;
}

Dalam contoh di atas, ekspresi yang digunakan adalah PlatNomor, di mana case-case nya adalah, huruf plat nomor tersebut, L, B, D, N, dan sebagainya.

Operator Kondisional (? :)

Operator kondisional mempunyai bentuk sintaks sebagai berikut:

(ekspresi/kondisi) ? (ekspresi jika TRUE) : (ekspresi jika FALSE);

Operator kondisional adalah satu-satunya operator ternary dalam bahasa C. Operator kondisional bertingkah seperti layaknya percabangan if - else. Ekspresi/kondisi yang akan dievaluasi diletakkan sebelum tanda tanya (?). Apabila menghasilkan TRUE, maka program akan mengeksekusi bagian di kiri tanda titik dua. Jika FALSE, akan mengeksekusi bagian di kanan tanda titik dua.

Contoh:

#include <stdio.h>

int main()
{
    int mark;
    
    scanf("%d", &mark);
    printf(mark >= 75 ? "Lulus\n" : "Tidak Lulus\n");
    return 0;
}

Program di atas ekuivalen dengan:

#include <stdio.h>

int main()
{
    int mark;
    
    scanf("%d", &mark);
    if (mark >= 75) {
        printf("Lulus\n");
    } else {
        printf("Tidak Lulus\n");
    }
    return 0;
}

Perulangan

Perulangan atau looping memungkinkan kita untuk mengeksekusi potongan kode berulang-ulang hingga mencapai suatu kondisi. Ada 3 jenis perulangan dalam bahasa C, yaitu while, do - while, dan for.

Perulangan While

Perulangan while adalah bentuk perulangan yang paling sederhana. Sintaksnya adalah sebagai berikut.

//initial value misal, i = 0
while (<Ekspresi/Kondisi>) {
    // Potongan kode yang ingin dieksekusi
    .
    .
    .
    // increment/decrement misalnya, i++
}

Cara kerja perulangan while mirip dengan if. Jika pada if potongan kode akan dieksekusi sekali saja apabila ekspresi/kondisi bernilai TRUE, pada while potongan kode akan terus dieksekusi hingga ekspresi/kondisi menghasilkan FALSE.

Contoh

#include <stdio.h>

int main()
{
    int i = 0;
    while (i < 10)
    {
        printf("Hello World! ke-%d \n",i);
        i++;
    }
    return 0;
}

Sehingga pada contoh di atas:

  • Pada awalnya, variabel i bernilai 0.
  • Sequence selanjutnya adalah while, dan i bernilai kurang dari 10 (TRUE), maka kode didalam while akan dijalankan, yakni print Hello world ke-i.
  • Setelah melakukan print hello world, variabel i akan di increment, dan kembali ke statement while untuk memeriksa apakah i masih kurang dari 10 setelah di-increment
  • Karena setelah i di-increment nilainya masih 1 dan kurang dari 10, maka while akan dijalankan lagi hingga i bernilai 10 yang berarti tidak memenuhi kondisi while.

Perulangan Do-While

Sintaks dari perulangan do – while adalah sebagai berikut.

do {
    // Potongan kode yang dieksekusi.
    .
    .
    // increment/decrement
} while (<Ekspresi/Kondisi>)

Cara kerja dari perulangan do – while mirip dengan perulangan while. Hanya saja, pada perulangan do – while, potongan kode dijamin akan dieksekusi tepat satu kali sebelum mengevaluasi ekspresi/kondisi.

Contoh

#include <stdio.h>
int main()
{
    int num = 0;
    do
    {
        printf("Num sekarang adalah %d\n",num);
        printf("Masukkan bilangan integer positif (-1 untuk keluar ): ");
        scanf("%d", &num);
    } while (num != -1);
    return 0;
}

Perulangan For

Perulangan for merupakan perulangan paling rumit diantara perulangan lainnya. Sintaksnya adalah sebagai berikut.

for (init_statement; kondisi/ekspresi; end_statement) {
    //  Potongan kode yang dieksekusi
    .
    .
}

Cara kerjanya adalah sebagai berikut:

  • Bagian init_statement digunakan untuk inisialisasi variabel yang akan digunakan dalam perulangan. Bagian ini hanya dijalankan sekali saka pada saat awal perulangan.
  • Selanjutnya kondisi/ekspresi akan dievaluasi. Jika menghasilkan TRUE, maka akan mengeksekusi potongan kode. Jika menghasilkan FALSE, maka perulangan berhenti.
  • Setelah potongan kode selesai dieksekusi, akan mengeksekusi bagian end_statement. Biasanya bagian ini digunakan sebagai increment/decrement.
  • Lalu akan mengevaluasi ekspresi/kondisi lagi, dan begitu seterusnya.

Contoh

#include <stdio.h>
int main()
{
    int i;
    //    init;condition; increment
    for (i = 0; i < 10  ; i++) {
        printf("Hello World!\n");
    }
}
  1. Awalnya i bernilai 0
  2. For statement akan memeriksa nilai i apakah kurang dari 10
  3. Apabila TRUE maka jalankan kode dalam for block, yakni print hello world
  4. Setelah command dalam block for selesai dijalankan, maka variabel i akan di-increment, dan diperiksa lagi.
  5. Apabila i kurang dari 10, maka command dalam block dieksekusi, apabila tidak maka for loop akan berhenti

Perulangan/Percabangan Bersarang (Nested)

Percabangan dan perulangan juga dapat dibuat secara bersarang (membuat percabangan/perulangan di dalam percabangan/perulangan), tentu saja menyesuaikan kebutuhan. Contoh berikut adalah perulangan for bersarang.

int i, j;
for (i = 1; i <= 10; ++i) {
    // Statement yang ingin dijalankan pada level terluar

    for (j = 1; j <= 10; j++) {
        // Statement yang ingin dijalankan pada level terdalam

        // Percabangan di dalam perulangan
        if (i == 10) {
            // Lakukan sesuatu
        }
    }
    // Statement yang ingin dijalankan pada level terluar
}

Break and Continue

Keyword break dan continue digunakan untuk mengendalikan (kontrol) alur pada perulangan. Berikut penjelasannya.

Break

Perintah break digunakan untuk menghentikan perulangan (secara paksa). Apabila perintah break pada suatu perulangan dijalankan, maka perulangan tersebut akan dihentikan (secara paksa) dari titik dimana perintah break muncul.

Contoh

#include <stdio.h>

int main()
{
	int i;
	for (i = 1; i <= 6; i++) {
		printf("%d\n", i);
		//   Jika i adalah 4, maka keluar dari perulangan
		if (i == 4) {
			break;
		}
	}
	return 0;
}

Continue

Kebalikan dari perintah break, perintah continue digunakan untuk melanjutkan perulangan. Pada perulangan, apabila menemui perintah continue, maka perintah-perintah dibawah continue akan diabaikan dan kembali akan mengevaluasi ekspresi/kondisi. Sedangkan pada perulangan for akan langsung mengekekusi bagian end_statement kemudian mengevaluasi ekspresi/kondisi.

Contoh

#include <stdio.h>

int main()
{
	int i;
    for (i = 1; i <= 6; i++) {
	    // Jika i adalah 4, maka abaikan perintah printf()
        if (i == 4) {
            continue;
        }
        printf("%d\n",i);
    }
    return 0;
}

Infinite Loop

Infinite loop adalah kasus di mana perulangan tidak akan pernah berhenti. Hal ini terjadi karena perulangan tidak akan pernah menemui kondisi yang membuatnya berhenti. Contoh di bawah akan menghasilkan infinite loop.

#include <stdio.h>

int main()
{
    int i;
    for (i = 1; i <= 100; i--) {
        // Perulangan tak akan pernah berhenti
    }
}

Array

Pengenalan Array

Array merupakan jenis struktur data yang menampung elemen betipe data sama secara sekuensial dengan ukuran (kapasitas) yang tetap (fixed-size). Bayangkanlah sebuah array sebagai sekumpulan elemen sejenis yang disusun secara berurutan pada satu identifier (nama).

Deklarasi Array

Array juga sama seperti variabel, perlu dideklarasikan terlebih dahulu sebelum bisa digunakan. Deklarasi array sama seperti variabel, hanya saja saat pendeklarasiannya perlu dituliskan ukurannya.

tipe_data identifier_array[size];

Inisialisasi Array

Kita juga bisa menginisialisasi elemen-elemen pada array setelah dideklarasikan. Sintaksnya adalah seperti berikut.

tipe_data identifier_array[size] = {elem1, elem2, elem3, ....}

Mengakses Array

Seperti yang telah dijelaskan sebelumnya, array disimpan secara sekuensial (pada blok memori secara berurutan). Lalu bagaimana kita mengakses tiap elemennya? Pengaksesan elemen pada array dilakukan dengan menuliskan identifier array-nya lalu digabung dengan menggunakan operator subscript [] dengan menyertakan indeks didalamnya.

akses_array

Indeks pada array menggunakan zero-based index, yang artinya elemen pertama pada array ditunjukkan oleh indeks ke 0 (bukan ke 1) dan elemen terakhir ditunjukkan oleh indeks ke N-1 (misal N adalah panjang array). Elemen-elemen pada array dapat diperlakukan sama seperti halnya variabel. Kita dapat melakukan assignment, operasi aritmatika, dan lain-lain.

Contoh:

int main () 
{

  int a[10]; //Deklarasi Array
  
  int b[5] = {1, 2, 3, 4, 5}; //Inisialisasi Array
  
  a[0] = 50;
  a[1] = 20;
  
  printf("%d %d\n", a[0], a[1]);
  
  return 0;

}

Mengapa kita perlu array? Andaikan kita membutuhkan 1000 inputan data, kita tidak perlu membuat deklarasi variabel berjumlah 1000, misalkan variabel a1 hinga a1000. Namun, kita cukup menuliskan 1 identifier array berkapasitas 1000.

Contoh program tanpa array:

int main () {

  int a, b, c, d, e; //Deklarasi 5 variabel integer
  
  scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
  
  printf("Bilangan pertama adalah %d\n", a);
  printf("Bilangan kedua adalah %d\n", b);
  printf("Bilangan ketiga adalah %d\n", c);
  printf("Bilangan keempat adalah %d\n", d);
  printf("Bilangan kelima adalah %d\n", e);
  return 0;

}

Bayangkan kita tidak hanya memasukkan 5 data, melainkan 1000 data, bagaimana kita mendeklarasikan semuanya dalam variabel dan kemudian mencetaknya? Maka dari itulah array digunakan.

Contoh program menggunakan array:

int main () 
{
	int a[5], i; 
	for(i = 0; i < 5; i++) {
		scanf("%d", &a[i]); //Input array
	}

	for(i = 0; i < 5; i++) {
		prinf("Bilangan ke-%d adalah %d\n", i+1, a[i]; // Output array
	}

	return 0;

}

Dimensi Array

Array Satu Dimensi

Sebuah array dikatan berdimensi satu apabila tiap elemennya hanya menyimpan satu data/objek. Contoh-contoh pada penjelasan sebelumnya merupakan array satu dimensi.

Contoh array satu dimensi:

int main()
{
	int arr[5];
	arr[0] = 4;
	arr[1] = 2;
	arr[2] = 3;
	return 0;
}

Jika diilustrasikan, maka array tersebut akan tampak seperti di bawah.

array-satu-dimens

Array Multidimensi

Sebuah array dikatakan multidimensional apabila tiap elemen array menampung array lainnya. Apabila array satu dimensi hanya memiliki sebuah index, array multidimensi memiliki dua atau lebih index untuk mengakses elemen dalam array tersebut.

Cara deklarasinya pun berbeda dari array satu dimensi. Kita memerlukan N buah kurung siku untuk membuat array dengan N-dimensi.

Berikut adalah contoh program dengan array dua dimensi:

int main () 
{
	int matriks[5][6];
	matriks[2][3] = 100;
	matriks[1][4] = 200;
	return 0;
}

Apabila diilustrasikan, bentuk array dua dimensi layaknya baris dan kolom, seperti gambar di bawah.

array-dua-dimensi

Selain bentuk dua dimensi, kita dapat membuat array hingga N-dimensi, sesuai kebutuhan.

String

Pengenalan String

Secara umum, string merupakan kumpulan dari satu atau lebih karakter. Spesifik pada bahasa C, string didefinisikan sebagai kumpulan karakter yang diakhiri oleh karakter null ('\0').

Misalkan string "Dasar", pada bahasa C direpresentasikan sebagai kumpulan karakter 'D', 'a', 's', 'a', 'r', dan '\0'.

Representasi String

Pada bahasa C, string direpresentasikan oleh array bertipe char. Contoh pendeklarasian string:

#include <stdio.h>

int main () 
{  
	char str[] = "Halo"; 
	return 0;
}

Contoh di atas akan mendeklarasikan string bernama str dengan kapasitas 5 karakter, di mana str[0] = 'H', str[1] = 'a', str[2] = 'l', str[3] = 'o', dan str[4] = '\0'. Perhatikan bahwa str[4] berisi karakter '\0' (null character), walaupun dalam literal string di atas tidak ada karakter tersebut.

Dalam bahasa C, karakter null digunakan untuk menandakan akhir dari sebuah string.

Contoh pendeklarasian string (2):

#include <stdio.h>

int main () {
  
  char array[10];
  
  return 0;
}

Contoh di atas akan mendeklarasikan string bernama array yang dapat menampung maksimal 10 karakter, termasuk null character.

Untuk menerima input string dari user, kita dapat menggunakan scanf atau gets. Perintah scanf akan membaca inputan string dari user dan berhenti ketika ada whitespace ataupun interupsi dari pengguna. Sedangkan gets akan membaca satu baris kumpulan karakter hingga enter atau interupsi dari pengguna.

Contoh source code penggunaan scanf untuk membaca string:

#include <stdio.h>

int main () {
  
	char arr[10];
	while(1)
	{
		scanf("%s", arr);
		printf("-- %s\n", arr);
	}
	return 0;

}

Contoh penggunaan gets untuk membaca string:

#include <stdio.h>

int main () {
  
	char arr[100];
	while(true)
	{
		gets(arr);
		
		printf("-- %s\n", arr);
	}
  return 0;

}

String yang dibaca dengan mengunakan scanf atau gets akan secara otomatis memiliki null character di akhir.

Fungsi-Fungsi String

Dalam bahasa pemrograman C, terdapat library yang dibuat dengan tujuan memudahkan pengguna dalam mengolah string. Library tersebut tersimpan dalam <string.h>, oleh karena itu, untuk mengakses library ini, diperlukan tambahan preprocessor, yaitu:

#include <string.h>

Berikut adalah fungsi-fungsi yang dibagi berdasarkan kegunaannya dalam mengolah sebuah string (diambil dari www.cplusplus.com):

  • Copying
    • memcpy (Copy block of memory)
    • memmove (Move block of memory)
    • strcpy (Copy string)
    • strncpy (Copy characters from string)
  • Concatenation
    • strcat (Concatenate strings)
    • strncat (Append character from string)
  • Comparison
    • memcmp (Compare two blocks of memory)
    • strcmp (Compare two strings)
    • strcoll (Compare two strings using locale)
    • strncmp (Compare characters of two strings)
    • strxfrm (Transform string using locale)
  • Searching
    • memchr (Locate character in block of memory)
    • strchr (Locate first occurrence of character in string)
    • strcspn (Get span until character in string)
    • strpbrk (Locate characters in string)
    • strrchr (Locate last occurrence of character in string)
    • strspn (Get span of character set in string)
    • strstr (Locate substring)
    • strtok (Split string into tokens)
  • Other
    • memset (Fill block of memory)
    • strerror (Get pointer to error message string)
    • strlen (Get string length)

Berikut adalah beberapa fungsi dan penjelasannya.

Fungsi strcpy

char * strcpy ( char * destination, const char * source );

Fungsi strcpy digunakan untuk melakukan copy dari sebuah string ke string lainnya. Contoh penggunaan dalam kode program:

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

int main () {
  
	char a[] = "Halo";
	char b[10];
	
	// Copy string a ke string b
	strcpy(b, a);
	
	printf("%s\n", b);
	
	return 0;

}

Fungsi strcat

char * strcat ( char * destination, const char * source );

Fungsi strcat digunakan untuk melakukan penempelan sebuah string pada akhir string yang lain. Contoh penggunaan dalam kode program:

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

int main () {
  
	char a[] = "Halo";
	char b[] = " Kawan";
	char c[20];
	
	// Copy string a ke string b
	strcpy(c, a);
	
	// Tempelkan string b ke akhir string c
	strcat(c, b);
	
	printf("%s\n", c);
	
	return 0;

}

Fungsi strcmp

int strcmp ( const char * str1, const char * str2 );

Fungsi strcmp digunakan untuk melakukan pembandingan sebuah string dengan string yang lain. Return value dari fungsi ini dapat berupa bilangan negatif, nol ataupun positif. Jika fungsi ini mengembalikan nilai negatif, maka str1 memiliki tingkat leksikografi lebih kecil dari str2. Sedangkan jika fungsi ini mengembalikan nilai postifi, maka str1 memiliki tingkat leksikografi lebih besar dari str2. Terakhir, jika return value-nya nol, maka str1 sama dengan str2.

Berikut adalah contoh penggunaan fungsi ini dalam kode progam:

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

int main () {
  
    char a[] = "Halo";
	char b[] = "Hai";
	char c[] = "Halo";
	
	if(strcmp(a, b) == 0) printf("String a sama dengan b\n");
	else printf("String a tidak sama dengan b\n");
	
	if(strcmp(a, c) == 0) printf("String a sama dengan c\n");
	else printf("String a tidak sama dengan c\n");
	
	return 0;

}

Fungsi strlen

size_t strlen ( const char * str );

Fungsi strlen digunakan untuk mengetahui panjang dari sebuah string.

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

int main () {
  
	char a[] = "Halo";
	
	printf("Panjang string a adalah %d\n", strlen(a));
	
	return 0;

}

Latihan Soal

Area 51

Time Limit Memory Limit
1 seconds 64 MB

Mahasiswa TC dikenal dengan mahasiswa yang memiliki logika yang liar. Seringkali mahasiswa TC dapat mengerjakan soal - soal logika yang oleh orang lain dikatakan "gajelas" namun di tangan anak TC berakhir menjadi gampang. Karena hal tersebut, suatu hari Arif diminta tolong oleh temannya dari jurusan lain untuk membantu mengerjakan soal interview kerjanya.

Soal tersebut adalah sebagai berikut:

"Terdapat sebuah deret sebagai berikut:

1, 4, 5, 16, 17, 20, 21, 64, dst

Tebaklah bilangan ke N pada deret tersebut"

Arif pun tertarik dengan soal tersebut apalagi temannya menjanjikan sesuatu hal yang Arif inginkan sejak dulu, yaitu Jalan - jalan ke area 51. Arif pun mengiyakan permintaan temannya. Arif pun mulai mengerjakan soal tersebut, dalam waktu 1 hari Arif dapat menemukan pola sebagai berikut.

"Deret tersebut memiliki bentuk lain:

1, 4, (1+4), 16, (1+16), (4+16), (1+4+16), dst"

Namun disaat yang bersamaan, Arif terlalu sibuk untuk melanjutkan mengerjakan hal tersebut. Ia kemudian meminta tolong anda sebagai teman baiknya untuk membuatkan program yang dapat menyelesaikan persoalan tersebut. Bantulah Arif untuk dapat Jalan - jalan ke Area 51.

Input Format

Input berupa sebuah bilangan yang menyatakan nilai dari N.

Output Format

Output sebuah bilangan N diakhiri dengan enter ("\n").

Sample Input

7

Sample Output

21

Ganjil Genap

Time Limit Memory Limit
1 seconds 8 MB

Karena maraknya ganjil genap di Jakarta, maka Budi yang gabut berusaha mencari tau manakah bilangan yang lebih besar diantara ganjil dan genap.

Input Format

Baris pertama berisi angka T dimana T adalah banyaknya angka yang akan dimasukkan di baris berikutnya. Baris berikutnya berisi inputan bilangan N.

Output Format

Ketika bilangan genap, maka dijumlahkan. Jika ganjil, maka dikurangi.

Sample Input

5
1 2 3 4 5
4
5 2 6 1

Sample Output

-3
2

Explanation

Test case pertama :

(2+4)+(-1-3-5) = -3

Test case kedua :

(2+6)+(-1-5) = 2

Find the Pattern

Time Limit Memory Limit
1 seconds 8 MB

Cari pola. Itu aja. Semangat!

Input Format

Input baris pertama berupa dua integer A dan B

Input baris kedua berupa integer N

Output Format

sesuai input, cek sample case

Sample Input 1

1 2
5

Sample Output 1

^
^^^
^^^^^
^^^^^^^
^^^^^^^^^

Sample Input 2

5 3
3

Sample Output 2

^^^^^
^^^^^^^^
^^^^^^^^^^^

Gaboleh Sama

Time Limit Memory Limit
1 seconds 8 MB

Samel adalah seseorang hypebeast. Karena sudah bosan membeli, akhirnya ia mencoba berjualan. Ketika ingin membuka toko, Samel tidak ingin ada huruf yang berulang pada merk dagangannya. Jadi bantulah Samel agar tidak ada huruf yang sama pada merk dagangnya.

Input Format

Baris pertama berisi angka T dimana T adalah banyaknya inputan yang akan dimasukkan di baris berikutnya. Baris berikutnya berisi inputan string sebanyak N karakter.

Output Format

String dari inputan dimana karakternya tidak ada yang lebih dari satu kali.

Sample Input

abcda 
volcom 
reebok 

Sample Output

abcd 
volcm 
rebok 

Explanation

Output hanya mengambil karakter sebanyak satu kali. Jika karakter tersebut sudah ada, maka tidak akan diambil. Contoh pada test case pertama yang mana huruf a sudah ada di awal jadi hasil outputnya hanya abcd.

Kampina Ice Cream

Time Limit Memory Limit
1 seconds 8 MB

Pada saat liburan musim panas, perusahaan Es Krim Kampina mengadakan promosi Es Krim besar-besaran dengan mengedarkan Es Krim dengan 2 pesawat Jet (Jet A dan Jet B) ke wilayah tertentu.

Karena rencana promosi dilakukan secara dadakan dan manager Kampina yang bekerja dengan sembrono, manager lupa memesan bahan bakar untuk pesawat Jet mereka sehingga mengharuskan untuk memesan bahan bakar secara bertahap.

Jet A dan Jet B akan ditugaskan untuk mengedarkan ke wilayah yang jaraknya tidak mencapai X km.

Untuk Jet A, bahan bakar hanya cukup untuk mengedarkan a km lebih jauh daripada hari sebelumnya,

Sedangkan untuk Jet B, bahan bakar hanya cukup untuk mengedarkan b km lebih jauh daripada hari sebelumnya.

Apabila jarak pengedaran Es Krim oleh Jet A dan Jet B sama, demi menghemat bahan bakar, hanyalah salah satu pesawat yang berangkat pada hari yang ditentukan.

Manager Kampina yang lalai ini meminta bantuan kalian sebagai Programmer untuk menghitung jarak tempuh total dari pesawat Jet A dan Jet B sehingga Manager Kampina dapat memprediksi cost yang dibutuhkan pada saat promosi dilakukan.

Input Format

Terdapat 1 baris input yang terdiri dari 3 integer (a, b, X)

a b X

Output Format

Print jarak tempuh total dari pesawat Jet A dan Jet B

Sample Input

3 5 11
5 10 16

Sample Output

33
30

Explanation

Input Pertama

Batas tempuh Jet A dan Jet B adalah 11 km

Jarak tempuh Jet A per harinya,

Hari ke - 1 : 3 km

Hari ke - 2 : 6 km

Hari ke - 3 : 9 km (dan berhenti karena tidak boleh mencapai 11 km)

Total A -> 3 + 6 + 9 = 18 km

Jarak tempuh Jet B per harinya,

Hari ke - 1 : 5 km

Hari ke - 2 : 10 km (dan berhenti karena tidak boleh mencapai 11 km)

Total B -> 5 + 10 = 15 km

Total akhir -> Total A + Total B = 33 km

Input Kedua

Batas tempuh : 16 km

Jarak tempuh Jet A per harinya,

Hari ke - 1 : 5 km

Hari ke - 2 : 10 km (Jet A memberi kesempatan pada Jet B mengedarkan Es Krim untuk menghemat bahan bakar)

Hari ke - 3 : 15 km (dan berhenti karena tidak boleh mencapai 16 km)

Total A -> 5 + 15 = 20 km

Jarak tempuh Jet B per harinya,

Hari ke - 1 : 10 km (dan berhenti karena tidak boleh mencapai 16 km)

Total B -> 10 km

Total akhir -> Total A + Total B = 30 km


Referensi:

⚠️ **GitHub.com Fallback** ⚠️