TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH

Nhập môn lập trình Các thành phần cơ bản TS. Ngô Hữu Dũng

Nội dung

 Giới thiệu ngôn ngữ lập trình C

 Trình biên dịch/thông dịch  Cấu trúc chương trình  Định dạng trong C  Biến, kiểu dữ liệu  Hằng số, từ khóa, toán tử

 Thư viện

 stdio.h, stdlib.h, math.h, string.h, ctype.h, time.h

 Nhập xuất căn bản

 Nhập: scanf, cin, gets  Xuất: printf, cout, puts

2

Nhập môn lập trình - Cơ bản

Ngôn ngữ lập trình C

 Được phát triển bởi Dennis Ritchie tại phòng thí nghiệm AT&T Bell vào đầu thập niên 1970

 C được dùng trong hệ điều

hành UNIX và phát triển cùng với hệ điều hành này

 C đã lan rộng ra nhiều hệ điều hành khác và trở thành ngôn ngữ phổ dụng nhất

3

Nhập môn lập trình - Cơ bản

Trình biên dịch/Trình thông dịch

Mã nguồn Source code

Mã máy Machine Code

Source Code Trình biên dịch Compiler

Trình thông dịch Interpreter

Input

Output

Input Output Executable Program

4

Nhập môn lập trình - Cơ bản

Trình biên dịch: Phân tích chương trình và biên dịch thành mã máy. Trình thông dịch: Phân tích và thực thi chương trình cùng lúc.

Biên dịch và chạy chương trình

 IDE – Integrated

Editor

Source code file.c

Development Environment  Trình soạn thảo

 Biên soạn mã nguồn

Compiler

 Trình biên dịch

 Phân tích và biên dịch mã nguồn

Object code file.obj

 Trình liên kết

Libraries

Linker

Executable code file.exe

 Kết hợp các mã đối tượng và thư viện thành mã thực thi

IDE (Integrated Development Environment)

5

Nhập môn lập trình - Cơ bản

thành mã đối tượng

Sửa lỗi - debug  Lỗi cú pháp

Semantic Errors

 Phát hiện bởi trình biên

Editor

dịch

Syntactic Errors

 Lỗi về từ khóa, cú pháp,

Source code file.c

ngữ pháp  Lỗi ngữ nghĩa

Compiler

Object code file.obj

 Được phát hiện bởi người sử dụng  Lỗi về kết quả của

chương trình

Libraries

Linker

 Lỗi xuất hiện trong quá trình thực thi chương trình

Executable code file.exe

 Đúng cú pháp nhưng sai

kết quả

6

Nhập môn lập trình - Cơ bản

Quiz

 Mục đích của việc “biên dịch” là chuyển đổi

 A. Ngôn ngữ bậc thấp sang bậc cao  B. Chương trình thành mã nguồn  C. Mã nguồn sang mã máy  D. Mã máy sang mã nguồn

 Trường hợp nào sau đây là “lỗi ngữ nghĩa”?

 A. Lỗi khi biên dịch chương trình  B. Chương trình tính sai kết quả  C. Lỗi do gõ sai một câu lệnh  D. Lời chú thích không có nghĩa

7

Nhập môn lập trình - Cơ bản

Định dạng trong C

 Có phân biệt giữa chữ in HOA và chữ in thường!  Các dòng trống, khoảng trắng, lời chú thích đều

được trình biên dịch bỏ qua

 Các dấu thụt dòng giúp chương trình dễ đọc, rõ

ràng.  Có thể dùng tab hoặc dấu cách

 Câu lệnh được kết thúc bằng dấu chấm phẩy ;  Chuỗi ký tự được đặt giữa hai dấu hai nháy

"Chuỗi"

 Một ký tự được đặt giữa hai dấu một nháy 's'

8

Nhập môn lập trình - Cơ bản

Lời chú thích

 Hai cách ghi chú thích

 // chú thích dòng  /* chú thích

khối*/

 Ví dụ 1. /* Chương trình C 2. ** In ra màn hình dòng chữ Hello 2017!*/

3. #include

//Khai báo thư viện

9

Nhập môn lập trình - Cơ bản

Biến

 Biến được dùng để lưu trữ dữ liệu và kết quả tính

toán  Kiểu dữ liệu: Nguyên, thực, ký tự, chuỗi, mảng, cấu

