Bài giảng Lập trình C - Chương 2: Giới thiệu ngôn ngữ C - Trần Minh Thái

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

Sử dụng công cụ hỗ trợ lập trình

Cấu trúc và cách thực thi chương trình

Các khái niệm, ký hiệu, quy tắc trong C

Kiểu dữ liệu cơ sở

Các toán tử

Các hàm thư viện C cơ bản

Bài tập

 

pptx 99 trang yennguyen 3060
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình C - Chương 2: Giới thiệu ngôn ngữ C - Trần Minh Thái", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình C - Chương 2: Giới thiệu ngôn ngữ C - Trần Minh Thái

Bài giảng Lập trình C - Chương 2: Giới thiệu ngôn ngữ C - Trần Minh Thái
Lập trình C  Chương 2. Giới thiệu ngôn ngữ C(6 tiết) 
Trần Minh Thái 
Email: minhthai@huflit.edu.vn 
Website: www.minhthai.edu.vn 
Cập nhật: 26/10/2016 
1 
Mục tiêu 
Giới thiệu ngôn ngữ lập trình C 
Sử dụng công cụ hỗ trợ lập trình 
Cấu trúc và cách thực thi chương trình 
Các khái niệm, ký hiệu, quy tắc trong C 
Kiểu dữ liệu cơ sở 
Các toán tử 
Các hàm thư viện C cơ bản 
Bài tập 
Lịch sử ra đời 
Ngôn ngữ C do Dennis Ritchie xây dựng từ năm 1972 tại Bell Labs (AT&T) với mục đích tạo ngôn ngữ để viết HĐH UNIX 
“The C programming language” do Kernighan và Ritchie viết năm 1978 
Năm 1983, viện chuẩn quốc gia Mỹ (American National Standards Institute - ANSI) thành lập một tiểu ban để chuẩn hóa C - ANSI Standard C 
3 
Đặc điểm 
Bộ lệnh phù hợp với PP LT có cấu trúc 
KDL phong phú, cho phép định nghĩa thêm kiểu dữ liệu mới 
Linh động về cú pháp, ít từ khóa 
Ngôn ngữ mạnh và mềm dẻo , được dùng để viết OS, chương trình điều khiển, soạn thảo văn bản, đồ hoạ, bảng tính và các chương trình dịch cho các ngôn ngữ lập trình khác 
4 
Khuyết điểm 
Cú pháp thuộc loại lạ và khó học. Nếu người lập trình đã học qua một ngôn ngữ khác thì sẽ dễ dàng tiếp cận 
Một số ký hiệu có nhiều nghĩa khác nhau ( dấu “*” là toán tử nhân, là khai báo con trỏ,  ), việc sử dụng đúng nghĩa các toán tử phụ thuộc vào ngữ cảnh sử dụng 
Việc truy nhập tự do vào dữ liệu, việc trộn lẫn các kiểu dữ liệu làm cho chương trình có phần bất ổn 
5 
Các bước thực thi chương trình C 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
/*My first C programming 
It was written on October 21, 2010*/ 
#include 
#include 
int main () 
{ 
//Lenh printf de xuat ra man hinh 
printf ( "Hello world\n" ); 
getch (); 
return 0; 
} 
Bước 1. Khởi động 
Bước 2. Tạo mới Project 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 3. Chọn ngôn ngữ C++, Win32 Console Application 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
1. Đặt tên Project 
3. Đặt tên Solution 
2. Chọn vị trí lưu 
Bước 5. Chọn Application Settings 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 6. Chọn Emply project nhấn Finish 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 7. Chọn Solution Explorer 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 9. Click phải vào thư mục Source Files trong cửa sổ Solution Explorer Chọn Add New Item  
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 9. Click phải vào thư mục Source Files trong cửa sổ Solution Explorer Chọn Add New Item  
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 10. Nhấn vào nút Add 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 11. Soạn thảo code trong file Source.cpp 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 12. Kiểm tra lỗi cú pháp (hoặc Shift + F6 ) 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 13. Nếu có lỗi sẽ xuất hiện cửa sổ bên dưới 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 14. Sửa lỗi bằng cách bổ sung thêm dòng sau vào bên dưới từ khoá #include 
#pragma warning(disable:4996) 
Bước 15. Thực thi chương trình: nhấn F5 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
Bước 15. Thực thi chương trình: nhấn F5 
Ví dụ viết chương trình xuất ra màn hình dòng chữ “Hello World” 
 Cấu trúc cơ bản của chương trình C 
