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

Bài giảng Ngôn ngữ lập trình C/C++ (Bài giảng tuần 3, 4) – Nguyễn Hải Châu

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 )

Nội dung
z Các cấu trúc điều khiển rẽ nhánh và lặp
z Làm một số bài tập trên lớp
z Kiểu dữ liệu mảng
z Xâu ký tự

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)
1

2

Câu lệnh rẽ nhánh if…else
z Cú pháp:
if (<điều kiện>) <khối lệnh 1>
Nếu <điều kiện> đúng thì thực hiện <khối lệnh 1>

Cấu trúc điều khiển

if (<điều kiện>) <khối lệnh 1> else <khối lệnh 2>
Nếu <điều kiện> đúng thì thực hiện <khối lệnh 1>
Ngược lại thực hiện <khối lệnh 2>

3

Ví dụ câu lệnh if…else


Câu lệnh lựa chọn switch

Ví dụ 1:

Ví dụ 2:

if (delta == 0)
printf(“Nghiem kep\n”);

if (delta < 0)
printf(“Vo nghiem\n”);
else if (delta == 0)
printf(“Nghiem kep\n”);
else
printf(“Hai nghiệm\n”);

if (delta == 0) {
x1 = x2 = nghiem;
printf(“Nghiem kep\n”);
}

4

5

z Câu lệnh if…else cho ta 2 lựa chọn
z Khi có nhiều lựa chọn: if…else lồng nhau
z C++ cung cấp câu lệnh khác để lựa chọn
nhiều khả năng: switch


6

1


Câu lệnh lựa chọn switch: Cú pháp

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";
}

switch (<điều kiện>)
{
case <biểu thức hằng 1>: [<dãy lệnh 1>];
case <biểu thức hằng 2>: [<dãy lệnh 2>];
……………...: ...............;
case <biểu thức hằng n>: [<dãy lệnh n>];
[default: dãy lệnh n+1;]
}
7


8

Câu lệnh nhảy goto

Ví dụ minh họa

z Cú pháp: goto <nhãn>
z Nhãn là một tên gọi trong chương trình do
người lập trình đặt tên
z Cách viết nhãn:

void main()
{
long m, n, kq = 0; // Các số cần nhân và kết quả 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ế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 m<>0
cout << “m nhân n =” << kq ;
}

label:

<câu lệnh>


z Hạ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
9

10

Lệnh lặp for

Ví dụ minh họa lệnh lặp for

z for (<dãy biểu thức 1>;<điều kiện
lặp>;<dãy biểu thức 2>) { <khối lệnh lặp>;}
z Cá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
z Hoạt động: Thực hiện <dãy biểu thức 1>
z kiểm tra <điều kiện lặp>, nếu đúng thực
hiện <khối lệnh lặp>, thực hiện thức 2>, quay lại kiểm tra <điều kiện lặp>..

void main()
{
long m, n, kq; // Các số cần nhân và kết quả 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 ;
}


11

12

2


Ví dụ minh họa lệnh lặp for

Lệnh lặp while
z Cú pháp:
while (<điều kiện>) { <khối lệnh lặp>; }
z Hoạt động: Lặp lại <khối lệnh lặp> trong
khi <điều kiện> đúng.
z <khối lệnh lặp> có thể khơng được thực
hiện lần nào nếu <điều kiện> sai.

void main()
{
int i, kq = 0;
for (i = 1 ; i <= 100 ; i ++) kq += i ;
cout << "Tổng = " << kq;
}

13

14

Ví dụ lệnh lặp while


Ví dụ lệnh lặp while

void main() // Bài tố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++;
}
15
}

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ếu mwhile (m != n) {
r=m-n;
if (r > n) m = r; else { m = n ; n = r ; }
}
cout << "UCLN = " << m ;
}


Ví dụ lệnh lặp while

Lệnh lặp do…while

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 ;
}

z Cú pháp:
do {<khối lệnh lặp>} while (<điều kiện>) ;
z Hoạt động: Thực hiện <khối lệnh lặp>
trong khi <điều kiện> đúng
z <khối lệnh lặp> được thực hiện ít nhất một

lần

z

17

16

18

3


Ví dụ câu lệnh do…while

Các lệnh break và continue

z Tính xấp xỉ số π theo công thức Euler

z break 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 {})
z continue 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

π2
1 1 1
1
1
= 2 + 2 + 2 + ... + 2 với 2 <10 −6

n
6 1 2 3
n
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 ;
}
19

20

So sánh cách dùng các câu lệnh lặp

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
.
.
}
}

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

z Ngược lại với for, while và do…while
thường dùng trong các vòng lặp mà số lần
lặp không biết trước
z Ngược lại với for, while và do…while
thường dùng trong các vòng lặp mà số lần
lặp không biết trước

21

22

Mảng một chiều
z Mả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ớ
z Các phần tử được đánh số thứ tự để phân
biệt
z Nếu mảng có n phần tử thì các phần tử
được đánh số từ 0 đến n-1

Mảng (Bảng) và xâu ký tự

0
23

1

2

3


4

5

6

7

8
24

4


Khai báo mảng

Ví dụ về khai báo mảng

z <tên kiểu> <tên mảng>[<số thành phần>] ;
// không khởi tạo
z <tên kiểu> <tên mảng>[<số thành phần>] =
{ dãy giá trị } ; // có khởi tạo
z <tên kiểu> <tên mảng>[ ] = { dãy giá trị } ;
// có khởi tạo

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}


25

26

Ví dụ: Tính tổng, tích của hai phân số

Ví dụ: Tìm số bé nhất trong một dãy

void main()
{
int a[2], b[2], tong[2], tich[2] ;
cout << "Nhập a. Tử = " ; cin >> a[0] ;
cout << "mẫu = " ; cin >> a[1] ;
cout << "Nhập b. 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] ;
}

void main()
{
float a[100], i, n, min, k;
// a chứa tối đa 100 số
cout << "Nhập số phần tử của dãy: " ; cin >> n;
for (i=0; icout << "a[" << i << "] = " ; cin >> a[i];
}

min = a[0]; k = 0;
for (i=1; icout << "Số bé nhất là " << min << "tại vị trí " << k;
}
27

Xâu ký tự

28

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];

z Là mảng có kiểu các phần tử là char
z Khai báo:
char <tên xâu>[độ dài] ; // không khởi tạo
char <tên xâu>[độ dài] = <xâu kí tự> ;
// có khởi tạo
char <tên xâu>[] = xâu kí tự ;
// có khởi tạo
z Các xâu ký tự có ký tự kết thúc là ‘\0’

// 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”;
29

30


5


Một số hàm xử lý xâu ký tự (1)

Một số hàm xử lý xâu ký tự (2)

#include <string.h>
z strcpy(s,t): gán nội dung của xâu t cho xâu s
z strncpy(s, t, n): Sao n ký tự đầu tiên của
xâu t vào xâu s
z strcat(s, t): Nối xâu t vào xâu s
z strncat(s, t, n): Nối n ký tự đầu tiên của xâu
t vào xâu s
31

z strcmp(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

z strncmp(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
z strcmpi(s, t): Giống strcmp nhưng không
phân biệt chữ hoa và chữ thường
z strlen(s): Trả lại độ dài của xâu s

32


Mảng hai chiều

Các vấn đề cần nhớ

z Khai báo:
<kiểu thành phần > <tên mảng>[m][n];
z Ví dụ:

z Các câu lệnh rẽ nhánh và lặp
z Sự khác nhau giữa các câu lệ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ự

// 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

33

34

Bài tập
z 45 bài tập từ 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


35

6



×