trúc, con trỏ…

 Tên biến: Do người lập trình tự đặt

 Biến phải được khai báo trước khi sử dụng  Cú pháp: ;  int year;  float score;  char kyTu;  char name[50];

10

Nhập môn lập trình - Cơ bản

Biến (2)

 Giá trị của biến có thể thay

// Khởi tạo

int year; year = 2016;// Gán

đổi  Khởi tạo biến:

 int year = 2016;

 Phép gán:

year Biến

2016 Vùng nhớ

 year = last_year + 1;  Một vùng nhớ sẽ được cấp phát tương ứng với kích cỡ của biến  Mỗi ô nhớ có một địa chỉ

Kiểu dữ liệu?

riêng

11

Nhập môn lập trình - Cơ bản

Kiểu dữ liệu  int: Kiểu số nguyên

 2 hoặc 4 bytes (16 hoặc 32 bits)  -32,768 → 32,767 hoặc -2,147,483,648 → 2,147,483,647

 float: Kiểu số thực

 4 bytes (32 bits): 1.2E-38 → 3.4E+38, độ chính xác 24 bits

 double: Kiểu số thực có độ chính xác cao hơn float

 8 bytes (64 bits): 2.3E-308 → 1.7E+308, độ chính xác 53 bits

 char: Kiểu ký tự

 1 byte, ví dụ: char exit = 'e';

 char []: Kiểu chuỗi

Độ chính xác?

 ví dụ: char name[10] = "Quang";  bool: Kiểu luận lý, có giá trị true hoặc false  1 byte, ví dụ: bool kt = true; //C++

12

Nhập môn lập trình - Cơ bản

Số chấm động – floating-point numbers

 Biểu diễn số thực

 Ví dụ: 12’345 = 1.2345 x 104  Hay 1.2345E+4

significand x base exponent

 Trị số x hệ cơ số số mũ  Float: Độ chính xác đơn  Double: Độ chính xác đôi

Kiểu dữ liệu Dấu Mũ Trị số Tổng số bit Độ chính xác

Float 1 bit 8 bits 23 bits 32 bits (4 bytes) 24 bits (Dấu + trị số)

13

Nhập môn lập trình - Cơ bản

Double 1 bit 11 bits 52 bits 64 bits (8 bytes) 53 bits (Dấu + trị số)

Tên biến

 Phải bắt đầu bằng một chữ hoặc dấu gạch dưới (_), tiếp sau đó

có thể kết hợp giữa chữ, số và dấu gạch dưới.  Không được trùng với từ khóa có sẵn của C  Hai biến không được trùng tên nhau  Có phân biệt giữa chữ hoa và chữ thường  Độ dài tùy thích, tuy nhiên không nên đặt tên quá dài  Nên đặt tên có nghĩa, dễ hiểu

 Keywords

 auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

14

Nhập môn lập trình - Cơ bản

Quiz – Tên biến

 Những tên biến nào sau đây đúng hay sai?

12. _mot_Ngoi_Sao 13. T_T 14. ^_^ 15. edthbdl_mbcln2h 16. dienTich@ 17. Chu-Vi-Hinh-Tron 18. mayViTinh 19. Tong+Hieu 20. 24gio

1. 1ngoi_sao 2. bienDem1 3. phepNhân 4. donVi$ 5. ngoi_nha 6. int 7. kiem-tra 8. A&T 9. ____dien___tich 10. +hai_so 11. luy thua

15

Nhập môn lập trình - Cơ bản

Quiz - khai báo biến

 Hãy khai báo các biến phù hợp cho các nội dung sau

1. Mã ID 2. Năm sinh 3. Họ và tên 4. Chiều cao 5. Cân nặng 6. Giới tính: Chỉ cần lưu giá trị ‘F’ (female) hoặc ‘M’ (male) 7. Tuổi 8. Đã lập gia đình? Chỉ cần lưu có (true) hoặc không (false) 9. Địa chỉ email 10. Nghề nghiệp

16

Nhập môn lập trình - Cơ bản

// Khai báo thư viện // Chương trình chính

Quiz - khai báo biến (tham khảo) 1. #include 2. int main() 3. { 4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