Chỉ thị tiền xử lý 
(Preprocessor directive) 
Chú thích 
(Comment) 
Chú thích 
(Comment) 
Lệnh 
(Statement) 
Cấu trúc cơ bản của một chương trình C 
Mô tả chương trình: mục đích, tên tác giả, ngày viết, các thông tin khác  (Không bắt buộc) 
Chỉ thị tiền xử lý 
Hàm main() 
 Phân tích chương trình ví dụ 
23 
#include thể hiện đoạn chương trình kết hợp với file stdio.h (Standard Input/Output header file). 
 Tập tin này cho phép code sử dụng các lệnh có sẵn trong C để đọc dữ liệu từ bàn phím và xuất kết quả ra màn hình ( printf ) Chỉ thị tiền xử lý 
Chỉ thị tiền xử lý ( Preprocessor directive ) 
Các c hỉ thị tiền xử lý là những dòng được đưa vào trong mã của chương trình phía sau dấu # 
Những dòng này không phải là lệnh của chương trình nhưng chỉ thị cho tiền xử lý 
Tiền xử lý kiểm tra mã lệnh trước khi biên dịch thực sự và thực hiện tất cả các chỉ thị trước khi thực thi mã lệnh của các câu lệnh thông thường 
24 
Chỉ thị tiền xử lý ( Preprocessor directive ) 
Đặc điểm: 
Mô tả trên một dòng, không có dấu ; 
Trường hợp cần mô tả trên nhiều dòng dùng dấu \ ở cuối mỗi dòng 
25 
Chỉ thị tiền xử lý ( Preprocessor directive ) 
Các dạng: 
Định nghĩa macro ( macro definitions ): #define - #undef 
Kết hợp với điều kiện (conditional inclusions): #ifdef, #ifndef, #if, #endif, #else và #elif 
Điều khiển dòng lệnh ( line control ): #line 
Chỉ thị lỗi ( error directive ): #error 
Kết hợp file nguồn ( source file inclusion ): #include 
Chỉ thị pragma ( pragma directive ): #pragma 
26 
Chỉ thị tiền xử lý ( Preprocessor directive )1. Macro definitions: #define 
	 #define “định danh” “thay thế” 
Mục đích: T hay thế bất kỳ sự xuất hiện của “ định danh ” trong phần còn lại của các mã lệnh bằng “ thay thế ” . 
	 “ Thay thế ” : có thể là một biểu thức hoặc một lệnh 
Chỉ thị tiền xử lý ( Preprocessor directive )1. Macro definitions – Ví dụ 
#define MAX_SIZE 100 
int table1[ MAX_SIZE ]; 
int table2[ MAX_SIZE ]; 
int table1[ 100 ]; 
int table2[ 100 ]; 
Định nghĩa thay thế một hàm có tham số 
#include 
#define getmax(a, b) ((a)>(b)?(a):(b)) 
Chỉ thị tiền xử lý ( Preprocessor directive )1. Macro definitions – Ví dụ 
int main() 
{ 
 int x = 5, y; 
 y = getmax(x,2); 
 printf(y); 
 return 0; 
} 
Chỉ thị tiền xử lý ( Preprocessor directive )1. Macro definitions: #define 
	 # un def “định danh” # “tham số thay thế” 
Mục đích: “tham số thay thế” là một chuỗi ký tự (không cần đặt trong dấu ngoặc kép “”) 
#define str(x) # x 
printf(tr(test)); 
printf(“test”); 
Chỉ thị tiền xử lý ( Preprocessor directive )1. Macro definitions: #define 
	 # un def “định danh” “đối số 1” # “đối số 2” 
