Tải bản đầy đủ (.pdf) (6 trang)

Ngôn ngữ lập trình C/C++ - Tuần 3 - 4

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (179.51 KB, 6 trang )

1
1
NGÔN NGỮ LẬP TRÌNH
C/C++
NguyễnHải Châu
Khoa Công nghệ thông tin
Trường Đạihọc Công nghệ
(Bài giảng tuần3-4)
2
Nộidung
z Các cấutrúcđiềukhiểnrẽ nhánh và lặp
z Làm mộtsố bài tậptrênlớp
z Kiểudữ liệumảng
z Xâu ký tự
3
Cấutrúcđiềukhiển
4
Câu lệnh rẽ nhánh if…else
z Cú pháp:
if (<điềukiện>) <khốilệnh 1>
Nếu<điềukiện> đúng thì thựchiện<khốilệnh 1>
if (<điềukiện>) <khốilệnh 1> else <khốilệnh 2>
Nếu<điềukiện> đúng thì thựchiện<khốilệnh 1>
Ngượclạithựchiện<khốilệnh 2>
5
Ví dụ câu lệnh if…else
Ví dụ 1:
if (delta == 0)
printf(“Nghiem kep\n”);
if (delta == 0) {
x1 = x2 = nghiem;


printf(“Nghiem kep\n”);
}
Ví dụ 2:
if (delta < 0)
printf(“Vo nghiem\n”);
else if (delta == 0)
printf(“Nghiem kep\n”);
else
printf(“Hai nghiệm\n”);
6
Câu lệnh lựachọn switch
z Câu lệnh if…else chota2 lựachọn
z Khi có nhiềulựachọn: if…else lồng nhau
z C++ cung cấpcâulệnh khác để lựachọn
nhiềukhả năng: switch
2
7
Câu lệnh lựachọn switch: Cú pháp
switch (<điềukiện>)
{
case <biểuthứchằng 1>: [<dãy lệnh 1>];
case <biểuthứchằng 2>: [<dãy lệnh 2>];
…………… : ;
case <biểuthứchằng n>: [<dãy lệnh n>];
[default: dãy lệnh n+1;]
}
8
Ví dụ câu lệnh switch
int th;
cout << “Cho biết tháng cần tính: “ ; cin >> th ;

switch (th)
{
case 1: case 3: case 5: case 7: case 8: case 10:
case 12: cout << "tháng này có 31 ngày" ; break ;
case 2: cout << "tháng này có 28/29 ngày" ; break;
case 4: case 6: case 9:
case 11: cout << "tháng này có 30 ngày" ; break;
default: cout << “Không có tháng này";
}
9
Câu lệnh nhảy goto
z Cú pháp: goto <nhãn>
z Nhãn là mộttêngọi trong chương trình do
ngườilậptrìnhđặttên
z Cách viết nhãn:
label: <câu lệnh>
z Hạnchế dùng câu lệnh goto vì nếulạm
dụng câu lệnh này sẽ làm cho chương
trình trở nên khó hiểu, dễ sinh lỗi
10
Ví dụ minh họa
void main()
{
long m, n, kq = 0; // Các số cần nhân và kếtquả kq
cout << “Nhập m và n: “ ; cin >> m >> n ;
lap: // đây là nhãn để chương trình quay lại
if (m%2) kq += n; // nếum lẻ thì cộng thêm n vào kq
m = m >> 1; // dịch m sang phải1 bit tức m = m / 2
n = n << 1; // dịch m sang trái 1 bit tứcm = m * 2
if (m) goto lap; // quay lạinếum<>0

cout << “m nhân n =” << kq ;
}
11
Lệnh lặp for
z for (<dãy biểuthức1>;<điềukiện
lặp>;<dãy biểuthức 2>) { <khốilệnh lặp>;}
z Các biểuthức trong các dãy biểuthức1, 2
cách nhau bởidấuphảy(,)
z Điềukiệnlặplàbiểuthức lôgic
z Hoạt động: Thựchiện <dãy biểuthức1>
z kiểmtra<điềukiệnlặp>, nếu đúng thực
hiện<khốilệnh lặp>, thựchiện<dãybi
ểu
thức 2>, quay lạikiểmtra<điềukiệnlặp>
12
Ví dụ minh họalệnh lặp for
void main()
{
long m, n, kq; // Các số cần nhân và kếtquả kq
cout << “Nhập m và n: “ ; cin >> m >> n ;
for (kq = 0 ; m ; m >>= 1, n <<= 1)
if (m%2) kq += n ;
cout << “m nhân n =” << kq ;
}
3
13
Ví dụ minh họalệnh lặp for
void main()
{
int i, kq = 0;

for (i = 1 ; i <= 100 ; i ++) kq += i ;
cout << "Tổng = " << kq;
}
14
Lệnh lặp while
z Cú pháp:
while (<điềukiện>) { <khốilệnh lặp>; }
z Hoạt động: Lặplại<khốilệnh lặp> trong
khi <điềukiện> đúng.
z <khốilệnh lặp> có thể không đượcthực
hiệnlần nào nếu<điềukiện> sai.
15
Ví dụ lệnh lặp while
void main() // Bài toán cổ 100 chân, 36 con vừagàvừachó
{
int g, c ;
g = 0 ;
while (g <= 36) {
c = 0 ;
while (c <= 50) {
if (g + c == 36 && 2*g + 4*c == 100)
cout << g << c ;
c++;
}
g++;
}
}
16
Ví dụ lệnh lặp while
void main() // Tìm UCLN theo thuật toán Euclide