// ID kiểu số nguyên // Hoặc ID kiểu chuỗi // Ví dụ: 1999 // Tên kiểu chuỗi // Kiểu số thực // Kiểu số thực // Kiểu ký tự: ‘F’, ‘M’ // Tuổi kiểu số nguyên // Có: True, Chưa: False // Email kiểu chuỗi // Ví dụ: “Ky su CNTT”

15.

int ID; char ID_s[20]; int namSinh; char hoVaTen[100]; float chieuCao; float canNang; char gioiTinh; int tuoiTac; bool giaDinh; char email[100]; char ngheNghiep[50]; //… return 0;

16. 17.} 17

Nhập môn lập trình - Cơ bản

Chuyển đổi kiểu

 Đặt (Kiểu dữ liệu) phía trước biểu thức để chuyển đổi kiểu dữ

liệu cho kết quả của biểu thức  f = (float) i1 / i2; i = (int)f;

 Chia một số nguyên cho một số nguyên: Kết quả là số

nguyên  i1=5; i2=10; f=i1/i2; //Cảnh báo, f=0.00  f=(float)i1/i2;

// OK, f=0.50

 Chia một số thực cho một số nguyên hoặc chia một số

nguyên cho một số thực: Kết quả là số thực  i=5; f=10; i1 = i/f;  f1=i/f; f2=i/10.0;

// Cảnh báo, i1 = 0 // OK! f1=f2=0.50

18

Nhập môn lập trình - Cơ bản

Chuyển đổi kiểu (2)

 Gán một số nguyên vào một biến kiểu thực

 f = i; // Cảnh báo việc chuyển đổi  f1 = 10; // OK! f1 = 10.000000  f2 = (float)i; // OK!

 Gán một số thực vào một biến kiểu nguyên:

Mất phần thập phân (sau dấu chấm)  i1 = 9.5; i2 = f;//Cảnh báo, i1 = 9  i1 = (int)9.5; i2 = (int)f; // OK!

19

Nhập môn lập trình - Cơ bản

Quiz – Chuyển đổi kiểu dữ liệu

 Chuyển đổi kiểu dữ liệu phù hợp (nếu cần)

1.

2.

3.

4.

5.

6.

7.

8.

int a = 13 / 2; float b = a / 4; float c = 10 / a; float d = 1 / 5; float e = (3 / 5) * a; float f = (7 + 3) / a; float g = 5.4 * 3 / a; float h = (a + 3) / 2; float i = (5 / 9) * (a – 32); 9. 10. float j = a / 2 + 10 / (2 * b);

20

Nhập môn lập trình - Cơ bản

Quiz – Chuyển đổi kiểu dữ liệu (1)

1.

1.

2.

2.

3.

3.

4.

4.

5.

5.

6.

6.

7.

7.

8.

8.

 Chuyển đổi kiểu dữ liệu phù hợp (nếu cần) int a = 13 / 2; float b = (float)a / 4; float c = 10.0 / a; float d = 1.0 / 5; float e = (3.0 / 5) * a; float f = (float)(7 + 3) / a; float g = 5.4 * 3 / a; float h = (a + 3) / 2.0; float i = (5 / 9.0) * (a – 32); 9. 10. float j = a / 2.0 + 10 / (2 * b);

int a = 13 / 2; float b = a / 4; float c = 10 / a; float d = 1 / 5; float e = (3 / 5) * a; float f = (7 + 3) / a; float g = 5.4 * 3 / a; float h = (a + 3) / 2; float i = (5 / 9) * (a – 32); 9. 10. float j = a / 2 + 10 / (2 * b);

21

Nhập môn lập trình - Cơ bản

Hằng số trong C

 Giá trị không đổi suốt chương trình

 Hằng số có kiểu

// char

dữ liệu  Số nguyên  Số thực  Ký tự  Chuỗi

 Khai báo hằng số

// int #define a 45 // unsigned int #define b 125u // long int #define c 87l // unsigned long int #define d 23ul // Cơ số 8 #define e 057 // Cơ số 16 #define f 0xfee #define g 3.14159 // float #define h 314159E-5 // float #define i 'a' #define j "morning" // string const int k = 2016; const float l = 2.016; const char m = '4'; const char n[] = "afternoon"; #define o 048

/* ERROR! Hệ cơ số 8

 #define  const

không có số 8 */

#define p 59E #define q .E59