Mục đích: Nối đối số “đối số 1” với “đối số 2” 
#define glue(a, b) a ## b 
glue(print, f)("test”); 
printf(“test”); 
Chỉ thị tiền xử lý ( Preprocessor directive )1. Macro definitions: #undef 
	 # un def “định danh” 
Mục đích: Bỏ định nghĩa cho “định danh” 
#define MAX_SIZE 100 
int table1[MAX_SIZE]; 
#undef MAX_SIZE 
#define MAX_SIZE 200 
int table2[MAX_SIZE]; 
int table1[ 100 ]; 
int table2[ 200 ]; 
Chỉ thị tiền xử lý ( Preprocessor directive )2. Kết hợp với điều kiện (conditional inclusions): #ifdef 
	 # if def “định danh” 
	lệnh; 
Mục đích: Cho phép chương trình biên dịch nếu “định danh” được định nghĩa 
Ví dụ: 
#ifdef MAX_SIZE 
	int table[MAX_SIZE]; 
#endif 
Chỉ thị tiền xử lý ( Preprocessor directive )2. Kết hợp với điều kiện (conditional inclusions): #ifdef  #endif 
	 # if def “định danh” 
	lệnh; 
	 #endif 
Mục đích: Cho phép chương trình biên dịch nếu “định danh” được định nghĩa 
Ví dụ: 
#ifdef MAX_SIZE 
	int table[MAX_SIZE]; 
#endif 
Chỉ thị tiền xử lý ( Preprocessor directive )2. Kết hợp với điều kiện (conditional inclusions): #ifndef  #endif 
	 # ifn def “định danh” 
	lệnh; 
	 #endif 
Mục đích: Cho phép chương trình biên dịch nếu “định danh” CHƯA được định nghĩa. 
Ví dụ: 
#ifndef MAX_SIZE 
	#define MAX_SIZE 100 
#endif 
int table[MAX_SIZE]; 
Chỉ thị tiền xử lý ( Preprocessor directive )2. Kết hợp với điều kiện (conditional inclusions): #if, #else, #elif  #endif 
Mục đích: Chỉ thị #if , #else và #elif dùng để chỉ định một số điều kiện để thực hiện mã lệnh. Điều kiện là một biểu thức hằng số. 
# if “điều kiện” 
	lệnh; 
#elif “điều kiện” 
	lệnh; 
#else 
	lệnh; 
#endif 
# if “điều kiện” 
	lệnh; 
#else 
	lệnh; 
#endif 
Chỉ thị tiền xử lý ( Preprocessor directive )2. Kết hợp với điều kiện (conditional inclusions): #if, #else, #elif  #endif 
#if MAX_SIZE>200 
	#undef MAX_SIZE 
	#define MAX_SIZE 200 
#elif MAX_SIZE<50 
	#undef MAX_SIZE 
	#define MAX_SIZE 50 
#else 
	#undef MAX_SIZE 
	#define MAX_SIZE 100 
#endif 
int table[MAX_SIZE]; 
Chỉ thị tiền xử lý ( Preprocessor directive )3. Điều khiển dòng lệnh ( line control ): #line 
#line number "filename" 
Mục đích: Chỉ thị #line cho phép kiểm soát dòng trong tập tin mã lệnh cũng như tên tập tin muốn hiển thị khi xảy ra lỗi 
“filename” có thể là một chuỗi ký tự bất kỳ cần hiển thị 
Chỉ thị tiền xử lý ( Preprocessor directive )4. Chỉ thị lỗi ( error directive ): #error 
Mục đích: Chỉ thị này sẽ ngừng quá trình biên dịch 
#ifndef __cplusplus 
#error A C++ compiler is required! 
#endif 
Chỉ thị tiền xử lý ( Preprocessor directive )5. Chỉ thị pragma ( pragma directive ): #pragma 
Mục đích: Chỉ thị này được sử dụng để xác định các lựa chọn khác nhau cho các trình biên dịch 
Các tùy chọn này được cụ thể cho các platform và trình biên dịch sử dụng 
Chỉ thị tiền xử lý ( Preprocessor directive )6. Kết hợp file nguồn ( source file inclusion ): #include 
Mục đích: Chỉ thị này sẽ thay thế toàn bộ nội dung của header ( thư viện có sẵn – dùng cặp dấu ) hay một tập tin “file” ( tự định nghĩa thêm – dùng cặp dấu nháy kép “ ” ) . 
Các tập tin này chứa định nghĩa các hàm được sử dụng trong chương trình 
#include 
hoặc 
#include "file" 
Một số tập tin thư viện thường dùng 
stdio.h: định nghĩa các hàm vào ra chuẩn như các hàm xuất dữ liệu (printf()), nhập giá trị cho biến (scanf()), nhận ký tự từ bàn phím (getc()), in ký tự ra màn hình (putc()), nhập một chuỗi ký tự từ bàm phím (gets()), xuất chuỗi ký tự ra màn hình (puts()) 
conio.h : định nghĩa các hàm vào ra trong chế độ DOS, như clrscr(), getch(),  
Một số tập tin thư viện thường dùng 
math.h: Định nghĩa các hàm toán học như: abs(), sqrt(), log(), log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),  
alloc.h: định nghĩa các hàm vào ra cấp thấp gồm các hàm open(), _open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),  
Hàm int main() 
Hàm main() là bắt buộc và được thực hiện đầu tiên khi thực thi chương trình C 
Các lệnh trong hàm main() được đặt trong cặp dấu { } 
Chương trình sẽ thực hiện những lệnh theo thứ tự trong hàm main() 
Hàm int main() 
Lệnh 
	Lệnh thực hiện một chức năng nào đó (khai báo, gán, xuất, nhập, ) và được kết thúc bằng dấu chấm phẩy (;) 