{
int m, n, r;
cout << "Nhập m, n: " ; cin >> m >> n ;
if (m < n) { int t = m; m = n; n = t; }// nếum<n đổi vai trò m,n
while (m != n) {
r = m - n ;
if (r > n) m = r; else { m = n ; n = r ; }
}
cout << "UCLN = " << m ;
}
17
Ví dụ lệnh lặp while
z Tìm nghiệmxấpxỉ củaphương trình e
x
- 1.5 = 0, trên đoạn[0, 1]
với độ chính xác 10
-6
bằng phương pháp chia đôi.
void main()
{
float a = 0, b = 1, c; // các điểm mút a, b và điểmgiữac
float fa, fc; // giá trị của f(x) tạicácđiểma, c
while (b-a > 1.0e-6) // trong khi độ dài đoạncònlớnhơne
{
c = (a + b)/2; // tìm điểmc giữa đoạn[a,b]
fa = exp(a) - 1.5; fc = exp(c) - 1.5; // tính f(a) và f(c)
if (fa*fc == 0) break; // f(c) = 0 tức c là nghiệm
if (fa*fc > 0) a = c; else b = c;
}
cout << "Nghiem xap xi cua phuong trinh = " << c ;

}
18
Lệnh lặp do…while
z Cú pháp:
do {<khốilệnh lặp>} while (<điềukiện>) ;
z Hoạt động: Thựchiện<khốilệnh lặp>
trong khi <điềukiện> đúng
z <khốilệnh lặp> đượcthựchiệnítnhấtmột
lần
4
19
Ví dụ câu lệnh do…while
z Tính xấpxỉ số π theo công thức Euler
với
void main()
{
int n = 1; float S = 0;
do S += 1.0/(n*n) while 1.0/(n*n) < 1.0e-6;
float pi = sqrt(6*S);
cout << "pi = " << pi ;
}
2222
2
1
3
1
2
1
1
1

6
n
++++=
π
6
2
10
1

<
n
20
Các lệnh break và continue
z break dùng để thoát ra khỏimộtkhốilệnh
(tứclàtậpcáclệnh nằm trong {})
z continue dùng để quay lại đầu vòng lặp
mà không cầnthựchiệnhếttấtcả các
lệnh trong khốilệnh lặp
21
Ví dụ lệnh continue
// Tìm các số chính phương trong khoảng 1 100
int i ;
for (i = 1; i <= 100; i++) {
if (i là số chính phương) continue;
{ // dãy lệnh khác
.
.
}
}
22

So sánh cách dùng các câu lệnh lặp
z for thường đượcsử dụng trong những
vòng lặpmàsố lầnlặp đượcbiếttrước
z Ngượclạivớifor, while và do…while
thường dùng trong các vòng lặpmàsố lần
lặp không biếttrước
z Ngượclạivới for, while và do…while
thường dùng trong các vòng lặpmàsố lần
lặp không biếttrước
23
Mảng (Bảng) và xâu ký tự
24
Mảng mộtchiều
z Mảng là một dãy các phầntử cùng kiểu
đượcsắpkề nhau liên tục trong bộ nhớ
z Các phầntửđược đánh số thứ tựđểphân
biệt
z Nếumảng có n phầntử thì các phầntử
được đánh số từ 0 đến n-1
876543210
5
25
Khai báo mảng
z <tên kiểu> <tên mảng>[<số thành phần>] ;
// không khởitạo
z <tên kiểu> <tên mảng>[<số thành phần>] =
{ dãy giá trị } ; // có khởitạo
z <tên kiểu> <tên mảng>[ ] = { dãy giá trị } ;
// có khởitạo
26