// ERROR! // ERROR!

22

Nhập môn lập trình - Cơ bản

Toán tử

Toán học arithmetic Luận lý logical So sánh comparison member access Gán assignment Tăng / Giảm increment decrement

!a a && b a || b ++a --a a++ a-- a[b] *a &a a->b a.b a == b a != b a < b a > b a <= b a >= b

a = b a += b a -= b a *= b a /= b a %= b a &= b a |= b a ^= b a <<= b a >>= b

23

Nhập môn lập trình - Cơ bản

+a -a a + b a - b a * b a / b a % b ~a a & b a | b a ^ b a << b a >> b

Toán tử gán - assignment

 Cho a = 7, b = 2. Số trên bit: a = 00000111, b = 00000010

Mô tả

Kết quả

Gán giá trị của b cho biến a Phép cộng: a = a + b Phép trừ: a = a – b Phép nhân: a = a * b Phép chia lấy nguyên: a = a / b Phép chia lấy dư: a = a % b Phép AND trên bit: a = a & b Phép OR trên bit: a = a | b Phép XOR trên bit: a = a ^ b

a = 2 a = 7 + 2 = 9 a = 7 – 2 = 5 a = 7 * 2 = 14 a = 7 / 2 = 3 a = 7 % 2 = 1 a = 0111&0010 = 2 a = 0111|0010 = 7 a = 0111^0010 = 5

Toán tử a = b a += b a -= b a *= b a /= b a %= b a &= b a |= b a ^= b a <<= b Phép dịch trái trên bit: a = a << b a = a<<2 =11100=28 a >>= b Phép dịch phải trên bit: a = a >> b a = a>>2 =0001 = 1

24

Nhập môn lập trình - Cơ bản

Toán tử toán học - arithmetic

 Cho a = 7, b = 2. Số trên bit: a = 00000111, b = 00000010

Trừ a

c = -7 c = 7 + 2 = 9 c = 7 – 2 = 5 c = 7 * 2 = 14 c = 7 / 2 = 3 c = 7 % 2 = 1 c = 11111000 = –8 c = 0111&0010 = 2 c = 0111|0010 = 7 c = 0111^0010 = 5 c = a<<2 =11100=28 c = a>>2 =0001 = 1

25

Nhập môn lập trình - Cơ bản

c = -a c = a + b Phép cộng c = a - b Phép trừ c = a * b Phép nhân c = a / b Phép chia lấy nguyên c = a % b Phép chia lấy dư Phép NOT trên bit c = ~a c = a & b Phép AND trên bit c = a | b Phép OR trên bit c = a ^ b Phép XOR trên bit c = a << b Phép SHIFT LEFT trên bit c = a >> b Phép SHIFT RIGHT trên bit

Toán tử trên bit – bitwise operations

 Các phép toán trên bit

#include int main() {

A

0

0

1

1

B

0

1

0

1

// 0011 0100 // 0001 1101

A & B

0

0

0

1

// 0001 0100

A | B

0

1

1

1

// 0011 1101

A ^ B

0

1

1

0

~A

1

1

0

0

// 0010 1001

~B

1

0

1

0

<<

Cho a = 00110100, a<<2= 11010000

>>

Cho a = 00110100, a>>2= 00001101

// 0000 1101

int a = 52; int b = 29; int c; c = a & b; printf("%d & %d = %d\n", a, b, c); c = a | b; printf("%d | %d = %d\n", a, b, c); c = a ^ b; printf("%d ^ %d = %d\n", a, b, c); c = ~a; // 1100 1011 printf("~%d = %d\n", a, c); c = a << 2; // 1101 0000 printf("%d << 2 = %d\n", a, c); c = a >> 2; printf("%d >> 2 = %d\n", a, c); return 0;

}

26

Nhập môn lập trình - Cơ bản

Toán tử tăng / giảm - increment / decrement

 Cho a = 7, b = 2

Phép toán Kết quả

b = ++a

b = --a

b = a++

b = a--

Mô tả Cộng a lên một đơn vị trước khi tính Tương đương: a = a + 1; b = a; Trừ a đi một đơn vị trước khi tính Tương đương: a = a – 1; b = a; Cộng a lên một đơn vị sau khi tính Tương đương: b = a; a = a + 1; Trừ a đi một đơn vị sau khi tính Tương đương: b = a; a = a - 1;

