Bài giảng Kỹ thuật lập trình - Bài 2: Lập trình cấu trúc với C - Đào Trung Kiên

pdf 21 trang ngocly 2640
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Bài 2: Lập trình cấu trúc với C - Đào Trung Kiên", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_bai_2_lap_trinh_cau_truc_voi_c.pdf

Nội dung text: Bài giảng Kỹ thuật lập trình - Bài 2: Lập trình cấu trúc với C - Đào Trung Kiên

  1. Bài 2: Lập trình cấu trúc với C 1 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  2. Chương trình C đơn giản nhất /* hello.c */ #include int main() { printf("Xin chao!\n"); return 0; }  Chương trình in ra màn hình: Xin chao! 2 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  3. Phân tích chương trình ví dụ  Chương trình trên có:  Định nghĩa hàm main()  Một dòng chú thích  Một dẫn hướng biên dịch (dùng thư viện)  Một câu lệnh xuất ra màn hình (đầu ra chuẩn)  Một câu lệnh trả kết quả  Chương trình thực hiện:  Yêu cầu máy tính in ra một dòng chữ ra màn hình  Trả kết quả về là 0 cho chương trình gọi nó 3 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  4. Hàm main()  Là hàm dùng để bắt đầu chạy một chương trình C, và bắt buộc phải có  Khai báo bằng một trong hai cú pháp:  int main() { }  int main(int argc, char* argv[]) { }  Trong C++ có thể khai báo hàm main() với kiểu trả về là void  Khi bắt đầu chạy, một số tham số sẽ được truyền cho chương trình; và khi kết thúc, chương trình sẽ trả về một giá trị. VD:  C:\>copy /B a.dat b.dat 4 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  5. Ví dụ 2: Tính diện tích hình tròn #include int main() { float R; printf("Ban kinh = "); scanf("%f", &R); printf("Dien tich hinh tron: %.3f\n", 3.14 * R*R); return 0; }  Kết quả chạy: Ban kinh = 1 Dien tich hinh tron: 3.140 5 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  6. Hiển thị ra màn hình  Cú pháp:  printf("Chuỗi định dạng", );  Các ký hiệu định dạng thường dùng: Ký hiệu Kiểu Ký hiệu Kiểu %f, %e, %g, %lf double, float %x int (hex) %d int %o int (oct) %c char %u unsigned int %s chuỗi ký tự %p con trỏ  Định dạng:  %[flags][width][.precision]type  Ví dụ: %+15.5f 6 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  7. Nhập dữ liệu từ bàn phím  Cú pháp:  scanf("Chuỗi định dạng", );  Ví dụ:  int tuoi; scanf("%d", &tuoi);  float can_nang; scanf("%f", &can_nang);  char ten[20]; scanf("%s", ten); 7 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  8. Biến, kiểu và giá trị (variables, types, values) 8 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  9. Biến (variable) và kiểu (type)  Biến chứa giá trị, có thể thay đổi trong khi chạy  Biến cần được khai báo trước khi dùng và có kiểu  Phạm vi toàn cục hoặc chỉ trong nội bộ một hàm  Trong C chuẩn, biến nội bộ cần được khai báo ở đầu hàm, trước các câu lệnh  Khai báo biến: ;  int a, b, c;  unsigned char u;  Các kiểu cơ bản:  char, int, short, long  float, double 9 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  10. Câu lệnh gán (assignment)  Thay đổi giá trị của biến bằng giá trị mới  Cú pháp:  = hoặc  Ví dụ:  count = 100;  value = cos(x);  i = i + 2;  Biến có thể được khởi tạo giá trị khi khai báo (nếu không sẽ có giá trị không xác định):  int count = 100;  char key = 'K'; 10 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  11. Hằng (constant)  Tương tự như biến nhưng giá trị của nó không thể bị thay đổi trong quá trình chạy  Khai báo bằng cách thêm từ khoá const ở trước  Hằng trong C có chiếm bộ nhớ giống như biến  Ví dụ:  const double PI = 3.14159;  const char* name = "Nguyen Viet Tung";  PI = 3.14; /* sẽ báo lỗi */  Cách khác để khai báo hằng: tạo macro không chiếm bộ nhớ (nhưng không có kiểu)  #define PI 3.14159 11 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  12. Các kiểu dữ liệu cơ bản (primitive types) Kiểu Độ dài (Kích thước) Loại char 1 Số nguyên, ký tự int (tuỳ thuộc: 2, 4, 8) Số nguyên short 2 Số nguyên long 4 Số nguyên long long 8 Số nguyên float 4 Số thực (dấu chấm động) double 8 Số thực (dấu chấm động) void 0 Không có ý nghĩa xác định  Ký tự trong C được hiểu là số nguyên 8 bit  Toán tử sizeof() tính độ dài của biến hoặc kiểu dữ liệu theo số byte:  sizeof(x)  sizeof(int) 12 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  13. Ép kiểu (type casting)  Là việc chuyển từ một biểu thức có kiểu nào đó sang một kiểu khác  Chuyển kiểu ngầm định:  float a = 30;  int b = 'a';  Chuyển kiểu tường minh:  int a = (int)5.6; /* lấy phần nguyên */  float f = (float)1/3;  Không phải kiểu nào cũng chuyển được cho nhau  char* s = 2.3; /* không dịch được */  int x = "7"; /* dịch được nhưng sai */ 13 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  14. Kích thước biến, giới hạn giá trị  Số có dấu và không dấu: signed char (8 bits) –128 ~ +127 signed short (16 bits) –32768 ~ +32767 signed int (32 bits) –2147483648 ~ +2147483648 signed long (32 bits) –2147483648 ~ +2147483648 unsigned char (8 bits) 0 ~ +255 unsigned short (16 bits) 0 ~ +65535 unsigned int (32 bits) 0 ~ +4294967295 unsigned long (32 bits) 0 ~ +4294967295  Chú ý:  Ngầm định là có dấu  Kiểu int có kích thước tuỳ thuộc vào cấu hình 14 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  15. Kiểu liệt kê (enum)  Dùng để liệt kê các giá trị có thể có của một kiểu  Cú pháp: enum { };  Ví dụ:  enum DongVat { Meo, Cho, Ho, Bao };  enum Ngay { Thu2 = 2, Thu3, Thu4, Thu5, Thu6, Thu7, CN = 1 };  Sử dụng:  enum DongVat dv = Meo;  dv = Bao;  enum Ngay n = Thu5; 15 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  16. Kiểu cấu trúc (struct)  Khai báo các kiểu phức tạp, chứa các biến con  Cú pháp: struct { };  Ví dụ:  struct SinhVien { char ten[20]; int nam_sinh; int khoa; };  Sử dụng:  struct SinhVien sv = {"Le Duc Tho", 1984, 56};  sv.nam_sinh = 1985;  sv.khoa = 54; 16 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  17. Định nghĩa tên mới cho kiểu (typedef)  Để dùng với tên mới ngắn gọn hơn, hoặc mang ý nghĩa khác  Cú pháp: typedef ;  Ví dụ:  typedef double ChieuCao;  typedef unsigned char byte;  typedef enum DongVat DV;  typedef struct { } SinhVien;  Khai báo biến  ChieuCao d = 165.5;  byte b = 30;  DV dv = Cho; 17 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  18. Kiểu mảng (array)  Chứa các phần tử cùng kiểu trên một vùng nhớ liên tục. Bản chất của mảng là con trỏ tĩnh.  Cú pháp: [ ];  Ví dụ:  int tuoi[6] = { 23, 50, 18, 40, 25, 33 }; 23 50 18 40 25 33 0 1 2 3 4 5  Truy xuất phần tử: số thự tự tính từ 0  tuoi[3] = 20;  Mảng hai chiều (và nhiều chiều):  float ma_tran[10][20]; ma_tran[5][15] = 1.23; 18 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  19. Một số kiểu khác  Kiểu boolean:  Không có trong C  Dùng int/char hoặc enum để thay thế:  typedef int bool; const int false = 0, true = 1;  typedef enum {false, true} bool;  Kiểu chuỗi ký tự:  char* ho_ten = "Nguyen Viet Tung";  char dia_chi[50] = "So 1, Dai Co Viet, Ha Noi";  Kiểu union: chứa các biến thành phần ở cùng một địa chỉ bộ nhớ  union color { struct {unsigned char R,G,B,A;} s_color; unsigned int i_color; }; 19 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  20. Kiểu kết hợp  Có thể định nghĩa kết hợp giữa các kiểu cùng loại hoặc khác loại  typedef struct { char ho_ten[20]; unsigned int tuoi; enum {Nam, Nu} gioi_tinh; struct { char thanh_pho[20]; char duong[20]; int so_nha; } dia_chi; } SinhVien; 20 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  21. Bài tập 1. Dùng toán tử sizeof() in ra màn hình độ dài các kiểu dữ liệu cơ bản và phức hợp 2. Nhập góc α và tính giá trị các hàm lượng giác 3. Nhập dữ liệu cho cấu trúc SinhVien (tên, năm sinh, khoá) và in lại giá trị ra màn hình 4. Viết một chương trình, khai báo hai biến x (char) và y (unsigned char). Gán -1 vào x, sau đó thực hiện chuyển kiểu và gán giá trị của x vào y. In kết quả của y ra màn hình. Giải thích kết quả. 5. Khai báo một kiểu dữ liệu miêu tả các thông tin của một chiếc ôtô có các thuộc tính: model, khối lượng, màu sơn, 4 bánh trong đó mỗi bánh có thuộc tính: chủng loại, bán kính, khối lượng 6. Vẫn bài trên, thêm việc nhập và in dữ liệu ra màn hình 21 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội