bÀi giẢng ngÔn ngỮlẬp trÌnh c/c++ -...
TRANSCRIPT
BÀI GIẢNG
NGÔN NGỮ LẬP TRÌNH C/C++
TS. Trần Đăng Hưng
NGÔN NGỮ LẬP TRÌNH C/C++
g gKhoa Công Nghệ Thông TinEmail: [email protected]
Nội Dung Nội Dung
Chương 1: Giới thiệuChương 2: Các cấu trúc điều khiểnChương 3: Hàm (functions)Chương 4: Mảng (arrays)Chương 5: Con trỏ (pointers)Chương 6: Kí tự và xâu (characters and strings)Chương 7: Cấu trúc và file (structures and files)Chương 7: Cấu trúc và file (structures and files)Chương 8: Tiền xử lý (preprocessors)
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Hình thức đánh giá
Dự lớp 30 %Bài thi cuối khóa 70%
Trắc nghiệm 40%Thực hành trên máy 60%
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Tài liệu tham khảo và trình biên dịch
SáchNgôn ngữ lập trình C – Quách Tuấn Ngọc
ẤKỹ thuật lập trình C – Phạm Văn Ấthttp://www.cprogramming.com/
Trình biên dịchTrình biên dịchTC 3.0 (giao diện giống Pascal)Visual C++ (windows)
(li )gcc (linux)Dev-C++ (windows)
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Chương 1: Giới thiệu
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Lịch sử ngôn ngữ lập trình CLịch sử ngôn ngữ lập trình C
Ra đời vào khoảng năm 1970, viết bởi Dennis Ritchie tại phòng thí nghiệm Bell.Ra đời dưới sự ảnh hưởng của các ngôn ngữ trước đó: BCPL (1967) và B (1970).Được dùng để viết hệ điều hành UnixĐược dùng để viết hệ điều hành UnixĐộc lập với phần cứng (khả chuyển)
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Chuẩn C (standard C)Chuẩn C (standard C)
Có rất nhiều phiên bản CANSI C (American National Standards Institute): 1989Các phiên bản update vào năm 1995 (C95), 1999 (C99)C và C++
C là bả ở ộ ủ C để hỗ lậ ì h h ớ đối C++ là bản mở rộng của C để hỗ trợ lập trình hướng đối tượng và thiết kế các phần mềm lớn.C không hẳn là một phần của C++, nhưng có thể sử dụng cả C à C hằ hiế kế h ì h li h hvà C++ nhằm thiết kế chương trình linh họat.
Nên thành thạo C trước khi học C++.
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Thư viện chuẩn CThư viện chuẩn C
Chương trình C chỉ bao gồm các modules được gọi là hàm (function)
ể ếCó thể tự viết các hàm Sử dụng các hàm trong thư viện chuẩn
Tránh phát minh lại bánh xe (avoid re inventing the wheel) ☺Tránh phát minh lại bánh xe (avoid re-inventing the wheel) ☺
Tránh việc tự viết các hàm đã có trong thư việnCác hàm trong thư viện chuẩn thường được viết cẩn thận và hiệu quả
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Các pha của chương trình C
Soạn thảo chương trình (edit)Đặt tên file có đuôi là .c (vidu.c, b i1 )bai1.c,…)
Tiền xử lý (preprocess)Biên dịch (compile)Biên dịch (compile)LinkLoadExcute
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Một chương trình C đơn giản-Ví dụ 1: In một dòng chữ ra màn hình-
Lời giải thíchĐặt trong cặp dấu /* …. */Trình biên dịch sẽ bỏ quaTrình biên dịch sẽ bỏ quaĐược dùng để chú thích cho các dòng lệnh
Chỉ dẫn tiền biên dịch#include <stdio h> - sử dụng các hàm vào/ra
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
#include <stdio.h> sử dụng các hàm vào/ra.Cần biết hàm nào nằm trong thư viện chuẩn nào
Một chương trình C đơn giảnMột chương trình C đơn giản-Ví dụ 1: In một dòng chữ ra màn hình-
Một chương trình C có thể có 1 hoặc nhiều hàm, nhưng buộc phải có hàm main()
ấ ể ốCặp dấu {} thể hiện các khối (block) chương trình, thân các hàm luôn được đặt trong cặp {}Lệnh printf() đưa nội dung ra màn hìnhLệnh printf() đưa nội dung ra màn hìnhKí tự \n đưa con trỏ xuống 1 dòng mớiHàm int main(), nên phải có lệnh return trả về một số(), p ệ ộnguyên, return 0; - hàm kết thúc bình thường.
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Hàm printf() và các kí tự điều khiển
Hàm printf(s): đưa nội dung của s ra màn hình, s có thể là hằng xâu kí tự, biến, hoặc biểu thức.
ố ằMột số hằng kí tự đặc biệt:\n – đưa con trỏ xuống dòng\r – đưa con trỏ về đầu dòng\r đưa con trỏ về đầu dòng\t – đưa con trỏ đến vị trí tab tiếp theo\a – bật 1 tiếng chuông\\ đ kí t \\\ - đưa ra kí tự \\” – đưa ra kí tự “
Ví dụ: thay đổi hàm printf() trong ví dụ 1.
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
ụ y p () g ụ
Ví dụ 2: Cộng hai số
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Nhập dữ liệu – scanf()
scanf(“%d”, &integer1) Đợi người dùng nhập giá trị, rồi gõ phím Enter
ếLưu giá trị vào biến ở bên phải toán tửĐổi giá trị được nhập sang kiểu dữ liệu của biến
= (toán tử gán)Gán giá trị cho biếnT á tử h i ôi Bi tToán tử hai ngôi - Binary operatorVí dụ:
sum = variable1 + variable2;
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Biến và cách đặt tên biến
Biến (variables)Tương ứng với các vùng trong bộ nhớ máy tínhỗ ế ểMỗi biến có tên, kiểu, kích thước, và giá trị
Khi biến được gán một giá trị mới, giá trị cũ bị ghi đèĐọc giá trị của các biến trong bộ nhớ không làm thay đổi các g g g ybiến trong bộ nhớ
Quy tắc đặt tên biếnChuỗi ký tự (chữ cái a z A Z Chuỗi ký tự (chữ cái a..z, A..Z, chữ số 0..9, dấu gạch dưới _ )Không được bắt đầu bằng chữ sốPhâ biệt hữ h hữ th ờ
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Phân biệt chữ hoa chữ thường.
Khai báo biến
Trước khi sử dụng các biến thì phải khai báo nó.Cách khai báo:
Kiểu_dữ_liệu tên_biến;hoặc
Kiểu dữ liệu tên biến = giá trị đầu;Kiểu_dữ liệu tên_biến giá_trị_đầu;
Khai báo nhiều biến cùng kiểu thì các biến cách nhau bởi dấu phẩyVí dụ:
int a;double n = 10;
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
float m = 10, p = 20;
Các kiểu dữ liệu chuẩn
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Các phép toán
Các phép toán số họcCộng/trừ: + -Phép nhân: *
Ví dụx = x + 2;
Phép nhân: * Phép chia: /Phép chia lấy dư: %
Q tắ tiê
y = x / 4;x = x % 10;
Quy tắc ưu tiênCác phép toán trong ngoặc được tính trướcCác ngoặc lồng nhau, các phép toán ở bên trong nhất được tính t ớ hấttrước nhấtTiếp theo là các phép nhân, chia, và phép lấy số dưCác phép toán được tính từ trái sang phải
à í ố ù
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Cộng và trừ được tính cuối cùngCác phép toán được tính từ trái sang phải
Ví dụ: thứ tựưu tiên các phép toánp p
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Các phép toán logic
Toán tử “và”: &&
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Toán tử “hoặc”: ||
Các phép toán trên bit
Toán tử: & - phép toán ANDToán tử: | - phép toán ORToán tử: ~ - phép đảo ngược bitToán tử: << - dịch bit sang trái
áToán tử: >> - dịch bit sang phải
Ví dụ: x = 10; y = x << 2; => y = 24x = 14; y = x >> 2; => y = 3
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
x = 9; y = 7; z = x % y; => z = 2
Các phép toán rút gọn
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Các phép toán rút gọn
Ví dụx = 10; y = 20; x += y; => x = 30x = 4; x *= 2; => x = 8x = 4; x = 2; => x = 8
Sự khác nhau giữa ++x và x++++x: giá trị của x sẽ tăng lên 1 đơn vị TRƯỚC khi thực hiện b ể h ó ủ biểu thức có mặt của x.x++: giá trị của x sẽ tăng lên 1 đơn vị SAU khi thực hiện biểu thức có mặt của x.
Ví dụ: x = 10; y = ++x + 2; => x = 11; y = 13x = 10; y = x++ + 2; => x = 11; y = 12
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
x = 10; y = x++ + 2; => x = 11; y = 12x = 10; y = 20; z = 2 * (++x – y++); => x = 11; y = 21; z = -18
Các đặc tả của hàm printf()
Để đưa nội dung của các biến (hoặc biểu thức) ra màn hình phải có các chỉ dẫn cụ thể cho từng loại dữ liệu.Ví dụ:
int x = 20; printf(“x = %d”, x);float x = 15.5; printf(“x = %f”, x);float x 15.5; printf( x %f , x);float x = 10; printf(“x = %6.2f”, x);int x = 10; y = 15.5; printf(“x = %6d, y = %6.2f”,x,y);
Cá kí đặ ảCác kí tự đặc tả%d (hoặc %i) int %c char
%f float %lf double
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
%f float %lf double
%s string %x hexadecimal
Các đặc tả của hàm scanf()
Để nhập các giá trị vào cho các biến cần phải có chỉ dẫn kiểu dữliệu cho từng biến.Ví dụ:
ố ê à íNhập hai số nguyên int từ bàn phímprintf(“Cho hai so nguyen a,b: “); scanf(“%d%d”,&a,&b);
Nhập một số int và một số float từ bàn phímprintf(“Cho so nguyen a va so thuc b: ”); scanf(“%d%f”,&a,&b);p ( g y ); ( , , );
Chú ý: Khi nhập xâu kí tự thì không có dấu & trước biến, vì bản thân tên xâu đã là con trỏ.
printf(“Cho mot xau ki tu: “); scanf(“%s”,st);Các kí tự đặc tả cho từng kiểu dữ liệu giống trong hàm printf()Các kí tự đặc tả cho từng kiểu dữ liệu giống trong hàm printf()Chú ý: Hàm printf() và scanf() đều nằm trong thư viện <stdio.h>, nên đầu chương trình phải khai báo thư viện bằng lệnh:
#include <stdio.h>
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Bài tập tại lớp
Bài 1.1: Viết chương trình in ra màn hình các câu chào khác nhau, mỗi câu trên một dòng.
ế ốBài 1.2: Viết chương trình nhập vào 2 số nguyên dương rồi đưa ra: tổng, tích, hiệu của 2 số đó.Bài 1 3: Giả sử ta có x = 10; y = 20; z = 30; Hãy cho Bài 1.3: Giả sử ta có x = 10; y = 20; z = 30; Hãy cho biết giá trị các biểu thức sau
Bt1 = 2*(x – y++) + z*(++z – x*y);Bt2 = (--x + --y + z--) * 2 + ++y*2;Bt3 = (x << 2) + (y | 3 + z | 8) + 2;Bt4 = ((x == y) && (x != z))
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
(( y) ( ))