Khối lệnh 
	Khối lệnh gồm nhiều lệnh và được đặt trong cặp dấu ngoặc { } 
Các lệnh trong hàm main() 
Lệnh printf ( "Hello world\n" ); dùng để xuất ra màn hình dòng chữ “Hello World” 
Lệnh getch (); dùng để chờ nhấn một phím bất kỳ trên bàn phím để tiếp tục thực hiện tiếp lệnh kế 
Lệnh return 0; dùng để kết thúc hàm main() – Kết thúc chương trình và trả về giá trị mã là 0 
!!! Mỗi lệnh đều được kết thúc bằng dấu ; 
Chú thích (comment) 
Được lập trình viên ghi chú hay diễn giải trong chương trình 
Đây không phải là lệnh 
Chú thích một dòng: dùng // trước chú thích 
Chú thích cho nhiều dòng: dùng cặp dấu /* và */ để bao nội dung chú thích 
/*My first C programming 
It was written on October 21, 2010*/ 
//Lenh printf de xuat ra man hinh 
Mở Project có sẵn 
Mở Project có sẵn 
Tập các ký tự thường dùng trong C 
Chữ cái hoa: A, B, ..., Z 
Chữ cái thường: a, b, c, ..., z 
Chữ số: 0, 1, ..., 9 
Các ký hiệu toán học: + - * / = ( ) % 
Ký hiệu gạch nối: _ 
C ác ký hiệu đặc biệt như: . ,  ; [] {} ? ! \ & | % # ... 
K hông được dùng các ký hiệu như: α , φ , Ω , π ,  hoặc tiếng việt có dấu: â, ă, ô 
50 
Từ khóa (keyword) 
auto 
double 
int 
struct 
break 
else 
long 
switch 
case 
enum 
register 
typedef 
char 
extern 
return 
union 
continue 
for 
signed 
void 
do 
if 
static 
while 
default 
goto 
sizeof 
volatile 
const 
float 
short 
unsigned 
Định danh (identifier Name) 
Dùng để đặt tên biến, tên hằng, tên hàm,  
Bắt đầu bằng một ký tự 
Các ký tự trong tên biến chỉ có thể là các ký tự chữ, số hoặc dấu gạch dưới (_) 
Không được trùng với các từ khoá 
Không được trùng với phạm vi khai báo 
Tên dễ hiểu, súc tích và gợi nhớ 
Phân biệt chữ HOA và thường 
52 
Các định danh nào sau đây là không hợp lệ? 
Tinh Tong 
Tinh-Tong 
Tinh_Tong 
x_Mu_2 
2_Mu_2 
Tien$ 
default 
yahoo.com 
Các kiểu dữ liệu (Data type) 
Kiểu cơ sở: tích hợp sẵn trong ngôn ngữ 
Ký tự 
Số nguyên 
Số thực 
Kiểu void 
Kiểu tự định nghĩa: dùng những kiểu cơ sở để xây dựng thành những kiểu dữ liệu mới cho phù hợp với bài toán 
Mảng, xâu ký tự, danh sách liên kết, cây,  
54 
Kiểu số nguyên (Integer type) 
Data type 
Size 
Value range 
char 
1 byte 
-128 đến 127 
hoặc 0 đến 255 (Ký tự dạng m ã ASCII ) 
unsigned char 
1 byte 
0 đến 255 
signed char 
1 byte 
-128 đến 127 
int 
2 hoặc 
4 bytes 
-32,768 đến 32,767 
hoặc -2,147,483,648 đến 2,147,483,647 
unsigned int 
2 hoặc 
4 bytes 
0 đến 65,535 
hoặc 0 đến 4,294,967,295 
short 
2 bytes 
-32,768 đến 32,767 
unsigned short 
2 bytes 
0 đến 65,535 
long 
4 bytes 
-2,147,483,648 đến 2,147,483,647 
unsigned long 
4 bytes 
0 đến 4,294,967,295 
Kiểu số thực (Floating-Point Type) 
56 
Type 
Size 
Value range 
Precision 
float 
4 bytes 
1.2E-38 to 3.4E+38 
6 chữ số phần thập phân 
double 
8 bytes 
2.3E-308 to 1.7E+308 
15 chữ số phần thập phân 
long double 
10 bytes 
3.4E-4932 to 1.1E+4932 
19 chữ số phần thập phân 
Biến (Variable) 
Một biến đại diện cho một vùng nhớ hay tập các vùng nhớ trên bộ nhớ chính của máy tính 
Biến để lưu trữ các giá trị do người dùng nhập vào hoặc các giá trị tạm thời trong quá trình tính toán 
Mỗi biến sẽ có tên và kiểu dữ liệu tương ứng 
Phải khai báo biến trước khi sử dụng 
57 
Khai báo biến 
Cú pháp 	 tên biến; 
Ví dụ: 
int a; //Khai báo biến để lưu số nguyên tên a 
float c; //Khai báo biến để lưu số thực tên c 
Khai báo nhiều biến cùng kiểu 
 tên biến1, tên biến2, tên biến3; 
 Ví dụ: int a, x, y; 
