ĐẠI CƯƠNG VỀ KỸ THUẬT LẬP TRÌNH CẤU TRÚC

26 1.2K 20
ĐẠI CƯƠNG VỀ KỸ THUẬT LẬP TRÌNH CẤU TRÚC

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 1: Đại cương kỹ thuật lập trình cấu trúc CHƯƠNG 1: ĐẠI CƯƠNG VỀ KỸ THUẬT LẬP TRÌNH CẤU TRÚC Nội dung chương tập chung làm sáng tỏ nguyên lý lập trình cấu trúc Những nguyên lý coi tảng tư tưởng phương pháp lập trình cấu trúc tích hợp ngơn ngữ lập trình Nắm vững nguyên lý lập trình cấu trúc khơng giúp người học có cách tiếp cận ngơn ngữ lập trình nhanh chóng mà giúp họ cách tư xây dựng hệ thống ứng dụng Các nguyên lý giới thiệu chương bao gồm: Nguyên lý lệnh - lệnh có cấu trúc - cấu trúc liệu Nguyên lý tối thiểu Nguyên lý địa phương Nguyên lý an toàn Nguyên lý quán Nguyên lý Top-Down Nguyên lý Botton-Up Bạn đọc tìm chi tiết sâu rộng tài liệu [1] & [6] 1.1 SƠ LƯỢC VỀ LỊCH SỬ LẬP TRÌNH CẤU TRÚC Lập trình cơng việc nặng nhọc khoa học máy tính Có thể nói, suất xây dựng sản phẩm phần mềm thấp so với hoạt động trí tuệ khác Một sản phẩm phần mềm thiết kế cài đặt vòng tháng với lao động Nhưng để kiểm tra tìm lỗi tiếp tục hồn thiện sản phẩm phải thêm chừng năm Đây tượng phổ biến tin học năm 1960 xây dựng sản phẩm phần mềm kỹ thuật lập trình tuyến tính Để khắc phục tình trạng lỗi sản phẩm, người ta che chắn mành che mang tính chất thương mại gọi Version Thực chất, Version việc thay sản phẩm cũ cách sửa đổi cơng bố dạng Version mới, giống như: MS-DOS 4.0 tồn thời gian vài tháng thay đổi thành MS-DOS 5.0, MS-DOS 5.5, MS-DOS 6.0 Đây sản phẩm ta tưởng mà cịn tồn lỗi khơng thể bỏ qua được, MS-DOS 6.0 khắc phục hạn chế MS-DOS 3.3 ban đầu Trong thời kỳ đầu tin học, lập trình viên xây dựng chương trình ngơn ngữ lập trình bậc thấp, q trình nạp theo dõi hoạt động chương trình cách trực tiếp chế độ trực tuyến (on-line) Việc tìm sửa lỗi (debbugging) ngày thực Do vậy, trước năm 1960, người ta coi việc lập trình Chương 1: Đại cương kỹ thuật lập trình cấu trúc giống hoạt động nghệ thuật nhuộm màu sắc cá nhân khoa học Một số người nắm vài ngơn ngữ lập trình, số mẹo vặt tận dụng cấu hình vật lý cụ thể hệ thống máy tính, tạo nên số sản phẩm lạ phần mềm coi chuyên gia nắm bắt bí ẩn nghệ thuật lập trình Các hệ thống máy tính giai đoạn có cấu hình yếu, nhớ nhỏ, tốc độ thiết bị vào thấp làm chậm trình nạp thực chương trình Chương trình xây dựng kỹ thuật lập trình tuyến tính mà bật ngơn ngữ lập trình Assembler Fortran Với phương pháp lập trình tuyến tính, lập trình viên phép thể chương trình hai cấu trúc lệnh, cấu trúc lệnh (sequential) nhảy không điều kiện (goto) Hệ thống thư viện vào nghèo nàn làm cho việc lập trình trở nên khó khăn, chi phí cho sản phẩm phần mềm lớn, độ tin cậy sản phẩm phần mềm không cao dẫn tới hàng loạt dự án tin học bị thất bại, đặc biệt hệ thống tin học có tầm cỡ lớn Năm 1973, Hoare khẳng định, nguyên nhân thất bại mà người Mỹ gặp phải phóng vệ tinh nhân tạo phía Vệ nữ (Sao Kim) lỗi chương trình điều khiển viết Fortran Thay viết: DO 50 I = 12, 523 (Thực số 50 với I 12, 13, , 523) Lập trình viên (hoặc thao tác viên đục bìa) viết thành: DO 50 I = 12.523 (Dấu phảy thay dấu chấm) Gặp câu lệnh này, chương trình dịch Fortran hiểu gán giá trị thực 12.523 cho biến DO 50 I làm cho kết chương trình sai Để giải vướng mắc kỹ thuật lập trình, nhà tin học lý thuyết sâu vào nghiên cứu tìm hiểu chất ngơn ngữ, thuật tốn hoạt động lập trình, nâng nội dung kỹ thuật lập trình lên thành nguyên lý khoa học ngày Kết bật giai đoạn Knuth xuất tập sách mang tên “Nghệ thuật lập trình” giới thiệu tỉ mỉ sở lý thuyết đảm bảo toán học thuật toán xử lý liệu nửa số, xếp tìm kiếm Năm 1968, Dijkstra cơng bố thư “Về nguy hại tốn tử goto” Trong cơng trình này, Dijkstra khẳng định, có số lỗi goto gây nên xác định điểm bắt đầu lỗi Dijkstra khẳng định thêm: “Tay nghề lập trình viên tỉ lệ nghịch với số lượng toán tử goto mà sử dụng chương trình”, đồng thời kêu gọi huỷ bỏ triệt để tốn tử goto ngơn ngữ lập trình ngoại trừ ngơn ngữ lập trình bậc thấp Dijkstra đưa khẳng định, động thái chương trình đánh giá tường minh qua cấu trúc lặp, rẽ nhánh, gọi đệ qui sở lập trình cấu trúc ngày Những kết Dijikstra công bố tạo nên cách mạng kỹ thuật lập trình, Knuth liệt kê số trường hợp có lợi goto vòng lặp kết thúc chừng, bắt lỗi , Dijkstra, Hoare, Knuth tiếp tục phát triển tư tưởng coi chương trình máy tính với lập trình viên đối tượng nghiên cứu kỹ thuật lập trình phương pháp Chương 1: Đại cương kỹ thuật lập trình cấu trúc làm chủ phức tạp hoạt động lập trình Năm 1969, Hoare phát biểu tiên đề phục vụ cho việc chứng minh tính đắn chương trình, phát tính bất biến vịng lặp cách coi chương trình vừa mã hoá thuật toán đồng thời chứng minh tính đắn chương trình Sau Dahl, Hoare, Dijiksta phát triển thành ngơn ngữ lập trình cấu trúc Để triển khai nguyên lý lập trình cấu trúc, L Wirth thiết kế cài đặt ngôn ngữ ALGOL W biến thể ALGOL 60 Sau này, L Wirth tiếp tục hoàn thiện để trở thành ngơn ngữ lập trình Pascal Đây ngơn ngữ lập trình giản dị, sáng sủa cú pháp, dễ minh họa vấn đề phức tạp lập trình đại coi chuẩn mực giảng dạy lập trình Năm 1978, Brian Barninghan Denit Ritche thiết kế ngơn ngữ lập trình C với tối thiểu cấu trúc lệnh hàm phù hợp với tư tâm lý của người lập trình Đồng thời, hai tác giả phát hành phiên hệ điều hành UNIX viết chủ yếu ngôn ngữ C, khẳng định thêm uy C lập trình hệ thống 1.2 CẤU TRÚC LỆNH, LỆNH CÓ CẤU TRÚC, CẤU TRÚC DỮ LIỆU 1.2.1 Cấu trúc lệnh (cấu trúc điều khiển) Mỗi chương trình máy tính chất mã hố thuật toán Thuật toán coi dãy hữu hạn thao tác sơ cấp tập đối tượng vào (Input) nhằm thu kết (output) Các thao tác ngơn ngữ lập trình cụ thể điều khiển lệnh hay cấu trúc điều khiển, cịn đối tượng chịu thao tác mô tả biểu diễn thông qua cấu trúc liệu Trong ngơn ngữ lập trình cấu trúc, cấu trúc lệnh sau sử dụng để xây dựng chương trình Dĩ nhiên, khơng bàn tới cấu trúc nhảy không điều kiện goto ngơn ngữ lập trình cấu trúc trang bị cấu trúc lệnh goto Cấu trúc câu lệnh GOTO A; Cấu trúc rẽ nhánh dạng đầy đủ If (E) A; A S Else B; B; B Đ B Sau thực lệnh A thực lệnh B A Nếu biểu thức E có giá trị (khác 0) thực A; Nếu E sai thực B; Hình 1.1: Cấu trúc cấu trúc rẽ nhánh dạng đầy đủ Chương 1: Đại cương kỹ thuật lập trình cấu trúc Cấu trúc lặp với điều kiện trước Cấu trúc lặp với điều kiện sau While (E) A; A E S Đ A; A S E Đ while (E); Trong biểu thức E cịn có giá trị thực A; Thực A E đúng; Cấu trúc lặp FOR For (E1; E2;E3) E1 A; E3 E2 S A Đ Hình 1.2 Các cấu trúc lặp A, B : ký hiệu cho câu lệnh đơn lệnh hợp thành Mỗi lệnh đơn lẻ gọi lệnh đơn, lệnh hợp thành lệnh hay cấu trúc lệnh ghép lại với theo qui định ngôn ngữ, Pascal tập lệnh hay cấu trúc lệnh bao thân begin end; C tập lệnh hay cấu trúc lệnh bao hai ký hiệu { } E, E1, E2, E3 biểu thức số học logic Một số ngôn ngữ lập trình coi giá trị biểu thức logic (TRUE) sai (FALSE), số ngôn ngữ lập trình khác C coi giá trị biểu thức logic có giá trị khác 0, ngược lại biểu thức logic có giá trị sai Cần lưu ý rằng, chương trình thể cấu trúc điều khiển lệnh : tuần tự, tuyển chọn if else, switch case default, lặp với điều kiện trước while , lặp với điều kiện sau while, vòng lặp for chuyển chương trình, sử dụng tối thiểu hai cấu trúc lệnh lặp với điều kiện trước while Phương pháp lập trình cịn gọi phương pháp lập trình hạn chế Chương 1: Đại cương kỹ thuật lập trình cấu trúc 1.2.2 Lệnh có cấu trúc Lệnh có cấu trúc lệnh cho phép chứa cấu trúc điều khiển Khi tìm hiểu cấu trúc điều khiển cần xác định rõ vị trí phép đặt cấu trúc điều khiển nó, phần cấu trúc điều khiển Điều tưởng tầm thường có ý nghĩa quan trọng xây dựng kiểm tra lỗi xảy chương trình Nguyên tắc viết chương trình theo cấu trúc: Cấu trúc phải viết lọt cấu trúc cha, điểm vào điểm cấu trúc phải nằm hàng dọc Ví dụ sau minh họa cho nguyên tắc viết chương trình: if (E) while (E1) A; else B; while(E2); Trong ví dụ trên, while (E1) A; cấu trúc nằm thân cấu trúc cha if (E) ; B while(E2); cấu trúc thân else Do vậy, câu lệnh while(E1); while(E2) có cấp với nên phải nằm cột, tương tự với A, B if với else 1.2.3 Cấu trúc liệu Các ngơn ngữ lập trình cấu trúc nói chung giống cấu trúc lệnh cấu trúc liệu Điểm khác ngôn ngữ lập trình cấu trúc phương pháp đặt tên, cách khai báo, cú pháp câu lệnh tập phép toán phép thực cấu trúc liệu cụ thể Nắm bắt nguyên tắc này, dễ dàng chuyển đổi cách thể chương trình từ ngơn ngữ lập trình sang ngơn ngữ lập trình khác cánh nhanh chóng mà khơng tốn q nhiều thời gian cho việc học tập ngôn ngữ lập trình Thơng thường, cấu trúc liệu phân thành hai loại: cấu trúc liệu có kiểu (Base type) cấu trúc liệu có kiểu người dùng định nghĩa (User type) hay gọi kiểu liệu có cấu trúc Kiểu liệu bao gồm: Kiểu kí tự (char), kiểu số ngun có dấu (signed int), kiểu số ngun khơng dấu (unsigned int), kiểu số nguyên dài có dấu (signed long), kiểu số nguyên dài không dấu (unsigned long ), kiểu số thực (float) kiểu số thực có độ xác gấp đôi (double) Kiểu liệu người dùng định nghĩa bao gồm kiểu xâu kí tự (string), kiểu mảng (array), kiểu tập hợp (union), kiểu cấu trúc (struct), kiểu file, kiểu trỏ (pointer) kiểu liệu định nghĩa hoàn toàn kiểu danh sách móc nối (link list), kiểu (tree) Kích cỡ kiểu đồng nghĩa với miền xác định kiểu với biểu diễn nhị phân nó, phụ thuộc vào hệ thống máy tính cụ thể Để xác định kích cỡ kiểu nên dùng tốn tử sizeof( type) Chương trình sau liệt kê kích cỡ kiểu Chương 1: Đại cương kỹ thuật lập trình cấu trúc Ví dụ 1.1 Kiểm tra kích cỡ kiểu #include #include #include #include void main(void) { printf(“\n Kích cỡ kiểu kí tự:%d”, sizeof(char)); printf(“\n Kích cỡ kiểu kí tự khơng dấu:%d”, sizeof(unsigned char)); printf(“\n Kích cỡ kiểu số ngun khơng dấu:%d”, sizeof(unsigned int)); printf(“\n Kích cỡ kiểu số ngun có dấu:%d”, sizeof(signed int)); printf(“\n Kích cỡ kiểu số nguyên dài không dấu:%d”, sizeof(unsigned long )); printf(“\n Kích cỡ kiểu số ngun dài có dấu:%d”, sizeof(signed long )); printf(“\n Kích cỡ kiểu số thực có độ xác đơn:%d”, sizeof(float )); printf(“\n Kích cỡ kiểu số thực có độ xác kép:%d”, sizeof(double )); getch(); } Kích cỡ kiểu liệu người dùng định nghĩa tổng kích cỡ kiểu thành viên Chúng ta dùng tốn tử sizeof(tên kiểu) để xác định độ lớn tính theo byte kiểu liệu Một điểm đặc biệt ý lập trình cấu trúc liệu cấu trúc liệu phải kèm theo phép tốn đó, biến gọi thuộc kiểu liệu nhận giá trị từ miền xác định kiểu phép tốn kiểu liệu 1.3 NGUYÊN LÝ TỐI THIỂU Hãy tập nguyên tắc tối thiểu phương tiện cấu trúc lệnh, kiểu liệu phép toán thực viết chương trình Sau nắm cơng cụ vịng đầu đặt vấn đề mở rộng sang hệ thống thư viện tiện ích ngôn ngữ Khi làm quen với ngôn ngữ lập trình đó, khơng thiết phải lệ thuộc nhiều vào hệ thống thư viện hàm ngôn ngữ, mà điều quan trọng trước tốn cụ thể, sử dụng ngơn ngữ để giải nào, phương án tốt lập trình hệ thống thư viện hàm riêng Do vậy, ngơn ngữ lập trình, cần nắm vững số công cụ tối thiểu sau: 1.3.1 Tập phép toán Tập phép toán số học: + (cộng); - (trừ); * (nhân); % (lấy phần dư); / (chia) Tập phép toán số học mở rộng: ++a a = a +1; // tăng giá trị biến nguyên a lên đơn vị; a a = a-1; //giảm giá trị biến nguyên a đơn vị; a+= n a = a+n; // tăng giá trị biến nguyên a lên n đơn vị; Chương 1: Đại cương kỹ thuật lập trình cấu trúc a-=n a = a - n; // giảm giá trị biến nguyên a n đơn vị); a%=n a = a%n; // lấy giá trị biến a modul với n; a/=n a=a/n;// lấy giá trị biến a chia cho n; a*=n a = a*n; // lấy giá trị biến a nhân với n; Tập phép toán so sánh: >, =, b) { } // a lớn b if ( a=b) { } // a lớn b if ( a : Phép dịch phải (dịch sang phải n bít có giá trị 0) ~ : Phép lấy phần bù Chương 1: Đại cương kỹ thuật lập trình cấu trúc Ví dụ 1.2: Viết chương trình kiểm tra tốn tử thao tác bít #include #include #include #include void main(void){ unsigned int a=3, b=5, c; clrscr(); c = a & b; printf(“\n c = a & b=%d”,c); c = a | b; printf(“\n c = a | b=%d”,c); c = a ^ b; printf(“\n c = a ^ b=%d”,c); c = ~a; printf(“\n c = ~a =%d”,c); c = a b; printf(“\n c = a >> b=%d”,c); getch(); } Toán tử chuyển đổi kiểu: Ta dùng tốn tử chuyển đổi kiểu để nhận kết tính tốn mong muốn Qui tắc chuyển đổi kiểu thực theo qui tắc: (kiểu) biến Ví dụ 1.3: Tính giá trị phép chia hai số nguyên a b #include #include #include #include void main(voi)( int a=3, b=5; float c; c= (float) a / (float) b; printf(“\n thương c = a / b =%6.2f”, c); getch(); } Thứ tự ưu tiên phép toán : Khi viết biểu thức, cần lưu ý tới thứ tự ưu tiên tính tốn phép tốn, bảng tổng hợp sau phản ánh trật tự ưu tiên tính toán phép toán số học phép toán so sánh Bảng tổng hợp thứ tự ưu tiên tính toán phép toán số học so sánh TÊN TỐN TỬ CHIỀU TÍNH TỐN ( ), [] , -> L -> R - , ++, , ! , ~ , sizeof() R -> L * , /, % L -> R 10 Chương 1: Đại cương kỹ thuật lập trình cấu trúc +, - L -> R >>, R =, L -> R == != L -> R & L -> R ^ L -> R | L -> R && L -> R || L -> R ?: R -> L =, +=, -=, *=, /=, %=, &=, ^=, |=, = R -> L 1.3.2 Tập lệnh vào Nhập liệu từ bàn phím: scanf(“format_string, ”, ¶meter ); Nhập liệu từ tệp: fscanf( file_pointer,”format_string, ”, ¶meter, ); Nhận ký tự từ bàn phím: getch(); getchar(); Nhận ký tự từ file: fgetc(file_pointer, character_name); Nhập string từ bàn phím: gets(string_name); Nhận string từ file text : fgets(string_name, number_character, file_pointer); Xuất liệu hình: printf(“format_string ”, parameter ); Xuất liệu file : fprintf(file_pointer, “format_string ”, parameter .); Xuất ký tự hình: putch(character_name); Xuất ký tự file: fputc(file_pointer, character_name); Xuất string hình: puts(const_string_name); Xuất string file: fputs(file_pointer, const_string_name); 1.3.3 Thao tác kiểu liệu có cấu trúc Tập thao tác string: char *strchr(const char *s, int c) : tìm ký tự c xuất xâu s; char *stpcpy(char *dest, const char *src) : copy xâu scr vào dest; 11 Chương 1: Đại cương kỹ thuật lập trình cấu trúc int strcmp(const char *s1, const char *s2) : so sánh hai xâu s1 s2 theo thứ tự từ điển, s1 < s2 hàm trả lại giá trị nhỏ Nếu s1>s2 hàm trả lại giá trị dương Nếu s1==s2 hàm trả lại giá trị char *strcat(char *dest, const char *src) : thêm xâu scr vào sau xâu dest char *strlwr(char *s) : chuyển xâu s từ ký tự in hoa thành ký tự in thường char *strupr(char *s): chuyển xâu s từ ký tự thường hoa thành ký tự in hoa char *strrev(char *s): đảo ngược xâu s char *strstr(const char *s1, const char *s2): tìm vị trí xâu s2 xâu s1 int strlen(char *s): cho độ dài xâu ký tự s Tập thao tác trỏ: Thao tác lấy địa biến: & parameter_name; Thao tác lấy nội dung biến (biến có kiểu bản): *pointer_name; Thao tác trỏ tới phần tử tiếp theo: ++pointer_name; Thao tác trỏ tới phần tử thứ n kể từ vị trí tại: pointer_name = pointer_name +n; Thao tác trỏ tới phần tử sau trỏ kể từ vị trí tại: pointer_name; Thao tác trỏ tới phần tử sau n phần tử kể từ vị trí tại: Pointer_name = pointer_name - n; Thao tác cấp phát nhớ cho trỏ: void *malloc(size_t size); void *calloc(size_t nitems, size_t size); Thao tác cấp phát lại nhớ cho trỏ : void *realloc(void *block, size_t size); Thao tác giải phóng nhớ cho trỏ: void free(void *block); Tập thao tác cấu trúc: Định nghĩa cấu trúc: struct struct_name{ type_1 parameter_name_1; type_2 parameter_name_2; type_k parameter_name_k; } struct_parameter_name; Phép truy nhập tới thành phần cấu trúc: 12 Chương 1: Đại cương kỹ thuật lập trình cấu trúc #include #include #include #include int a, b; // khai báo a, b hai biến toàn cục void Swap(void) { int a,b, temp; // khai báo a, b hai biến địa phương a= 3; b=5; // gán giá trị cho a b temp=a; a=b; b=temp;// đổi giá trị a b printf(“\n Kết thực thủ tục a=%5d b=%5d:,a,b); } void main(void) { a=1; b=8; // khởi đầu giá trị cho biến toàn cục a, b Swap(); printf(“\n Kết sau thực thủ tục a =%5d b=%5d”,a,b); getch(); } Kết thực chương trình: Kết thực thủ tục a = b=3 Kết sau thực thủ tục a = b =8 Trong ví dụ a, b hai biến toàn cục, hai biến a, b thủ tục Swap hai biến cục Các thao tác thủ tục Swap gán cho a giá trị b giá trị sau thực đổi giá trị a =5 b =3 công việc xử lý nội thủ tục mà khơng làm thay đổi giá trị biến tồn cục a, b sau thi thực xong thủ tục Swap Do vậy, kết sau thực Swap a = 1, b =8; Điều chứng tỏ thủ tục Swap chưa sử dụng tới hai biến toàn cục a b Tuy nhiên, ví dụ sau, thủ tục Swap lại làm thay đổi giá trị biến tồn cục a b thao tác trực tiếp biến tồn cục Ví dụ 1.5 Đổi giá trị hai biến a b #include #include #include #include int a, b; // khai báo a, b hai biến toàn cục void Swap(void) { int temp; // khai báo a, b hai biến địa phương a= 3; b=5; // gán giá trị cho a b temp=a; a=b; b=temp;// đổi giá trị a b printf(“\n Kết thực thủ tục a=%5d b=%5d:,a,b); } void main(void) { 14 Chương 1: Đại cương kỹ thuật lập trình cấu trúc a=1; b=8; // khởi đầu giá trị cho biến toàn cục a, b Swap(); printf(“\n Kết sau thực thủ tục a =%5d b=%5d”,a,b); getch(); } Kết thực chương trình: Kết thực thủ tục a = b=1 Kết sau thực thủ tục a = b =8 1.5 NGUYÊN LÝ NHẤT QUÁN Dữ liệu phải thao tác Cần sớm phát mâu thuẫn cấu trúc liệu thao tác để kịp thời khắc phục Như biết, kiểu tên tập đối tượng thuộc miền xác định với thao tác Một biến định nghĩa thuộc kiểu xác định kiểu kiểu người dùng định nghĩa Thao tác với biến phụ thuộc vào thao tác phép kiểu Hai kiểu khác phân biệt tên, miền xác định phép toán kiểu liệu Tuy nhiên, thực tế có nhiều lỗi nhập nhằng phép toán cấu trúc liệu mà cần hiểu rõ Đối với kiểu ký tự, nguyên tắc không phép thực phép tốn số học nó, ngôn ngữ C đồng ký tự với số nguyên có độ lớn byte Do vậy, phép toán số học ký tự thực chất phép toán số học số nguyên Chẳng hạn, thao tác khai báo phép: char x1=’A’, x2 =’z’; x1 = (x1 + 100) % 255; x2 = (x2-x1) %255; Mặc dù x1, x2 khai báo hai biến kiểu char, thao tác x1 = (x1 + 100) % 255; x2 = (x2 +x1) %255; chương trình dịch tự động chuyển đổi x1 thành mã ký tự ‘A’ 65, x2 thành mã ký tự ‘z’ 122 để thực phép toán Kết nhận x1 ký tự có mã (65+100)%255 = 165; x2 ký tự có mã 32 ứng với mã ký tự space Chúng ta thực phép toán số học kiểu int, long, float, double Nhưng int long, cần đặc biệt ý phép chia hai số nguyên cho ta số nguyên, tích hai số nguyên cho ta số nguyên, tổng hai số nguyên cho ta số nguyên thương hai số nguyên số thực, tích hai số nguyên tổng hai số nguyên số long int Do vậy, muốn nhận kết đúng, cần phải chuyển đổi biến thuộc kiểu trước thực phép toán Ngược lại, ta không 15 Chương 1: Đại cương kỹ thuật lập trình cấu trúc thể lấy modul hai số thực thực thao tác dịch chuyển bít nó, thao tác khơng nằm định nghĩa kiểu Điều tương tự xảy với string Trong Pascal, phép toán so sánh hai string gán trực tiếp hai Record kiểu với phép, ví dụ : Str1>Str2, Str1 := Str2; Nhưng C phép tốn lại khơng định nghĩa, muốn thực nó, có cách định nghĩa lại thực thơng qua lời gọi hàm 1.6 NGUN LÝ AN TOÀN Lỗi nặng nằm mức cao (mức ý đồ thiết kế) mức thấp thủ tục phải chịu tải lớn Mọi lỗi, dù nhỏ phải phát bước chương trình Q trình kiểm tra phát lỗi phải thực trước lỗi hồnh hành Các loại lỗi thường xảy viết chương trình tổng kết lại sau: Lỗi thơng báo từ khố error (lỗi cú pháp): loại lỗi thường xảy soạn thảo chương trình, viết sai từ khố ví dụ thay viết int soạn thảo sai thành Int (lỗi chữ in thường thành in hoa), viết sai cú pháp biểu thức thiếu dấu ngoặc đơn, ngoặc kép dấu chấm phảy kết thúc lệnh, chưa khai báo nguyên mẫu cho hàm Lỗi thơng báo từ khố Warning (lỗi cảnh báo): lỗi thường xảy ta khai báo biến chương trình lại khơng sử dụng tới chúng, lỗi biểu thức kiểm tra biến kiểm tra không xác định giá trị nó, lỗi thứ tự ưu tiên phép toán biểu thức Hai loại lỗi error warning thơng báo dịch chương trình thành file *.OBJ Quá trình liên kết (linker) file *.OBJ để tạo nên file chương trình mã máy *.EXE tiếp tục hiệu đính khử bỏ lỗi error Lỗi xảy trình liên kết: lỗi thường xuất ta sử dụng tới lời gọi hàm, hàm tồn dạng nguyên mẫu (function prototype) mà chưa mô tả chi tiết hàm, lời hàm gọi chưa với tên Lỗi khắc phục ta bổ sung đoạn chương trình mơ tả chi tiết cho hàm sửa đổi lại lời gọi hàm tương ứng Ta quan niệm, lỗi cú pháp (error), lỗi cảnh báo (warning) lỗi liên kết (linker) lỗi tầm thường lỗi Compiler ngôn ngữ lập trình phát Để khắc phục lỗi loại này, cần phải đọc hiểu thông báo lỗi thường viết tiếng Anh Cũng cần phải lưu ý rằng, mức độ phức tạp chương trình dịch nên khơng phải lỗi cách tường minh xác hồn tồn nơi xuất lỗi 16 Chương 1: Đại cương kỹ thuật lập trình cấu trúc Loại lỗi cuối mà compiler phát lỗi lập trình viên gây nên thiết kế chương trình xử lý liệu Những lỗi không compiler thơng báo mà phải trả giá q trình tự test chứng minh tính đắn chương trình Lỗi nằm ý đồ thiết kế, lỗi khơng lường trước tính chất loại thơng tin vào Ví dụ sau minh họa cho lỗi thường xảy thuộc loại Ví dụ 1.6 Tính tổng hai đa thức A bậc n, đa thức B bậc m #include #include #include #define MAX 100 typedef float dathuc[MAX]; void In(dathuc A, int n, char c){ int i; printf("\n Da thuc %c:", c); for(i=0;i

