1. Trang chủ
  2. » Giáo án - Bài giảng

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

6 398 4
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 179,51 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

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

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>

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ựa chọn switch

zCâu lệnh if…else cho ta 2 lựa chọn

zKhi có nhiều lựa chọn: if…else lồng nhau

zC++ cung cấp câu lệnh khác để lựa chọn

nhiều khả năng: switch

Trang 2

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

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

}

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

zCú pháp: goto <nhãn>

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: <câu lệnh>

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 << “Nhập m và n: “ ; cin >> m >> n ;

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

Lệnh lặp for

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

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 <dãy biểu thức 1>

zkiể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 <dãy biểu

thức 2>, quay lại kiểm tra <điều kiện lặp>

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

Trang 3

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 (<đ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

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

}

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ế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 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ể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 do…while

do {<khối lệnh lặp>} while (<điều kiện>) ;

zHoạ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

Trang 4

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

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 ;

}

2 2 2

2

2

1 3

1 2

1

1

1

2 10

1 < −

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

zfor 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à 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

zNgượ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

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

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

8 7 6 5 4 3 2 1 0

Trang 5

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

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

}

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 << "Nhập số phần tử 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ạ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 <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

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

Trang 6

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

#include <string.h>

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:

<kiểu thành phần > <tên mảng>[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à do…while

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ự

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

Ngày đăng: 08/05/2014, 16:34

TỪ KHÓA LIÊN QUAN

w