Tương đương: a = a + 1; c = a – b; b = b – 1;

a = 8 b = 8 a = 6 b = 6 a = 8 b = 7 a = 6 b = 7 a = 8 b = 6 c = 1

27

Nhập môn lập trình - Cơ bản

Ví dụ: c = ++a - b--

Độ ưu tiên

Category

Toán tử () [] -> . ++ --

Postfix

+ - ! ~ ++ - - (type)* & sizeof

Unary

* / %

Multiplicative

+ -

Additive

<< >>

Shift

< <= > >=

Relational

== !=

Equality

&

Bitwise AND

^

Bitwise XOR

|

Bitwise OR

&&

Logical AND

||

Logical OR

?:

Conditional

= += -= *= /= %=>>= <<= &= ^= |=

Assignment

,

Comma

28

Nhập môn lập trình - Cơ bản

Quiz – Phép toán

 Hãy cho biết kết quả của các phép toán sau int main() {

int a = 7, b = 2, c, d, e, f, g, h, i, j, k; b += 2; c = ++a; d = a--; e = a/2; f = a%2; g = a++ - 7%3; h = 11%3 + ++a; i = (a / 3) % 4; j = --a % 2; k = a/4*3 ; return 0;

}

29

Nhập môn lập trình - Cơ bản

Quiz – Phép toán (1)

 Hãy cho biết kết quả của các phép toán sau int main() {

// b = b + 2 = 4 // ++a = 8, c = a = 8 // d = a = 8, a-- = 7 // e = 7 / 2 = 3 // f = 7 % 2 = 1 // 7%3 = 1, g = a – 1 = 6, a++ = 8 // ++a = 9, 11%3 = 2, h = 2 + 9 = 11

// --a = 8, j = 8 % 2 = 0 // a/4 = 2, k = 2 * 3 = 6

int a = 7, b = 2, c, d, e, f, g, h, i, j, k; b += 2; c = ++a; d = a--; e = a/2; f = a%2; g = a++ - 7%3; h = 11%3 + ++a; i = (a / 3) % 4; // a / 3 = 3, i = 3 % 4 = 3 j = --a % 2; k = a/4*3 ; return 0;

}

30

Nhập môn lập trình - Cơ bản

Toán tử luận lý – logical

 Những phép toán luận lý

Cho A = True, B = False

Toán tử

Mô tả

Ví dụ

&&

A && B: False

||

A || B: True

Toán tử AND, nếu và chỉ nếu cả hai toán hạng điều đúng thì kết quả phép toán là đúng Toán tử OR, nếu và chỉ nếu cả hai toán hạng đều sai thì kết quả phép toán là sai

!

Toán tử NOT, thực hiện phép phủ định

!A: False !B: True !A || B: False A && !B: True

31

Nhập môn lập trình - Cơ bản

Toán tử so sánh – comparison

 Những phép so sánh

#include

Cho A = 10, B = 20

int main() {

Toán tử Mô tả Ví dụ

== Bằng nhau (A == B) sai

!= Khác nhau (A != B) đúng

> Lớn hơn (A > B) sai

< Nhở hơn (A < B) đúng

>= (A >= B) sai

int A=10, B=20; if (A==B) printf("A = B"); if (A!=B) printf("A ≠ B"); if (A>B) printf("A > B"); if (A=B) printf("A ≥ B"); if (A<=B) printf("A ≤ B"); return 0;

<=

}

32

Nhập môn lập trình - Cơ bản

(A <= B) đúng Lớn hơn hoặc bằng Nhở hơn hoặc bằng

Các thư viện

 Các thư viện định nghĩa sẵn các hàm hay kiểu dữ liệu

 Cú pháp khai báo: #include

các hàm nhập xuất chuẩn, các thao tác với tập

tin…  getchar, putchar, printf, scanf, gets, fopen, fclose, remove, …  các hàm chuyển đổi kiểu dữ liệu, cấp phát bộ

nhớ…  atof, atoi, atol, strtol, free, malloc, abs, rand, srand…

các hàm về toán học

 sqrt, pow, ceil, floor, trunc, abs, sin, cos…

33

Nhập môn lập trình - Cơ bản

Các thư viện (2)

