Với kết cấu nội dung gồm 6 bài, bài giảng Tin học cơ sở 3 - Ngôn ngữ lập trình C trình bày tổng quan về ngôn ngữ lập trình C, kiểu chuổi ký tự, các kiểu dữ liệu cơ sở, cấu trúc điều khiển, hàm và chương trình,... Mời các bạn cùng tham khảo.
Trang 1Tin học cơ sở 3
LẬP TRÌNH C)
Trang 2Tài liệu
• Phạm Văn Ất, Kỹ thuật lập trình C Cơ sở và
nâng cao, NXB Giao thông Vận tải, 2006.
• Bùi Thế Duy, Lập trình căn bản với C, NXB
Đại học Quốc gia Hà nội, 2012.
2
Trang 3Bài 1: Tổng quan về ngôn ngữ lập trình
C
• Ngôn ngữ C có một số các đặc điểm nổi
bật sau :
– C là ngôn ngữ lập trình có cấu trúc và phân
biệt chữ Hoa – chữ thường.
– Một chương trình C bao giờ cũng gồm một
hoặc nhiều hàm và các hàm rời nhau.
3
Trang 4I Hướng dẫn cài đặt môi trường kết hợp Dev C
2 Cài đặt: Chạy file cài đặt DEV-C++ (file
devcpp.exe)
3 Vào menu " Tools " chọn " Compiler Options ".
- Vào tab "Settings" tab, nhấn vào "Linker"
ở khung bên trái và thay đổi thông số
"Generate debugging information" sang
"Yes":
4
Trang 5II Hướng dẫn sử dụng môi trương kết hợp Dev C
Mở file mới : File -> New -> Source File
Mở file đã có: File -> Open
File\ Save (Ctrl+S) : Ghi tệp mới đang soạn thảo
vào đĩa
File\ Save as : Ghi tệp đang soạn thảo vào đĩa
theo tên mới hoặc đe lên tệp đã có
5
Trang 6• Chạy một chương trình
(Ctrl+F10)
• Thoát khỏi Dev C
6
Trang 7III Các bước lập trình
• Bước 1: Phân tích vấn đề và xác định các đặc
điểm (xác định I-P-O:
Input-Pprocess-Output (Quy trình nhập-xử lý-xuất))
• Bước 2: Đưa ra giải pháp (đưa ra thuật giải)
• Bước 3: Cài đặt (viết chương trình)
• Bước 4: Dịch chương trình
• Bước 5: Chạy kiểm chứng và hoàn thiện
chương trình (thử nghiệm bằng nhiều số liệu
và đánh giá)
7
Trang 8• Phương trình có nghiệm duy nhất x = -b/a
Đầu vào: a, b thuộc R
Đầu ra: nghiệm phương trình ax + b = 0
Trang 9Sử dụng lưu đồ - sơ đồ khối
Trang 10Xuất “Phương trình có nghiệm x = -b/a”
Đầu vào: a, b thuộc R
Đầu ra: nghiệm phương trình ax + b = 0
Trang 11Bài tập
Xác định Input, Process, Output của các chương
trình sau:
1 Đổi từ tiền VND sang tiền USD.
2 Tính điểm trung bình của học sinh gồm các môn Toán, Lý, Hóa.
3 Giải phương trình bậc 2: ax2 + bx + c = 0
4 Kiểm tra 2 số a, b giống nhau hay khác nhau.
11
Trang 12IV Giới thiệu ngôn ngữ lập trình C
• Các ký hiệu đặc biệt khác như : , ; : [ ] { } ? ! \ & | % # $,…
– Từ khóa là các từ dành riêng trong ngôn ngữ.
=> Không thể sử dụng từ khóa để đặt tên cho biến, hàm, tên chương trình con ( tồn tại dưới dạng hàm , không tồn tại dưới dạng thủ tục).
• Char, do, int, float, for, do, While,…
– Tên file (tệp)
• Tên file là một dãy ký tự dùng để chỉ tên.
• Tên tệp được tạo thành từ các chữ cái và các chữ số , nhưng bắt buộc
chữ đầu phải là chữ cái hoặc dấu _.
• Số ký tự tối đa của một tên là 255 ký tự, và không cho phép có khoảng
Trang 13• Ví dụ tên tệp
– Các tên hợp lệ: GiaiPhuongTrinh, Bai_Tap1
– Các tên không hợp lệ: 1A, Giai Phuong Trinh
các tên sau đây khác nhau:
• BaiTap khác baitap, …
Giới thiệu ngôn ngữ lập trình C
Trang 14V Cấu trúc một chương trình trong NNLT C
• Một chương trình thường là tập hợp các câu lệnh, có thể có
hoặc không có các ghi chú
• Trong C, ghi chú được đặt giữa cặp /* và */, nếu chú thích cho dòng dùng 2 dấu //
• Chương trình còn có thể có các chỉ dẫn tiền biên dịch (được
thực hiện trước khi chương trình được biên dịch, VD: chỉ dẫn
#include để khai báo sử dụng thư viện.
14
Trang 15Cấu trúc chương trình C
#include “…” // Khai báo thư viện
int main() // Hàm chính
{
int x; // Khai báo biến hàm
int Nhap(); // Khai báo hàm
… // Các lệnh
}
Trang 16Chú ý:
Các từ include, stdio.h, void, main, printf,…
phải viết bằng chữ thường.
Chuỗi trong nháy kép là chuỗi cần in ra "Bạn có thể viết chữ HOA, thường tùy ý".
Kết thúc tên hàm không có dấu chấm phẩy hoặc bất cứ dấu gì.
Ghi chú phải đặt trong cặp /* … */, hay //
Trang 17printf(“Nhap hai so nguyen: ”);
scanf(“%d %d”, &x, &y);
tong = x + y;
printf(“Tong hai so la %d”, tong); getch();
}
Trang 18Một số thư viện trong Dev C
- stdio.h : Chứa các hàm vào/ ra chuẩn (standard
input/output) Gồm:
printf(), scanf() , getc(), putc(), gets(), puts(), …
+ Lệnh printf: dùng để in ký tự ra màn hình.
+ lệnh scanf: dùng để nhập giá trị vào cho biến.
- conio.h : Chứa hàm getch() , getche(), putch(), …
-math.h : Thư viện chứa các hàm tính toán gồm các hàm
abs(), sqrt(), log(),…
- windows.h : Chứa hàm xóa màn hình: system(“cls”) ,…
-String.h: Chứa các hàm về chuỗi: Char ,…
Giới thiệu ngôn ngữ lập trình C
Trang 19BB
1 1
Bài 2 Các kiểu dữ liệu cơ sở
nguyên như : -2, 10,…
thực như 3.14, 29.12, -17.06, …
ASCII.
Các kiểu dữ liệu cơ sở
Trang 20BB
2 2
Kích thước của các kiểu dữ liệu cơ sở
Các kiểu dữ liệu cơ sở
Trang 21BB
2 2
1 Kiểu Logic (bool)
C ngầm định một cách không tường minh:
• false (sai): giá trị 0.
• true (đúng): giá trị khác 0, thường là 1.
Trang 22BB
2 2
2 Kiểu ký tự (char)
Đặc điểm
Tên kiểu: char
Miền giá trị: 256 ký tự trong bảng mã ASCII.
Kiểu ký tự chính là kiểu số nguyên do:
• Lưu tất cả dữ liệu ở dạng số
• Không lưu trực tiếp ký tự mà chỉ lưu mã ASCII của
ký tự đó
Ví dụ
Lưu số 65 tương đương với ký tự ‘A’…
Lưu số 97 tương đương với ký tự ‘a’.
Các kiểu dữ liệu cơ sở
Trang 23BB
2 2
3 Biến
Các kiểu dữ liệu cơ sở
Cú pháp khai báo biến
<kiểu> <tên biến>;
<kiểu> <tên biến 1>, <tên biến 2>;
Trang 24BB
2 2
Trang 25BB
2 2
#define <tênhằng> <giá trị>
hoặc sử dụng từ khóa const
Trang 26BB
2 2
5 Biểu thức
Biểu thức được tạo thành từ các toán tử
(Operator) và các toán hạng (Operand).
Toán tử: + , – , * , / , % (lấy phần dư) ….
Toán hạng: hằng , biến , lời gọi hàm
2 + 3, a / 5, (a + b) * 5, …
Các kiểu dữ liệu cơ sở
Trang 27BB
2 2
<biến> = <giá trị>; a=10;
<biến> = <biến>; b=a;
<biến> = <biểu thức>; thuong=a/b;
Có thể thực hiện liên tiếp phép gán.
Các kiểu dữ liệu cơ sở
Trang 28BB
2 2
b Các toán tử toán học
Chỉ có một toán hạng trong biểu thức.
++ (tăng 1 đơn vị), (giảm 1 đơn vị)
Toán tử đặt trước toán hạng => thực hiện
trước.
• Ví dụ ++x hay x: thực hiện tăng/giảm trước
Toán tử đặt sau toán hạng=> thực hiện sau:
• Ví dụ x++ hay x : thực hiện tăng/giảm sau
Trang 29BB
2 2
c Các toán tử quan hệ (thường đi với if)
So sánh 2 biểu thức với nhau
Cho ra kết quả 0 (hay false nếu sai) hoặc 1 (hay true nếu đúng)
Trang 30BB
3 3
d Các toán tử logic
Các toán tử Logic
Tổ hợp nhiều biểu thức quan hệ với nhau.
&& (and), || (or), ! (not)
Trang 31BB
3 3
5 Câu lệnh
Câu lệnh là một chỉ thị trực tiếp, nhằm ra lệnh cho máy tính thực hiện một số tác vụ nhất
định nào đó.
Trình biên dịch bỏ qua các khoảng trắng (hay tab hoặc xuống dòng) chen giữa lệnh.
Các kiểu dữ liệu cơ sở
Trang 32BB
3 3
5 Câu lệnh (tiếp)
Câu lệnh đơn: chỉ gồm một câu lệnh.
Câu lệnh phức (khối lệnh): gồm nhiều câu
lệnh đơn được bao bởi { và }
Trang 33BB
3 3
a Câu lệnh xuất
Câu lênh xuất thuộc thư viện stdio.h
#include <stdio.h> (standard input/output)
Cú pháp
printf(<chuỗi định dạng>[, <đối số1>, <đối số 2>, …]);
<chuỗi định dạng> là cách trình bày thông tin xuất và được đặt trong cặp nháy kép “ ” gồm:
• Văn bản thường: printf(“Hello ”);
• Ký tự điều khiển: printf(“\t Hello”); printf(“\n Hello”);
• Đặc tả: - Gồm dấu % và một ký tự.
- Xác định kiểu của biến/giá trị muốn xuất.
- Các đối số chính là các biến/giá trị muốn xuất,
được liệt kê theo thứ tự cách nhau dấu phẩy.
Trang 34BB
3 3
Số nguyên không dấu
char int, long float, double char, string unsigned
Trang 35BB
3 3
printf(“%10.2f”, x); Xuất ra 15.06, có 10 ô nhớ chứa
x, lấy sau dấu phẩy 2 số
printf(“%.2f”, x); Xuất ra 15.06
Các kiểu dữ liệu cơ sở
Trang 36BB
3 3
b Câu lệnh nhập
Câu lênh nhập thuộc thư viện stdio.h
#include <stdio.h> (standard input/output)
Cú pháp
scanf(<chuỗi định dạng>[, <đối số 1>, <đối số 2>,…]);
<chuỗi định dạng> giống định dạng xuất nhưng chỉ
có các đặc tả
Các đối số: là tên các biến sẽ chứa giá trị nhập và
được đặt trước bởi dấu &
Các kiểu dữ liệu cơ sở
Trang 37BB
3 3
Câu lệnh nhập
Ví dụ, cho a và b kiểu số nguyên
scanf(“%d”, &a); // Nhập giá trị cho biến a
scanf(“%d%d”, &a, &b);
Chú ý: Khi nhập xâu kí tự thì không có dấu & trước biến, vì bản thân tên xâu đã là con trỏ
printf(“Cho mot xau ki tu: “); scanf(“%s”,st);
Các câu lệnh sau đây sai
• scanf(“%d”, a); // Thiếu dấu &
• scanf(“%d”, &a, &b);// Thiếu %d cho biến b
• scanf(“%f”, &a); // a là biến kiểu số nguyên
• scanf(“%9d”, &a); // không được định dạng
• scanf(“a = %d, b = %d”, &a, &b”);
Các kiểu dữ liệu cơ sở
Trang 38BB
3 3
Bài tập
Bài 1: Viết chương trình in ra màn hình các câu
chào khác nhau, mỗi câu trên một dòng.
Bài 2: Viết chương trình nhập vào 2 số nguyên
dương rồi đưa ra: tổng, tích, hiệu của 2 số đó.
Bài 3: Giả sử ta có x = 10; y = 20; z = 30; Hãy cho biết giá trị các biểu thức sau Viết chương trình
Trang 39BB
3 3
Bài tập
5 Nhập năm sinh của một người và tính tuổi của người đó.
6 Nhập 2 số a và b Tính tổng, hiệu, tính và
thương của hai số đó.
7 Nhập tên sản phẩm, số lượng và đơn giá Tính tiền và thuế giá trị gia tăng phải trả, biết:
a tiền = số lượng * đơn giá
b thuế giá trị gia tăng = 10% tiền
Các kiểu dữ liệu cơ sở
Trang 40BB
4 4
Bài tập
8 Nhập điểm thi 3 môn Toán, Lý, Hóa của một
sinh viên Tính điểm trung bình của chúng.
9 Nhập bán kính của đường tròn Tính chu vi và diện tích của hình tròn đó.
Các kiểu dữ liệu cơ sở
Trang 41BB
4 4
int NamSinh, Tuoi;
printf(“Nhap nam sinh: ”);
Trang 42BB
4 4
int a, b, Tong, Hieu, Tich, Thuong;
printf(“Nhap hai so nguyen: ”);
scanf(“%d%d”, &a, &b);
Tong = a + b; Hieu = a – b;
Tich = a * b; Thuong = a / b;
printf(“Tong cua a va b: %d\n”, Tong);
printf(“Hieu cua a va b: %d\n”, Hieu);
printf(“Tich cua a va b: %d\n”, Tich);
printf(“Thuong cua a va b: %d\n”, Thuong); }
Trang 43BB
4 4
printf(“Nhap so luong va don gia: ”);
scanf(“%d%d”, &SoLuong, &DonGia);
Tien = SoLuong * DonGia;
VAT = Tien * 0.1;
printf(“Tien phai tra: %d\n”, Tien);
printf(“Thue phai tra: %.2f\n”, VAT);
}
Trang 44BB
4 4
printf(“Nhap diem Toan, Ly, Hoa: ”);
scanf(“%f%f%f”, &T, &L, &H);
printf(“Nhap he so Toan, Ly, Hoa: ”);
scanf(“%d%d%d”, &HsT, &HsL, &HsH);
DTB = (T * HsT + L * HsL + H * HsH) /
(HsT + HsL + HsH);
printf(“DTB cua ban la: %.2f\n”, DTB);
}
Trang 45BB
4 4
float R, ChuVi, DienTich;
printf(“Nhap ban kinh duong tron: ”);
scanf(“%f”, &R);
ChuVi = 2*PI*R;
DienTich = PI*R*R;
printf(“Chu vi: %.2f\n”, ChuVi);
printf(“Dien tich: %.2f\n”, DienTich);
}
Trang 46Bài 3: Cấu trúc điều khiển
Trang 47I Cấu trúc điều khiển if
1 Cấu trúc if dạng 1 (thiếu)
Ý nghĩa: bt là biểu thức lôgic, s là lệnh đơn hoặc lệnh phức nếu
bt nhận giá trị true thì thực hiện s, ngược lại s được bỏ qua
2 Cấu trúc if dạng 2 (đủ)
else s1 ;
Ý nghĩa: bt là biểu thức lôgic,
- nếu bt nhận giá trị true thì thực hiện s và bỏ qua s1,
- ngược lại nếu bt nhận giá trị flase thì thực hiện s1 và bỏ qua s(s và s1 có thể là lệnh đơn hoặc lệnh phức)
Chú ý : trong C cho phép sử dụng các cấu trúc if lồng nhau để giải
quyết bài toán
47
Trang 49Bài tập
1.Nhập 2 số thực a, b từ bàn phím Tìm và in ra màn hình số lớn nhất và số bé nhất.
2.Giải phương trình bậc nhất: ax+b=0; a,b nhập từ bàn phím
4 Viết chương trình nhập vào bán kính hình cầu, tính và in
ra diện tích, thể tích của hình cầu đó.
5 Viết chương trình nhập vào 2 số nguyên a, b Nếu a lớn
hơn b thì hoán đổi giá trị a và b, ngược lại không hoán đổi
In ra giá trị a, b.
49
Trang 50Bài tập (tiếp)
6 Viết chương trình nhập vào 2 số nguyên a, b In ra thông báo
"a lớn hơn b" nếu a>b, in ra thông báo "a nhỏ hơn b" nếu a<b, in
ra thông báo "a bằng b" nếu a=b
7 Viết chương trình nhập vào điểm của một học sinh In ra xếp loại học tập của học sinh đó
Cách xếp loại:
Nếu điểm >= 9, Xuất sắc
Nếu điểm từ 8 đến cận 9, Giỏi
Trang 51II Cấu trúc rẽ nhánh switch
Trang 52Ý nghĩa:
• Bt: là biểu thức toán học có giá trị kiểu nguyên
• Ni(i=1 k): là các số kiểu nguyên, kiểu hằng ký tự, hoặc biểu thức
• Si(i=1 k): là các lệnh đơn hoặc lệnh phức
• Giá trị bt = ni thì thực hiện câu lệnh si sau case ni;
• Để chương trình thoát khỏi lệnh switch sau khi thực hiện xong một trường hợp, ta dùng lệnh break
• default : gồm các câu lệnh thực hiện các trường hợp còn lại
52
Trang 53Ví dụ
{
int i;
System(“cls”); /* lệnh xóa màn hình trong thư viện windows.h*/
printf("Nhap vao so 1, 2 hoặc 3: ");
scanf("%d", &i);
switch(i)
{
case 3: printf("***"); break;
case 2: printf("**"); break;
case 1: printf("*"); break;
Trang 54Bài tập
1 Viết chương trình nhập vào từ bàn phím một mã số nguyên và
đưa ra đánh gía trình độ theo yêu cầu:
Trang 55Bài tập
2 Viết chương trình nhập vào tháng, in ra quý tương ứng
3 Viết chương trình nhập vào tháng, in ra tháng đó có bao nhiêu ngày
4 Viết chương trình nhập vào 2 số x, y và 1 trong 4 toán tử +, -, *, / Nếu là + thì in ra kết quả x + y, nếu là – thì in ra x –
y, nếu là * thì in ra x * y, nếu là / thì in ra x / y (nếu y = 0 thì thông báo không chia được)
5 Viết chương trình nhập vào điểm 3 môn thi: Toán, Lý, Hóa của học sinh Nếu tổng điểm >= 15 và không có môn nào dưới 4 thì in kết quả đậu Nếu đậu mà các môn đều lớn hơn 5 thì in ra lời phê "Học đều các môn", ngược lại in ra "Học chưa đều các môn", các trường hợp khác là "Thi hỏng"
55
Trang 56case '+': printf("%d + %d = %d", x, y, x+y);
case '-': printf("%d - %d = %d", x, y, x-y);
case '*': printf("%d * %d = %d", x, y, x*y);
Trang 57III Câu lệnh lặp for
bt3 : thường là lệnh gán có tác dụng làm thay đổi giá trị
57
Trang 58Hoạt động:
• Bước 1: Thực hiện bt1
• Bước 2: Tính toán, xác định giá trị của bt2
• Bước 3: Nếu bt2 có giá trị false thì thoát khỏi vòng lặp Ngược lại bt2 có giá trị true thì thực hiện câu lệnh S
• Bước 4: sau khi thực hiện S => thực hiện bt3 và quay lại bước 2
Trang 59Chú ý khi sử dụng vòng lặp for
• <bt1>, <bt2>, <bt3> đều có thể vắng mặt nhưng vẫn phải giữ lại dấu ( ; )
• Trường hợp đặc biệt <bt2> không có, thì luôn được xem là nhận
giá trị true, muốn thoát khỏi vòng lặp phải dùng lệnh break, goto hoặc return
• Có thể dùng cấu trúc các vòng for lồng nhau
• Khi gặp lệnh break thì chương trình sẽ thoát khỏi vòng for sâu nhất còn chứa lệnh break
• Trong vòng for có thể sử dụng lệnh continue để chuyển tới chu trình mới của vòng lặp
59
Trang 60Ví dụ/* Chuong trinh in ra cau "Vi du su dung vong lap for" 3 lần*/
Trang 61IV Câu lệnh while
- Bước 1: Xác định giá trị của bt Nếu giá trị của bt=
true(<>0) thì chuyển sang bước 2, ngược lại thì thoát khỏi vòng lặp
- Bước 2: Thực hiện S sau đó quay về bước 1(Lệnh S có
thể được thực hiện nhiều lần, hoặc không được thực hiện
lần nào nếu bt =false ngay từ đầu).
- Chú ý : trong câu lệnh lặp while => ta có thể dùng câu
lệnh break để thoát khỏi vòng lặp theo ý muốn
61
Trang 63V Câu lệnh do while
1 Cú pháp
do S;
while (bt) ;
Ý nghĩa: S là một câu lệnh đơn hoặc phức, bt là biểu
thức lôgic (hay còn gọi là điều kiện lặp)
Hoạt động:
thì chuyển sang bước (1), ngược lại thì thoát khỏi vòng lặp
lệnh
63
Trang 65So sánh các vòng lặp
- Vòng lặp for thường sử dụng khi biết được số lần lặp xác định
- Vòng lặp thường while, do…while sử dụng khi không biết rõ số lần lặp
- Khi gọi vòng lặp while, do…while: Nếu biểu thức sai vòng lặp while sẽ không được thực hiện lần nào nhưng vòng lặp do…while thực hiện được 1 lần
65