Tin học cơ sở 3 (NGÔN NGỮ LẬP TRÌNH C)
Tài li uệ ậ ậ
t,
• Ph m Văn ạ
ậ ả
ơ ở Ấ K thu t l p trình C C s i,
ỹ và nâng cao, NXB Giao thông V n t 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
ổ
ữ ậ
ể
ặ
ề Bà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 ữ ườ
t ch Hoa – ch th
bi
ộ
ệ – M t ch ộ ặ
ữ ươ ề
ấ ng. ồ ờ cũng g m m t ng trình C bao gi ờ ho c nhi u hàm và các hàm r i nhau.
3
ướ
ẫ
ườ
ế ợ
I. H ng d n cài đ t môi tr
ng k t h p Dev C
ặ
ặ ả ạ
1. Download b n Dev C++ 4.9.9.2 full 2. Cài đ t: ặ Ch y file cài đ t DEVC++ (file
devcpp.exe)
3. Vào menu "Tools" ch n "ọ Compiler Options".
Linker"
ấ ổ
Vào tab "Settings" tab, nh n vào " ố ở khung bên trái và thay đ i thông s "Generate debugging information" sang "Yes": Nh n ấ OK
4
ẫ ử ụ
ướ
ươ
ế ợ
II. H ng d n s d ng môi tr
ng k t h p Dev C
ớ File > New > Source File
ở ộ 1. Kh i đ ng ở 2. M File ở ở
M file m i : M file đã có:
File > Open
1. Ghi File
ớ
ệ
ạ
ả
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
ạ
ươ
ng trình
ộ ị
Execute\ Compile (Ctrl+F9) ươ Execute\ Run
ng trình:
ỏ
• Ch y m t ch – Biên d ch: – Th c thi ch ự (Ctrl+F10) • Thoát kh i Dev C ỏ – Thoát h n kh i C: ẳ
File \ Exit
6
ướ ậ
III. 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 IPO : InputPprocess ấ ) Output (Quy trình nh px lýxu t) ả
ậ
ư i pháp. (đ a ra thu t
Đ a ư ra gi
c 2:
ng trình)
ị
ằ
ươ ế ặ t ch c 3: Cài đ t. (vi ươ ng trình D ch ch c 4: ệ ứ ể Ch y kạ i m ch ng và hoàn thi n c 5: ề ố ệ ử ng trình. (th nghi m b ng nhi u s
• B ướ i)ả gi • B ướ • B ướ • B ướ ươ ch ệ li u và đánh giá)
7
ướ ậ
III. Các b
c l p trình
• Ví dụ
ậ
– Thu t toán gi ậ
ấ i PT b c nh t: ax + b = 0
ả ố ự
(a, b là các s th c).
Đầu vào: a, b thuộc R Đầu ra: nghiệm phương trình ax + b = 0
• Nếu a = 0
• b = 0 thì phương trình có nghiệm bất kì. • b ≠ 0 thì phương trình vô nghiệm.
• Nếu a ≠ 0
• Phương trình có nghiệm duy nhất x = -b/a
Sử dụng lưu đồ - sơ đồ khối
Bắt đầu
Đọc a,b
Đ
S
a = 0
Đ
S
b = 0
Tính x = -b/a
Xuất x
Xuất “Vô số nghiệm”
Xuất “Vô nghiệm”
Kết thúc
ử ụ
ả
ể ể
ượ
ễ
S d ng mã gi • Vay m n ngôn ng nào đó đ bi u di n ữ
ậ
thu t toán.
Đầu vào: a, b thuộc R Đầu ra: nghiệm phương trình ax + b = 0
If a = 0
If b = 0
Xuất “Phương trình vô số nghiệm”
Else
Xuất “Phương trình vô nghiệm”
Else
Xuất “Phương trình có nghiệm x = -b/a”
Bài t pậ
ị
ủ
ươ
ng
ổ ừ ề
ti n VND sang ti n USD. ể
ề ủ ọ
ồ
ươ
ng trình b c 2: ax
2 + bx + c = 0
ả ể
ố
Xác đ nh Input, Process, Output c a các ch trình sau: 1. Đ i t 2. Tính đi m trung bình c a h c sinh g m các môn Toán, Lý, Hóa. ậ i ph 3. Gi ố 4. Ki m tra 2 s a, b gi ng nhau hay khác nhau.
11
ớ
ữ ậ
i thi u ngôn ng l p trình C
IV. Gi 1. Các thành ph n c a NNLT C
ệ ầ ủ ự
ọ
+ * / = ( )
ố ặ
ệ
ệ
ư
t khác nh : . , ; : [ ] { } ? ! \ & | % # $,…
ừ
là các t
ể ử ụ
– T p các ký t ậ • Ch cái: A .. Z, a .. z ữ • Ch s ữ ố Ả ậ r p: 0..9 • Ký hi u toán h c : ệ • Ký t ự ạ g ch n i: _ • Các ký hi u đ c bi – T khóa ừ => Không th s d ng t
để đặt tên cho bi n, hàm, tên ch
ồ ạ ướ ạ i d
ữ dành riêng trong ngôn ng . ừ ế khóa i d ng hàm
, không t n t
ồ ạ ướ ạ i d
ương ủ i d ng th
trình con (t n t t c).ụ
• Char, do, int, float, for, do, While,…
ự
ộ
ữ ố
ư
ắ
các ch cái và các ch s , nh ng b t
dùng đ ch tên. ừ c t o thành t ữ
ể ỉ ữ ặ ấ
bu c ch đ u ph i là ch cái ho c d u _.
12
ả ủ
ộ
ự
i đa c a m t tên là 255 ký t
, và
không cho phép có
– Tên file (t p)ệ • Tên file là m t dãy ký t • Tên t p đ ệ ượ ạ ữ ầ ộ • S ký t ự ố ố t ắ
ả
kho ng tr ng.
• 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 – Tên cũng phân bi ữ ườ , do ữ ệ
t ch hoa ch th
ng
đó 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
ộ
ấ
V. C u trúc m t ch
ng trình trong NNLT
ươ ườ
ươ C ậ ng là t p h p
• M t ch ộ ng trình th ợ 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,
14
ư ệ ử ụ ể VD: ch d n ỉ ẫ #include đ khai báo s d ng th vi n.
Cấu trúc chương trình C
// Khai báo thư viện // Hàm chính
#include “…” int main() {
// Khai báo biến hàm
int x; int Nhap(); // Khai báo hàm … // Các lệnh
}
ừ include, stdio.h, void, main, printf,… ế ằ t b ng ch th
ỗ
ầ
ạ
ng. là chu i ỗ c n in ra "B n có
ể ế
t ch HOA, th
ng tùy
ý".
ệ
ế
ấ
ả
ấ
ế
ấ
ấ
ặ
, hay //
c bao b i c p
Chú ý: Các t ữ ườ ả ph i vi Chu i trong nháy kép ườ ữ th vi K t thúc câu l nh ph i có d u ch m ph 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 /* …. */ ả ặ Thân hàm ph i đ ở ặ { }. ả ượ
16
Ví dụ
#include
int main() {
int x, y, tong; printf(“Nhap hai so nguyen: ”); scanf(“%d %d”, &x, &y); tong = x + y; printf(“Tong hai so la %d”, tong); getch();
ớ
ữ ậ
ệ
Gi
i thi u ngôn ng l p trình C
}
ộ ố ư ệ
M t s th vi n trong Dev C
ẩ
ứ
ra màn hình.
ệ ệ
ế
ậ
ị
ồ
system(“cls”),…
ứ
ề
ỗ Char,…
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 ể + l nh scanf: dùng đ nh p giá tr vào cho bi n. ứ getch(), getche(), putch(), … conio.h : Ch a hàm 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: String.h: Ch a các hàm v chu i:
ớ
ữ ậ
ệ
Gi
i thi u ngôn ng l p trình C
&
VC
ữ ệ
ơ ở
ể Bài 2. Các ki u d li u c s
BB
C có 4 kiểu cơ sở như sau:
Kiểu số nguyên (int): giá trị của nó là các số
nguyên như : -2, 10,…
Kiểu số thực(float): giá trị của nó là các số
thực như 3.14, 29.12, -17.06, …
Kiểu logic(bool): giá trị đúng hoặc sai. Kiểu ký tự(char): 256 ký tự trong bảng mã
ASCII.
1919
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
ướ
ữ ệ
ơ ở
ủ
Kích th
ể c c a các ki u d li u c s
BB
2020
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
ể
1. Ki u Logic (bool)
BB
Đặc điểm
C ngầm định một cách không tường minh:
Ví dụ
1 > 2 => trả về (0, false), 1 < 2 => trả về (1, true)
2121
ữ ệ
ơ ở
ể
Các ki u d li u c s
• false (sai): giá trị 0. • true (đúng): giá trị khác 0, thường là 1.
&
VC
ự
ể 2. Ki u ký t
(char)
BB
Đặ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
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’.
2222
ữ ệ
ơ ở
ể
Các ki u d li u c s
ký tự đó.
&
VC
3. Bi nế
BB
Cú pháp khai báo biến
2323
ữ ệ
ơ ở
ể
Các ki u d li u c s
Ví dụ int i; int j, k; char dem; float ketqua, delta;
&
VC
ố
ằ 4.H ng s
BB
Cú pháp khai báo
2424
ữ ệ
ơ ở
ể
Các ki u d li u c s
Ví dụ int a = 1506; float d = 15.06;
&
VC
ố
ằ 4.H ng s
BB
Cú pháp định nghĩa
#define
//hoặc
2525
ữ ệ
ơ ở
ể
Các ki u d li u c s
Ví dụ #define MAX 100 #define PI 3.14 const int MAX = 100; const float PI = 3.14;
&
VC
ứ
ể 5. Bi u th c
BB
Khái niệm
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...
Ví dụ
2 + 3, a / 5, (a + b) * 5, …
2626
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
ử
a. Toán t
gán
BB
Khái niệm
Toán tử gán thường được sử dụng trong lập
trình. Dùng để gán giá trị cho biến.
Cú pháp
2727
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
ử
ọ
b. Các toán t
toán h c
BB Toán tử 1 ngôi
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.
Ví dụ
x = 10; y = x++; x = 10; y = ++x;
// y = 10 và x = 11 // x = 11 và y = 11
2828
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
ử
ệ
ườ
ớ
c. Các toán t
quan h (th
ng đi v i if)
BB
Các toán tử quan hệ
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)
==, >, <, >= , <=, != VD: if (a==b)
Ví dụ
s1 = (1 == 2); s3 = (1 > 2); s5 = (1 < 2);
s2 = (1 != 2); s4 = (1 >= 2); s6 = (1 <= 2);
2929
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
ử
d. Các toán t
logic
BB
Các toán tử Logic
Tổ hợp nhiều biểu thức quan hệ với nhau. && (and), || (or), ! (not)
0
1
0
1
||
&&
0
0
0
0
0
1
1
1
0
1
1
1
Ví dụ
3030
ữ ệ
ơ ở
ể
Các ki u d li u c s
• s1 = (1 > 2) && (3 > 4); • s2 = (1 > 2) || (3 > 4); • s3 = !(1 > 2);
&
VC
5. Câu l nhệ
BB
Khái niệm
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.
Ví dụ sau cho kết quả như nhau
a=2912; a = 2912; a = 2912;
3131
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
ế
ệ 5. Câu l nh (ti p)
BB
Phân loại
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à }
Ví dụ
a = 2912;
// Câu lệnh đơn
// Câu lệnh phức/khối lệnh
{
a = 2912; b = 1706;
}
3232
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
a. Câu l nh ệ
xu tấ
BB Câu lênh xuất thuộc thư viện stdio.h
#include
Cú pháp
printf(
- 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.
3333
đượ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ự.
&
VC
ả
ả
ặ ả
B ng mô t
các đ c t
BB
Đ c tặ ả
Ý nghĩa
Ki uể
ấ
ố
%c : %d, %ld : %f, %lf : %s : %u :
Ký tự ố S nguyên ố ự S th c ự ỗ Chu i ký t S nguyên không d u
char int, long float, double char, string unsigned
3434
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
ỗ ị
ạ
Chu i đ nh d ng
BB
Ví dụ
int a = 10, b = 20; printf(“%8d”, a); Xuất ra 10 và có 8 ô nhớ để lưu a. printf(“%d và %d”, a, b); Xuất ra “10 và 20”
float x = 15.06567; printf(“%10.2f”, x); Xuất ra 15.06, có 10 ô nhớ chứa
x, lấy sau dấu phẩy 2 số.
3535
ữ ệ
ơ ở
ể
Các ki u d li u c s
printf(“%.2f”, x); Xuất ra 15.06
&
VC
b. Câu l nh ệ
nh pậ
BB
Câu lênh nhập thuộc thư viện stdio.h
#include
Cú pháp
scanf(
có các đặc tả.
Các đối số: là tên các biến sẽ chứa giá trị nhập và
3636
ữ ệ
ơ ở
ể
Các ki u d li u c s
được đặt trước bởi dấu &
&
VC
ệ
ậ
Câu l nh nh p
BB
Ví dụ, cho a và b kiểu số nguyên
// Nhập giá trị cho biến a
scanf(“%d”, &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
// Thiếu dấu &
// a là biến kiểu số nguyên
3737
ữ ệ
ơ ở
ể
Các ki u d li u c s
• scanf(“%d”, a); • scanf(“%d”, &a, &b);// Thiếu %d cho biến b • scanf(“%f”, &a); • scanf(“%9d”, &a); // không được định dạng • scanf(“a = %d, b = %d”, &a, &b”);
&
VC
Bài t pậ
BB
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 kiểm tra. Bt1 = 2*(x – y++) + z*(++z – x*y); Bt2 = (--x + --y + z--) * 2 + ++y*2; Bt3 = (x << 2) + (y | 3 + z | 8) + 2; Bt4 = ((x == y) && (x != z))
3838
&
VC
Bài t pậ
BB
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. b.
tiền = số lượng * đơn giá thuế giá trị gia tăng = 10% tiền
3939
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
Bài t pậ
BB
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 đó.
4040
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
Bài t p 5ậ
BB
#include
#include
int main() {
int NamSinh, Tuoi; printf(“Nhap nam sinh: ”); scanf(“%d”, &NamSinh); Tuoi = 2014 – NamSinh; printf(“Tuoi cua ban la %d\n”, Tuoi); getch();
}
4141
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
Bài t p 6ậ
BB
#include
#include
int main() {
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);
}
4242
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
Bài t p 7ậ
BB
#include
#include
int main() {
int SoLuong, DonGia, Tien; float VAT;
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);
}
4343
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
Bài t p 8ậ
BB
#include
#include
int main() {
float T, L, H, DTB; int HsT, HsL, HsH; 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);
}
4444
ữ ệ
ơ ở
ể
Các ki u d li u c s
&
VC
Bài t p 9ậ
BB
#include
#include
#define PI 3.14
int main() {
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);
}
4545
ữ ệ
ơ ở
ể
Các ki u d li u c s
ể
ề
Bài 3: C u trúc đi u khi n
ệ
ấ ố ệ
• Câu l nh, kh i l nh
ự
ệ
ệ
ệ
ệ
ỗ
ộ
– Câu l nh: m i câu l nh th c hi n m t công vi c
ượ ế
ở ấ
và đ
c k t thúc b i d u ;
ắ ầ
ố ệ
ệ
ậ
ằ
ợ
– Kh i l nh: là t p h p các câu l nh b t đ u b ng
ế
ấ
ằ
ấ d u “{“ và k t thúc b ng d u “}”
46
ấ
ề
ể
ấ
I. C u trúc đi u khi n if ạ
1. C u trúc if d ng 1 (thi u)
ế if (bt) ứ ể
i s đ s ; ệ ơ ệ s, ng ị true thì th c hi n
Cú pháp: ứ ặ ệ Ý 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 c b c l qua ấ ạ
Cú pháp:
ủ 2. C u trúc if d ng 2 (đ ) if(bt) s; else
s1 ;
ứ
ị true thì th c hi n s
ệ ậ
ể Ý nghĩa: bt là bi u th c lôgic, ậ i n u ể ơ
Chú ý : trong C cho phép s d ng các c u trúc ự ế ỏ ệ và b qua s1 , n u bt nh n giá tr và b ỏ ự ị flase thì th c hi n s1 ượ ạ ế bt nh n giá tr c l ng ứ ặ ệ ệ qua s(s và s1 có th là l nh đ n ho c l nh ph c) ể ồ ấ ử ụ if l ng nhau đ
47
ả ế gi i quy t bài toán
Ví dụ
{ int a, b; printf("Nhap vao so a: "); scanf("%d", &a); printf("Nhap vao so b: "); scanf("%d", &b); if (a>b)
printf("a lon hon b.\n"); else if (a
48
getch(); }
ự ố
Bài t pậ ừ bàn phím. Tìm và in ra màn hình ấ
ấ
ậ
ấ ươ
ậ ừ
i ph
ng trình b c nh t: ax+b=0; a,b nh p t
bàn
2+bx+c=0.
ươ ươ
ả ế
ầ
ể
ủ hình c u đó.
ươ
ế
i ph t ch ệ t ch
ớ ổ
ậ ị
ị
ố ậ 1.Nh p 2 s th c a, b t ố ớ s l n nh t và s bé nh t. ả 2.Gi phím ậ 3. Gi ng trình b c hai: ax ậ 4. Vi 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 ế ố 5. Vi 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 i không hoán đ i. c l In ra giá tr a, b.
49
ậ
Bài t p (ti p)
ậ ố ế ươ
ỏ ơ ế
ế ng trình nh p vào 2 s nguyên a, b. In ra thông báo ế a>b, in ra thông báo "a nh h n b" n u a
ằ ế .
ộ ọ ủ ế ươ ng trình nh p vào đi m c a m t h c sinh. In ra
ỏ
50
t ch 6. Vi ơ ớ "a l n h n b" n u in ra thông báo "a b ng b" n u a=b ể ậ 7. Vi t ch ế ạ ọ ậ ủ ọ 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. ế ế ậ ừ ể i. N u đi m t 8 đ n c n 9, Gi ế ế c n 8, Khá. ừ ể ậ 7 đ n N u đi m t ế ế ậ ừ ể 6 đ n c n 7, TBKhá. N u đi m t ế ậ ừ ể ế 5 đ n c n 6, TBình. N u đi m t ế ạ i là Y u. Còn l
ấ
ẽ II. C u trúc r nhánh switch ổ
ấ 1. C u trúc t ng quát Cú pháp:
switch (bt) { case n1 : s1;
break;
case n2 : s2; break; ....
case nk : sk; break;
ể ặ default : printf(“Ko biet doc”); // có th có ho c không
51
}
ứ
ể
ị ể ể
ằ
ự
,
Ý 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 sau case ni; ự
ng trình thoát kh i l nh switch sau khi 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 ự • Đ ch ể ươ ệ
ệ ỏ ệ ợ
ộ ườ
ệ
hi n xong m t tr
ồ
ng h p, ta dùng l nh break. ườ
ự
ệ
ệ
ợ ng h p
• default : g m các câu l nh th c hi n các tr
còn l
i.ạ
52
Ví 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; } printf("An phim bat ky de ket thuc!\n"); getch(); }
53
Bài t pậ ừ
ộ ố 1. Vi bàn phím m t mã s nguyên
ầ ng trình nh p vào t ộ
ươ t ch ư ộ ơ ấ 1: trình đ s c p ấ ộ 2 : trình đ trung c p ộ ạ ọ 3: trình đ Đ i h c ọ ộ 4: trình đ Cao h c ộ ế ỹ 5: trình đ Ti n s
ị
ế ậ và đ a ra đánh gía trình đ theo yêu c u: – – – – – – Các s khác: Không xác đ nh ậ ố ộ ố ự ọ ủ ố nhiên, in ra màn hình tên g i c a s trên
54
Nh p vào m t s t lên màn hình.
Bài t pậ
ươ ứ ng ng.
ậ ậ ươ ươ ng trình nh p vào tháng, in ra quý t ng trình nh p vào tháng, in ra tháng đó có bao
ậ t ch
ươ ế ố ng trình nh p vào 2 s x, y và 1 trong 4 toán t ả ế
ế ế
ượ
ể
ể
ả ậ ậ
ế ờ ượ ạ c l
ườ ư ề ợ
55
ế t ch 2. Vi ế t ch 3. Vi nhiêu ngày. ử ế 4. Vi ế +, , *, /. 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 c). thì thông báo không chia đ ế ậ ươ t ch 5. Vi 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 ọ ề ơ ớ i in i phê "H c đ u các môn", ng l n h n 5 thì in ra l ọ ng h p khác là "Thi ra "H c ch a đ u các môn", các tr ỏ h ng".
ố ậ
ệ
56
ử
{ int x,y; char t; Nh p vào 2 s x,y; ị fflush(stdin); dùng tránh b trôi l nh; ậ printf(“Nh p vào toán t t: +, ,* , / “); scanf("%c", &t); switch(t) { case '+': printf("%d + %d = %d", x, y, x+y); case '': printf("%d %d = %d", x, y, xy); case '*': printf("%d * %d = %d", x, y, x*y); case '/': {if(y!=0) printf("%d / %d = %.2f", x, y, (x/y)); else printf("Ko chia dc do y =0"); }} getch(); }
ặ
ệ III. Câu l nh l p for
1. Cú pháp:
for(
ặ ệ ộ ệ
ở ạ
ườ
ề
ế
ơ ng là m t l nh gán kh i t o cho bi n đi u
Ý nghĩa: S là l nh đ n ho c l nh ph c ứ ệ bt1 : th
khi n (ể i=0).
ị ủ
ứ
ể
ể
bt2: là bi u th c logic, giá tr c a bi u th c lôgic này ế ụ
ế ị
ế
ặ
ứ quy t đ nh vòng l p ti p t c hay k t thúc (
ệ
i ị
ụ
ng là l nh gán có tác d ng làm thay đ i giá tr bt3: th
ườ
ề
ế
ủ
c a bi n đi u khi n ( ể i++) 57 ệ bt1 ị ặ ị ủ bt2
ế bt2 có giá tr ị false thì thoát kh i vòng l p. ự ệ ỏ
ệ Ng 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 i ệ
ệ S => th c hi n bt3 và quay l ỉ ượ ắ ầ ộ ầ ự ệ ấ c th c hi n duy nh t m t l n khi b t đ u vòng ướ
ướ
c 2.
b
ậ
Nh n xét:
l pặ ể ượ ệ ặ ự 58 ề ầ
nhi u l n . ử ụ ặ ể ắ ư ề ặ ả ẫ Chú ý khi s d ng vòng l p for
• ; )
ợ ệ ậ l
• Tr ạ ấ
i d u (
ườ
ng h p đ c bi
ị ặ
ố t ỏ
giá tr true, mu n thoát kh i vòng l p ph i dùng l nh
ặ
goto ho c return ấ ồ ể
ặ ệ ươ ẽ ỏ ng trình s thoát kh i vòng for sâu ứ ệ ấ • Có th dùng c u trúc các vòng for l ng nhau
• Khi g p l nh break thì ch
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 59 ớ ủ ể ử ụ
ặ
trình m i c a vòng l p Ví dụ
/* Chuong trinh in ra cau "Vi du su dung vong lap for" 3
l n*/ầ
#include 60 1. Cú pháp : While (bt)
S;
ể ề ệ ọ ộ ệ ứ
ặ ệ Ý nghĩa: bt là bi u th c lôgic (hay còn g i là đi u ki n
ộ
l p),ặ S là m t l nh ho c m t dãy l nh ạ ộ
Ho t đ ng
ướ ể ế
ị ủ bt. N u giá tr c a
ng c l ị ủ bt=
ượ ạ thì thoát
i c 2, ệ
ượ c 1(L nh S có
ự
c th c ế ề ướ
ặ
ề ầ ho c không đ
ừ ầ ).
đ u ệ ặ while => ta có th dùng câu 61 ặ ị
B c 1: Xác đ nh giá tr c a
ướ
true(<>0) thì chuy n sang b
ỏ
ặ
kh i vòng l p
ệ S sau đó quay v b
ự
ướ
B c 2: Th c hi n
ể ượ
ệ
ự
th đ
c th c hi n nhi u l n,
ệ ầ
hi n l n nào n u bt =false ngay t
ể
Chú ý : trong câu l nh l p
ố
ỏ
ể
ệ
l nh break đ thoát kh i vòng l p theo ý mu n Ví dụ 62 /* Chuong trinh tính tong cac so nguyen tu 1 den n */
#include V. Câu l nh do.. while 1. Cú pháp do S;
while (bt);
ộ ơ ặ ứ bt là bi u ể ề ệ ặ ự ệ ệ S ỏ ế
ị ủ bt. N u giá tr c a
ượ ạ
ướ
c l
c (1), ng ị ủ bt = true
i thì thoát kh i ượ ệ ầ ự ấ
c th c hi n ít nh t 1 l n trong câu S luôn đ 63 Ví dụ /* Chuong trinh kiem tra mat khau */
#include 64 ườ ử ụ ế ượ ố ầ ặ ng s d ng khi bi c s l n l p xác t đ Vòng l p ặ for th ị
đ nh. ặ ử ụ ế Vòng l p th ườ while, do…while s d ng khi không bi ng 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 65 ệ ượ ự do…while th c hi n đ ầ
c 1 l n. ế ươ ố ủ 1. Vi t ch ng trình tính t ng c a n s đ u tiên c a dãy s sau: ớ bàn phím. ậ ừ
ủ ố ế
ế ươ 2. Vi
3. Vi d ng đ u ầ ậ ừ ố ẻ ừ t 1 đ n ế n. ế
4. Vi
ớ ươ
ng các s l
ấ ươ
t ch
ươ
t ch
ớ
tiên. V i n nh p t
ươ
t ch
V i n nh p t ậ ừ
bàn phím (hàm mod là d u %).
ẽ ữ ậ ặ
ậ ế ố 5. Dùng d u * v hình ch nh t đ c.
6. Vi ng trình nh p vào N s nguyên, đ m xem có bao nhiêu s âm, bao nhiêu s d 7. Vi bàn phím có 66 ế
ả ố ấ
ươ
t ch
ố
ươ
t ch
ố
ph i là s nguyên t ế
ố ươ
ố không.
ng và bao nhiêu s
ậ ừ
ố
ể
ng trình ki m tra s nguyên n nh p t
hay không. int main()
{
int n, i;
bool SNT = false;
printf("\nNhap vao N: ");
scanf("%d",&n);
if (n > 1)
{
SNT = true;
for (i = 2; i <= n/2; i++)
if(n % i == 0)
{
SNT = false;
break;
}
} 67 if (SNT == true)
printf("%d la so nguyen to!",n);
else
printf("%d khong la so nguyen
to.");
return 0;
} Bài 4: Hàm và ch ng trình 1. Khái ni m ệ ươ ươ ề ặ ộ ồ ng trình C bao g m m t ho c nhi u Ch ng trình ộ
: M t ch ủ ắ ầ ộ ươ hàm. Hàm main() là thành ph n b t bu c c a ch ng trình. ươ ắ ầ ệ ừ ự ủ ệ ầ Ch ng trình b t đ u th c hi n t câu l nh đ u tiên c a hàm ủ ặ ố ế
main( ) cho đ n khi g p d u ấ } cu i cùng c a hàm này. ạ ươ ộ ậ ự ệ ẹ ọ ng trình đ c l p th c hi n tr n v n ộ
Hàm: Là m t đo n ch ả ề ộ ệ ồ ộ ị ươ ọ m t công vi c r i tr v m t giá tr cho ch ng trình đã g i nó. ủ ể ặ Đ c đi m c a hàm: 68 ị ộ ậ ủ ộ ơ ươ – Là m t đ n v đ c l p c a ch ng trình. ự ộ ộ – Không cho phép xây d ng m t hàm bên trong m t hàm khác. ệ Đầu vào 1 Tên hàm Đầu vào 2 Đầu ra (nếu có) Đầu vào n Các công việc
sẽ thực hiện ầ ầ
– Tên hàm.
– Hàm s th c hi n công vi c gì.
ệ
ẽ ự
– Các đ u vào (n u có).
ế
ầ
– Đ u ra (n u có).
ế ầ t hàm ằ ọ • Lý do c n vi
Cho phép s d ng hàm ả ế
ở
ử ụ
ầ
hàm (không c n ph i vi ỗ
ề
nhi u ch khác nhau b ng cách g i
ế ạ
t l
i hàm) ự ắ ầ ồ ộ M t hàm g m có các thành ph n 2. Quy t c xây d ng hàm: sau: ẫ ủ Bao g mồ Khái báo nguyên m u c a hàm: ủ ố ể ấ ả ủ ẫ T t c nguyên m u c a các hàm (khác hàm main()) có ươ ặ ướ ế trong ch ng trình nên đ t tr c hàm main(), n u hàm ượ ế đ c vi t sau hàm ầ
main() thì không c n khai báo nguyên 70 m u.ẫ Ngôn ngữ lập trình C 71 ể ả ề ố ố ố ế ụ ộ ệ ị } ể char, int, long, float, ki u tr v :
ế ấ ỳ ủ
…). N u không tr v thì là void ể
ả ề ki u b t k c a C (
ả ề
ố ố là các đ i s đ ố ố ượ ấ ừ ỗ
ch c l y t ds tham s hay đ i s :
ố 72 khác (hàm khác: VD hàm main( )). ị ị
ế
ế ề
ề ị ố
Ki u tham s :
ị
ề
+ Tham tr : truy n theo giá tr .
ỉ
+ Tham bi n : truy n theo đ a ch
ỉ
+ Tham chi u : truy n theo đ a ch d ng giá tr ị. ứ ể ằ ỉ ẽ ậ ư hàm ch s nh n ề
ể
giá trị. ị ủ ầ ổ không có nhu c u thay đ i giá tr c a tham – Đ c s d ng khi
ượ ử ụ
ệ ự
số sau khi th c hi n hàm. ế ị ố địa chỉ (con tr ).ỏ ề ố ầ
nhu c u thay ị ủ
đổi giá tr c a tham s ố ệ Hàm ế ề ở ạ ị ượ d ng đ a ch ỏ
ỉ (con tr ). Đ c ượ
ượ ử ụ ố
ổ ầ ủ c. Truy n Tham chi u
– Truy n đ i s cho hàm
ố ố
ề
ằ & trong khai báo.
ắ ầ
b t đ u b ng
– Không đ
ề
c truy n giá tr
– Đ c s d ng khi ị cho tham s này.
có nhu c u thay đ i giá tr ố
ị c a tham s ệ ự
sau khi th c hi n hàm. Hàm • Lưu ý ề ể ề ộ ố – Trong m t hàm, các tham s có th truy n theo nhi u ộ ị ủ cách.
– S d ng
ử ụ ố ử ụ ộ ố ạ Hàm ề để tr v giá tr c a
ả ề
tham chi u ế là m t cách
giá tr ị c a ủ
hàm cho chương trình. Mu n s d ng các
HÀM sau khi ch y HÀM cho m t s hàm khác =>
ế .
dùng truy n tham chi u ); a,b được lấy từ hàm main
=> truyền vào đối số của
hàm HoanVi #include int tam; tam = a;
a = b;
b = tam;
printf("\sau khi hoan vi
ta co x=%d , y=%d",a,b);
return 0;
} Hàm 79 • Ví d 1ụ không có Hàm • Ví d 2ụ m t s nguyên có giá tr : s= x + y Hàm • Ví d 3ụ không có không có Hàm ế 1. Vi t hàm tính n! ế ổ 2. Vi t hàm tính t ng S = 1+2+….+n. ế 3. Vi t hàm tính n!+m! 3+y3. v i x,y nh p t ớ 4. Vi ố 83 ăng d n.ầ
ươ i ph
i ph
ế
ổ ế
ế
ế
ế ẻ ố ế
5. Vi
6. Vi
7. Vi
8. Vi ậ ừ
bàn phím.
t hàm tính S=x
ấ
ậ
ương trình b c nh t.
ả
t hàm gi
ậ
ương trình b c hai.
ả
t hàm gi
ắ
t hàm s p x p 4 s nguyên t
t hàm tính t ng các s nguyên d ng l . Bài 5: M ngả • Ví dụ ố – Chương trình c n lầ ưu tr ữ 3 s nguyên? => Khai báo 3 bi n ế int a1, a2, a3;
ố ể ố
ố ố – Chương trình c n lầ ưu tr ữ 100 s nguyên?
ế
=> Khai báo 100 bi n ki u s nguyên!
ậ n s nguyên? ự ệ được! • Gi – Người dùng mu n nh p
=> Không th c hi n
ả
i pháp
ả ố – M ng cho phép ữ ộ
lưu tr m t dãy các s nguyên và ễ
d dàng 84 truy xu tấ . ợ 1. Khái ni m:ệ
• M ng đ
ượ
ả ộ ậ
ằ ế có cùng ki u d li u n m liên ti p nhau ả ầ ữ
ể ữ ệ ủ ả trong m ng ướ ủ ố ị
ể
c hi u là m t t p h p các giá tr
ể ữ ệ
• M ng có nh ng thành ph n sau:
– Ki u d li u c a các ph n t
ầ ử
– Tên m ngả
– S chi u và kích th
ề ề
ỗ
c c a m i chi u 85 2. Cách khai báo bi n m ng VD: ả ầ ử ể ố ki u s nguyên ầ ử ồ ộ // M ng 2 chi u B g m 2 hàng và 3 c t, các ph n t có int A[10];
ồ
ề
//m ng 1 chi u A g m 10 ph n t
float B[2] [3];
ề
ả
ể ố ự
ki u s th c 86 c a m ng 0 1 2 3 a 2912 1706 1506 1904 0 1 2 3 a 2912 1706 0 0 ề ả ộ
M ng m t chi u m ng 3. Cách t
• ị
ả
ướ ủ ả
ầ
ượ ả c c a m ng • ậ ị &tên_bi n[ế i] ỉ ố ủ ầ ử • trong đó i là ch s c a ph n t
VD: b= &a[0]
ỉ ớ ị ầ ử ầ ủ ả ỉ
i đ a ch ph n t ả
//Tên m ng ch t đ u tiên c a m ng 88 89 int a[5], b[5];
b = a;
// Sai
for (int i = 0; i < 3; i++)
b[i] = a[i]; // đúng 90 c a m ng //in các ph n t
for(i=0;i //Tinh tong gia tri cac phan tu
for(i = 0; i < n; i++)
sum = sum + a[i]; //cong don tung phan tu vao sum
printf("Trung binh cong: %.2f \n", (float) sum/n);
getch();
} 91 int NhapMang(int a[], int &n); // Khai báo mẫu int XuatMang(int a[], int n); int main() { int a[100], n; NhapMang(a, n); // gọi hàm NhapMang ề ả ộ
M ng m t chi u XuatMang(a, n); // gọi hàm XuatMang } • Vi ề ả ộ
M ng m t chi u • Yêu c uầ • Ý tưởng ậ – Cho phép nh p m ng ả a, s lố ượng n ph n tầ ử ố ượng ph n t ủ ả
ầ ử MAX.
là
ầ ử ự ự c a m ng. th c s n ầ ử ậ ừ ả – Cho trước m t m ng có s l
ộ
– Nh p ậ s lố ượng ph n t
– Nh p t ng ph n t ả
ừ ỉ ố 0 đến n – 1. ch s cho m ng t ề ả ộ
M ng m t chi u ề ả ộ
M ng m t chi u • Yêu c uầ – Cho trước m ng ả a, s lố ượng ph n t ấ ộ
ầ ử n. Hãy xu t n i • Ý tưởng dung m ng ả a ra màn hình. ị ừ ầ ử ủ ả – Xu t giá tr t ng ph n t c a m ng t ừ ỉ ố 0 đến ch s ấ
n1. ề ả ộ
M ng m t chi u ề ả ộ
M ng m t chi u • Yêu c uầ ằ ầ ử x có n m trong m ng ả a kích thước n • Ý tưởng – Tìm xem ph n t
ế ằ ở ị hay không? N u có thì nó n m v trí nào. ừ – Xét t ng ph n c a m ng ế
ả a. N u ph n t ả ề ị đó. N u không tìm ầ ử đang xét b ng ằ
được thì tr v ả ề 1. ầ ủ
x thì tr v v trí
ị ế
v trí = 1 ề ả ộ
M ng m t chi u ề ả ộ
M ng m t chi u • Yêu c uầ ầ ử ị ớ ấ – Cho trước m ng ả a có n ph n t . Tìm giá tr l n nh t trong a (g i là ọ max) ị s giá tr ị max hi n t ệ ạ là giá tr ph n t ầ ử đầu tiên i a[0] ầ ử – L n lầ ượt ki m tra các ph n t
ể còn l ậ
ạ để c p nh t ậ max. i ề ả ộ
M ng m t chi u ề ả ộ
M ng m t chi u • Yêu c uầ ắ ế – Cho trước m ng ả a kích thước n. Hãy s p x p m ng ả a • Ý tưởng ầ ử đó sao cho các ph n t có giá tr ị tăng d nầ . – S d ng 2 bi n ế i và j để so sánh t ầ ử ị ử ụ
ớ
v i nhau và hoán v các c p ặ theo th t ấ ả ặ
t c c p ph n t
.ứ ự ề ả ộ
M ng m t chi u ề ả ộ
M ng m t chi u • Yêu c uầ • Ý tưởng ạ ị – Thêm ph n t ầ ử x vào m ng ả a kích thước n t i v trí vt. ạ ị ị ẩ ầ ử ắ đầu t
b t i v trí vt sang ph i ả 1 v trí . ị vt trong m ng.ả – “Đ y” các ph n t
– Đưa x vào v trí
– Tăng n lên 1 đơn vị. chèn? ề ả ộ
M ng m t chi u ề ả ộ
M ng m t chi u ầ ử ạ ị trong m ng ả a kích thước n t i v trí vt ầ ử ả ị ị bên ph i v trí vt sang trái 1 v trí . – “Kéo” các ph n t
– Gi m ả n xu ng ố 1 đơn vị. xóa? ề ả ộ
M ng m t chi u ề ả ộ
M ng m t chi u 1. Vi a. M ng có ph i là m ng toàn s ch n
b. M ng có ph i là m ng toàn s l ề ả ộ
M ng m t chi u 3. Nh p vào m ng s nguyên. Hãy tính t ng, 4. Nh p vào m ng s nguyên. Hãy: ề ả ộ
M ng m t chi u 5. Vi t ch ng trình nh p vào n s nguyên d ng. Hãy tìm ph n t l n nh t và bé nh t. ng, hãy 110 ắ ế ợ ầ G i ý s p x p tăng d n int main() { int a[100], i, j, n, temp; printf("Nhap so phan tu:"); scanf("%d",&n); for (i=0;i { printf("\nNhap a[%d]=",i); scanf("%d",&a[i]); 111 } printf("\n"); ắ ế
// s p x p for (i = 0; i < n 1; i++) for (j = i + 1; j < n; j++) { if (a[i] > a[j])
{ temp = a[i]; a[i] = a[j]; a[j] = temp; ể ọ
} // có th g i hàm hoanvi } for (j=0; j printf("\n %d ",a[j]); 112 getch(); } ề ng minh ng minh (thông đ nh nghĩa) ề ả M ng hai chi u • Thông qua ch sỉ ố • Ví dụ 0 1 2 3 0 – Cho m ng 2 chi u nh 1 2 ề ả M ng hai chi u • H p lợ ệ: a[0][0], a[0][1], …, a[2][2], a[2][3]
• Không h p lợ ệ: a[1][0], a[2][4], a[3][3] c s d ng phép gán thông
ng mà ph i gán tr c ti p gi a các • Ví dụ ề ả M ng hai chi u • Vi trong ma tr n ề ả M ng hai chi u ề ả M ng hai chi u • Yêu c uầ • Ý tưởng ậ – Cho phép nh p m ng ả a, m dòng, n c tộ ộ ề i ố đa là – Cho trước m t m ng 2 chi u có dòng t
ả
i MAXD, s c t t ố ộ ố đa là MAXC.
ầ ử ự ự ủ ề th c s m, n ỗ
c a m i chi u. ề ả M ng hai chi u ậ ừ – Nh p ậ s lố ượng ph n t
– Nh p t ng ph n t ầ ử ừ 0][0] đến [m1][n1]. t [ • Yêu c uầ • Ý tưởng ậ – Cho phép nh p m ng ả a, m dòng, n c tộ ấ ị ừ ả – Xu t giá tr t ng ph n t c a m ng 2 chi u t dòng ỗ ấ ề ừ
ị ủ ộ 0 ề ả M ng hai chi u ầ ử ủ
0 đến dòng m1, m i dòng xu t giá giá tr c a c t
đến c t ộ n1 trên dòng đó. ề ả M ng hai chi u • Yêu c uầ ằ – Tìm xem ph n t ầ ử x có n m trong ma tr n ậ a kích thước mxn hay không? ầ ủ
ả ề ế
ậ a. N u ph n t
ạ ả ề
ược l ầ ử đang
i tr v không có ề ả M ng hai chi u – Duy t t ng ph n c a ma tr n
xét b ng ằ x thì tr v có (1), ng
(0). ề ả M ng hai chi u s[100];
s[100]; char
char
unsigned char s1[1000];
unsigned char s1[1000]; 1. Khai báo theo m ngả
ế ề ế chi m 1 ô i đa]
ự
char Ten[12]; // 12 ô, m i ký t bàn phím ỗ ậ ử ụ ự ừ
t bàn phím, ta s d ng hàm ế ụ ỗ
gets(Ten); ứ ể ỗ ứ ỗ 125 ị ộ ậ ể ậ ụ
ỗ ừ ỗ
Ví d : Nh p vào m t chu i và hi n th trên màn hình
chu i v a nh p.
#include ệ ; gets(queQuan); char queQuan[15];
printf("Nhap Ten: "); fflush(stdin); gets(Ten);
printf("Nhap Que Quan: ");
ị
fflush(stdin); dùng tránh b trôi l nh
printf("Chuoi vua nhap: "); puts(Ten);
puts(queQuan);
getch();
return 0; 126 } ườ ủ ộ i, sau đó ụ
ả ọ ọ
ủ ọ M t s hàm x lý chu i (trong string.h)
C ng chu i Hàm strcat()
Ví d : Nh p vào h lót và tên c a m t ng
in c h và tên c a h lên màn hình.
#include printf("Nhap Ho Lot: ");gets(HoLot);
printf("Nhap Ten: ");gets(Ten);
strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/
printf("Ho ten la: ");puts(HoLot);
getch();
return 0; 127 } ị ộ ỗ ậ ừ 128 M t s hàm x lý chu i (trong string.h) Hàm ế đ u ệ ỗ ữ
ế ủ ự ộ ủ
ng c a cùng m t ký t So sánh 2 chu i ỗ strnicmp (s1, s2, n); so sánh n ký t
ự ầ
ữ
t ch hoa, ch
tiên c a chu i s1 và s2, không phân bi
ắ
ườ
(dùng khi s p x p tên theo
th
alphable) 129 ể ể ả ể ồ Khái ni mệ
Ki u c u trúc (ki u b n ghi)
ấ ữ ệ
là ki u d li u bao g m ể ề ầ ầ ỗ nhi u thành ph n có ki u khác nhau , m i thành ph n ượ ộ ườ ọ đ c g i là m t tr ng (field) . Các thành ph n ầ đ c ượ ậ truy nh p thông qua m t t ộ ên. ự ệ ữ ể ể ả ấ S khác bi t gi a ki u c u trúc và ki u m ng là: các ầ ử ủ ầ ử ủ ả ph n t c a m ng là cùng ki u ể còn các ph n t c a ể ấ ể ể
ki u c u trúc có th khác ki u nhau. ư ả ố M ng l u các s nguyên ư ả ả M ng l u các b n ghi 1 10/3/1999 Hà nội 8 7 9 Nguyễn Văn
B 2 Trần Văn C 20/10/1998 Hà nội 8 6 7 ườ ườ ng: ượ ộ ả
ph i là
ặ
c đ t theo ả ể ể ồ Đ qu n lý ngày, tháng, năm c a m t ngày
trong năm ta có th khai báo ki u c u trúc g m
3 thông tin: ngày, tháng, năm. struct NgayThang
{
int Ngay;
int Thang;
int Nam;
}; typedef struct
{
int Ngay;
int Thang;
int Nam;
} NgayThang; ỗ ả ở ọ ớ ố
ỉ ườ
ị
i tính, đ a ch th ể ồ ộ ầ ượ
M i sinh viên c n đ
c qu n lý b i các thông tin: mã s sinh
ng
viên, h tên, ngày tháng năm sinh, gi
trú. Lúc này ta có th khai báo m t struct g m các thông tin
trên. typedef struct
{
char MSSV[10];
char HoTen[40];
NgayThang NgaySinh;
int Phai;
char DiaChi[40];
} SinhVien; struct SinhVien
{
char MSSV[10];
char HoTen[40];
struct NgayThang NgaySinh;
int Phai;
char DiaChi[40];
}; CÁC THAO TÁC TRÊN BI N KI U C U TRÚC ườ ế ấ
Cú pháp: Ví d : ụ ế ươ Vi t ch ng trình ọ ữ
cho phép đ c d ừ ệ
li u t bàn phím #include ế ẩ cho bi n m u tin SinhVien và in ế ẩ bi n m u tin đó lên màn hình: {
int Ngay;
int Thang;
int Nam;
}NgayThang; typedef struct
{
char MSSV[10];
char HoTen[40];
NgayThang NgaySinh;
int Phai;
char DiaChi[40];
} sinhvien; ẩ int main()
{
SinhVien SV;
printf("Nhap MSSV: "); gets(SV.MSSV);
printf("Nhap Ho va ten: "); gets(SV.HoTen);
printf("Sinh ngay: "); scanf("%d",&SV.NgaySinh.Ngay);
printf("Thang: "); scanf("%d",&SV.NgaySinh.Thang);
printf("Nam: "); scanf("%d",&SV.NgaySinh.Nam);
printf("Gioi tinh (0: Nu), (1: Nam): "); scanf("%d",&SV.Phai);
fflush(stdin);
printf("Dia chi: "); gets(SV.DiaChi);
InSV(SV);
getch();
} Ví d 2ụ
Viết chương trình nhập danh sách học viên gồm các
trường họ tên, tuổi, điểm, và nhập vào một tên để tìm
kiếm tên này trong danh sách. #include typedef struct { char Ten[30];
int tuoi ;
float diem ;
} HV ; Ví d 2 (ti p) ọ ậ int nhap(HV hvs[], int &n)
{
int i ;
printf(“nhap vao so hoc sinh: “);
scanf(“%d”,&n);
for ( i = 0 ; i < n ; i++) // Nh p các h c viên
{
printf ("\n Nhap so lieu cho HV thu %d", i+1 ) ;
printf (" Ho va ten = " ) ;
gets( hvs[i].Ten);
fflush(stdin);
printf ("tuoi = ");
scanf ( "%d" , &hvs[i].tuoi);
fflush(stdin);
printf("diem = ");
scanf ("%f", &hvs[i].diem );
fflush(stdin);
} 141 int hienthi(HV hvs[], int n)
{
int i;
printf(“Danh sach hoc sinh vua nhap la: \n”);
for (i=1; i Ví d 2 (ti p) ệ int timkiem(HV hvs[ ], int n) Tim kiem ten, có n, và hvs phải lấy từ hàm main()
{ char tentim[30];
printf("Nhap vao ten can tim: ");
gets(tentim); fflush(stdin); // ch ng trôi l nh
ố
bool thay;
thay = 0 ; i = 0 ; /* thay = 0 : không thay, thay = 1 : tim thay */
while ((!thay)&&(i int sapxep(HV hvs[], int n)
{ int j;
HV tam;
// float diem1, diem2;
for ( i = 0 ; i < n ; i++)
{ for ( j =i+1 ; j < n ; j++)
{
if (hvs[i].diem > hvs[j].diem)
{ tam =hvs[i];
hvs[i] =hvs[j];
hvs[j]= tam;
}
}
}
} 144 int main()
{
int n;
HV hs[100];
nhap(hs,n);
hienthi(hs,n);
timkiem(hs,n);
sapxep(hs,n);
getch();
} scanf(“%d”, &chon);
switch(chon)
{ case 1: nhap(hs,n);
case 2: hienthi(hs,n);
case 3: timkiem(hs,n);
case 4: sapxep(hs,n);
}
getch();
} 145 Ho cặ
int main()
{
int n, chon;
Printf(“Hay nhap cac so sau de thuc
hien: \n”);
Printf(“ so 1: nhap\n”);
Printf(“ so 2: in danh sach vua nhap
\n”);
Printf(“ so 3: tim kiem ten trong
danh sach vua nhap \n”);
Printf(“ so 4: sap xep danh sach
vua nhap theo diem \n”); ề ồ ộ ể ủ ộ ớ
ỗ ả
ầ ử ấ ả
i ta dùng m t m ng 1 chi u g m
g m có: • Đ qu n lý h c sinh c a m t l p, ng
ọ
ủ
, c u trúc c a m i ph n t ́
́ có n ph n t
ọ
ọ ệ ̣ ự
ự ̣ ể
ể ̣ ̀
co đô da i 10 ky t
̀
co đô da i 20 ky t
́
̀
ự
co đô da i 10 ky t
́
̀
ự
co đô da i 10 ky t ớ
ể
ể
ể
ể ể ố ự ượ ằ ộ ườ
ầ ử ồ
• Mã h c sinh (MHS) ki u xâu ky t
́
́
ự
ể
• H đ m (HODEM) ki u xâu ky t
́
́
ể
ự
• Tên (TEN) ki u xâu ky t
́
́
ự
• L p (LOP) ki u xâu ky t
́
́
ự
• Đi m toán (TOAN) có ki u s th c
ể ố ự
• Đi m lý (LY) có ki u s th c
ể ố ự
• Đi m hóa (HOA) có ki u s th c
ể ố ự
• Đi m trung bình(DTB) có ki u s th c (đ c tính b ng trung bình c ng ể ủ
c a 3 đi m toán, lý, hóa) 147 ̣ ầ ậ ệ ệ ữ ợ
ọ . ể t ế hàm nhap() đ ể nh p ậ n h c sinh
ế ể ự
ầ
theo c u trúc trên
ậ ị ồ ộ ọ
ọ ừ
ọ ệ t hàm in() đ in ra danh sách các h c sinh v a nh p, m i h c
ể ể ế ế theo th ứ ế alphabet ừ ế ể ấ ả ề ọ ư ế ấ t hàm timkiemtenhs() đ tìm tên h c sinh trong danh sách v a
t c thông tin v h c sinh ư ự ế ế
ọ
t hàm main() ch a l ế ằ
Yêu c u : L p trình b ng ngôn ng C đ th c hi n công vi c sau:
ể ữ ệ
1.Khai báo ki u d li u phù h p theo đ u bài.
ấ
2.Vi
ỗ ọ
3.Vi
ớ
sinh hi n th trên m t dòng (g m: Mã h c sinh, h đ m, tên, l p,
ể
ể
ể
đi m toán, đi m lý, đi m hóa, đi m trung bình).
ủ ọ
ể ắ
t hàm sapxeptenhs() đ s p x p tên c a h c sinh theo
4.Vi
ừ ắ
ọ
ự
và in ra danh sách h c sinh v a s p x p.
t
ọ
5.Vi
ậ
nh p. N u tìm th y thì đ a ra màn hình t
ấ
này, n u không tìm th y thì đ a ra màn hình thông báo “không tìm
ậ
ừ
ấ
th y h c sinh có tên v a nh p trong danh sách”.
ứ ờ ọ ủ
i g i c a các hàm trên và cho phép l a
6.Vi
ớ
ề ầ
ọ
i khi muôn k t thúc.
ch n các hàm trên nhi u l n cho t 148 #include 149 void nhap(hs s[],int &n)
{
printf(" Nhap n = "); scanf("%d",&n);
for(int i=0;i 150 void in(hs s[],int n)
{
printf(" Mahs\tHodem\tTen\tLop\tToan\tLy\tHoa\tDiemtb\n");
for(int i=0;i 151 void sapxeptenhs(hs s[],int n)
{
int i,j;
hs tam;
for(i=0;i 152 153 void timkiemtenhs(hs s[],int n)
{ int i;
char ten[10];
printf(" \nNhap ten hoc sinh can tim :"); fflush(stdin); gets(ten);
bool thay; thay = 0; i=0;
while((!thay) && (i 154 int menu(void)
{
int c;
printf(" Nhap 1: nhap”);
printf(" Nhap 2: in”);
printf(" Nhap 3: sap xep”);
printf(" Nhap 4: tim kiem ten”);
printf(" Nhap 5: ket thuc”);
do
{
printf(" \nNhap ham can goi :");
scanf("%d",&c);
}
while((c<0) || (c>5));
return c;
} int main()
{
int n,c,i;
char ten[10];
hs s[200];
for( ; ; )
{
switch(menu())
{
case 1 : nhap(s,n); break;
case 2 : in(s,n); break;
case 3 : sapxeptenhs(s,n); break;
case 4 : timkiemtenhs(s,n); break;
case 5 : exit(0); break;
}
}
} 155ạ ộ
Ho t đ ng:
• B c 1: Th c hi n
ướ
ự
• B c 2: Tính toán, xác đ nh giá tr c a
ướ
• B c 3: N u
ướ
c l
ệ
IV. Câu l nh while
ệ
ệ
Ý nghĩa: S là m t câu l nh đ n ho c ph c,
ọ
ứ
th c lôgic (hay còn g i là đi u ki n l p)
ạ ộ
Ho t đ ng:
(1) Th c hi n l nh
ị
(2) Xác đ nh giá tr c a
ể
thì chuy n sang b
vòng l pặ
L nh ệ
l nhệ
So sánh các vòng l pặ
Bài t pậ
ố ầ
ủ
ổ
S = 1+1/2+1/3+1/4+...+1/n.
ng trình tính n!. V i n nh p t
ậ
ổ
ng trình tính t ng b c 3 c a N s nguyên
bàn phím.
ổ
ng trình tính t ng bình ph
ợ
G i ý bài 7
ươ
ướ
t hàm
ế
c vi
Các b
• C n xác đ nh các thông tin sau đây:
ị
ộ
ấ
ủ
C u trúc c a m t hàm
ề ố ố
3. Các cách truy n đ i s
ể
ề
ị
a. Truy n tham tr
– Truy n đ i s cho hàm
ở ạ
ố ố
– Có th truy n h ng, bi n, bi u th c nh ng
ế
ề
int TruyenThamTri(int x) x được nhập từ hàm khác
{
…
x++;
}
ề ố ố
3. Các cách truy n đ i s
ỉ
ề
b. Truy n Tham bi n – đ a ch
– Truy n ề đối s cho hàm
ở ạ
d ng
– Không được truy n giá tr
ị cho tham s này.
– Được s d ng khi có
ử ụ
ự
sau khi th c hi n hàm.
int TruyenDiaChi(int *x)
{
…
*x++;
}
ề ố ố
3. Các cách truy n đ i s
int TruyenThamChieu(int &x)
{
…
x++;
}
ề ố ố
ư
L u ý khi truy n đ i s
ờ ọ
ị
L i g i hàm (tham tr )
ố ố
ố ố ,… , <đ i s n>
int HoanVi(int a, int b)
{
int main()
{
int x,y;
printf("nhap x:");
scanf("%d",&x);
printf("nhap y:");
scanf("%d",&y);
HoanVi(x, y);
printf(“%d va %d”,x,y);
getch();
}
ờ ọ
ế
L i g i hàm (tham chi u)
int HoanVi(int &a, int
&b);
int HoanVi(int &a, int &b)
{
int tam;
tam = a;
a = b;
b = tam;
In giá trị a,b;
}
int main()
{
int x,y;
printf("nhap x:");
scanf("%d",&x);
printf("nhap y:");
scanf("%d",&y);
HoanVi(x, y);
printf("%d va %d",x,y);
getch();
}
Hàm
ấ ổ
ố
ố
– Tên hàm: XuatTong
– Công vi c: ệ tính và xu t t ng 2 s nguyên
– Đ u vào:
ầ
hai s nguyên x và y
– Đ u ra:
ầ
void XuatTong(int x, int y)
{
int s;
s = x + y;
printf(“%d cong %d bang %d”, x, y, s);
}
Hàm
ả ề ổ
ố
ị
– Tên hàm: TinhTong
– Công vi c: ệ tính và tr v t ng 2 s nguyên
– Đ u vào:
ố
ầ
hai s nguyên x và y
– Đ u ra:
ộ ố
ầ
int TinhTong(int x, int y)
{
int s;
s = x + y;
return s;
}
Hàm
ấ ổ
ố
ậ
– Tên hàm: NhapXuatTong
– Công vi c: ệ nh p và xu t t ng 2 s nguyên
– Đ u vào:
ầ
– Đ u ra:
ầ
void NhapXuatTong()
{
int x, y;
printf(“Nhap 2 so nguyen: ”);
scanf(“%d%d”, &x, &y);
printf(“%d cong %d bang %d”, x, y, x + y);
}
Bài t pậ
M ngả
10
15
16
18
2
6
ế
ả
ề ủ
ể
ả
ả
ở ạ
ả
ị
Kh i t o giá tr cho m ng lúc
khai báo
• G m các cách sau
ở ạ
ọ
ầ ử ủ
ả
ồ
– Kh i t o giá tr cho m i ph n t
ị
int a[4] = {2912, 1706, 1506, 1904};
int a[4] = {2912, 1706};
ầ ử ả
ấ ế
ổ ứ
ch c và truy xu t đ n ph n t
ượ
ỉ ố
ầ ử ủ
c xác đ nh thông qua ch s .
c a m ng đ
Ph n t
ộ ố
ử
ỉ ố ủ
trong m ng luôn là m t s
Ch s c a ph n t
nguyên không v
t qua kích th
ỉ
Cách truy c p theo đ a ch
ầ ử
ả
Gán ph n t
trong m ng
ấ
ậ ữ ệ
4. Cách xu t nh p d li u trên
m ngả
ụ
Ví d /* Tinh trung binh cong n so nguyen */
#include
ả
ầ ử ủ
• L i g i hàm
ờ ọ
ơ ả
ộ ố
ầ
ế
ả
ả
ộ
ế
ả
trong m ng
ấ ủ
ả
ắ ế
ầ ăng d nầ
ầ ử
ả
ộ
M t s bài toán c b n
ự
ệ ừ
t hàm th c hi n t ng yêu c u sau
– Nh p m ng
ậ
– Xu t m ng
ấ
– Tìm ki m m t ph n t
ầ ử
– Tìm giá tr nh nh t/l n nh t c a m ng
ị ỏ ấ ớ
– S p x p m ng gi m d n/t
ả
– Thêm/Xóa/S a m t ph n t
ử
ả
vào m ng,…
ậ
ả
Nh p m ng
n 1
0
1
2
MAX 1
3
…
…
…
Hàm Nhập Mảng
int NhapMang(int a[], int &n)
{
printf(“Nhap so luong phan tu n: ”);
scanf(“%d”, &n);//nếu để ở hàm main => ko cần &n
for (int i = 0; i < n; i++)
{
printf(“Nhap phan tu thu %d: ”, i);
scanf(“%d”, &a[i]);
}
}
int NhapMang(int a[], int &n);
int main()
{
int a[100], n;
NhapMang(a, n); Gọi hàm
}
ả
ấ
Xu t m ng
n 1
0
1
2
MAX 1
…
…
…
Hàm Xuất Mảng
int XuatMang(int a[], int n)
{
printf(“Noi dung cua mang la: ”);
for (int i = 0; i < n; i++)
printf(“%d ”, a[i]);
printf(“\n”);
}
ầ ử
ế
Tìm ki m m t ph n t
trong
ộ
m ngả
xx
n 1
0
1
2
MAX 1
…
…
…
aa
xx
bb
xx
Hàm Tìm Kiếm (dùng for)
int TimKiem(int a[], int n, int x)
{
for (int vt = 0; vt < n; vt++)
if (a[vt] == x)
return vt;
return -1;
}
ấ ủ
ị ớ
ả
Tìm giá tr l n nh t c a m ng
• Ý tưởng
– Gi
ả ử
7788
??
max
n – 1
0
1
2
MAX 1
…
…
…
77
22
88
88
Hàm tìm Max
int TimMax(int a[], int n)
{
int max = a[0];
for (int i = 1; i < n; i++)
if (a[i] > max)
max = a[i];
return max;
}
ắ ế
ầ
ả
S p x p m ng tăng d n
88
55
t mạ
n – 1
0
1
MAX 1
22
…
…
…
11
55
55
11
66
88
88
66
j
j
j
i
j
Hàm Sắp Xếp Tăng
int SapXepTang(int a[], int n)
{
int i, j;
for (i = 0; i < n – 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (a[i] > a[j])
HoanVi(a[i], a[j]);//gọi hàm HV
}
}
}
ầ ử
ả
ộ
Thêm m t ph n t
vào m ng
xx
n – 1
n
0
1
MAX 1
2
3
…
…
aa
bb
zzzz
cc
cc
…
……
vt
Hàm Thêm
int Them(int a[], int &n, int vt, int x)
{
if (vt >= 0 && vt <= n)
{
for (int i = n; i > vt; i--)
a[i] = a[i - 1];
a[vt] = x;
n++;
}
}
Cách 2: Xem phần Bản ghi, mục bổ sung học sinh
ầ ử
ả
ộ
Xóa m t ph n t
trong m ng
• Yêu c uầ
– Xóa m t ph n t
ộ
• Ý tưởng
n 1
n – 1
0
2
1
MAX 1
…
…
a
x
b
bb
z
zz
…
……
vt
Hàm Xóa
int Xoa(int a[], int &n, int vt)
{
if (vt >= 0 && vt < n)
{
for (int i = vt; i < n – 1; i++)
a[i] = a[i + 1];
n--;
}
}
Bài t pậ
ế
ậ
ả
ả
ớ
ấ
t hàm v i các thao tác nh p xu t
ậ
a. Nh p m ng
ấ
b. Xu t m ng
ể
ố
2. Nh p vào m ng s nguyên, hãy ki m tra:
ả
ả
ố ẵ
ố ẻ
ậ
ả
ả
ả
ả
ả
Bài t pậ
ổ
ậ
ố
ả
ố
ậ
ố
ố ỏ ấ
ả
ả
ỏ ấ
ầ
ắ ế
ả
ả
tích các s có trong m ng
ả
a. Tìm s nh nh t trong m ng
b. Tìm s dố ương nh nh t trong m ng
c. S p x p m ng tăng d n
Bài t pậ
ế
ươ
ố
ậ
ươ
ầ ử ớ
ấ
ấ
ố
ậ
ươ
ồ
6. Nh p vào dãy g m n s nguyên d
ỗ
ề
ầ
ắ ế
s p x p chu i theo chi u tăng d n.
ậ
ề
M ng 2 chi u Ma Tr n
ế
ả
ả
Khai báo bi n m ng 2 chi u
• Ví dụ
– T
ườ
ườ
ị
int a[10][20], b[10][20];
int c[5][10];
int d[10][20];
– Không t
typedef int MaTran10x20[10][20];
typedef int MaTran5x10[5][10];
MaTran10x20 a, b;
MaTran11x11 c;
MaTran10x20 d;
ấ ế
ầ ử
ộ
Truy xu t đ n m t ph n t
ề
ả
ư sau
int a[3][4];
– Các truy xu tấ
ể
ữ ệ
ả
ượ
Gán d li u ki u m ng
ử ụ
ả
ự
ữ
ế
• Không đ
ườ
th
ph n tầ ử
int a[5][10], b[5][10];
// Sai
b = a;
int i, j;
for (i = 0; i < 5; i++)
for (j = 0; j < 10; j++)
b[i][j] = a[i][j];
ộ ố
ơ ả
M t s bài toán c b n
ầ
ế
ệ
t hàm th c hi n các yêu c u sau
ậ
ấ
ầ ử
ậ
ự
– Nh p ma tr n
ậ
– Xu t ma tr n
ậ
– Tìm ki m m t ph n t
ộ
ế
– …
ộ ố
M t s quy
ướ
c
ố
• S dòng và s c t
ố ộ
#define MAXD 50
#define MAXC 100
ậ
ậ
Nh p Ma Tr n
Hàm Nhập Ma Trận
Do sử dụng m,n cho hàm XuatMaTran => dùng tham
chiếu
int NhapMaTran(int a[][MAXC], int &m, int &n)
{
printf(“Nhap so dong, so cot cua ma tran: ”);
scanf(“%d%d”, &m, &n);// có thể để ở hàm main
int i, j;
for (i=0; i
for (j=0; j
printf(“Nhap a[%d][%d]: ”, i, j);
scanf(“%d”, &a[i][j]);
}
}
ậ
ấ
Xu t Ma Tr n
Hàm Xuất Ma Trận
int XuatMaTran(int a[][MAXC], int m, int n)
{
int i, j;
for (i=0; i
for (j=0; j
printf(“%d ”, a[i][j]);
printf(“\n”);
}
}
ế
ộ
ầ ử
Tìm ki m m t ph n t
trong Ma Tr nậ
• Ý tưởng
ệ ừ
Hàm Tìm Kiếm
int TimKiem(int a[][MAXC], int m, int n, int x)
{
int i, j;
for (i=0; i
for (j=0; j
if (a[i][j] == x)
return 1;
return 0;
}
Bài 6. Kiểu chuổi ký tự
Khái niệm:
•Chuỗi có thể được định nghĩa như là một
mảng kiểu ký tự, được kết thúc bằng ký tự
null
•Mỗi ký tự trong chuỗi chiếm một byte và ký
tự cuối cùng của chuỗi là “\0” (null)
•Được khai báo và truyền tham số như
mảng một chiều.
ấ ớ
ậ
ỗ
Nh p/Xu t v i chu i
ỗ
ố
Cú pháp: char
ấ
ỗ
ấ
ể
Đ xu t m t chu i (bi u th c chu i) lên màn hình, ta
ử ụ
puts().
s d ng hàm
ể
Cú pháp: puts(
ỗ
ử
ộ ố
ộ
ỗ
ậ
ỗ
ử
ộ ố
ị
ộ
ụ ử ụ
M t s hàm x lý chu i (trong string.h)
ỗ
Xác đ nh đ dài chu i Hàm strlen()
ộ
Ví d : S d ng hàm strlen xác đ nh đ dài m t chu i
bàn phím.
nh p t
#include
ộ ố
ử
ỗ
So sánh 2 chu iỗ có b ng nhau hay không
ằ
strcmp() (dùng khi tìm ki m tên,…)
ể ấ
ể
ả
Bài 7: Ki u c u trúc – ki u b n ghi
Minh h aọ
10
15
16
18
2
6
Họ tên
Ngày sinh
Toán
Lý
Hóa
St
t
Quê
quan
ể ấ
Cách 1:
struct
{
;
;
……..
;
};
Khai báo ki u c u trúc
: là m t ộ
ấ
Tên c u trúc
ặ
ượ
tên đ
c đ t theo quy
ặ
ắ
t c đ t tên và là tên
ể ấ
ki u c u trúc.
ườ
ủ
ể
(i=1..n): là ki u c a
ấ
ỗ
ng trong c u
m i tr
trúc
Tên tr
m t tên đ
ắ ặ
quy t c đ t tên.
ể ấ
Khai báo ki u c u trúc
Cách 2: Sử dụng từ khóa typedef để định
nghĩa kiểu:
typedef struct
{
;
;
……..
;
} Ví d 1ụ
ộ
ủ
ể ấ
Ví d 2ụ
Ấ
Ể
Ế
1. Truy xuất đến từng trường của biến cấu trúc
ụ ế
Ví d (ti p)
/* Hàm in lên màn hình 1 m u tin
SinhVien*/
int InSV(SinhVien s)
{
printf("MSSV: | Ho va ten | Ngay Sinh |
Dia chi\n");
printf("%s | %s | %d%d%d | %s\n",
s.MSSV, s.HoTen, s.NgaySinh.Ngay,
s.NgaySinh.Thang, s.NgaySinh.Nam,
s.DiaChi);
}
ụ ế
Ví d (ti p)
ụ
ế
ụ
ế
ắ ế
S p x p
Bài t pậ
1. Viết hàm nhập vào họ tên, điểm của n học sinh. In ra
danh sách các học sinh vừa nhập.
2. Viết hàm nhập vào họ tên, điểm của n học sinh. Sắp
xếp lại điểm của các HV từ thấp đến cao và in ra
danh sách các học sinh vừa nhập.
3. Viết hàm nhập vào vào, họ và họ lót, tên, địa chỉ, sắp
xếp tên và địa chỉ theo thứ tự alphabet, sau đó hiển
thị danh sách đã được sắp xếp.
4. Tiếp
Bài t pậ
Có thể bạn quan tâm
Tài liêu mới