các hàm xử lý chuỗi ký tự

 strcpy, strcat, strlen, strstr, strcmp, strchr, memset…

các hàm xử lý ký tự

 toupper, tolower…

các hàm nhập xuất

 gets, puts, cin, cout…

các hàm xử lý về thời gian

 time, clock, localtime, difftime, time_t, struct tm…

34

Nhập môn lập trình - Cơ bản

Hàm thường dùng ở thư viện stdio.h  Khai báo: #include  Hàm printf: Xuất ra màn hình

 Nguyên mẫu hàm: int printf(const char * format, ... );  printf(“Hello world!”);  printf(“a = %d.\n”, so_nguyen);

 Hàm scanf: Nhập dữ liệu từ bàn phím

 Nguyên mẫu hàm: int scanf( const char * format, ... );  scanf("%d", &so_nguyen);  scanf("%f", &so_thuc);  scanf("%c", &ky_tu);

 Hàm gets: Nhập chuỗi từ bàn phím

 char name[50];

gets(name);

35

Nhập môn lập trình - Cơ bản

Hàm thường dùng ở thư viện stdlib.h

 Khai báo: #include  Hàm rand: Tạo số nguyên ngẫu nhiên

// a có giá trị từ 0 đến 32767 // b có giá trị từ 0 đến 89

 Nguyên mẫu hàm: int rand (void);  a = rand();  b = rand()%90;  c = rand()%90 + 10;

// c có giá trị từ 10 đến 99

 Hàm srand: Khởi tạo số ngẫu nhiên

 Nguyên mẫu hàm: void srand (unsigned int seed);  Ví dụ:

 srand(time(NULL));  d = rand() % 101 – 50;

36

Nhập môn lập trình - Cơ bản

Hàm thường dùng ở thư viện math.h  Khai báo: #include  Hàm sqrt: Tính căn bậc hai

 Nguyên mẫu hàm: double sqrt (double x);  x = sqrt(9);  y = sqrt(x + 1);

// Căn bậc hai của 9 // Căn bậc hai của x + 1

 Hàm pow: Tính lũy thừa

 Nguyên mẫu hàm: double pow (double base, double exponent);  x = pow(3, 2);  y = pow(x, 4);

// ba mũ hai // x mũ bốn

 Hàm floor, ceil: Làm tròn // z = 4.0 // w = 5.0

 z = floor(4.3);  w = ceil(4.3); 37

Nhập môn lập trình - Cơ bản

Hàm thường dùng ở thư viện string.h  Khai báo: #include  Hàm strlen: Tính chiều dài của chuỗi

 Nguyên mẫu hàm: size_t strlen(const char * str)  a = strlen(“hello”);

// a = 5  Hàm strcpy: Sao chép chuỗi

// Khai báo chuỗi

 Nguyên mẫu hàm: char * strcpy(char * dest, const char * src)  char hello[50];  strcpy(hello, “Hello ”);  Hàm strcat: Nối chuỗi

 Nguyên mẫu hàm: char * strcat( char * dest, const char * src)  char name[50] = “Tuan”;  strcat(hello, name); // hello = “Hello Tuan!”

 Hàm strcmp: So sánh chuỗi

 Nguyên mẫu hàm: int strcmp( const char * str1, const char * str2 )  a = strcmp(name, “Tuan”);

// hello = “Hello ”

38

Nhập môn lập trình - Cơ bản

// a = 0

Hàm thường dùng ở thư viện ctype.h  Khai báo: #include  Hàm tolower: Chuyển ký tự sang chữ thường

 Nguyên mẫu int tolower ( int c );  char c = ‘N’; tolower(c);

// c = ‘n’

 Hàm toupper: Chuyển ký tự sang chữ in

// c = ‘N’

 Nguyên mẫu int toupper ( int c );  char c = ‘n’; toupper(c);  Các hàm kiểm tra ký tự

 isalnum(c): Trả về true (khác 0) nếu c là số hoặc chữ  isalpha(c): Trả về true nếu c là chữ  islower(c): Trả về true nếu c là chữ thường  isupper(c): Trả về true nếu c là chữ in

39

Nhập môn lập trình - Cơ bản

Quiz – Tính toán

 Cho một biến số nguyên x, viết biểu thức tính:

 a =

() ()

 b =

 c =