Ngày đăng: 02/10/2013, 20:20

Hình ảnh liên quan

Hình 1.1: Cấu trúc tuần tự và cấu trúc rẽ nhánh dạng đầy đủ - ĐẠI CƯƠNG VỀ KỸ THUẬT LẬP TRÌNH CẤU TRÚC

Hình 1.1.

Cấu trúc tuần tự và cấu trúc rẽ nhánh dạng đầy đủ Xem tại trang 3 của tài liệu.
Hình 1.2. Các cấu trúc lặp - ĐẠI CƯƠNG VỀ KỸ THUẬT LẬP TRÌNH CẤU TRÚC

Hình 1.2..

Các cấu trúc lặp Xem tại trang 4 của tài liệu.
TÊN TOÁN TỬ CHIỀU TÍNH TOÁN - ĐẠI CƯƠNG VỀ KỸ THUẬT LẬP TRÌNH CẤU TRÚC
TÊN TOÁN TỬ CHIỀU TÍNH TOÁN Xem tại trang 8 của tài liệu.
Bảng tổng hợp thứ tự ưu tiên tính toán các phép toán số học và so sánh - ĐẠI CƯƠNG VỀ KỸ THUẬT LẬP TRÌNH CẤU TRÚC

Bảng t.

ổng hợp thứ tự ưu tiên tính toán các phép toán số học và so sánh Xem tại trang 8 của tài liệu.
Hình dung toàn bộ những thao tác trên hai số nguyên a=(a1, a2, ..., an), b=(b1,b2,..,bn)  với đầy  đủ những chức năng chính của nó - ĐẠI CƯƠNG VỀ KỸ THUẬT LẬP TRÌNH CẤU TRÚC

Hình dung.

toàn bộ những thao tác trên hai số nguyên a=(a1, a2, ..., an), b=(b1,b2,..,bn) với đầy đủ những chức năng chính của nó Xem tại trang 17 của tài liệu.

Từ khóa liên quan

Trích đoạn

Tài liệu cùng người dùng

Tài liệu liên quan