58 
Lấy kích thước của biến/ kiểu dữ liệu 
Kích thước của một số kiểu dữ liệu phụ thuộc vào hệ điều hành cụ thể của mỗi máy 
Để biết chính xác kích thước kiểu dữ liệu hay biến: 
	 sizeof(tên kiểu/ biến) 
 Toán tử sizeof trả về kích thước theo đơn vị byte 
59 
Khai báo & gán giá trị ban đầu cho biến 
 tên biến = giá trị hằng; 
Ví dụ: 
	int a = 5; 
	float b = 5.4f, c = 9.2f; 
	char ch = ‘n’; 
60 
Các loại giá trị hằng (literal) 
Hằng số: Đó là các giá trị xác định, một hằng số có thể là nguyên (có kiểu dữ liệu int, hay long int) hay thực (có kiểu dữ liệu là float, double, long double). 
Hằng ký tự: Được đặt trong dấu nháy đơn. Ví dụ: 'A', 'a' tương ứng với giá trị nguyên 65, 97 trong bảng mã ASCII. 
Hằng chuỗi: Là tập hợp các ký tự được đặt trong cặp dấu nháy kép " ". Ví dụ: “ Lap trinh C " 
61 
Qui định viết giá trị hằng (literal) 
Kiểu 
Qui định suffix 
Ví dụ 
int 
123 
long 
Có ký tự l hoặc L ở cuối 
123L 
unsigned int 
Có ký tự u hoặc U ở cuối 
123U 
unsigned long 
Có ký tự ul hoặc UL ở cuối 
123UL 
float 
Có ký tự f hoặc F ở cuối 
123.45F 
double 
123.45 
long double 
Có ký tự l hoặc L ở cuối 
123.45L 
Qui định viết giá trị hằng (literal) 
Một hằng số nguyên có thể thể hiện theo dạng số hệ thập phân (decimal), hệ bát phân (octal) hay hệ thập lục phân (hexadecimal) 
Tiền tố (prefix) là 0x hay 0X thể hiện cho hexadecimal và tiền tố 0 cho octal 
Ví dụ: 0x39F (hexadecimal), 056 (octal) 
Định nghĩa biến hằng (constant) 
K hông thay đổi giá trị trong khi thực thi chương trình 
Dùng toán tử #define 
	 Cú pháp: #define 
 	 Ví dụ:   #define MAX 100 
Dùng từ khoá const 
	 const = ; 
	 Ví dụ: 	 const  int  MAX = 100; 