(

3)( + 1)

 d = + 2

 e =

+

 = ( + 2)

(

2)

 g =

+ ( + 1)

40

Nhập môn lập trình - Cơ bản

Quiz – Tính toán (tham khảo)

 Cho một biến số nguyên x, viết biểu thức tính:

a = (x+1)/2.0;

 a =

() ()

b = 4*(x+2)/3.0;

 b =

c = (1/3.0)*(x-3)*(x+1);

 c =

3)( + 1)

(

d = sqrt(pow(x,2)+2);

 d = + 2

e = sqrt((x+4)/4.0 + (x-3)/2.0);

 e =

+

(

 = ( + 2)

2) f = (x+2)*sqrt((5/3.0)*(pow(x,4)-2));

g = (x+1)/3.0*sqrt(pow(x+2,4));

 g =

( + 2)

41

Nhập môn lập trình - Cơ bản

Nhập dữ liệu  Chú ý nhập đúng kiểu dữ liệu  Nhập số nguyên

 int a; scanf(“%d”, &a);

 Nhập số thực

 float b; scanf(“%f”, &b);

#include int main() {

 Nhập ký tự

 char c; scanf(“%c”, &c);

 Nhập chuỗi ký tự

// ký tự trắng

int a; float b; char c; char s[50];

 char s[50];  fflush(stdin); // xoá bộ đệm đầu vào  gets(s);  scanf(“%s”, &s);  scanf(“%[^\n]s”, &s); // enter

scanf("%d", &a); scanf("%f", &b); scanf("%c", &c); fflush(stdin); gets(s); . . . return 0;

42

Nhập môn lập trình - Cơ bản

}

Xuất dữ liệu

 Chú ý xuất đúng kiểu

1. #include 2. int main() 3. { 4.

5.

dữ liệu

int a; float b; char c; char s[50];

6.

 Xuất số nguyên  printf(“%d”, a);

7.

8.

 Xuất số thực

9.

 printf(“%f”, b);

10.

 Xuất ký tự

scanf("%d", &a); scanf("%f", &b); scanf("%c", &c); fflush(stdin); gets(s);

11.

12.

13.

14.

 printf(“%c”, c);  Xuất chuỗi ký tự  printf(“%s”, s);

printf("a = %d\n", a); printf("b = %f\n", b); printf("c = %c\n", c); printf("s = %s\n", s); return 0;

15. 16. }

43

Nhập môn lập trình - Cơ bản

Định dạng biểu diễn dữ liệu  %[flags][width][.precision][length]specifier specifier

Kết quả Ví dụ

Số thập lục phân kiểu thực

0xb.f3p-2, 0XB.F3P-2

Số nguyên có dấu Số nguyên không dấu Số bát phân không dấu Số thập lục phân không dấu Số thực Ký hiệu khoa học Ký tự Chuỗi ký tự Địa chỉ con trỏ In dấu % -95, 23 7235 610 7fa, 7FA 392.65 3.92e+2, 3.92E+2 a laptrinh b8000000 % %d, %i %u %o %x, %X %f, %F %e, %E %c %s %p %%

Dạng ngắn của %e, %E hoặc %f,%F

392.65

%a, %A

44

Nhập môn lập trình - Cơ bản

%g, %G

Định dạng biểu diễn dữ liệu

 %[flags][width][.precision][length]specifier

flags Mô tả width Số ký tự tối thiểu được in ra

Canh trái trong width .precision Số ký tự sau dấu chấm động –

+ Buộc in dấu + hoặc –

(space) Ký tự trống trước dữ liệu

0 In số 0 trước dữ liệu

length d i u o x

(none) int unsigned int

hh signed char unsigned char

h short int unsigned short int

45

Nhập môn lập trình - Cơ bản

l long int unsigned long int

Minh hoạ biểu diễn dữ liệu 1. #include 2. int main() 3. { 4.

5.

//Integer: 1999

6.

7.

//Zero: 0001999

8.

46

Nhập môn lập trình - Cơ bản

