Ôn tập ngôn ngữ c

38
Ôn tập ngôn ngữ C Mục tiêu Ôn tập về các khaí niệm cơ bản về lập trình Ôn tập cú pháp C. Ôn tập kỹ thuật viết chương trình C. Ôn tập kỹ thuật viết hàm C. Ôn tập kỹ thuật phân tích chương trình có hàm. Ôn tập về mảng 1 chiều Ôn tập về ma trận Ôn tập về chuỗi ký tự. Ôn tập về cấu trúc

Upload: viveca

Post on 12-Jan-2016

88 views

Category:

Documents


0 download

DESCRIPTION

Ôn tập ngôn ngữ C. Mục tiêu Ôn tập về các khaí niệm cơ bản về lập trình Ôn tập cú pháp C. Ôn tập kỹ thuật viết chương trình C. Ôn tập kỹ thuật viết hàm C. Ôn tập kỹ thuật phân tích chương trình có hàm. Ôn tập về mảng 1 chiều Ôn tập về ma trận Ôn tập về chuỗi ký tự. Ôn tập về cấu trúc. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ôn tập ngôn ngữ C

Ôn tập ngôn ngữ CMục tiêu

Ôn tập về các khaí niệm cơ bản về lập trìnhÔn tập cú pháp C.Ôn tập kỹ thuật viết chương trình C.Ôn tập kỹ thuật viết hàm C.Ôn tập kỹ thuật phân tích chương trình có hàm.Ôn tập về mảng 1 chiềuÔn tập về ma trậnÔn tập về chuỗi ký tự.Ôn tập về cấu trúc

Page 2: Ôn tập ngôn ngữ C

Nội dung

1- Các khái niệm cơ bản về lập trình.2- Cú pháp ngôn ngữ C3- Kỹ thuật giải bài toán đơn giản.4- Kỹ thuật xây dựng hàm C.5- Kỹ thuật phân tích chương trình có hàm.6- Pointer7- Mảng một chiều.8- Ma trận.9- Chuỗi ký tự.10- Cấu trúc.

Page 3: Ôn tập ngôn ngữ C

1- Các khái niệm cơ bản về lập trình

Chương trình máy tính: Tập các lệnh nhị phân có thứ tự nhằm giải một bài toàn trên máy tính.Ngôn ngữ lập trình:Một tập các định nghĩa về cú pháp cho phép người sử dụng tạo ra các chương trình máy tính. Một chương trình sẽ được tạo ra từ một chuỗi các phát biểu đúng cú pháp. Dịch chương trình:Quá trình chuyển 1 chương trình trong 1 ngôn ngữ lập trình thành chương trình nhị phân (mã máy). Như vậy chương trình có 2 dạng: chương trình trong ngôn ngữ lập trính và chương trình mã máy.

Page 4: Ôn tập ngôn ngữ C

Các khái niệm cơ bản về lập trình

Phần mềm ngôn ngữ: Một phần mềm máy tính hiện thực cú pháp của 1 ngôn ngữ lập trình, cung cấp cho người sử dụng các một số tiện ích như : Môi trường soạn thảo chương trình (editor), dịch chương trình + kiểm lỗi cú pháp chương trình (compile), chạy cả/ từng bước chương trình, kiểm tra trị các biến (debug, View)

Page 5: Ôn tập ngôn ngữ C

Các khái niệm cơ bản về lập trìnhGiải thuật: Phương pháp / cách tiếp cận để giải một bài toán.Đặc điểm của giải thuật:

(1) Có duy nhật 1 điểm bắt đầu + duy nhất 1 điểm kết thúc.

(2) Giải thuật phải dừng. (3) Kết qủa phải đúng.

Mô tả 1 giải thuật (1) Một trật tự hữu hạn các bước giải theo ngôn

ngữ. (chương trình máy tính là một giải thuật cho 1 bài toán cụ thể)

(2) Lưu đồ.

Page 6: Ôn tập ngôn ngữ C

Các khái niệm cơ bản về lập trình

Các bước lập trình

Yes

Bài toánPhân tích

Dữ liệu

Giải thuật

DùngEditorNNLT

Chương trình

ngôn ngữ

Dịch

Chạy LỗiNo

YesLỗi cú pháp

Kq đúng

Start

End

Chương trình mã máy

Nogiải thuật sai

Page 7: Ôn tập ngôn ngữ C

2- Cú pháp ngôn ngữ C2.1- Từ khóa và cách đặt từ mới

