ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

26
BÀI GING NGÔN NGLP TRÌNH C/C++ TS. Trn Đăng Hưng NGÔN NGLP TRÌNH C/C++ Khoa Công NghThông Tin Email: [email protected]

Transcript of ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

Page 1: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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]

Page 2: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 3: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 4: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 5: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

Chương 1: Giới thiệu

Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN

Page 6: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 7: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 8: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 9: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 10: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 11: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 12: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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 ụ

Page 13: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

Ví dụ 2: Cộng hai số

Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN

Page 14: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 15: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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.

Page 16: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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;

Page 17: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

Các kiểu dữ liệu chuẩn

Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN

Page 18: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 19: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 20: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 21: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/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

Page 22: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 23: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 24: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 25: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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

Page 26: ngôn ngữ lập trình c/c++ ngôn ngữ lập trình c/c++

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