Tên hằng số nên viết bằng chữ in HOA 
64 
Biểu thức (Expression) 
Biểu thức là một sự kết hợp giữa các toán tử (operator) và các toán hạng (operand) theo đúng một trật tự nhất định. 
Mỗi toán hạng có thể là một hằng, một biến hoặc một biểu thức khác. 
Trong trường hợp, biểu thức có nhiều toán tử, ta dùng cặp dấu ngoặc đơn ( ) để chỉ định toán tử nào được thực hiện trước. 
int n = -100; 
int x = 089, int a = 0x137E 
unsigned int i = -100; 
int = 2.9, b = 0x34G; 
long m = 2, p = 4; 
int 2k; 
float y = y * 2; 
char ch = “b”, m = ‘\n’; 
66 
Cho biết những lỗi sai và sửa lại cho đúng 
Chuyển đổi kiểu trong câu lệnh gán 
Giá trị của biểu thức bên phải dấu = được tự động chuyển thành kiểu dữ liệu của biến bên trái dấu = 
Ví dụ: 
int i=100; 
double d = 123.456; 
Nếu thực thi lệnh i = d ; thì i = 123 (chuyển đổi kiểu mất mát thông tin) 
Nếu thực thi lệnh d = i ; thì d = 100.0 (chuyển đổi kiểu không mất mát thông tin) 
Chuyển đổi từ KDL có miền giá trị nhỏ sang KDL có miền giá trị lớn hơn: char int long float double thì không mất thông tin 
Khi chuyển đổi từ KDL có miền giá trị lớn sang KDL có miền giá trị nhỏ hơn: double float long int char thì mất thông tin 
Chuyển đổi kiểu trong câu lệnh gán 
Chuy ể n ki ể u trong bi ể u th ứ c 
Khi các hằng và biến có kiểu khác nhau trong một biểu thức thì giá trị của chúng phải được chuyển thành cùng kiểu trước khi thực hiện các phép toán 
Trình biên dịch sẽ thực hiện việc chuyển kiểu (convert) tự động đến kiểu của toán hạng có kiểu lớn nhất. Việc chuyển kiểu này gọi là thăng cấp kiểu (type promotion) 
Chuy ể n ki ể u trong bi ể u th ứ c 
Ví dụ: 
char ch; 
int i; 
float f; 
double d; 
Ép kiểu (casting) 
Dùng để ép kiểu của một biểu thức thành một kiểu theo ý muốn của lập trình viên 
Cú pháp 
	(kiểu dữ liệu) biểu thức 
Ví dụ: 
	float kq = (float)5/2; 
Toán tử số học (arithmetic operator) 
Ký hiệu 
Ý nghĩa 
Ghi chú 
+ 
Cộng 
- 
Trừ 
* 
Nhân 
/ 
Chia 
Đối với 2 số nguyên thì kết quả là chia lấy phần nguyên 
% 
Chia lấy phần dư 
Chỉ áp dụng cho 2 số nguyên 
Toán tử gán phức hợp 
Ký hiệu 
Ví dụ 
Ý nghĩa 
+= 
n += 25 
n = n + 25 
-= 
n -= 25 
n = n – 25 
*= 
n *= 25 
n = n * 25 
/= 
n /= 25 
n = n / 25 
%= 
n %= 25 
n = n % 25 
Toán tử so sánh 
Stt 
Ký hiệu 
Ý nghĩa 
1 
> 
Lớn hơn 
2 
< 
Nhỏ hơn 
3 
>= 
Lớn hơn hoặc bằng 
4 
<= 
Nhỏ hơn hoặc bằng 
5 
= = 
Bằng nhau 
6 
!= 
Khác nhau 
Phép toán so sánh 
Các toán tử khác 
PHÉP TOÁN LOGIC 
1 
! 
NOT 
2 
&& 
AND 
3 
|| 
OR 
TOÁN TỬ TĂNG GIẢM 
1 
++ 
Tăng 1 
Nếu toán tử tăng giảm đặt trước thì tăng giảm trước rồi tính biểu thức hoặc ngược lại. 
2 
-- 
Giảm 1 
PHÉP TOÁN THAO TÁC TRÊN BIT 
1 
& 
AND 
2 
| 
OR 
3 
^ 
XOR 
4 
<< 
Dịch trái 
5 
>> 
Dịch phải 
6 
~ 
Lấy phần bù theo bit 
75 
int a, b; 
b=a%2 + a/2 + --a; 
Với a = 17 Kết quả:	a = ?; b = ? 
Với a = 3 Kết quả:	 a = ?; b = ? 
---------------------------------------- 
int a, b; 
b=a/3 + a--; 
Với a = 8 Kết quả: a = ?; b = ? 	 
Với a =21 Kết quả: a = ?; b = ? 	 
Cho biết kết quả của đoạn chương trình sau: 
(ĐK)?: 
Ví dụ: 
int n; 
(n%2==0)? n ++ : n --; 
 nếu n = 10 thì giá trị n = 11 
 nếu n = 21 thì giá trị n = 20 
n = 10 (n%2==0): đúng 
thực hiện lệnh n++ = 10++ = 11 
n = 21 (n%2==0): sai 
 thực hiện lệnh n-- = 21-- = 20 