printf("Char: %c %c \n", 'a', 65);//Char: a A printf("Integer: %d \n", 1999); printf("Space: %7d \n", 1999); //Space: 1999 printf("Zero: %07d \n", 1999); printf("Float: %.2f\n", 3.1416); //Float: 3.14 printf("Float: %6.2f\n", 3.1416); //Float: 3.14 9. 10. printf("String: %s\n", "Chuoi"); //String: Chuoi 11. printf("Hexa: %x\n", 100); //Hexa: 64 //Octo: 144 12. printf("Octo: %o\n", 100); //Hexa: 0x64 13. printf("Hexa: %#x\n", 100); 14. printf("Octo: %#o\n", 100); //Octo: 0144 15. return 0; 16.}

Mã escape  Mã escape dùng để đại diện

Description

Escape code

newline

\n

cho những ký tự đặc biệt hoặc những chuỗi, thao tác khó trình bày trực tiếp

carriage return

\r

tab

\t

vertical tab

\v

backspace

\b

form feed (page feed)

\f

 Mã escape được đặt trong chuỗi định dạng của lệnh printf

alert (beep)

\a

single quote (')

\'

 Ví dụ: printf(“A\tB\n”);

double quote (")

\"

question mark (?)

\?

backslash (\)

\\

47

Nhập môn lập trình - Cơ bản

Kết thúc Bài 2

 Giới thiệu ngôn ngữ lập trình C

 Trình biên dịch/thông dịch  Cấu trúc chương trình  Định dạng trong C  Biến, kiểu dữ liệu  Hằng số, từ khóa, toán tử

 Thư viện

 stdio.h, stdlib.h, math.h, string.h, ctype.h, time.h

 Nhập xuất căn bản

 Nhập: scanf, cin, gets  Xuất: printf, cout, puts

48

Nhập môn lập trình - Cơ bản

Bài tập 2.1: Biến và kiểu biến

 Viết chương trình nhập vào từ bàn phím và xuất ra màn

hình các thông tin sau 1. Mã ID 2. Năm sinh 3. Họ và tên 4. Chiều cao 5. Cân nặng 6. Giới tính: Chỉ cần lưu giá trị ‘F’ (female) hoặc ‘M’ (male) 7. Tuổi 8. Đã lập gia đình? Chỉ cần lưu có (true) hoặc không (false) 9. Địa chỉ email 10. Nghề nghiệp

49

Nhập môn lập trình - Cơ bản

Bài tập 2.2: Nhập, tính toán, xuất  Viết chương trình nhập vào một số nguyên x, tính toán và

xuất ra màn hình giá trị các biểu thức sau:

()

 a =

 c =

() (

3)( + 1)

 b =  d = + 2

 e =

+

 = ( + 2)

(

2)

 g =

+ ( + 1)

50

Nhập môn lập trình - Cơ bản

Bài tập 2.3: Chữ số

 Viết chương trình tạo ra một số nguyên ngẫu nhiên gồm 3 chữ số, hãy xác định các chữ số hàng đơn vị, hàng chục và hàng trăm của số nguyên ấy.

 Ví dụ: Nhập vào 365

 Xuất ra: 3 tram, 6 chuc, 5 don vi.

 Gợi ý:

 Số hàng đơn vị: a % 10  Số hàng chục: (a % 100) / 10  Số hàng trăm: (a % 1000) / 100  Số hàng ngàn: (a % 10000) / 1000  Số hàng chục ngàn: (a % 100000) / 10000  Số hàng trăm ngàn: (a % 1000000) / 100000 51 Nhập môn lập trình - Cơ bản

Bài tập 2.4: Thời gian

 Viết chương trình nhập vào tổng số giây, quy đổi và xuất

ra màn hình ngày, giờ, phút, giây tương ứng.

 Ví dụ:

 Nhập vào tổng số giây là 90061  Xuất ra: 1 ngày, 1 giờ, 1 phút, 1 giây

 Gợi ý:

 Tương tự bài 2.3

52

Nhập môn lập trình - Cơ bản

Bài tập 2.5 – Số ngẫu nhiên

 Viết chương trình xuất ra màn hình các số ngẫu nhiên sau

 a có giá trị trong khoảng từ 0 đến 89  b có giá trị trong khoảng từ 10 đến 99  c có giá trị trong khoảng từ -30 đến 30  d có giá trị giữa a và b bất kỳ nhập từ bàn phím

 Gợi ý:

 rand()%10 tạo ra số có giá trị từ 0 đến 9

53

Nhập môn lập trình - Cơ bản