Ví dụ về khai báo mảng
int a[10]; // Mảng 10 số nguyên không khởitạo
// Mảng 3 số thực độ chínhxácképcókhởitạo
double b[3] = {1.0, 2.0, -3.4};
// Mảng 5 số thực độ chính xác đơncókhởitạo
float f[] = {0.2, 0.3, 0.0, -4.5, -2.1}
27
Ví dụ: Tính tổng, tích của hai phân số
void main()
{
int a[2], b[2], tong[2], tich[2] ;
cout << "Nhậpa. Tử = " ; cin >> a[0] ;
cout << "mẫu = " ; cin >> a[1] ;
cout << "Nhậpb. Tử = " ; cin >> b[0] ;
cout << "mẫu = " ; cin >> b[1] ;
tong[0] = a[0]*b[1] + a[1]*b[0] ; tong[1] = a[1] * b[1] ;
tich[0] = a[0]*b[0]; tich[1] = a[1] * b[1] ;
cout << "Tổng = " << tong[0] << '/' << tong[1] ;
cout << "Tích = " << tich[0] << '/' << tich[1] ;
}
28
Ví dụ: Tìm số bé nhấttrongmột dãy
void main()
{
float a[100], i, n, min, k; // a chứatối đa100 số
cout << "Nhậpsố phầntử của dãy: " ; cin >> n;
for (i=0; i<n; i++) {
cout << "a[" << i << "] = " ; cin >> a[i];
}
min = a[0]; k = 0;

for (i=1; i<n; i++) if (a[i] < min ) { min = a[i]; k = i; }
cout << "Số bé nhất là " << min << "tạivị trí " << k;
}
29
Xâu ký tự
z Là mảng có kiểu các phầntử là char
z Khai báo:
char <tên xâu>[độ dài] ; // không khởitạo
char <tên xâu>[độ dài] = <xâu kí tự> ;
// có khởitạo
char <tên xâu>[] = xâu kí tự ;
// có khởitạo
z Các xâu ký tự có ký tự kết thúc là ‘\0’
30
Ví dụ khai báo xâu ký tự
// Khai báo xâu độ dài 80, không khởitạo
char tenfile[80];
// Khai báo xâu độ dài 80, có khởitạo
char tenfile[80] = “autoexec.bat”;
// Khai báo xâu có khởitạo
char tenfile = “config.sys”;
6
31
Mộtsố hàm xử lý xâu ký tự (1)
#include <string.h>
z strcpy(s,t): gán nội dung củaxâut choxâus
z strncpy(s, t, n): Sao n ký tựđầutiêncủa
xâut vàoxâus
z strcat(s, t): Nối xâu t vào xâu s
z strncat(s, t, n): Nối n ký tựđầutiêncủaxâu

t vào xâu s
32
Mộtsố hàm xử lý xâu ký tự (2)
z strcmp(s, t): So sánh hai xâu s và t:
{Nếu s < t thì trả lạikếtquả âm
{Nếu s == t hàm trả kếtquả bằng 0
{Nếu s > t hàm trả kếtquả dương
z strncmp(s, t, n): Giống strcmp nhưng chỉ
thao tác với n ký tựđầutiêncủa hai xâu
z strcmpi(s, t): Giống strcmp nhưng không
phân biệtchữ hoa và chữ thường
z strlen(s): Trả lại độ dài củaxâus
33
Mảng hai chiều
z Khai báo:
<kiểu thành phần> <tênmảng>[m][n];
z Ví dụ:
// Khai báo ma trậnkíchthước 10x20
double matran[10][20];
// Chỉ số hàng chạytừ 0 9
// Chỉ số cộtchạytừ 0 19
34
Các vấn đề cầnnhớ
z Các câu lệnh rẽ nhánh và lặp
z Sự khác nhau giữacáccâulệnh if else và
switch
z Sự khác nhau giữa for, while và do…while
z Cách sử dụng break và continue
z Mảng 1 chiều, 2 chiều
z Xâu ký tự, các hàm thư viện thao tác xâu ký

tự
35
Bài tập
z 45 bài tậptừ trang 78 đến trang 82 trong
tập bài giảng
z Giải các bài tập trên trong giờ thực hành

×