Từ khóa: Từ cơ bản của ngôn ngữ.

Cách đặt 1 từ: Ký tự đầu là chữ hay gạch nối, các ký tự sau là chữ+số+gạch nối. Không đặt từ trùng với từ khóa, không sử dụng các ký hiệu toán tử, không dùng ký tự khoảng trống. Mỗi khái niệm được đặt 1 từ riêng.

Page 8: Ôn tập ngôn ngữ C

2.2- Toán tử cơ bản

Toán tử số học: + - * / % ++ --

Toán tử so sánh: < <= == >= > != : trả về trị 0 (sai) 1 (đúng).

Toán tử luận lý: ! && || : trả về trị 0 (sai) 1 (đúng).

Toán tử trên bit : & | ^ ( and, or, xor)

Toán tử dịch: >> << Toán tử điều kiện : Cond ? true_val : false_val

Toán tử gán: = += -= *= /= ...

Page 9: Ôn tập ngôn ngữ C

Độ ưu tiên toán tử (TT) cơ bản

(1) Ngoặc từ trong ra ngoài.

(2) TT Số học (nhân chia trước cộng trừ sau, kết hợp trái phải).

(3) TT So sánh (trái phải).

(4) TT luận lý ( NOT -> AND -> OR)

Cuối cùng là toán tử gán.

(Xem thên trong help với từ khóa precedence)

Page 10: Ôn tập ngôn ngữ C

2.3- Kiểu dữ liệu-Hằng- Biến

Datatype: Khái niệm đặc tả kích thước bộ nhớ khi lưu trữ các loại dữ liệu khác nhau. Các kiểu dữ liệu cơ bản: char, int, long, float, double. Kiểu dữ liệu dẫn xuất (derived): Kiểu dữ liệu được dẫn ra từ các kiểu cơ bản, thí dụ: mảng, chuỗi ký tự, cấu trúc. Hằng (constant) : Dữ liệu không đổi theo thời gian. Khai báo hằng:

Cách 1: #define PI 3.141592 // dùng macro Cách 2: const int MaxN = 100 ;

Page 11: Ôn tập ngôn ngữ C

Kiểu dữ liệu-Hằng- Biến

Biến (variable) : Một vùng nhớ sẽ lưu trữ dữ liệu có liên quan đến bài toán và có thể thay đổi theo thời gian.

Biến phải thuộc 1 kiểu dữ liệu.

Khai báo biến:

DataType varName [ = TrịKhởiTạo];

Thí dụ

char c1 , c2 =‘A’ , c3=c2;

int n = 7 , m = n , d ;

Page 12: Ôn tập ngôn ngữ C

2.4- Phát biểu C

Phát biểu đơn (simple statement): Một tác vụ hoặc 1 biểu thức. Phát biểu khối (compound statement): Một nhóm tác vụ được bao lại bằng { }. Thường dùng trong các tình huống đặc biệt muốn coi 1 nhóm phát biểu đơn là 1 phát biểu.

Thí dụ: if (x<10) y= 7 ; // phát biểu đơn else { y=6; // phát biểu khối gồm 2 phát biểu đơn x= 1; }

Page 13: Ôn tập ngôn ngữ C

Phát biểu Chọn – Select statements

Phát biểu chọn 1/2 (if..else statement): if (condition) Statement_1; else Statement_2;

Phát biểu chọn 1/n (switch statement): switch (int_or_char_expression) { case Constant1: Statements ; break; case Constant2: Statements ; break; case Constant3: Statements ; break; ..... default : Statements; }

Page 14: Ôn tập ngôn ngữ C

Phát biểu lặp - Loops

Phát biểu lặp for

for ( Init statements ; Condition ; Statement2)

Statement1;

Chú ý 2 dấu chấm phẩy

Phát biểu lặp while Phát biểu lặp do..while

Init; Init;

while (Condition) do

Statemnent; Statement;

while (Condition);

Page 15: Ôn tập ngôn ngữ C

Một thí dụ về phát biểu lặp

Tính S= 1+2+3+4+6+7+7+9+11+...+n Làm nhiều phép cộng Lặp. Khởi tạo (phía trái) : S=0, i=1 Điều kiện: (phía phải) : i<=n Việc làm :

if (i%5!=0) S += i; i++; Ghép các phần lại theo đúng cú pháp

lặp cuả C.

Page 16: Ôn tập ngôn ngữ C

Một thí dụ về phát biểu lặp Dùng for

