NGÔN NGỮ LA65P5 TRỈNH C pot

46 87 0
NGÔN NGỮ LA65P5 TRỈNH C pot

Đ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

Ngôn ngữ lập trình C phần I: khái niệm Bài Mở đầu Tóm tắt lịch sử phát triển ngôn ngữ C Ngôn ngữ lập trình C Dennis Ritchie tạo lập v o năm 1972 Bell Telephone Laboratories Mục đích ban đầu ngôn ngữ n y l để thiết kế hệ điều h nh UNIX C l ngôn ngữ mạnh v mềm dẻo nên đ đợc nhiều ngời sử dụng Khắp nơi ngời ta đ bắt đầu dùng để viết loại chơng trình Tuy nhiên, tổ chức khác đ bắt đầu sử dụng version khác C, v đ phát sinh nhiều khác c¸c thao t¸c l m cho ngêi lËp trình phải đau đầu Để khắc phục vấn đề n y, năm 1983, Viện Tiêu chuẩn Quốc gia Mỹ (ANSI) ® th nh lËp mét đy ban ®Ĩ ®a định nghĩa chuẩn cho ngôn ngữ C, đợc gọi l ANSI Standard C Có lẽ phải nói thêm chút tên ngôn ngữ Ngôn ngữ n y có tên l C trớc đ có ngôn ngữ đợc gọi l B Ngôn ngữ B Ken Thompson phát triển Bell Labs Có thể, B l để tên phòng thí nghiệm, C l đứng sau B Tại lại dùng C? Trong giới lập trình ng y nay, có nhiều ngôn ngữ lập trình bậc cao để lựa chọn, chẳng hạn nh C, Pascal, BASIC, Modula, v.v Tất l ngôn ngữ tuyệt vời phù hợp cho hầu hết công việc lập trình Nhng vËy, vÉn cã mét v i lý để nhiều nh lập trình chuyên nghiệp cảm thấy C l ngôn ngữ đứng đầu, vì: C l ngôn ngữ mạnh v mềm dẻo Hạn chế C chÝnh l sù h¹n chÕ t trõu tợng ngời lập trình m C đợc sử dụng cho nhiều mục đích khác nhau, nh thiết kế hệ điều h nh, soạn thảo văn bản, đồ hoạ, trang tính, v chí l m chơng trình dịch cho ngôn ngữ khác C l ngôn ngữ bình dân đợc nhiều ngời lập trình chuyên nghiệp a dùng Bằng chứng l đ có nhiều chơng trình dịch khác v nhiều tiện ích kèm theo C l ngôn ngữ chuyển đổi đợc tức l chơng trình C đợc viết cho mét hƯ m¸y vi tÝnh (vÝ dơ IBM PC) đợc dịch v chạy hệ thống khác (ví dụ DEC VAX) m cần thay đổi chút không cần thay đổi C l ngôn ngữ ngắn gọn, bao gồm số từ đợc gọi l từ khóa (keyword) l m sở để tạo câu lệnh ngôn ngữ Với đặc điểm trên, C l lựa chọn tuyệt vời ngôn ngữ lập trình Nhng có lẽ ngời ta nghe nãi vỊ C++ v mét kü tht lËp tr×nh míi đợc gọi l lập trình hớng đối tợng Cũng đáng hoang mang cho thực C++ l ngôn ngữ siêu C với tất m C có cộng thêm với kỹ thuật lập trình hớng đối tợng Nếu bắt đầu việc học C++, tất đ đợc dạy học C đợc áp dụng cho C++ Trong học C, học ngôn ngữ lập trình phổ thông v mạnh hôm m tự chuẩn bị cho kỹ thuật lập trình hớng đối tợng cho ng y mai Chuẩn bị cho việc lập trình Khi giải b i toán cần phải tiến h nh số bớc định Đầu tiên phải hình th nh hay gọi l định nghĩa b i toán Nếu b i toán cần phải giải l n o tìm kết qủa đợc Một b i toán đ đợc định rõ, lập kế hoạch để giải Sau đ có kế hoạch việc thực b i toán n y trë nªn dƠ d ng Ci cïng, mét kÕ hoạch đ đợc thực thi, kết qủa phải đợc thử lại để kiểm chứng xem liệu b i toán đ đợc giải v trọn vẹn cha Một logic nh đợc áp dụng cho nhiều lĩnh vực khác bao gồm việc lập trình máy tính Khi tạo lập chơng trình C, cần phải tuân theo thứ tự bớc sau đây: Xác định mục tiêu chơng trình Xác định phơng pháp cần phải sử dụng viết chơng trình Tạo lập chơng trình để giải b i toán Chạy chơng trình để xem kết qủa Chu trình phát triển chơng trình Chu trình phát triển chơng trình có bớc riêng Trong bớc thứ nhất, soạn thảo đợc sử dụng để tạo tệp đĩa chứa m gốc (source code) Tại bớc thứ hai, m gốc đợc dịch để tạo tệp đích (object file) Tại bớc thứ ba, m đ đợc dịch đợc kết nối lại để tạo tệp chơng trình chạy đợc (executable file) Cuối cùng, bớc bốn l để chạy chơng trình v xem kết Tạo lập mà gốc Các m gốc l loạt câu lệnh, lệnh thị cho máy tính thực công việc m ngời lập trình mong muốn Ví dụ, dới l dòng m gốc: printf ("Chào bạn"); Lệnh n y thị cho máy tính m n hình thông điệp Chào bạn Dịch mà gốc Các máy tính hiểu đợc ngôn ngữ, l ngôn ngữ máy (machine language) Bởi vậy, trớc chơng trình C chạy đợc máy tính, phải đợc dịch từ m gốc sang m máy chơng trình đợc gọi l chơng trình dịch (compiler) Chơng trình dịch lấy m gèc l m input v cho mét tƯp ®Üa chứa câu lệnh m máy tơng ứng với câu lệnh m gốc Các câu lệnh m máy đợc tạo chơng trình dịch đợc gọi l m đích v tệp đĩa chứa chúng đợc gọi l tệp đích Tệp đích có tên trùng với tên tệp gốc v có đuôi l OBJ Đuôi OBJ để chØ r»ng tƯp n y l tƯp ®Ých v sÏ đợc sử dụng chơng trình kết nối (linker) Kết nối để tạo tệp chạy đợc Cần phải thực thêm bớc chơng trình chạy đợc Trong C có phận đợc gọi l th viện Th viện C chứa m đích h m đ đợc lập sẵn Ví dụ, h m printf đợc sử dơng vÝ dơ tríc l mét h m th viện Các h m th viện thực công việc thờng hay phải dùng đến, chẳng hạn nh thông tin lên m n hình, đọc số liệu từ tệp đĩa Nếu chơng trình có sử dụng h m th viện tệp đích cần phải đợc kết nối với m đích h m n y để tạo chơng trình chạy đợc Tệp n y có tên trùng với tên tệp gốc v có đuôi l EXE Ho n thiện chu trình phát triển Sau dịch v kết nối cần phải chạy thử chơng trình Nếu kết qủa nhận đợc không nh mong muốn cần phải tìm nguyên nhân dẫn đến sai sót v sửa lại chơng trình cho Khi có thay đổi n o m gốc, chơng trình phải đợc dịch v kết nối lại Chu trình phải lặp lặp lại n o nhận đợc kết qủa nh mong muốn Một ®iĨm lu ý ci cïng vỊ viƯc dÞch v kÕt nối l , việc dịch v kết nối nh đ trình bầy l hai giai đoạn tách biệt nhng nhiều chơng trình dịch, chẳng hạn chơng trình dịch chạy dới DOS lại gộp hai bớc trªn th nh mét Cho dï nh vËy nhng vÉn phải hiểu l hai qúa trình riêng rẽ chúng đợc thực lệnh Chu trình phát triển chơng trình C Bớc 1: Sử dụng soạn thảo để viết mà gốc Thông thờng tệp gốc C có đuôi l C Bớc 2: Dùng chơng trình để dịch chơng trình gốc Nếu chơng trình dịch không phát sai sót n o chơng trình gèc nã sÏ sinh mét tƯp ®Ých TƯp n y có tên với tệp chơng trình gốc v đuôi l OBJ Nếu chơng trình dịch tìm thấy lỗi n o đó, thông báo lên m n hình v ta phải trở lại từ bớc để sửa lỗi đ đợc phát chơng trình gốc Bớc 3: Kết nối chơng trình kết nối Nếu lỗi, kết nối sinh tệp đĩa có tên trùng với tên chơng trình đích với đuôi EXE chứa chơng trình chạy đợc Bớc 4: Chạy chơng trình Cần phải chạy thử chơng trình sau kết thúc bớc ®Ĩ xem kÕt qđa ® ®óng nh mong mn cha Nếu cha phải quay lại từ bớc v tiến h nh thay đổi cần thiết m gèc KÕt ln C l mét c«ng lËp trình mạnh, thông dụng v chuyển đổi đợc B i n y giải thích bớc khác qúa trình viết chơng trình C Đó l chu trình soạn thảo/dịch/kết nối/kiểm tra Việc mắc lỗi phát triển chơng trình l điều tránh khỏi Chơng trình dịch C phát lỗi m gốc v thông báo lỗi kiểu lỗi v vị trí lỗi Các thông tin n y giúp ngời lập trình sửa lại m gốc cách dễ d ng Tuy nhiên, chơng trình dịch lúc n o thông báo đợc xác kiểu lỗi nh vị trí chúng Đôi ngời lập trình phải vận dụng kiến thức C để phát sai sót đ gây thông báo lỗi Câu hỏi v trả lời Nếu muốn cho ngời n o chơng trình C phải cho tệp n o? C l ngôn ngữ có chơng trình dịch Điều có nghĩa l , sau m gốc đ đợc dịch phát sinh chơng trình chạy đợc Chơng trình n y tự chạy Nếu muốn chuyển CHAO đến ngời n o đó, ®iỊu nhÊt cÇn l m l h y chun cho họ tệp CHAO.EXE Họ không cần tệp gốc CHAO.C, tệp đích CHAO.OBJ v chí chơng trình dịch C Sau đ tạo đợc tệp chạy đợc, có cần phải giữ tệp gốc tệp đích không? Nếu tệp gốc bị sau n y không cách n o khác để thay đổi đợc chơng trình đ dịch v kết nối Do nên giữ lại tệp gốc Nhng tệp đích lại khác Có v i lý cần phải giữ lại tệp đích, nhiên nói sớm Do vậy, xóa tệp đích đ có tệp chạy đợc Nếu cần tệp đích, dịch lại từ tệp gốc Liệu bỏ qua thông báo nhắc nhở không? Một số thông báo nhắc nhở không l m ảnh hởng đến việc chạy chơng trình Một số khác lại có Nếu chơng trình dịch cho thông báo nhắc nhở, l dấu hiệu báo có không ho n to n Hầu hết chơng trình dịch cho phép đặt mức nhắc nhở Bằng cách dó nhận đợc nhắc nhở từ mức n y trở Trong chơng trình, cần phải xem nhắc nhở v định nên khắc phục hay l không Tốt l nên sửa lại m gốc cho không thông báo lỗi v nh¾c nhë n o Lun lËp Mơc Lun tËp cho câu hỏi để giúp ngời đọc củng cố lại kiến thức v b i tập nhằm cung cấp kinh nghiệm sử dụng điều đ học Câu hỏi H y nêu ba lý t¹i C l mét lùa chän tèt nhÊt ngôn ngữ lập trình Chơng trình dịch l m công việc gì? Các bớc chu trình phát triển chơng trình l gì? Cần phải gõ lệnh n o để dịch chơng trình có tên PROG1.C chơng trình dịch C ? Chơng trình dịch C kết nối v dịch lệnh hay hai lệnh riêng rẽ? Nên dùng đuôi n o cho tệp gốc cđa C? FILENAME.TXT cã hỵp lƯ cho mét tƯp gèc C không? Nếu chơng trình đ đợc dịch v không l m việc nh mong muốn, nên l m nh n o? M máy l gì? Bộ kết nối l m công việc gì? B i tập H y nhập v dịch chơng trình sau Chơng trình n y l m việc gì? (không viết số hiệu dòng soạn chơng trình) include int bankinh, dientich; main() { printf( "NhËp b¸n kÝnh: " ); scanf( "%d", &bankinh ); dientich = 3.14159 * bankinh * bankinh; printf( "\n\nDiÖn tÝch = %d", dientich ); return 0; } Nhập v dịch chơng trình sau Chơng trình n y l m việc gì? #include int x,y; main() { for ( x = 0; x < 10; x++, printf( "\n" ) ) for ( y = 0; y < 10; y++ ) printf( "X" ); return 0; } Chơng trình sau có vấn đề H y nhập v dịch Các dòng n o sinh thông báo lỗi? #include main(); { printf( "HÃy nhìn xem!" ) printf( "Bạn tìm thấy nó!" ); return 0; } Chơng trình sau ®©y cịng cã mét vÊn ®Ị H y nhËp v dịch Các dòng n o sinh thông báo lỗi? #include main() { printf( "Đây chơng trình" ) do_it( "có lỗi!" ); return 0; } Thay lệnh số chơng trình b i tập nh dới Dịch v chạy lại chơng trình Bây chơng trình n y l m gì? 9: printf( "%c", ); Bài Các thành phần chƠng trình C Mọi chơng trình C chứa số th nh phần đợc liên kết với theo cách định Để có tranh tổng thể, trớc hết nên bắt đầu xét chơng trình C ngắn nhng ho n chỉnh với tất th nh phần Một chơng trình C ngắn Chong trình 2.1 l m gốc chơng trình có tên l NHAN.C Đây l chơng trình đơn giản: bao gồm việc nhËp hai sè tõ b n phÝm v tÝnh tÝch chúng cha cần phải hiểu tất lệnh chơng trình, m chủ yếu l l m quen với th nh phần chơng trình C m Trớc xét chi tiết chơng trình n y, cần phải hiểu rõ khái niệm vỊ h m (function), v× h m l mét u tố việc lập trình C Một h m l phận độc lập chơng trình, đợc đặt tên v thực công việc n o Bằng việc gọi tên h m, chơng trình thực lệnh h m n y Chơng trình gửi thông tin, đợc gọi l đối số (argument), cho h m, v h m đa thông tin cho chơng trình Có hai kiểu h m: h m th viƯn - mét bé phËn cđa ch¬ng trình dịch C; v h m ngời sử dụng tự định nghĩa Chơng trình 2.1 NHAN.C 1: /* Chơng trình tính tích hai số */ 2: #include 3: int a,b,c; 4: int tich(int x, int y); 5: main() 6: { 7: /* NhËp sè thø nhÊt */ 8: printf("Nhập số nằm 100: "); 9: scanf("%d", &a); 10 11: /* NhËp sè thø hai */ 12: printf("Nhập số khác nằm vµ 100: "); 13: scanf("%d", &b); 14: 15: /* TÝnh vµ hiƯn kÕt qđa */ 16: c = tich(a,b); 17: printf( "\n%d nh©n %d = %d", a, b, c); 18: } 19: 20: /* Hàm tính tích hai đối sè */ 21: int tich(int x, int y) 22: { 23: return ( x * y ); 24: } Ch¬ng trình n y m n hình dòng kết qủa sau: Nhập số nằm 100: 35 Nhập số khác nằm 100: 23 35 nhân 23 = 805 Các th nh phần chơng trình Sau l mô tả th nh phần khác chơng trình mẫu nói Các số hiệu dòng l th nh phần chơng trình m đợc đa v o để tiện việc theo dõi v phân tích H m main() (Các dòng 5-18) Bộ phận cần phải có chơng trình C l h m main() Dạng đơn giản l : tên h m main theo sau l cặp dấu ngoặc tròn ( ) v cặp dấu ngoặc nhọn { } Nằm dấu ngoặc nhọn l lệnh tạo nên thân chơng trình Dới điều kiện bình thờng, chơng trình bắt đầu thực hiƯn tõ lƯnh thø nhÊt main() v kÕt thóc lệnh cuối main() Chỉ thị #include (Dòng 2) Chỉ thị #include báo cho chơng trình dịch C biết phải thêm v o chơng trình tệp dịch Một tệp đợc thêm v o l tệp đĩa riêng biệt chứa thông tin cần thiết cho chơng trình dịch Một số tệp tệp n y (đôi gọi l tệp tiêu đề header files) đợc cung cấp với chơng trình dịch Tất tệp n y có đuôi l H Chỉ thị #include ví dụ n y cã nghÜa l "Céng thªm néi dung cđa tƯp stdio.h" Hầu hết chơng trình C yêu cầu nhiều tệp cộng thêm Định nghĩa biến Một biến l tên gọi cho đại lợng đối tợng n o Mỗi biến đợc phân bổ địa nhớ Chơng trình C sử dụng biến để lu giữ loại liệu khác trình thực chơng trình Trong C, biến đợc sử dụng sau đ đợc định nghĩa Một định nghĩa biến cho chơng trình dịch biết tên biến v kiĨu cđa d÷ liƯu m nã lu gi÷ Trong ví dụ mẫu, định nghĩa dòng 3, int a,b,c, định nghĩa ba biến có tên l a, b, v c v biến chứa giá trị nguyên (integer) Trong B i sÏ nãi râ h¬n vỊ biến v định nghĩa biến Khai báo h m (Dòng 4) Một khai báo h m cho chơng trình dịch biết tên v đối số h m đợc sử dụng chơng trình Khai báo n y phải xuất trớc h m đợc sử dụng Khai báo h m khác với định nghĩa h m Một định nghĩa h m chứa lệnh tạo h m Các lệnh chơng trình (Các dòng 8, 9, 12, 13, 16, 17, 23) C«ng viƯc thùc chơng trình C đợc thực c¸c lƯnh cđa nã C¸c lƯnh cđa C l : thông tin m n hình, đọc phím đợc gõ v o từ b n phím, thực phép số học, gọi h m, đọc tệp đĩa, v tất thao tác khác m chơng trình cần phải thực Từ b i n y trở đi, lệnh C đợc viết riêng dòng v luôn đợc kết thúc dấu chấm phẩy (;) Sau l giải thích ngắn gọn cho lệnh chơng trình NHAN.C printf() Lệnh printf() (các dòng 8, 12, v 17) l mét h m th viƯn dïng ®Ĩ hiƯn thông tin lên m n hình Lệnh n y dùng để thông báo văn đơn giản (nh dòng v 12) thông báo v nhiều biến chơng trình (nh dòng 17) scanf() Lệnh scanf() (các dòng v 13) cịng l mét h m th viƯn dïng ®Ĩ ®äc liệu từ b n phím v gán liệu n y cho nhiều biến chơng trình c = tich (a, b); LÖnh n y gäi mét h m cã tªn l tich().NghÜa l , nã thùc hiƯn lệnh chơng trình chứa h m tich() Nó gửi đối số a v b cho h m Sau lệnh h m tich() đợc ho n tất, tich() đa giá trị cho chơng trình Giá trị n y đợc lu giữ biÕn cã tªn l c return (x * y); w * x / y * z w đợc nhân với x trớc, chia kết qủa thu đợc cho y, v ci cïng míi nh©n kÕt qđa cđa phÐp chia n y với z Tuy nhiên với mức u tiên khác để đảm bảo thứ tự từ_trái_qua_ phải Xét biểu thức sau: w * x / y + z / y Theo thø tù u tiên, phép nhân v chia đợc thực trớc phép cộng Tuy nhiên C không xác định biểu thức w * x / y đợc tính trớc hay tÝnh sau biÓu thøc z / y H y xem mét vÝ dơ kh¸c: w * x / ++y + z / y NÕu biÓu thøc thø nhÊt đợc tính trớc, y đợc tăng thêm biểu thức thứ hai đợc tính Nếu biểu thức thứ hai đợc tính trớc, y cha đợc tăng v kết qủa khác Do vậy, nên tránh viết biểu thức kiểu n y chơng trình Các phép quan hệ Các phép quan hệ C đợc sử dụng để so sánh biểu thức, chúng đặt câu hỏi, ví nh, "x có lớn 100 không?", "y có không ?" Mét biĨu thøc chøa mét phÐp quan hƯ chØ có hai giá trị, - true (1) sai - false (0) Sáu phép quan hệ C đợc cho Bảng 4.4 Bảng 4.4 Các phép quan hệ C Phép toán Ký hiệu Câu hỏi đợc đặt Ví dụ Bằng == Toán hạng có toán hạng không? x == y Lớn > Toán hạng có lớn toán hạng không? x > y Nhỏ < Toán hạng có nhỏ toán hạng không? x < y Lớn >= Toán hạng có lớn toán x>=y hạng không? Nhỏ 10,000,000 ) thue = 50; else thue = 25; VÝ dơ if ( tuoi y) đợc cộng với x trớc, sau đó, kết qủa n y đợc đem so sánh với y Mệnh đề tơng đơng với if ( (x + ) > y) ®ã, dấu ngoặc đợc sử dụng để l m rõ thêm thø tù thùc hiƯn cđa c¸c phÐp biĨu thøc Thứ tự u tiên phép quan hệ: Phép toán Quyền u tiên tơng đối < >= != == V× vËy, x == y > z; l tơng đơng với x == ( y > z ); vì, C tính biểu thức y > z giá trị l l Tiếp theo, C xác định xem x có giá trị thu đợc từ bớc hay không Không nên dùng câu lệnh gán câu lệnh if Điều l m cho ngời đọc chơng trình dễ nhầm lẫn Họ hiểu nhầm l chơng trình viết không v sửa lại phép gán th nh phép logic Đồng thơì không nên dùng phép "không bằng" (!=) câu lệnh if có chứa mệnh đề else Tốt l nên dùng phép "bằng" (==) víi else VÝ dơ, c©u lƯnh if (x != y ) câu_lệnh1; else câu_lệnh2; nên thay câu lệnh sau dễ hiểu if ( x = y ) câu_lệnh2; else câu_lệnh1; Các phép logic Đôi khi, cần phải đặt nhiều câu hỏi mối quan hệ biểu thức n o lúc Các phép logic C đảm bảo việc kết nối hai hay nhiỊu biĨu thøc quan hƯ th nh mét biểu thức để tính đợc giá trị l l sai Ba phép logic C đợc cho Bảng 4.7 Bảng 4.7 Các phép logic cđa C PhÐp to¸n Ký hiƯu VÝ dơ v && biểu_thức1 && biểu_thức2 Ư Ư biểu_thức1 Ư Ư biểu_thức2 không ! ! biểu_thức1 Phơng thức l m việc phép logic đợc Bảng 4.8 Bảng 4.8 Phơng thức l m việc phép logic Biểu thức Cho giá trị (biểu_thức1 && biểu_thức2) True (1) biểu_thức1 v biểu_thức2 true; ngợc lại false (0) (biểu_thức1 Ư Ư biểu_thức2) True (1) biểu_thức1 biểu_thức2 l true; false (0) hai ®Ịu false (! biĨu_thøc1) False (0) nÕu biĨu_thøc1 l true; true (1) nÕu biĨu_thøc1 l false Nãi thªm vỊ giá trị True/False (Đúng/Sai) Các biểu thức quan hệ C cho giá trị để biểu l sai v cho giá trị để biểu l Tuy nhiên, giá trị số n o đợc biểu nh l nh l sai đợc sử dụng biểu thức câu lệnh chờ giá trị logic (tức l , giá trị sai) Các qui tắc áp dụng cho trờng hợp n y l : Một giá trị không đợc coi l sai Một giá trị khác không đợc coi l Các ví dụ sau minh họa cho qui tắc n y: x = 125; if (x) printf ("%d", x); Trong trêng hỵp n y, giá trị x đợc in ra, x có giá trị khác không nên biểu thức (x) đợc câu lệnh if cho l Bởi vậy, biểu thức C cách viết (biểu_thức) l tơng đơng với cách viết (biểu_thức != 0) Cả hai cho giá trị biểu_thức khác không, v hai cho giá trị sai biểu_thức không Bằng phép toán không (!), ta viết (! biểu_thức) tơng đơng l (biểu_thức == 0) Thø tù thùc hiƯn c¸c phÐp logic C¸c phÐp logic cịng cã mét thø tù u tiªn chóng v với phép khác Phép ! (not) có độ u tiên với phép toán học (đơn nguyên) ++ v Vì vậy, phép ! có thứ tự u tiên cao tất phép quan hệ v tất phép toán học hai (nhị nguyên) Ngợc lại, phép && (and) v Ư Ư (or) có thứ tự u tiên thấp nhiều, thấp tất phép toán häc v c¸c phÐp quan hƯ && cã thø tù u tiên cao Ư Ư Cũng nh phép khác, dấu ngoặc đợc sử dụng để thay đổi thứ tự thực hiên dùng phép logic Các phép gán phức hợp Các phép gán phức hợp (compound assignment) C cung cấp giải pháp ngắn gọn kết nối phép toán học nhị nguyên với phép gán Ví dụ, giả sử muốn tăng giá trị x lên 5, hay nói cách khác cộng với x v lại gán kết qđa cho x th× cã thĨ viÕt nh sau: x = x + 5; Dùng phép gán phức hợp, gần nh cách viết tắt phép gán, viết ngắn gọn: x += 5; Tổng quát, phép gán phức hợp có dạng cú pháp nh sau (trong op l phép nhị nguyên): biểu_thức1 op= biểu_thức2 lệnh n y tơng đơng với biểu_thức1 = biểu_thức1 op biĨu_thøc2; PhÐp ®iỊu kiƯn PhÐp ®iỊu kiƯn l phÐp tam nguyªn nhÊt cđa C, tøc l nã cã ba toán hạng Cú pháp l : Biểu_thức1 ? biĨu_thøc2 : biĨu_thøc3 NÕu biĨu_thøc1 cho true (kh¸c 0), biểu thức tổng thể n y có giá trị cđa biĨu_thøc2 NÕu biĨu_thøc1 cho false (b»ng 0), th× biểu thức tổng thể có giá trị biểu_thức3 Ví dơ, c©u lƯnh x = y ? : 100; gán cho x, y l true, gán 100 cho x, nÕu y l false T¬ng tù nh vậy, để z lấy giá trị lớn hai giá trị x v y, viết z = (x > y) ? x : y; PhÐp ®iỊu kiƯn giống với câu lệnh if Câu lệnh có thÓ viÕt nh sau: if ( x > y) z = x; else z = y; PhÐp dÊu phÈy DÊu phẩy đợc sử dụng thờng xuyên C để l m dấu ngăn cách, tách biệt khai báo biến, đối số h m, v.v Trong số trờng hợp định, dấu phẩy lại h nh động nh phép toán không l dấu phân cách Có thể tạo biểu thức b»ng c¸ch ghÐp hai biĨu thøc b»ng dÊu phÈy Kết qủa nh sau: Cả hai biểu thức đợc tính nhng biểu thức bên trái đợc tính trớc Biểu thức tổng thể nhận giá trị biểu thức bên phải VÝ dơ, c©u lƯnh x = (a++ , b ++ ); tăng a, tăng b, sau gán giá trị b (cha tăng) cho x Vì phép ++ l kiểu sau, nên giá trị b - trớc đợc tăng - đợc gán cho x Dùng dấu ngoặc l cần thiết phép dÊu phÈy cã thø tù u tiªn thÊp, thËm chÝ thấp phép gán Kết luận Trong b i n y, nhiều khái niệm quan trọng C đ đợc trình b y: câu lệnh C l gì, khoảng trắng ý nghĩa chơng trình dịch C, v câu lệnh C ®Ịu kÕt thóc b»ng mét dÊu chÊm ph¶y Ngo i ra, đ học câu lệnh phức hợp hay gọi l khối Một khối chứa từ hai câu lệnh trở lên v đợc đóng khung dấu ngoặc nhọn, đợc sử dụng chỗ n o m câu lệnh đơn đợc sử dụng Nhiều câu lệnh đợc tạo th nh từ số biểu thức v phép toán Một biểu thức l mệnh đề n o dùng để tính đợc giá trị số Các biểu thức phức hợp chứa nhiều biểu thức đơn giản (biểu thức con) Các phép toán l ký hiệu C, dùng để hớng dẫn máy tính thực thao tác nhiều biểu thức Một số phép toán l đơn nguyên, có nghĩa l chúng thao tác toán hạng đơn Tuy nhiên, hầu hết phép C l nhị nguyên, thao tác hai toán hạng Có phép tam nguyên, l phép điều kiƯn C¸c phÐp to¸n cđa C cã mét qun u tiên phân cấp định thứ tự m theo phép toán đợc thực biểu thøc cã chøa nhiỊu phÐp to¸n C¸c phÐp to¸n cđa C b i n y đợc chia l m ba kiĨu: C¸c phÐp to¸n häc thùc hiƯn c¸c phÐp số học toán hạng chúng Các phép quan hệ thực việc so sánh toán hạng chúng Các phép logic thao tác biĨu thøc true/false ®Ĩ biĨu diƠn cho false, để biểu diễn cho true Câu hỏi v trả lời Các dấu cách v dòng trắng có l m ảnh hởng đến thực chơng trình không? Các khoảng trắng (dấu cách, dòng trắng, tabs) thờng đợc dùng để l m chơng trình dễ đọc Khi chơng trình đợc dịch, khoảng trắng bị bỏ qua, v chúng hiệu lực chơng trình đ dịch v kết nối Sự khác phép đơn nguyên v nhị nguyên l gì? Các phép đơn nguyên thao tác biến phép nhị nguyên l m việc với hai biến Phép trừ (-) l đơn nguyên hay nhị nguyên? L hai Chơng trình dịch đủ thông minh để biết phải l m với phép n y Nó biết phải dùng kiểu n o v o số biến biểu thức đợc sử dụng Trong câu lệnh sau, l đơn nguyên x = -y; ngợc lại, trờng hợp sau l nhị nguyên x = a - b; Một số âm đợc coi l đúng(true) hay sai (false)? l false, v giá trị khác l true Vì số âm l true Luyện tập Câu hỏi Câu lệnh sau đợc gọi l g×, v ý nghÜa cđa nã sao? x = + 8; Mét biĨu thøc l g×? Trong mét biĨu thøc cã chøa nhiỊu phÐp to¸n, định thứ tự thực chúng? Nếu biến x có giá trị l 10, giá trị x v a l sau lần câu lệnh sau đợc thực t¸ch biƯt? a = x++; a = ++x; BiĨu thức 10 % cho giá trị bao nhiêu? Cßn biĨu thøc + * / + ? H y viết thêm dấu ngoặc v o biểu thức câu để biểu thức có giá trị 16 Nếu biểu thức đợc đánh giá l false biểu thức n y có giá trị l mấy? Phép toán n o có thứ tự u tiên cao hơn? a == hay < b * hay + c != hay == d >= hay > 10 Phép gán phức hợp l v có ích lợi nh n o? B i tập Chơng trình sau viết không đợc hay H y nhập v dịch xem có chạy không #include int x, y; main() { printf( "\nNhËp hai sè"); scanf( "%d %d, &x,&y);printf( "\n\n%d lín h¬n",(x>y)?x:y);return 0;} H y viết lại chơng trình cho dễ đọc H y viết lại chơng trình 4.1 để đếm theo chiều tăng dần thay cho giảm dần Viết câu lệnh if để gán giá trÞ cđa x cho biÕn y chØ x n»mg v 20 Giữ nguyên y không đổi x kh«ng n»m miỊn n y Dïng phÐp ®iỊu kiƯn ®Ĩ thùc hiƯn nhiƯm vơ cđa c©u Viết lại câu lệnh if lồng sau câu lệnh if đơn v phép phøc hỵp if (x < 1) if ( x >10) câu_lệnh; Các biểu thức sau cho giá trị n o ? a (1 + * 3) b 10 % * - (1 + 2) c ((1 + 2) * 3) d (5 == 5) e (x = 5) NÕu x = 4, y = 6, v z = 2, h y xem c¸c mƯnh ®Ị sau ®©y l true hay false a if (x == 4) b if (x != y - z) c if (z = 1) d if (y) ViÕt mét câu lệnh if để khẳng định ngời l ngời lín (21 ti) nhng cha gi (65 ti) 10 H y sửa cho chơng trình sau chạy / µτ χη←νγ τρ⋅νη χ λι ∗/ #ινχλυδε ιντ ξ = 1; µαιν() { if (x == 1); printf ( " x b»ng 1"); otherwise printf (" x kh«ng b»ng 1"); return } ... toán đ? ?c th? ?c biểu th? ?c có chøa nhiỊu phÐp to¸n C? ?c phÐp to¸n c? ?a C b i n y đ? ?c chia l m ba kiểu: C? ?c phÐp to¸n h? ?c th? ?c hiƯn c? ?c phÐp sè h? ?c toán hạng chúng C? ?c phép quan hệ th? ?c vi? ?c so sánh... lệnh chơng trình (C? ?c dòng 8, 9, 12, 13, 16, 17, 23) C? ?ng vi? ?c th? ?c sù c? ?a chơng trình C đ? ?c th? ?c lệnh c? ?a nã C? ?c lƯnh c? ?a C l : hiƯn c? ?c thông tin m n hình, đ? ?c phím đ? ?c gâ v o tõ b n phÝm, th? ?c. .. hiểu đ? ?c ngôn ngữ, l ngôn ngữ máy (machine language) Bởi vậy, tr? ?c chơng trình C chạy đ? ?c máy tính, phải đ? ?c dịch từ m g? ?c sang m máy chơng trình đ? ?c gọi l chơng trình dịch (compiler) Chơng trình

Ngày đăng: 07/08/2014, 17:21

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

Tài liệu liên quan