Lập trình Chư ng CÁC CÂU L NH Đ N TRONG C Học xong chương này, sinh viên nắm rõ vấn đề sau: Câu lệnh gì? Cách sử dụng câu lệnh gán giá trị biểu thức cho biến Cách sử dụng lệnh scanf để nhập giá trị cho biến Cách sử dụng lệnh printf để xuất giá trị biểu thức lên hình cách định dạng liệu I Câu l nh I.1 Khái ni m câu l nh Một câu lệnh (statement) xác định công việc mà chương trình phải thực để xử lý liệu mô tả khai báo Các câu lệnh ngăn cách với dấu chấm phẩy (;) I.2 Phân loại Có hai loại lệnh: lệnh đơn lệnh có cấu trúc Lệnh đơn lệnh khơng chứa lệnh khác Các lệnh đơn gồm: lệnh gán, câu lệnh nhập xuất liệu… Lệnh có cấu trúc lệnh chứa lệnh khác Lệnh có cấu trúc bao gồm: cấu trúc điều kiện rẽ nhánh, cấu trúc điều kiện lựa chọn, cấu trúc lặp cấu trúc lệnh hợp thành Lệnh hợp thành (khối lệnh) nhóm bao gồm nhiều khai báo biến lệnh gom vào cặp dấu {} II CÁC L NH Đ N II.1 L nh gán Lệnh gán (assignment statement) dùng để gán giá trị biểu thức cho biến Cú pháp: = Ví dụ: int main() { int x,y; x =10; /*Gán số 10 cho biến x*/ y = 2*x; /*Gán giá trị 2*x=2*10=20 cho x*/ return 0; } Trang 36 Lập trình Nguyên tắc dùng lệnh gán kiểu biến kiểu biểu thức phải giống nhau, gọi có tương thích kiểu liệu Chẳng hạn ví dụ sau cho thấy khơng tương thích kiểu: int main() { int x,y; x = 10; /*Gán số 10 cho biến x*/ y = “Xin chao”; /*y có kiểu int, cịn “Xin chao” có kiểu char* */ return 0; } Khi biên dịch chương trình này, C báo lỗi "Cannot convert ‘char *’ to ‘int’" tức C tự động chuyển đổi kiểu từ char * (chuỗi ký tự) sang int Tuy nhiên đa số trường hợp tự động biến đổi kiểu để tương thích kiểu thực Ví dụ: int main() { int x,y; float r; char ch; r = 9000; x = 10; /* Gán số 10 cho biến x */ y = 'd'; /* y có kiểu int, cịn ‘d’ có kiểu char*/ r = 'e'; /* r có kiểu float, ‘e’ có kiểu char*/ ch = 65.7; /* ch có kiểu char, cịn 65.7 có kiểu float*/ return 0; } Trong nhiều trường hợp để tạo tương thích kiểu, ta phải sử dụng đến cách thức chuyển đổi kiểu cách tường minh Cú pháp phép toán sau: (Tên kiểu) Chuyển đổi kiểu thành kiểu Chẳng hạn như: float f; f = (float) 10 / 4; /* f lúc 2.5*/ Chú ý: - Khi biểu thức gán cho biến giá trị thay giá trị cũ mà biến lưu giữ trước - Trong câu lệnh gán, dấu = tốn tử; sử dụng thành phần biểu thức Trong trường hợp giá trị biểu thức gán giá trị biến Ví dụ: int x, y; y = x = 3; /* y lúc 3*/ - Ta gán trị cho biến lúc biến khai báo theo cách thức sau: = ; Ví dụ: int x = 10, y=x; Trang 37 Lập trình II.2 L nh nh p giá trị từ bàn phím cho biến (hàm scanf) Là hàm cho phép đọc liệu từ bàn phím gán cho biến chương trình chương trình thực thi Trong ngơn ngữ C, hàm scanf nằm thư viện stdio.h Cú pháp: scanf(“Chuỗi định dạng”, địa biến); Giải thích: - Chuỗi định dạng: dùng để qui định kiểu liệu, cách biểu diễn, độ rộng, số chữ số thập phân Một số định dạng nhập kiểu số nguyên, số thực, ký tự Định dạng Ý nghĩa %[số ký số]d Nhập số nguyên có tối đa %[số ký số] f Nhập số thực có tối đa tính dấu chấm %c Nhập ký tự Ví dụ: %d Nhập số nguyên %4d Nhập số nguyên tối đa ký số, nhập nhiều ký số nhận ký số %f Nhập số thực %6f Nhập số thực tối đa ký số (tính ln dấu chấm), nhập nhiều ký số nhận ký số (hoặc ký số với dấu chấm) - Địa biến: địa (&) biến mà cần nhập giá trị cho Được viết sau: & Ví dụ: scanf(“%d”,&bien1);/*Doc gia tri cho bien1 co kieu nguyen*/ scanf(“%f”,&bien2); /*Doc gia tri cho bien2 co kieu thưc*/ scanf(“%d%f”,&bien1,&bien2); /*Doc gia tri cho bien1 co kieu nguyen, bien2 co kieu thuc*/ scanf(“%d%f%c”,&bien1,&bien2,&bien3); /*bien3 co kieu char*/ o o o o o o o Lưu ý: Chuỗi định dạng phải đặt cặp dấu nháy kép (“”) Các biến (địa biến) phải cách dấu phẩy (,) Có biến phải có nhiêu định dạng Thứ tự định dạng phải phù hợp với thứ tự biến Để nhập giá trị kiểu char xác, nên dùng hàm fflush(stdin) để loại bỏ ký tự nằm vùng đệm bàn phím trước hàm scanf() Để nhập vào chuỗi ký tự (không chứa khoảng trắng hay kết thúc khoảng trắng), phải khai báo kiểu mảng ký tự hay trỏ ký tự, sử dụng định dạng %s tên biến thay cho địa biến Để đọc vào chuỗi ký tự có chứa khoảng trắng (kết thúc phím Enter) phải dùng hàm gets() Ví dụ: int biennguyen; float bienthuc; char bienchar; char chuoi1[20], *chuoi2; Trang 38 Lập trình Nhập giá trị cho biến: scanf(“%3d”,&biennguyen); Nếu ta nhập 1234455 giá trị biennguyen ký số (123) Các ký số lại nằm lại vùng đệm scanf(“%5f”,&bienthuc); Nếu ta nhập 123.446 giá trị bienthuc 123.4, ký số lại nằm vùng đệm scanf(“%2d%5f”,&biennguyen, &bienthuc); Nếu ta nhập liên tiếp số cách khoảng trắng sau: 1223 3.142325 - ký số (12) đọc vào cho biennguyen - ký số trước khoảng trắng (23) đọc vào cho bienthuc scanf(“%2d%5f%c”,&biennguyen, &bienthuc,&bienchar) Nếu ta nhập liên tiếp số cách khoảng trắng sau: 12345 3.142325: - ký số (12) đọc vào cho biennguyen - ký số trước khoảng trắng (345) đọc vào cho bienthuc - Khoảng trắng đọc cho bienchar Nếu ta nhập số gồm nhiều ký số sau: 123456789: - ký số (12) đọc vào cho biennguyen - ký số (34567) đọc vào cho bienthuc - bienchar có giá trị ký số ‘8’ Nếu ta nhập chuỗi sau: Nguyen Van Linh ↵ giá trị biến chuoi1 hay chuoi2 Nguyen scanf(“%s”,chuoi1); scanf(“%s”,chuoi2) Nếu ta nhập chuỗi sau: Duong Van Hieu ↵ giá trị biến chuoi1 Duong giá trị biến chuoi2 Van Vì v y? C đọc từ đầu đến gặp khoảng trắng gán giá trị cho biến đầu tiên, phần lại sau khoảng trắng giá trị biến scanf(“%s%s”,chuoi1, chuoi2); Nếu nhập chuỗi : Nguyen Van Linh ↵ giá trị biến chuoi1 Nguyen Van gets(chuoi1); Linh II.3 L nh xuất giá trị biểu thức lên hình (hàm printf) Hàm printf (nằm thư viện stdio.h) dùng để xuất giá trị biểu thức lên hình Cú pháp: printf(“Chuỗi định dạng ”, Các biểu thức); Giải thích: - Chuỗi định dạng: dùng để qui định kiểu liệu, cách biểu diễn, độ rộng, số chữ số thập phân Một số định dạng số nguyên, số thực, ký tự Định dạng Ý nghĩa Trang 39 Lập trình %d %[.số chữ số thập phân] f Xuất số nguyên Xuất số thực có theo quy tắc làm tròn số %o Xuất số nguyên hệ bát phân %x Xuất số nguyên hệ thập lục phân %c Xuất ký tự %s Xuất chuỗi ký tự %e %E %g Xuất số nguyên dạng khoa học (nhân 10 mũ x) %G Ví dụ %d In số nguyên %4d In số nguyên tối đa ký số, số cần in nhiều ký số in hết %f In số thực %6f In số thực tối đa ký số (tính ln dấu chấm), số cần in nhiều ký số in hết %.3f In số thực có số lẻ, số cần in có nhiều số lẻ làm trịn - Các biểu thức: biểu thức mà cần xuất giá trị lên hình, biểu thức phân cách dấu phẩy (,) Ví dụ: include int main(){ int bien_nguyen=1234, i=65; float bien_thuc=123.456703; printf(“Gia tri nguyen cua bien nguyen =%d\n”,bien_nguyen); printf(“Gia tri thuc cua bien thuc =%f\n”,bien_thuc); printf(“Truoc lam tron=%f \n Sau lam tron=%.2f”,bien_thuc, bien_thuc); return 0; } Kết in sau: Nếu ta thêm vào dịng sau chương trình: printf(“\n Ky tu co ma ASCII %d la %c”,i,i); Kết ta nhận thêm: printf(“ So nguyen la %d \n So thuc la %f”,i, (float)i ); printf(“\n So thuc la %f \n So nguyen la %d”,bien_thuc, (int)bien_thuc); printf(“\n Viet binh thuong =%f \n Viet kieu khoa hoc=%e”,bien_thuc, bien_thuc); Kết in hình: Trang 40 Lập trình Lưu ý: Đối với ký tự điều khiển, ta sử dụng cách viết thông thường để hiển thị chúng Ký tự điều khiển ký tự dùng để điều khiển thao tác xuất, nhập liệu Một số ký tự điều khiển mô tả bảng: Ký tự điều khiển \a \b Giá trị th p lục phân 0x07 0x08 \f \n \r \t \\ \’ \” \? \ddd \xHHH 0x0C 0x0A 0x0D 0x09 0x5C 0x2C 0x22 0x3F ddd oxHHH Ký tự hiển thị Ý nghĩa BEL BS Phát tiếng chuông Di chuyển trỏ sang trái ký tự xóa ký tự bên trái (backspace) FF Sang trang LF Xuống dòng CR Trở đầu dòng HT Tab theo cột (giống gõ phím Tab) \ Dấu \ ‘ Dấu nháy đơn (‘) “ Dấu nháy kép (“) ? Đấu chấm hỏi (?) Ký tự có mã ACSII hệ bát phân số ddd Ký tự có mã ACSII hệ thập lục phân HHH Ví dụ: #include #include int main () { clrscr(); printf("\n Tieng Beep \a"); printf("\n Doi tro sang trai ky tu\b"); printf("\n Dau Tab \tva dau backslash \\"); printf("\n Dau nhay don \' va dau nhay kep \""); printf("\n Dau cham hoi \?"); printf("\n Ky tu co ma bat phan 101 la \101"); printf("\n Ky tu co ma thap luc phan 41 la \x041"); printf("\n Dong hien tai, xin go enter"); getch(); printf("\rVe dau dong"); getch(); return 0; } Trang 41 Lập trình Kết trước gõ phím Enter: Kết sau gõ phím Enter: III BÀI T P III.1 Mục đích yêu cầu Làm quen nắm vững lệnh đơn giản (printf, scanf), kiểu liệu chuẩn (int, long, char, float ), phép toán hàm chuẩn ngơn ngữ lập trình C Thực viết chương trình hồn chỉnh sử dụng lệnh đơn giản kiểu liệu chuẩn III.2 Nội dung Viết chương trình in lên hình thiệp mời dự sinh nhật có dạng: ******************************************* THIEP MOI Thân mời bạn : Nguyễn Mạnh Hùng Tới dự lễ sinh nhật Vào lúc 19h ngày 12/10/2005 Tại 05/42 Trần Phú - Cần Thơ Rất mong đón tiếp ! Hồ Thu Hương ******************************************* Viết chương trình nhập vào bán kính r hình trịn Tính chu vi diện tích hình trịn theo cơng thức : Chu vi CV = 2*Pi*r Diện tích S = Pi*r*r In kết lên hình Viết chương trình nhập vào độ dài cạnh a, b, c tam giác Tính chu vi diện tích tam giác theo cơng thức: Chu vi CV = a+b+c Trang 42 Lập trình Diện tích S = sqrt(p*(p-a)*(p-b)*(p-c)) Trong đó: p=CV/2 In kết lên hình Viết chương trình tính logax với a, x số thực nhập vào từ bàn phím, x>0, a>0, a != 1.( dùng logax=lnx/lna) Viết chương trình nhập vào tọa độ hai điểm (x1, y1) (x2, y2) a) Tính hệ số góc đường thẳng qua hai điểm theo cơng thức: Hệ số góc = (y2 - y1) /(x2 - x1) b) Tính khoảng cách hai điểm theo công thức: Khoảng cách = ( y − y1 )2 + (x2 − x1 )2 Viết chương trình nhập vào ký tự: a) In mã Ascii ký tự b) In ký tự Viết chương trình nhập vào giá trị điện trở R1, R2, R3 mạch điện : Tính tổng trở theo cơng thức: 1 1 = + + R R1 R2 R3 Viết chương trình nhập vào điểm ba mơn Tốn, Lý, Hóa học sinh In điểm trung bình học sinh với hai số lẻ thập phân Viết chương trình nhập vào ngày, tháng, năm In ngày tháng năm theo dạng dd/mm/yy (dd: ngày, mm: tháng, yy : năm Ví dụ: 20/11/99 ) 10 Viết chương trình đảo ngược số ngun dương có chữ số Trang 43 ... phím cho biến (hàm scanf) Là hàm cho phép đọc liệu từ bàn phím gán cho biến chương trình chương trình thực thi Trong ngơn ngữ C, hàm scanf nằm thư viện stdio.h Cú pháp: scanf(“Chuỗi định dạng”,... cho Được viết sau: & Ví dụ: scanf(“%d”,&bien1);/*Doc gia tri cho bien1 co kieu nguyen*/ scanf(“%f”,&bien2); /*Doc gia tri cho bien2 co kieu thưc*/ scanf(“%d%f”,&bien1,&bien2); /*Doc gia... Trang 38 Lập trình Nhập giá trị cho biến: scanf(“%3d”,&biennguyen); Nếu ta nhập 1234455 giá trị biennguyen ký số (123) Các ký số lại nằm lại vùng đệm scanf(“%5f”,&bienthuc); Nếu ta nhập 123.446