S = 0; for ( i=1; i<=n; i++) if (i%5!=0) S+=i;

Dùng while Dùng do..while S= 0; i=1; S= 0; i=1; while (i<=n) do { if (i%5 !=0) S+=i ; { if (i%5 !=0) S+=i ; i++; i++; } }

while (i<=n);

Page 17: Ôn tập ngôn ngữ C

Phát biểu chuyển điều khiển

break;

Ngưng ngay phát biểu switch hoặc lặp hiện hành.

continue ;

Bỏ qua tình huống lặp hiện hành và lặp tiếp tục

return [ BiểuThức];

Ngưng ngay tác vụ của 1 hàm.

exit (int n); // trong thư việc stdlib.h

Ngưng ngay chương trình đang chạy, trả điều khiển về cho hệ điều hành.

Page 18: Ôn tập ngôn ngữ C

3- Kỹ thuật giải bài toán đơn giản

Bài toán

Nhặt cácdanh từ

Biến a, b, c(chọn kiểu lớn)

Cắt câutheo

động từ,Sắp xếp lại cho hợp lý

Bắt đầuĐ. từ 1 biến a;Đ. từ 2 biến b;...Ngưng.

#include <stdio.h> // Xuất-nhập

#include <conio.h> // ngưng

void main()

{ int a, b, c;

<Câu lệnh tương đương>

<Câu lệnh tương đương>

getch();

}

( giải thuật )

Page 19: Ôn tập ngôn ngữ C

Thí dụ: Giải một số bài tập

Bài 1: S = 1+ 1/2 + 1/3 + 1/4 + 1/5 + ... + 1/n

Bài 2: S = 0 , n <=0

S= 1+ 3 + 5 + 7 + .. + n , n>0 và n lẻ

S= 2 + 4 + 6 + 8 + ... + n , n>0 và n chẵn

Bài 3: Xuất ra hình chóp rỗng với chiều cao được nhập từ bàn phím.

Page 20: Ôn tập ngôn ngữ C

4- Hàm C – Định nghĩa

Một tác vụ cần cho việc giải bài toán.

Một nhóm phát biểu được đặt tên.

Con người thường diễn đạt 1 yêu cần bằng Động từ + Các túc từ. Khi thực hiện việc này có khi rất vất vả và phức tạp.

Page 21: Ôn tập ngôn ngữ C

Hàm C – Các thành phần của hàm

Tên hàm: tên gọi của tác vụ theo quy ước đặt từ, thường là động từ như trong ngôn ngữ tự nhiên . Tham số : Dữ liệu để hàm tác động. Tham số có 2 loại: tham trị, tham biến. Kiểu kết qủa: Có khi 1 tác vụ sau khi thực thi xong có một dữ liệu mô tả kết qủa của tác vụ Cần nơi chứa dữ liệu kết qủa phù hợp (datatype). Nội dung : nhóm phát biểu chỉ định thứ tự thực thi chi tiết của tác vụ.Hiện thực 1 hàm là hiện thực cả 4 thành phần của hàm

Page 22: Ôn tập ngôn ngữ C

Kỹ thuật hiện thực hàm

int | long | ...void

Phát biểu tác vụ thật rõ ràng: Động từ + các danh từ

TênHàm ( Kiểu ThamTrị, Kiểu & ThamBiến ){ <code nội dung tác vụ> return [ BiểuThức];}

Động từ:Tìm, tính,

đếm,kiểm tra,

lấy

Động từkhác

Cho tham số mang trị cụ thể;Làm bằng tay;Viết ra cách làm;Dịch sang C;

Page 23: Ôn tập ngôn ngữ C

5- Phân tích chương trình thành hàm

Bài toán

Nhặt cácdanh từ

Biến a, b, c(chọn kiểu lớn)

Cắt câutheo

động từ,Sắp xếp lại cho hợp lý

Bắt đầuĐ. từ 1 biến a; // phức tạpĐ. từ 2 biến b; // phức tạpĐ. từ 3 biến c; // Đơn giản...Ngưng.

#include <stdio.h> // Xuất-nhập

#include <conio.h> // ngưng

void Hàm1 ( Type a)

{ }

int Hàm2(Type b)

{ ...... return 3*b; }

void main()

{ int a, b, c;

Hàm1(a); // gọi hàm

printf(“%d\n”, Hàm2(b) );

<Câu lệnh tương đương>

getch();

}( giải thuật )

Việc đơn giản: Nhập/xuất vài biến đơn

