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>
6 trang |
Chia sẻ: Mr Hưng | Lượt xem: 838 | Lượt tải: 0
Nội dung tài liệu Ngôn ngữ lập trình C/C++ - Cấu trúc điều khiển, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
11
NGÔN NGỮ LẬP TRÌNH
C/C++
Nguyễn Hải Châu
Khoa Công nghệ thông tin
Trường Đại học Công nghệ
(Bài giảng tuần 3-4)
2
Nội dung
zCác cấu trúc điều khiển rẽ nhánh và lặp
zLàm một số bài tập trên lớp
zKiểu dữ liệu mảng
zXâu ký tự
3
Cấu trúc điều khiển
4
Câu lệnh rẽ nhánh ifelse
z Cú pháp:
if ()
Nếu đúng thì thực hiện
if () else
Nếu đúng thì thực hiện
Ngược lại thực hiện
5
Ví dụ câu lệnh ifelse
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ựa chọn switch
zCâu lệnh ifelse cho ta 2 lựa chọn
zKhi có nhiều lựa chọn: ifelse lồng nhau
zC++ cung cấp câu lệnh khác để lựa chọn
nhiều khả năng: switch
27
Câu lệnh lựa chọn switch: Cú pháp
switch ()
{
case : [];
case : [];
...: ...............;
case : [];
[default: dãy lệnh n+1;]
}
8
Ví dụ câu lệnh switch
int th;
cout > 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
zCú pháp: goto
zNhãn là một tên gọi trong chương trình do
người lập trình đặt tên
zCách viết nhãn:
label:
zHạn chế dùng câu lệnh goto vì nếu lạ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ết quả kq
cout > m >> n ;
lap: // đây là nhãn để chương trình quay lại
if (m%2) kq += n; // nếu m lẻ thì cộng thêm n vào kq
m = m >> 1; // dịch m sang phải 1 bit tức m = m / 2
n = n << 1; // dịch m sang trái 1 bit tức m = m * 2
if (m) goto lap; // quay lại nếu m0
cout << “m nhân n =” << kq ;
}
11
Lệnh lặp for
z for (;<điều kiện
lặp>;) { ;}
zCác biểu thức trong các dãy biểu thức 1, 2
cách nhau bởi dấu phảy (,)
zĐiều kiện lặp là biểu thức lôgic
zHoạt động: Thực hiện
zkiểm tra , nếu đúng thực
hiện , thực hiện <dãy biểu
thức 2>, quay lại kiểm tra ..
12
Ví dụ minh họa lệnh lặp for
void main()
{
long m, n, kq; // Các số cần nhân và kết quả kq
cout > m >> n ;
for (kq = 0 ; m ; m >>= 1, n <<= 1)
if (m%2) kq += n ;
cout << “m nhân n =” << kq ;
}
313
Ví dụ minh họa lệ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 () { ; }
z Hoạt động: Lặp lại trong
khi đúng.
z có thể không được thực
hiện lần nào nếu sai.
15
Ví dụ lệnh lặp while
void main() // Bài toán cổ 100 chân, 36 con vừa gà vừa chó
{
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 > m >> n ;
if (m < n) { int t = m; m = n; n = t; }// nếu m<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ệm xấp xỉ của phương trình ex - 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ểm giữa c
float fa, fc; // giá trị của f(x) tại các điểm a, c
while (b-a > 1.0e-6) // trong khi độ dài đoạn còn lớn hơn e
{
c = (a + b)/2; // tìm điểm c 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 dowhile
zCú pháp:
do {} while () ;
zHoạt động: Thực hiện
trong khi đúng
z được thực hiện ít nhất một
lần
419
Ví dụ câu lệnh dowhile
z Tính xấp xỉ 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
... ++++=π 62 101 −<n
20
Các lệnh break và continue
zbreak dùng để thoát ra khỏi một khối lệnh
(tức là tập các lệnh nằm trong {})
zcontinue dùng để quay lại đầu vòng lặp
mà không cần thực hiện hết tất cả các
lệnh trong khối lệ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 được sử dụng trong những
vòng lặp mà số lần lặp được biết trước
zNgược lại với for, while và dowhile
thường dùng trong các vòng lặp mà số lần
lặp không biết trước
zNgược lại với for, while và dowhile
thường dùng trong các vòng lặp mà số lần
lặp không biết trước
23
Mảng (Bảng) và xâu ký tự
24
Mảng một chiều
zMảng là một dãy các phần tử cùng kiểu
được sắp kề nhau liên tục trong bộ nhớ
zCác phần tử được đánh số thứ tự để phân
biệt
zNếu mảng có n phần tử thì các phần tử
được đánh số từ 0 đến n-1
876543210
525
Khai báo mảng
z [] ;
// không khởi tạo
z [] =
{ dãy giá trị } ; // có khởi tạo
z [ ] = { dãy giá trị } ;
// có khởi tạo
26
Ví dụ về khai báo mảng
int a[10]; // Mảng 10 số nguyên không khởi tạo
// Mảng 3 số thực độ chính xác kép có khởi tạo
double b[3] = {1.0, 2.0, -3.4};
// Mảng 5 số thực độ chính xác đơn có khởi tạ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 > a[0] ;
cout > a[1] ;
cout > b[0] ;
cout > 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ất trong một dãy
void main()
{
float a[100], i, n, min, k; // a chứa tối đa 100 số
cout > n;
for (i=0; i<n; i++) {
cout > 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ại vị trí " << k;
}
29
Xâu ký tự
zLà mảng có kiểu các phần tử là char
zKhai báo:
char [độ dài] ; // không khởi tạo
char [độ dài] = ;
// có khởi tạo
char [] = xâu kí tự ;
// có khởi tạo
zCá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ởi tạo
char tenfile[80];
// Khai báo xâu độ dài 80, có khởi tạo
char tenfile[80] = “autoexec.bat”;
// Khai báo xâu có khởi tạo
char tenfile = “config.sys”;
631
Một số hàm xử lý xâu ký tự (1)
#include
zstrcpy(s,t): gán nội dung của xâu t cho xâu s
zstrncpy(s, t, n): Sao n ký tự đầu tiên của
xâu t vào xâu s
zstrcat(s, t): Nối xâu t vào xâu s
zstrncat(s, t, n): Nối n ký tự đầu tiên của xâu
t vào xâu s
32
Một số hàm xử lý xâu ký tự (2)
zstrcmp(s, t): So sánh hai xâu s và t:
{Nếu s < t thì trả lại kết quả âm
{Nếu s == t hàm trả kết quả bằng 0
{Nếu s > t hàm trả kết quả dương
zstrncmp(s, t, n): Giống strcmp nhưng chỉ
thao tác với n ký tự đầu tiên của hai xâu
zstrcmpi(s, t): Giống strcmp nhưng không
phân biệt chữ hoa và chữ thường
zstrlen(s): Trả lại độ dài của xâu s
33
Mảng hai chiều
zKhai báo:
[m][n];
zVí dụ:
// Khai báo ma trận kích thước 10x20
double matran[10][20];
// Chỉ số hàng chạy từ 0..9
// Chỉ số cột chạy từ 0..19
34
Các vấn đề cần nhớ
zCác câu lệnh rẽ nhánh và lặp
zSự khác nhau giữa các câu lệnh if..else và
switch
zSự khác nhau giữa for, while và dowhile
zCách sử dụng break và continue
zMảng 1 chiều, 2 chiều
zXâu ký tự, các hàm thư viện thao tác xâu ký
tự
35
Bài tập
z45 bài tập từ trang 78 đến trang 82 trong
tập bài giảng
zGiải các bài tập trên trong giờ thực hành
Các file đính kèm theo tài liệu này:
- thcs2_tuan3_4_2368.pdf