Oleh:
Dr.Darmawan Hidayat, MT.
Dr. Bambang Mukti Wibawa, M.S
1. Pengenalan C
a. Katakunci dan pegenal (Keywords and Identifier)
b. Variabel dan konstanta (Variables and Constants)
c. Tipe data (Data Types)
d. Input/Output
e. Operator pemrograman C (Programming Operators)
f. Contoh program
3. Fungsi
a. Pengenalan fungsi (Functions Introduction)
b. Fungsi dari pengguna (C User-defined Functions)
c. Tipe fungsi (Function Types)
d. Rekursi (Programming recursion)
e. Storage Class
f. Contoh fungsi (Function Examples)
5. Pointer
a. Pengenalan pointer (Pointers Introduction)
b. Pointer dan larik (Pointers And Arrays)
c. Pointer dan fungsi (Pointers And Functions)
d. Alokasi memeori dinamik (Dynamic Memory Allocation)
e. Contoh pointer (Pointer Examples)
7. File I/O
i
a. File Input/Output
b. Contoh pemrograman file
ii
KATA PENGANTAR
iii
iii
iii
TATA TERTIB
1. Praktikan wajib datang dan melakukan praktikum sesuai dengan jadwal yang telah
ditentukan.
2. Praktikan yang datang terlambat lebih dari 15 menit tidak diperkenankan mengikuti
praktikum
3. Praktikan wajib menyerahkan Laporan Pendahuluan dan Laporan Akhir pada awal
praktikum
4. Praktikan harus memakai kemeja (non jaket), rapi, dan memakai sepatu (non sandal)
5. Praktikan yang tidak masuk lebih dari dua kali dianggap gugur
6. Praktikan dilarang melakukan kegiatan yang mengganggu aktivitas praktikum
7. Kejadian–kejadian luar biasa atau kerusakan alat harus segera dilaporkan kepada
dosen/asisten.
8. Kerusakan alat selama praktikum yang disebabkan oleh praktikan menjadi tanggung
jawab praktikan
9. Praktikan berhak dikeluarkan dari laboratorium apabila melanggar hal –hal tersebut
di atas
10. Hal–hal lain yang belum tercantum di atas ditentukan kemudian
iv
iv
iv
MODUL I Pendahuluan
1.2 Tujuan
TIK: Setelah mengikuti praktikum dengan pokok bahasan Pengenalan Bahasa C,
mahasiswa diharapkan mengetahui dan memahami konsep-konsep dasar pemrograman
C dengan cara mampu membuat program C yang sederhana, mampu menggunakan
statement input dan output yang sederhana, mengenal tipe-tipe data dalam C, dan
mampu memilih serta menggunakan berbagai macam operator
1.3 Percobaan
1.3.1 Membuat program sederhana dalam C
1. Ketik program berikut
1
5. Tambahkan serangkai \n di baris-5 seperti berikut dan amati dan catat
perubahannya.
6. Tambahkan serangkai \n di depan printf() pada baris-5 seperti berikut dan amati
dan catat perubahannya.
printf("\nProdi Teknik Elektro Unpad"); // mencetak isi kutipan
7. Ganti semua kalimat diantara tanda /* ... */ di baris-5 menjadi berikut amati dan
catat perubahannya.
/* output ke monitor */
8. Lakukan hal yang sama pada kalimat yang diawali dengan tanda // pada baris-6.
9. Ubah pernyataan main() di baris-3 menjadi Main(). Amati dan catat perubahannya.
10. Hapus tanda titik koma ; di baris-5. Amati dan catat perubahannya.
11. Gantilah ungkapan "Belajar Pemrograman C\n" di baris-5 dengan
ungkapan ’Belajar Pemrograman C\n’
12. Hapus ungkapan return 0; di baris-8
13. Tambahkan dua ungkapan berikut di baris-7 dan -8.
printf("\n\n\n");
printf("Terima Kasih");
14. Beri tanda // di awal baris-2 menjadi //#include <conio.h>
15. Hapus ungkapan getch(); di baris-7. Amati dan catat perubahannya.
16. Buat kesimpulan untuk setiap perubahan-perubahan yang diamati
2
3. Ubah nilai jumlah_barang=-135. Jalankan dan amati.
4. Ubah nilai ungkapan %d menjadi %u di baris-10. Jalankan dan amati.
5. Ubah baris-9 dan baris-10 menjadi tambahan berikut. Jalankan dan catat hasilnya.
3. Ubah isi variabel hurufku pada baris-8 menjadi hurufku=97. Jalankan dan
catat perubahannya.
3
1.3.4 Manipulasi variabel bertipe float
1. Ketik dan simpan program berikut dengan nama Modul01-04.
2. Jalankan program.
3. Ubah baris-6 menjadi float nilai=-849.245e+2; Jalankan dan catat
hasilnya.
4
1.3.6 Operasi input/output bilangan bertipe integer
1. Ketik dan simpan program berikut dengan nama Modul01-06.
2. Jalankan program.
3. Hapus tanda & baris-7 menjadi scanf(”%d”, nilai); Jalankan dan catat
hasilnya.
5
1.3.9 Mencari nilai ASCII dari suatu karakter yang dimasukkan pengguna
1. Ketik dan simpan program berikut dengan nama Modul01-09.
2. Jalankan program berikut.
3. Tambahkan di baris-9 pernyataan berikut. Jalankan dan catat hasilnya.
printf("Nilai ASCII dari %c = %d",c,c);
scanf("%f",&penyebut);
6
1.3.11 Menghitung ukuran variabel menggunakan operator sizeof
1. Ketik dan simpan program berikut dengan nama Modul01-11.
2. Jalankan program.
3. Tambah pernyataan berikut di baris-13. Jalankan dan catat hasilnya.
printf("Ukuran char e = %d byte\n",sizeof(e));
4. Ubah ungkapan deklarasi variabel di baris-8 seperti berikut. Jalankan dan catat
hasilnya.
char d, e[14];
7
2. Jalankan program.
3. Tambah pernyataan berikut di baris-13. Jalankan dan catat hasilnya.
printf("Ukuran long long long int = %ld bytes",sizeof(c));
8
b. Tanda ………. adalah awal dari tubuh fungsi dan tanda …………. adalah akhir dari
fungsi.
c. Setiap pernyataan diakhiri dengan tanda …….
d. Fungsi standar …………….. digunakan untuk menampilkan informasi ke monitor.
e. Serangkai lepas \n menyatakan karakter …….., yang menyebabkan kursor pindah
ke awal baris baru di monitor.
f. Fungsi standar …………….. digunakan untuk membaca data dari keyboard.
g. Penentu pengubah ………. digunakan di dalam scanf() untuk menandakan nilai
masukan bertipe integer dan di dalam printf() untuk menandakan nilai keluaran
berupa integer.
h. Setiap kali sebuah nilai baru diisikan ke suatu lokasi memori sehingga menimpa
nilai sebelumnya disebut ………
i. Ketika suatu nilai dibaca dari suatu lokasi memori, nilai di lokasi tersebut
dipertahankan; proses ini disebut…….
j. Pernyataan ………………………… digunakan untuk membuat keputusan.
1.4.2 Nyatakan pernyataan berikut benar atau salah. Jika benar jelaskan
mengapa.
a. Fungsi print() selalu memulai pencetakan di awal baris baru.
b. Komentar menyebabkan computer akan mencetak teks yang diapit oleh /* dan */
ketika program dijalankan.
c. Serangkai lepas \n ketika digunakan di dalam printf() akan menyebabkan posisi
kursor akan berada di awal baris baru.
d. Seluruh variabel harus dideklarasikan sebelum digunakan.
e. Seluruh variabel harus diberikan tipenya ketika dideklarasikan.
f. Bahasa C akan menganggap sama variabel number dengan NuMbEr.
g. Definisi variabel dapat muncul dimana saja di dalam tubuh fungsi.
h. Semua argument yang mengikuti string control format di dalam fungsi printf() harus
didahului dengan simbol (&).
i. Operator sisa (%) dapat digunakan hanya untuk operan integer.
j. Operator aritmatika *, /, %, + dan – semuanya memiliki tingkat prioritas yang sama.
k. Nama variabel berikut adalah sama:
thisisasuperduperlongname1234567
9
thisisasuperduperlongname1234568
l. Program untuk mencetak keluaran berupa tiga baris harus mengandung tiga
pernyataan printf().
10
MODUL II Keputusan dan Perulangan
2.2 Tujuan
TIK: Setelah mengikuti praktikum dengan pokok bahasan keputusan dan perulangan
mahasiswa mampu menuliskan program C untuk perhitungan matematika dan logika
menggunakan perintah-perintah uji kondisi dan perulangan dengan benar.
2.3 Percobaan
2.3.1 Mengecek suatu bilangan adalah genap atau ganjil
1. Ketik dan simpan program berikut dengan nama Modul02-01.
2. Jalankan program.
11
2.3.2 Mengecek huruf vokal atau konsonan
1. Ketik dan simpan program berikut dengan nama Modul02-02.
2. Jalankan program.
12
2.3.5 Mengecek tahun kabisat
1. Ketik dan simpan program berikut dengan nama Modul02-05.
2. Jalankan program.
#include <stdio.h>
#include <conio.h>
main()
{
int tahun;
printf("Masukkan suatu tahun = ");
scanf("%d",&tahun);
if(tahun%4 == 0)
{
if( tahun%100 == 0) /*mengecek abad*/
{
if ( tahun%400 == 0)
printf("%d adalah tahun kabisat",tahun);
else
printf("%d adalah bukan tahun kabisat",tahun);
}
else
printf("%d adalah tahun kabisat",tahun);
}
else
13
printf("%d adalah bukan tahun kabisat",tahun);
getch();
return 0;
}
#include <stdio.h>
#include <conio.h>
main()
{
char karakter;
printf("Masukkan sebuah karakter = ");
scanf("%c",&karakter);
if((karakter>='a'&& karakter<='z')||(karakter>='A' &&
karakter<='Z'))
printf("%c adalah alfabet.",karakter);
else
printf("%c bukan alfabet.",karakter);
getch();
return 0;
}
14
2.3.8 Menghitung jumlah dari bilangan asli
1. Ketik dan simpan program berikut dengan nama Modul02-08.
2. Jalankan program.
15
2.3.10 Program untuk menghasilkan tabel perkalian
1. Ketik dan simpan program berikut dengan nama Modul02-10.
2. Jalankan program.
#include <stdio.h>
#include <conio.h>
main()
{
int n, i;
printf("Masukkan bilangan bulat untuk tabel perkalian = ");
scanf("%d",&n);
for(i=1;i<=10;++i)
{
printf("%d * %d = %d\n", n, i, n*i);
}
getch();
return 0;
}
#include <stdio.h>
#include <conio.h>
main()
{
16
int count, n, t1=0, t2=1, display=0;
printf("Enter number of terms: ");
scanf("%d",&n);
printf("Fibonacci Series: %d+%d+", t1, t2); /* dua suku
pertama*/
count=2; /* count=2 karena dua suku pertama sudah
ditampilkan*/
while (count<n)
{
display=t1+t2;
t1=t2;
t2=display;
++count;
printf("%d+",display);
}
getch();
return 0;
}
#include <stdio.h>
#include <conio.h>
main()
{
int nilai1, nilai2, i, fpb;
printf("Masukkan dua integer = ");
scanf("%d %d", &nilai1, &nilai2);
for(i=1; i<=nilai1 || i<=nilai2; ++i)
{
if(nilai1%i==0 && nilai2%i==0) /*mengecek apakah i faktor
bersama*/
fpb=i;
}
printf("FPB dari %d dan %d adalah %d", nilai1, nilai2, fpb);
getch();
return 0;
}
17
2.3.14 Menghitung jumlah digit dari suatu integer
1. Ketik dan simpan program berikut dengan nama Modul02-14.
2. Jalankan program.
18
2.3.16 Menghitung pangkat dari suatu bilangan
1. Ketik dan simpan program berikut dengan nama Modul02-16.
2. Jalankan program.
19
2.3.18 Mengecek apakah suatu bilangan termasuk prima atau bukan
1. Ketik dan simpan program berikut dengan nama Modul02-18.
2. Jalankan program.
20
2.3.19 Menampilkan bilangan-bilangan prima di antara dua interval
1. Ketik dan simpan program berikut dengan nama Modul02-19.
2. Jalankan program.
21
2.3.20 Program untuk mengecek bilangan Armstrong
#include <stdio.h>
#include <conio.h>
main()
{
int n, n1, rem, num=0;
printf("Masukkan sebuah nilai integer positif : ");
scanf("%d", &n);
n1=n;
while(n1!=0)
{
rem=n1%10;
num+=rem*rem*rem;
n1/=10;
}
if(num==n)
printf("%d adalah bilangan Armstrong.",n);
else
printf("%d bukan bilangan Armstrong.",n);
getch();
return 0;
}
22
2.3.22 Menampilkan faktor-faktor dari suatu bilangan
1. Ketik dan simpan program berikut dengan nama Modul02-22.
2. Jalankan program.
23
2. Jalankan program.
#include <stdio.h>
#include <conio.h>
main()
{
char operasi;
float num1,num2;
printf("Pilih operator + atau - atau * atau / = ");
scanf("%c",&operasi);
printf("Enter two operands: ");
scanf("%f%f",&num1,&num2);
switch(operasi) {
case '+':
printf("%.1f + %.1f = %.1f",num1, num2, num1+num2);
break;
case '-':
printf("%.1f - %.1f = %.1f",num1, num2, num1-num2);
break;
case '*':
printf("%.1f * %.1f = %.1f",num1, num2, num1*num2);
break;
case '/':
printf("%.1f / %.1f = %.1f",num1, num2, num1/num2);
break;
default:
/*Jika operator bukan +, -, * or /, tampilkan pesan error*/
printf("Error! operator is not correct");
break;
}
getch();
return 0;
}
24
MODUL III Fungsi
3.2 Tujuan
Setelah mengikuti parkatikum dengan pokok bahasan fungsi mahasiswa akan dapat
memecahkan program besar yang kompleks menjadi program-program modular yang
lebih kecil dengan benar (C3)
3.3 Percobaan
3.3.1 Menampilkan bilangan prima di antara interval dengan menggunakan
fungsi buatan
1. Ketik dan simpan program berikut dengan nama Modul03-01.
2. Jalankan program.
#include <stdio.h>
#include <conio.h>
main()
{
int cek_prima(int num); /*prototipe fungsi*/
int n1,n2,i,flag;
printf("Masukkan dua bilangan interval = ");
scanf("%d %d",&n1, &n2);
printf("Bilangan prima antara %d dan %d adalah = ", n1, n2);
for(i=n1+1;i<n2;++i)
{
flag=cek_prima(i);
if(flag==0)
printf("%d ",i);
}
getch();
25
return 0;
}
#include <stdio.h>
#include <conio.h>
26
return 0;
}
int prima(int n)
{
int i, flag=1;
for(i=2; i<=n/2; ++i)
{
if(n%i==0)
{
flag=0;
break;
}
}
return flag;
}
int armstrong(int n)
{
int num=0, temp, flag=0;
temp=n;
while(n!=0)
{
num+=(n%10)*(n%10)*(n%10);
n/=10;
}
if (num==temp)
flag=1;
return flag;
}
#include <stdio.h>
#include <conio.h>
27
}
3.3.4 Mengecek apakah suatu bilangan dapat diungkapkan sebagai jumlah dari
dua bilangan prima
1. Ketik dan simpan program berikut dengan nama Modul03-04.
2. Jalankan program.
#include <stdio.h>
#include <conio.h>
}
}
if (flag==0)
printf("%d tidak dapat dinyatakan sebagai jumlah dua bilangan
prima.",n);
getch();
return 0;
}
28
flag=0;
return flag;
}
Penjumlahan 1+2+3+4+5 = 15
1. Ketik dan simpan program berikut dengan nama Modul03-05.
2. Jalankan program.
#include <stdio.h>
#include <conio.h>
int tambah(int n)
{
if(n!=0)
return n+tambah(n-1); /* pemanggilan rekursif */
}
#include <stdio.h>
#include <conio.h>
29
}
int faktorial(int n)
{
if(n!=1)
return n*faktorial(n-1);
}
30
void Reverse()
{
char c;
scanf("%c",&c);
if( c != '\n')
{
Reverse();
printf("%c",c);
}
}
31
char c;
printf("Instruksi:\n");
printf("1. Tekan 'd' untuk konversi biner ke desimal.\n");
printf("2. Tekan 'b' untuk konversi desimal ke biner.\n");
scanf("%c",&c);
if (c =='d' || c == 'D')
{
printf("Masukkan sebuah bilangan biner: ");
scanf("%d", &n);
printf("%d biner = %d desimal", n, binary_decimal(n));
}
if (c =='b' || c == 'B')
{
printf("Masukkan sebuah bilangan desimal: ");
scanf("%d", &n);
printf("%d desimal = %d biner", n, decimal_binary(n));
}
getch();
return 0;
}
32
int decimal_octal(int n);
int octal_decimal(int n); /*prototipe fungsi*/
main()
{
int n; char c;
printf("Instruksi:\n");
printf("1. Tekan 'o' untuk konversi desimal ke oktal.\n");
printf("2. Tekan 'd' untuk konversi oktal ke desimal.\n");
scanf("%c",&c);
if (c =='d' || c == 'D')
{
printf("Masukkan bilangan oktal: ");
scanf("%d", &n);
printf("%d oktal = %d desimal", n, octal_decimal(n));
}
if (c =='o' || c == 'O')
{
printf("Masukkan bilangan desimal: ");
scanf("%d", &n);
printf("%d desimal = %d oktal", n, decimal_octal(n));
}
getch();
return 0;
}
33
/*Menampilkan dan membaca bilangan octal dengan menggunakan %o*/
#include <stdio.h>
#include <conio.h>
main()
{
int n;
printf("Masukkan bilangan desimal: ");
scanf("%d",&n); /* %o menampilkan integer menjadi oktal*/
printf("%d desimal = %o oktal", n, n);
printf("\nMasukkan bilangan oktal: ");
scanf("%o",&n); /*membaca bilangan dalam oktal*/
printf("%o oktal = %d desimal", n, n);
getch();
return 0;
}
34
{
decimal+=(n%10)*pow(2,i);
++i;
n/=10;
}
i=1;
while (decimal!=0)
{
octal+=(decimal%8)*i;
decimal/=8;
i*=10;
}
return octal;
}
int octal_binary(int n) /*Fungsi konversi oktal ke biner.*/
{
int decimal=0, binary=0, i=0;
while (n!=0)
{
decimal+=(n%10)*pow(8,i);
++i;
n/=10;
}
/* At this point, the decimal variable contains
corresponding decimal value of that octal number. */
i=1;
while(decimal!=0)
{
binary+=(decimal%2)*i;
decimal/=2;
i*=10;
}
return binary;
}
35
MODUL IV Larik dan string
4.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan larik pada bahasa C mahasiswa
akan mampu menerapkan variabel dengan tipe data berupa larik dengan benar untuk
perhitungan-perhitungan matematika dan logika (C3)
4.3 Percobaan
4.3.1 Menghitung rata-rata menggunakan larik
1. Ketik dan simpan program berikut dengan nama Modul04-01.
2. Jalankan program.
36
{
printf("%d. Masukkan bilangan: ",i+1);
scanf("%f",&num[i]);
sum+=num[i];
}
average=sum/n;
printf("Rata-rata = %.2f",average);
getch();
return 0;
}
main()
{
int i,n;
float arr[100];
printf("Masukkan banyak elemen total (1 to 100)= ");
scanf("%d",&n);
printf("\n");
for(i=0;i<n;++i) /*menyimpan bilangan dari pengguna*/
{
printf("Masukkan bilangan ke-%d: ",i+1);
scanf("%f",&arr[i]);
}
for(i=1;i<n;++i) /*loop untuk menyimpan bilangan ke arr[0] */
{
if(arr[0]<arr[i]) /* menentukan elemen terbesar atau terkecil*/
arr[0]=arr[i];
}
printf("Elemen terbesar = %.2f",arr[0]);
getch();
return 0;
}
37
{
int n, i;
float data[100];
printf("Masukkan banyak data (kurang dari 100)= ");
scanf("%d",&n);
printf("Masukkan nilai elemen = ");
for(i=0; i<n; ++i)
scanf("%f",&data[i]);
printf("\n");
printf("Deviasi standarnya = %.2f", standard_deviation(data,n));
getch();
return 0;
}
int main()
{
int r,c,a[100][100],b[100][100],sum[100][100],i,j;
printf("Masukkan jumlah baris (1-100): ");
scanf("%d",&r);
printf("Masukkan jumlah kolom (1-100): ");
scanf("%d",&c);
printf("\nMasukkan elemen matriks pertama:\n");
38
for(j=0;j<c;++j)
{
printf("Masukkan elemen b%d%d: ",i+1,j+1);
scanf("%d",&b[i][j]);
}
int main()
{
int a[10][10], b[10][10], mult[10][10], r1, c1, r2, c2, i, j, k;
printf("Masukkan baris dan kolom matriks pertama: ");
scanf("%d%d", &r1, &c1);
printf("Masukkan baris dan kolom matriks kedua: ");
scanf("%d%d",&r2, &c2);
/*Jika kolom matriks pertama tidak sama dengan baris matriks kedua*/
while (c1!=r2)
{
printf("Error! kolom matriks pertama tidak sama dengan baris
matriks kedua.\n\n");
printf("Masukkan baris dan kolom matriks pertama: ");
scanf("%d%d", &r1, &c1);
printf("Masukkan baris dan kolom matriks kedua: ");
scanf("%d%d",&r2, &c2);
}
39
{
printf("Masukkan elemen a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}
int main()
{
int a[10][10], trans[10][10], r, c, i, j;
printf("Masukkan baris dan kolom matriks: ");
40
scanf("%d %d", &r, &c);
/*Prototipe fungsi*/
void take_data(int a[][10], int b[][10], int r1,int c1, int r2, int
c2);
void multiplication(int a[][10],int b[][10],int mult[][10],int r1,int
c1,int r2,int c2);
void display(int mult[][10], int r1, int c2);
int main()
{
41
int a[10][10], b[10][10], mult[10][10], r1, c1, r2, c2, i, j, k;
printf("Masukkan baris dan kolom matriks-1: ");
scanf("%d%d", &r1, &c1);
printf("Masukkan baris dan kolom matriks-2: ");
scanf("%d%d",&r2, &c2);
getch();
return 0;
}
void take_data(int a[][10], int b[][10], int r1,int c1, int r2, int
c2)
{
int i,j;
printf("\nMasukkan elemen matriks-1:\n");
for(i=0; i<r1; ++i)
for(j=0; j<c1; ++j)
{
printf("Masukkan elemen matriks-1 a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}
42
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k)
{
mult[i][j]+=a[i][k]*b[k][j];
}
}
int main()
{
char c[1000],ch;
int i,count=0;
printf("Masukkan sebuah string: ");
gets(c);
printf("Masukkan karakter yang akan dihitung kemunculannya: ");
scanf("%c",&ch);
for(i=0;c[i]!='\0';++i)
{
if(ch==c[i])
++count;
}
printf("Frekuensi kemunculannya dari %c = %d", ch, count);
getch();
return 0;
}
4.3.9 Menghitung jumlah vocal, konsonan, angka dan spasi dalam suatu string
1. Ketik dan simpan program berikut dengan nama Modul04-09.
2. Jalankan program.
43
/*Menghitung jumlah vocal, konsonan, angka dan spasi dalam suatu
string*/
#include <stdio.h>
#include <conio.h>
int main()
{
char line[150];
int i,v,c,ch,d,s,o;
o=v=c=ch=d=s=0;
printf("Masukkan sebuah baris string:\n");
gets(line);
for(i=0;line[i]!='\0';++i)
{
if(line[i]=='a' || line[i]=='e' || line[i]=='i' ||
line[i]=='o' || line[i]=='u' || line[i]=='A' || line[i]=='E' ||
line[i]=='I' || line[i]=='O' || line[i]=='U')
++v;
else if((line[i]>='a'&& line[i]<='z') || (line[i]>='A'&&
line[i]<='Z'))
++c;
else if(line[i]>='0'&&c<='9')
++d;
else if (line[i]==' ')
++s;
}
printf("Vokal: %d",v);
printf("\nKonsonan: %d",c);
printf("\nDigits: %d",d);
printf("\nSpasi: %d",s);
getch();
return 0;
}
int main()
{
char s[1000],i;
printf("Masukkan sebuah string: ");
scanf("%s",s);
for(i=0; s[i]!='\0'; ++i);
printf("Panjang string tersebut: %d",i);
getch();
return 0;
}
44
4.3.11 Menggabungkan dua string
1. Ketik dan simpan program berikut dengan nama Modul04-11.
2. Jalankan program.
int main()
{
char s1[100], s2[100], i, j;
printf("Masukkan string pertama: ");
scanf("%s",s1);
printf("Masukkan string kedua: ");
scanf("%s",s2);
for(i=0; s1[i]!='\0'; ++i); /* i panjang string s1*/
for(j=0; s2[j]!='\0'; ++j, ++i)
{
s1[i]=s2[j];
}
s1[i]='\0';
printf("Setelah penggabungan: %s",s1);
getch();
return 0;
}
int main()
{
char s1[100], s2[100], i, j;
printf("Masukkan string pertama: ");
scanf("%s",s1);
printf("Masukkan string kedua: ");
scanf("%s",s2);
for(i=0; s1[i]!='\0'; ++i); /* i panjang string s1*/
for(j=0; s2[j]!='\0'; ++j, ++i)
{
s1[i]=s2[j];
}
s1[i]='\0';
printf("Setelah penggabungan: %s",s1);
getch();
return 0;
}
45
4.3.13 Menghapus seluruh karakter dalam string kecuali alfabet
1. Ketik dan simpan program berikut dengan nama Modul04-13.
2. Jalankan program.
int main()
{
char line[150];
int i,j;
printf("Masukkan sebuah string: ");
gets(line);
for(i=0; line[i]!='\0'; ++i)
{
while (!((line[i]>='a'&&line[i]<='z') ||
(line[i]>='A'&&line[i]<='Z' || line[i]=='\0')))
{
for(j=i;line[j]!='\0';++j)
{
line[j]=line[j+1];
}
line[j]='\0';
}
}
printf("String alfabet saja: ");
puts(line);
getch();
return 0;
}
int main()
{
int i,j;
char str[10][50],temp[50];
printf("Masukkan 10 kata:\n");
for(i=0;i<10;++i)
{
printf("%d. ",i+1); gets(str[i]);
}
for(i=0;i<9;++i)
for(j=i+1;j<10 ;++j){
if(strcmp(str[i],str[j])>0)
46
{
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
printf("\n\n");
printf("Dalam urutan leksikografis: \n");
for(i=0;i<10;++i)
{
printf("%d. ",i+1); puts(str[i]);
}
getch();
return 0;
}
47
MODUL V Pointer
5.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan pointer bahasa C mahasiswa akan
mampu mengimplementasikan program untuk perhitungan matematika dengan
menggunakan variabel pointer untuk manajemen alokasi memori secara dinamik
dengan benar (C3)
5.3 Percobaan
5.3.1 Mengakses elemen larik menggunakan pointer
1. Ketik dan simpan program berikut dengan nama Modul05-01.
2. Jalankan program.
int main()
{
int data[5], i;
printf("Masukkan elemen: ");
for(i=0;i<5;++i)
scanf("%d",data+i);
printf("Anda memasukkan: ");
for(i=0;i<5;++i)
printf("%d\n",*(data+i));
getch();
return 0;
}
48
5.3.2 Menukar bilangan dalam urutan siklus dengan pemanggilan secara acuan
1. Ketik dan simpan program berikut dengan nama Modul05-02.
2. Jalankan program.
main()
{
int i,n;
float *data;
printf("Masukkan jumlah total elemen (1-100): ");
scanf("%d",&n);
data=(float*)calloc(n,sizeof(float)); /*alokasi memori sebanyak n
elemen*/
if(data==NULL)
49
{
printf("Error!!! memori tidak teralokasi.");
exit(0);
}
printf("\n");
for(i=0;i<n;++i) /* menyimpan bilangan dari pengguna. */
{
printf("Enter Number %d: ",i+1);
scanf("%f",data+i);
}
for(i=1;i<n;++i) /* loop untuk menyimpan bilangan terbesar di
data alamat*/
{
if(*data<*(data+i)) /* untuk mencari nilai terkecil*/
*data=*(data+i);
}
printf("Elemen terbesar = %.2f",*data);
getch();
return 0;
}
50
MODUL VI Struktur dan gabungan
6.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan struktur dan gabungan bahasa C
mahasiswa akan mampu mengimplementasikan program C untuk perhitungan
matematika dengan menggunakan struktur dan gabunga scara benar (C3)
6.3 Percobaan
6.3.1 Menyimpan informasi (nama, kuliah dan nilai) dari mahasiswa
menggunakan struktur
1. Ketik dan simpan program berikut dengan nama Modul06-01.
2. Jalankan program.
struct student{
char name[50];
int roll;
float marks;
};
int main(){
struct student s;
printf("Masukkan informasi dari mahasiswa:\n\n");
printf("Masukkan nama: ");
scanf("%s",s.name);
printf("Masukkan tahun masuk: ");
scanf("%d",&s.roll);
51
printf("Masukkan nilai: ");
scanf("%f",&s.marks);
printf("\nMenampilkan informasi\n");
printf("Nama : %s\n",s.name);
printf("Tahun masuk: %d\n",s.roll);
printf("Nilai : %.2f\n",s.marks);
getch();
return 0;
}
#include <stdio.h>
#include <conio.h>
struct Distance{
int feet;
float inch;
}d1,d2,sum;
int main(){
printf("Masukkan informasi jarak pertama\n");
printf("Masukkan kaki: ");
scanf("%d",&d1.feet);
printf("Masukkan inci: ");
scanf("%f",&d1.inch);
printf("\nMasukkan informasi untuk jarak ke-2\n");
printf("Masukkan kaki: ");
scanf("%d",&d2.feet);
printf("Masukkan inci: ");
scanf("%f",&d2.inch);
sum.feet=d1.feet+d2.feet;
sum.inch=d1.inch+d2.inch;
52
6.3.3 Menambahkan dua bilangan kompleks dengan melewatkan struktur ke
dalam suatu fungsi
1. Ketik dan simpan program berikut dengan nama Modul06-03.
2. Jalankan program.
#include <stdio.h>
#include <conio.h>
#include <stdio.h>
int main(){
complex n1,n2,temp;
printf("Bilangan kompleks pertama \n");
printf("Masukkan bagian riil dan imajiner: \n");
scanf("%f%f",&n1.real,&n1.imag);
printf("\nBilangan kompleks kedua \n");
printf("Masukkan bagian riil dan imajiner: \n");
scanf("%f%f",&n2.real,&n2.imag);
temp=add(n1,n2);
printf("Sum=%.1f+%.1fi",temp.real,temp.imag);
getch();
return 0;
}
#include <stdio.h>
#include <conio.h>
struct TIME{
int seconds;
int minutes;
int hours;
};
53
void Difference(struct TIME t1, struct TIME t2, struct TIME *diff);
int main(){
struct TIME t1,t2,diff; printf("Masukkan
waktu awal: \n"); printf("Masukkan jam,
menit dan detik: ");
scanf("%d%d%d",&t1.hours,&t1.minutes,&t1.seconds);
printf("Masukkan waktu akhir: \n");
printf("Masukkan jam, menit dan detik: ");
scanf("%d%d%d",&t2.hours,&t2.minutes,&t2.seconds);
Difference(t1,t2,&diff);
printf("\nSELISIH WAKTU: %d:%d:%d -
",t1.hours,t1.minutes,t1.seconds);
printf("%d:%d:%d ",t2.hours,t2.minutes,t2.seconds);
printf("= %d:%d:%d\n",diff.hours,diff.minutes,diff.seconds);
getch();
return 0;
}
void Difference(struct TIME t1, struct TIME t2, struct TIME *differ){
if(t2.seconds>t1.seconds){
--t1.minutes;
t1.seconds+=60;
}
differ->seconds=t1.seconds-t2.seconds;
if(t2.minutes>t1.minutes){
--t1.hours;
t1.minutes+=60;
}
differ->minutes=t1.minutes-t2.minutes;
differ->hours=t1.hours-t2.hours;
}
#include <stdio.h>
#include <conio.h>
struct student{
char name[50];
int roll;
float marks;
};
int main(){
struct student s[10];
int i;
printf("Masukkan informasi mahasiswa: \n");
for(i=0;i<10;++i)
{
s[i].roll=i+1;
printf("\nFor roll number %d\n",s[i].roll);
printf("Masukkan nama: ");
scanf("%s",s[i].name);
printf("Masukkan nilai: ");
scanf("%f",&s[i].marks);
54
printf("\n");
}
printf("Menampilkan informasi mahasiswa: \n\n");
for(i=0;i<10;++i)
{
printf("\nInformasi untuk bilangan roll %d: \n",i+1);
printf("Nama: ");
puts(s[i].name);
printf("Nilai: %.1f",s[i].marks);
}
getch();
return 0;
}
#include <stdio.h>
#include<stdlib.h>
#include<conio.h>
struct name {
int a;
char c[30];
};
int main(){
struct name *ptr;
int i,n;
printf("Masukkan jumlah data n: ");
scanf("%d",&n);
55
MODUL VII File I/O
7.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan operasi input/output Bahasa C,
mahasiswa akan mampu mengimplementasikan program C untuk menulis dan
membaca informasi dari dan ke suatu file dengan dengan benar (C2)
7.3 Percobaan
7.3.1 Membuat program C untuk membaca nama dan nilai mahasiswa yang
dimasukkan dari pengguna dan menyimpannya di file
/*membaca nama dan nilai mahasiswa yang dimasukkan
dari pengguna dan menyimpannya di file*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main(){
char name[50];
int marks,i,n;
printf("Masukkan jumlah data = ");
scanf("%d",&n); FILE *fptr;
fptr=(fopen("d:\\mahasiswa.txt","w"));
if(fptr==NULL){
printf("Error!");
exit(1);
}
for(i=0;i<n;++i)
{
printf("Nama Mahasiswa-%d = ",i+1);
scanf("%s",name);
printf("Nilai Mahasiswa-%d = ",i+1);
scanf("%d",&marks);
fprintf(fptr,"\nName: %s \nMarks=%d \n",name,marks);
}
fclose(fptr);
56
printf("Silahkan buka file d:\\mahasiswa.txt");
getch();
return 0;
}
7.3.3 Write a C program to write all the members of an array of strcures to a file
using fwrite(). Read the array from the file and display on the screen.
#include <stdio.h>
struct s
{
char name[50];
int height;
};
int main(){
struct s a[5],b[5];
FILE *fptr; int i;
fptr=fopen("file.txt","wb");
for(i=0;i<5;++i)
{
fflush(stdin);
printf("Enter name: ");
gets(a[i].name);
printf("Enter height: ");
scanf("%d",&a[i].height);
57
}
fwrite(a,sizeof(a),1,fptr);
fclose(fptr);
fptr=fopen("file.txt","rb");
fread(b,sizeof(b),1,fptr);
for(i=0;i<5;++i)
{
printf("Name: %s\nHeight: %d",b[i].name,b[i].height);
}
fclose(fptr);
}
58
MODUL VIII Komunikasi Serial via Port USB
8.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan operasi input/output Bahasa C,
mahasiswa mampu mengimplementasikan program C untuk inisialisasi port USB,
kirim-terima data serial melalui port USB dan komunikasi antarkompuer via port USB
dengan benar (C3)
8.3 Percobaan
8.3.1 Instalasi Kabel USB-RS232
1. Instalasi driver USB-RS232 sesuai buku petunjuk produknya.
59
3. Catat nomor COM untuk kabel tersebut (COM7 pada contoh tersebut).
4. Instal hingga kabel USB-RS232 siap digunakan.
Percobaan:
1. Buat koneksi PC1 dengan PC2 melalui kabel USB-RS232 melalui kabel silang
seperti Gambar 8.1.
2. Parameter komunikasi serial: 9600 bps, 8 bit, N paritas, 1 stop bit
3. Pada PC1 ketik Program 01_KirimSerialByte01.cpp
4. Pada PC2 ketik Program 01_TerimaSerialByte01.cpp
5. Eksekusi program di masing-masing PC, lalu amati dan catat hasilnya.
6. Lakukan pergantian komunikasi. PC2 sebagai pengirim dan PC1 sebagai penerima.
60
Gambar 8.1. Koneksi komunikasi serial antara dua PC
Pada PC1
Program: Modul08-Kirim-01.cpp
//Kirim serial //
/* Program untuk kirim data serial melalui port serial COM
via kabel USB-RS232 dari PC1 ke PC2
untuk menunjukkan komunikasi serial antar-PC
*/
#include <windows.h>
#include <conio.h>
#include <stdio.h>
while(1)
{
system("CLS");
printf("Masukkan byte untuk dikirim = ");
scanf("%d",&byte_kirim);
h1_buffer[0]=byte_kirim;
WriteFile(h1, h1_buffer, 1, &byteswritten, NULL);
61
printf("\n");
};
CloseHandle(h1);
return 0;
//getch();
}
Pada PC2
Program: Modul08-Terima-01.cpp
#include <windows.h>
#include <conio.h>
#include <stdio.h>
do
{
ReadFile(h2, h2_buffer, 1, &bytesread, NULL); //Baca data serial
if(bytesread)
{
62
system("CLS");
printf("%u\n", (h2_buffer[0] & 0xFF));
}
else
{
printf("Tidak ada data masuk\n");
printf("Yang ada di buffer h2_buffer %u\n", h2_buffer);
}
}while(1);
CloseHandle(h2);
}
// Kirim TEKS
// Program untuk KIRIM TEKS melalui port serial COM
// via kabel USB-RS232 dari PC1 ke PC2
// untuk menunjukkan komunikasi serial antar-PC
// 9600 bps, 8 bit, N paritas, 1 stop bit
63
#include <windows.h>
#include <conio.h>
#include <stdio.h>
while(1)
{
system("CLS");
h1 = GetSerialPort(c1);
printf("Masukkan byte untuk dikirim = ");
gets(teks);
strcpy(h1_buffer,teks);
WriteFile(h1, h1_buffer, 60, &byteswritten, NULL);
printf("\n");
delay();
CloseHandle(h1);
};
return 0;
}
void delay ()
{
int i = 100000000;
while(i>0)
{
i--;
}
}
64
Program di PC2: 02_TerimaSerialTeks01.cpp
// Terima TEKS
// Program untuk TERIMA TEKS melalui port serial COM (kabel USB-RS232)
// dari PC lain
// 9600 bps, 8 bit, N, 1 stop bit
#include <windows.h>
#include <conio.h>
#include <stdio.h>
do
{
h2 = GetSerialPort(c2);
ReadFile(h2, h2_buffer, 60, &bytesread, NULL);
printf("%s\n", h2_buffer);
delay();
CloseHandle(h2);
} while(1);
}
void delay ()
{
int i = 100000000;
while(i>0)
i--;
}
65
8.3.4 Kirim Data Byte dari PC ke Piranti Eksternal (Mikrokontroler)
Peralatan yang digunakan:
1. Kabel konverter USB-ke-RS232
2. Kabel konverter RS232-TTL (MAX232)
3. Trainer Kit Mikrokontroler AVR berlabel TERIMA
4. Trainer Kit Mikrokontroler AVR berlabel KIRIM
Percobaan-1:
1. Buat koneksi PC dengan kit mikrokontroler TERIMA melalui kabel USB-RS232
dan kabel RS232-TTL seperti Gambar 8.2.
2. Hubungkan Kit Mikrokontroler ke port USB di PC.
3. Parameter komunikasi serial: 9600 bps, 8 bit, N paritas, 1 stop bit
4. Pada PC ketik Program 01_KirimSerialByte01.cpp
5. Eksekusi program di masing-masing PC, lalu amati tampilan di monitor dan
tampilan peraga LED di modul trainer kit, dan catat hasilnya.
Percobaan-2:
1. Modifikasi Program 01_KirimSerialByte01.cpp, baris 19-27 menjadi seperti
berikut.
2. Amati dan catat hasilnya.
66
Percobaan-3:
1. Modifikasi Program 01_KirimSerialByte01.cpp, baris 19-27 menjadi seperti
berikut.
2. Amati dan catat hasilnya.
Percobaan:
1. Buat koneksi PC dengan kit mikrokontroler KIRIM melalui kabel USB-RS232 dan
kabel RS232-TTL seperti Gambar 8.2.
2. Parameter komunikasi serial: 9600 bps, 8 bit, N paritas, 1 stop bit
3. Pada PC ketik Program 01_TerimaSerialByte01.cpp
67
4. Eksekusi program di masing-masing PC, lalu amati tampilan di monitor dan
tampilan peraga LED di modul trainer kit, dan catat hasilnya.
68
Program Mikrokontroler
Mikrokontroler sebagai penerima.
Nama program: TerimaSerial01.c
#include <mega8535.h>
#include <stdio.h>
void main()
{
int b;
UCSRB=0b00011000;
UCSRC=0b10000110;
UBRRH=0;
UBRRL=103;
DDRB=0b11111111;
PORTB=0x00;
while(1)
{
while(!(UCSRA & (1<<RXC)));
PORTB=UDR;
};
}
69
Mikrokontroler sebagai pengirim.
Nama program: KirimSerial01.c
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
void main()
{
int i=0;
UCSRB=0b00001000;
UCSRC=0b10000110;
UBRRH=0;
UBRRL=103;
DDRB=0b11111111;
PORTB=0x00;
while(1)
{
for(i=0;i<=255;i++)
{
while(!(UCSRA & (1<<UDRE)));
PORTB=i;
UDR=i;
delay_ms(400);
}
};
}
70