Page 24: Ôn tập ngôn ngữ C

6- Pointer

Pointer= Biến mang trị là địa chỉ của một vùng nhớ.

Cung cấp phương tiện gián tiếp để truy cập 1 dữ liệu ( biết địa chỉ sẽ đến địa chỉ đó truy cập được dữ liệu).

Cú pháp khai báo pointer:

DataType * p;

pointer=NULL; mang ý nghĩa pointer này không chỉ đến dữ liệu nào cả.

2500

int* p2 1000

int * p1 100

int n 7100

1000

được gọi là biến không tên

biến có tên

Page 25: Ôn tập ngôn ngữ C

Toán tử thao tác trên pointer & : Lấy địa chỉ của 1 biến. * : Truy cập trị tại 1 địa chỉ. new : cấp phát mới 1 vùng nhớ , trả về 1 pointer. delete pointer : Trả vùng nhớ đã cấp phát động. ++ : Lấy địa chỉ phần tử sau. -- : Lấy địa chỉ phần tử trước đó. = : Gán 2 pointer với nhau. So sánh 2 pointer cho biết vị trí trước sau của 2 dữ liệu.

Đơn vị thay đổi trị của pointer khi cộng trừ là kích thước của kiểu dữ liệu mà pointer này chỉ đến

Page 26: Ôn tập ngôn ngữ C

Toán tử thao tác trên pointer & : Lấy địa chỉ của 1 biến. * : Truy cập trị tại 1 địa chỉ. new : cấp phát mới 1 vùng nhớ , trả về 1 pointer. delete pointer : Trả vùng nhớ đã cấp phát động. ++ : Lấy địa chỉ phần tử sau. -- : Lấy địa chỉ phần tử trước đó. = : Gán 2 pointer với nhau. So sánh 2 pointer cho biết vị trí trước sau của 2 dữ liệu.

Đơn vị thay đổi trị của pointer khi cộng trừ là kích thước của kiểu dữ liệu mà pointer này chỉ đến

Page 27: Ôn tập ngôn ngữ C

Toán tử thao tác trên pointer

p3

p2

p1 100

n 4

10

p3

p2 200

p1 100

n 3

p3

p2

p1 100

n 3

int n =4; *p1=3; p2= new int; p3= new int [n];

int *p1 = &n; *p2= 10; p3[0]= 30; p3[1]=6;

int *p2, *p3; p3[2]=-7;

100

200

-7

6

30

10

p3 400

p2 200

p1 100

n 3

400

200

100 100

Page 28: Ôn tập ngôn ngữ C

Toán tử thao tác trên pointer

-7

6

30

p3 400

p2 0

p1 100

n 4

-7

-100

11

p3 400

p2 400

p1 100

n 3

-7

6

30

p3 400

p2 100

p1 100

n 5

delete p2; p2= p1; p2= p3; delete [] p3;

p2 = NULL; *p2=5; *p2= 11; p3= p2= NULL;

*(p2+1) = -100;

100

200 10

p3 0

p2 0

p1 100

n 3100 100

400 400 400

100

Page 29: Ôn tập ngôn ngữ C

Bài tậpChạy code sau:int m=3, n=6;int* p1= &m, *p2=&n ;int* p3 = new int [3] , *p4=p3;p3[0]= *p1 + * p2;p3[1] = (*p1) * (*p2);p3[2]= (*p1) - (*p2);p4++;*p4 -=5;for (int i = 0; i<3; ++i) *p1 += p3[i];*p2 -= *p1 + (p3[0]) * (*p4);Hỏi cuối cùng m =? , n=?

Page 30: Ôn tập ngôn ngữ C

7- Mảng 1 chiềuMảng= Nhóm trị cùng kiểu có chung tên, mỗi phần tử được quản lý bằng chỉ số đi từ 0.Kích thước của mảng = số phần tử mà mảng có thể chứa Khai báo và quản lý mảng tĩnh: Mảng tĩnh sau khi khai báo đã có sẵn vùng nhớ vì đã ấn định kích thước của mảng.

Kiểu a [100] ; // tối đa 100 phần tử int n; // số phần tử hiện có , chỉ số đi từ 0 đến n-1

Khai báo và quản lý mảng động: Dùng pointer. Khi khai báo chưa có vùng nhớ cho các phần tử, chỉ có vùng nhớ chứa các phần tử sau khi xin cấp phát động bộ nhớ.