Toán tử điều kiện 
Cho biết kết quả đoạn chương trình sau: 
int k; 
m = (k%3==0)?k++: k--; 
Với k =10 Kết quả: m = ?	 
Với k =15 Kết quả: m = ?	 
78 
Toán tử điều kiện 
Thứ tự ưu tiên toán tử 
Toán tử 
Độ ưu tiên 
Trình tự kết hợp 
() [] -> 
1 
Từ trái qua phải 
! ~ ++ -- - + * & sizeof 
2 
Từ phải qua trái 
* / % 
3 
Từ trái qua phải 
+ - 
4 
Từ trái qua phải 
> 
5 
Từ trái qua phải 
= > 
6 
Từ trái qua phải 
== != 
7 
Từ trái qua phải 
& 
8 
Từ trái qua phải 
| 
9 
Từ trái qua phải 
^ 
10 
Từ trái qua phải 
&& 
11 
Từ trái qua phải 
|| 
12 
Từ trái qua phải 
? : 
13 
Từ phải qua trái 
= += -= *= /= %= 
14 
Từ phải qua trái 
79 
Hàm xuất chuỗi/ giá trị ra màn hình 
Thư viện 
Xuất: 
	 printf(“hằng chuỗi”); 
	 Vd: 	printf(“Xin chao cac ban”); 
	 printf(“chuỗi định dạng”, đối số 1, đối số 2); 
	Vd:	int a=5; 
	float b=2.7; 
	printf(“Gia tri cua bien a=%d, b=%f“, a, b); 
80 
Có thể có nhiều đối số theo thứ tự của chuỗi định dạng tương ứng 
Hàm nhập giá trị cho biến từ bàn phím 
Thư viện 
Cú pháp 
	scanf(“chuỗi định dạng”, & tên biến); 
	 Vd: 	int x; 
	scanf(“%d”, & x); 
81 
Địa chỉ của biến 
( & tên biến) 
Chuỗi định dạng 
Stt 
Tên kiểu 
Ý nghĩa 
Chuỗi định dạng 
Kiểu số thực 
1 
float 
%f 
2 
double 
%lf 
3 
long double 
%lf 
Kiểu số nguyên/ xâu ký tự   
1 
char 
Ký tự 
%c 
Số nguyên 
%d 
2 
unsigned char 
Số nguyên dương 
%d 
3 
int 
Số nguyên 
%d 
4 
unsigned int 
Số nguyên dương 
%u 
5 
long 
Số nguyên 
%ld 
6 
unsigned long 
Số nguyên dương 
%lu 
7 
char * 
Chuỗi 
%s 
82 
Xuất những ký tự đặc biệt 
Ký tự 
Ý nghĩa 
Ví dụ 
\’ 
Xuất dấu nháy đơn 
printf(“ \’ ”); 
Kết quả: ‘ 
\” 
Xuất dấu nháy đôi 
printf( “ \” ”); 
Kết quả: “ 
\\ 
Xuất dấu chéo ngược “\” 
printf(“ \\ ”); 
Kết quả: \ 
\0 
Ký tự Null 
Dùng để gán ký tự kết thúc của chuỗi 
\a 
Alert : Tiếng bip 
83 
Xuất ký tự điều khiển 
Ký tự 
Ý nghĩa 
Ví dụ 
\t 
Tab vào một đoạn ký tự trắng 
printf(("xyz\tzyx”); 
Kết quả: xyz zyx 
\b 
Xuất lùi về sau 
printf("xyz\t\bzyx”); 
Kết quả: xyzzyx 
\n hoặc endl 
Xuống dòng 
printf("xyz\nzyx”); 
Kết quả: xyz 
	 zyx 
\r 
Về đầu dòng 
printf("xyz\rzyx”); 
Kết quả: zyx 
84 
Ví dụ hàm nhập xuất – Cách 1 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
int a, b, tong; 
float thuong; 
printf ( "Nhap vao so nguyen a: " ); 
scanf ( "%d" , &a); 
printf ( "Nhap vao so nguyen b: " ); 
scanf ( "%d" , &b); 
tong = a + b; 
thuong = ( float )a / b; 
printf ( "Tong %d + %d = %d " , a, b, tong); 
printf ( "\nThuong %d : %d = %f " , a, b, thuong); 
getch (); 
return 0; 
} 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
int a, b; 
printf ( "Nhap vao so nguyen a: " ); 
scanf ( "%d" , &a); 
printf ( "Nhap vao so nguyen b: " ); 
scanf ( "%d" , &b); 
printf ( "Tong %d + %d = %d " , a, b, a + b); 
printf ( "\nThuong %d : %d = %f " , a, b, ( float )a / b); 
getch (); 
return 0; 
} 
Ví dụ hàm nhập xuất – Cách 2 
Kết quả của chương trình 
Cần hiển thị kết quả chia gồm 2 số phần lẻ 
Thay đổi tham số của printf() 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
int a, b; 
printf ( "Nhap vao so nguyen a: " ); 
scanf ( "%d" , &a); 
printf ( "Nhap vao so nguyen b: " ); 
scanf ( "%d" , &b); 
printf ( "Tong %d + %d = %d \n" , a, b, a + b); 
printf ( "Thuong %d : %d = %.2f \n" , a, b, ( float )a / b); 
getch (); 
return 0; 
} 
Có thể áp dụng cho số nguyên 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
printf ( "Thoi gian: %d : %d : %d \n" , 2, 5, 30); 
getch (); 
return 0; 
} 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
printf ( "Thoi gian: %02d : %02d : %02d \n" , 2, 5, 30); 
getch (); 
return 0; 
} 
Viết chương trình in ra màn hình thông tin cá nhân theo mẫu sau: 
*------------------------* 
* Thong tin ca nhan * 
*------------------------* 
 Ho ten: 
 Lop: 
 Thong tin lien lac: 
         - Dia chi: 
         - So dien thoai: 
91 
Bài tập 1 
Cách trình bày chương trình 
Mỗi lệnh nằm trên một dòng. Cuối dòng lệnh PHẢI có dấu chấm phẩy (;) 
Lệnh quá dài có thể được viết thành nhiều dòng sao cho mỗi lệnh phải được quan sát trọn vẹn trong pham vi cửa sổ lệnh 
92 
Cách trình bày chương trình (tt) 
Không nên đặt nhiều lệnh trên cùng một dòng, ngay cả các khai báo biến, nếu các biến có khác kiểu cũng nên đặt trên các dòng khác nhau. 
Có các chú thích, ghi chú đầy đủ 
Chương trình phân cấp các khối lệnh con theo từng cột 
Nhập vào giờ phút và giây, đổi ra giây và xuất kết quả ra màn hình 
Nhập vào 3 số nguyên a, b và c, tính giá trị trung bình cộng của 3 số trên và xuất kết quả ra màn hình 
Nhập vào 1 số nguyên dương n gồm 3 chữ số, hãy in ra chữ số ở hàng trăm, hàng chục và hàng đơn vị 
Nhập vào 2 số thực x và y, in ra màn hình số lớn nhất ( nếu x = y thì xuất giá trị x ) 
Bài tập 2 – Viết các chương trình sau 
Làm tròn một số thực x được nhập từ bàn phím thành số nguyên 
Nhập vào một số đo nhiệt độ (độ Fahrenheit) và xuất ra nhiệt độ tương đương (độ Celsius) theo công thức: 
Nhập vào 3 số nguyên a, b và c, cho biết 3 số vừa nhập có thứ tự tăng dần (a<b<c) không? Và xuất kết quả 
Bài tập 2 (tt) 
Các lỗi thường gặp khi viết chương trình 
Sử dụng lệnh nhưng KHÔNG khai báo thư viện hàm 
KHÔNG khai báo các biến sử dụng trong chương trình 
Lưu một giá trị vào một biến nhưng KHÔNG cùng kiểu dữ liệu với biến 
Sử dụng biến trong một biểu thức khi CHƯA có giá trị 
Các lỗi thường gặp khi viết chương trình 
Dùng phép chia nhưng KHÔNG ép kiểu cho số nguyên 
	Ví dụ: 
	 double kq = 3.2 + 2/3 + 1.5; 
	thì kq sẽ bằng 4.7 
	 thay vì 
	 double kq = 3.2 + (double) 2/3 + 1.5; 
	thì kq sẽ bằng 5.36666666666667 
97 
Bài tập về nhà 
Viết chương trình in kích thước và miền giá trị [ minmax ] của tất cả kiểu dữ liệu cơ bản, riêng kiểu số thực in thêm thông tin về độ chính xác 
Hướng dẫn: Toán tử sizeof(), và 
#include 
#include 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
printf ( "* int: size = %d byte(s); value range = [ %d ... %d ]" , 
	 sizeof ( int ), INT_MIN , INT_MAX ); 
//Tuong tu cho nhung kieu khac 
getch (); 
return 0; 
} 
Q&A 

File đính kèm:

  • pptxbai_giang_lap_trinh_c_chuong_2_gioi_thieu_ngon_ngu_c_tran_mi.pptx