Kiểu* a ; int n; // số phần tử hiện có , chỉ số đi từ 0 đến n-1

Page 31: Ôn tập ngôn ngữ C

Mảng 1 chiều a[i] hoặc *(a+i) là trị phần tử ở vị trí i của mảng- Thường là 1 trị ĐƠN.

&a[i] hoặc (a+i) là địa chỉ của phần tử thứ i

Tham số mảng trong hàm

void Nhập (int*&a, int &n)

void Nhập ( int a[] , int &n)

long Tổng (int *a, int n)

int Max ( int a[] , int n)

.....

Page 32: Ôn tập ngôn ngữ C

8- Mảng 2 chiều – Ma trậnMa trận= Nhóm trị cùng kiểu có chung tên, các phần tử được bố trí thành các hàng các cột.

Mỗi phần tử là 1 trị ĐƠN

Kích thước của ma trận = số hàng * số cột

Khai báo và quản lý ma trận tĩnh:

Kiểu m [10][20] ; // tối đa 10 hàng 20 cột

int h, c; // số hàng cột hiện có

Truy xuất phần tử : m[i][j]

Page 33: Ôn tập ngôn ngữ C

Ma trận động- quản lý như mảng 1 chiều

Kiểu* m;

int h,c;

• Cấp phát bộ nhớ: m= new Kiểu [h*c];

• Địa chỉ phần tử hàng i cột j : m+i*c+j

• Trị của phần tử hàng i cột j : *(m+i*c+j)

Page 34: Ôn tập ngôn ngữ C

Ma trận động- có ấn định số hàng tối đa, số cột tùy ý

Khai báo và quản lý ma trận động: Dùng pointer.

Kiểu* m[10] ; // tối đa 10 hàng

int h,c ;

Địa chỉ phần tử hàng i cột j : & m[i][j]

Trị của phần tử hàng i cột j : m[i][j]

Cấp phát bộ nhớ cho hàng i:

m[i] = new Kiểu[c];

Page 35: Ôn tập ngôn ngữ C

Ma trận động- có số hàng, số cột tùy ý

Khai báo và quản lý ma trận động: Dùng pointer.

Kiểu** m ;

int h,c ;

Cấp bộ nhớ:

m= new Kiểu* [h];

for (int i=0; i<h; ++i) m[i]= new Kiểu[c];

Địa chỉ phần tử hàng i cột j : & m[i][j]

Trị của phần tử hàng i cột j : m[i][j]

Page 36: Ôn tập ngôn ngữ C

9- Chuỗi ký tự trong C‘H’ ‘o’ ‘a’ ‘h’ ‘o’ ‘n’ ‘g’ ‘\0’100

char S[30]=“Hoa hong”;

Chuỗi ký tự tương tự mảng các ký tự. Có 1 điều khác là byte cuối cùng mang trị NULL (0) mang ý nghĩa byte đánh dấu kết thúc chuỗi.

S[i] là ký tự thứ i trong chuỗi.

Rất nhiều hàm thao tác chuỗi được khai báo trong string.h

Hàm scanf(“%s”, S) chỉ nhập được chuỗi không có khoảng trắng.

Nhập chuỗi có khoảng trắng bằng : gets(S);

Trước khi nhập ký tự, chuỗi, nên xả bộ đệm bàn phím bằng fflush(stdin); // stdio.h

Page 37: Ôn tập ngôn ngữ C

10- Cấu trúcCấu trúc = Kết qủa khái quát hóa nhiều dữ liệu đơn thành một thể thống nhất.Cú pháp

struct EMPLOYEE { char Code[10]; char Name [31]; double Salary; } ;

Biến cấu trúc EMPLOYEE e1 = { “E00001”, “Bill Gate” ,18000}; EMPLOYEE e2, e3; EMPLOYEE * List; int n; // mảng cấu trúc

với C chuẩn, có

typedef đứng trước

với C chuẩn, không có typedef

khi khai báo struct thì phải có từ

khóa struct đứng trước

Page 38: Ôn tập ngôn ngữ C

Thao tác trên cấu trúc

Truy xuất thành phần: strcpy(e2.Code, e1.Code);// gán thành phần chuỗi

e2.Salary = e1. Salary;Gán cấu trúc

e3 = e1; So sánh 2 cấu trúc: Thường dựa trên 1 vài thành phần của 2 cấu trúc.

if (e1.Salary < e2.Salary) { ... } if (strcmp (e1.Name, e2.Name) <0) { ... }