Ngôn ngữ lập trình C với những gì cơ bản nhất
NGÔN NGỮ LẬP TRÌNH 1/Ngôn ngữ lập trình: Ngôn ngữ lập trình là hệ thống các ký hiệu tuân theo các qui ước về ngữ pháp và ngữ nghĩa, dùng để xây dựng thành các chương trình cho máy tính. Một chương trình được viết bằng một ngôn ngữ lập trình cụ thể (ví dụ Pascal, C…) gọi là chương trình nguồn, chương trình dịch làm nhiệm vụ dịch chương trình nguồn thành chương trình thực thi được trên máy tính. 2/Khái niệm chương trình: Chương trình là một chuỗi chỉ thị hay các câu lệnh điều khiển sự hoạt động của máy, nằm trong hệ thống quy ước về ý nghĩa và thứ tự thực hiện. Mỗi ngôn ngữ lập trình có những đặc trưng riêng, phù hợp để giải quyết một nhóm vấn đề nào đó. 3/Phương pháp để giải quyết một bài toán: - Phân tích vấn đề, xác định yêu cầu của bài toán - Đưa ra cách giải quyết - Cài đặt thuật toán - Thực thi chương trình và kiểm chứng * Cách viết một chương trình căn bản: - Đề: Cho 2 số nguyên a = 5, b = 9. Tính tổng 2 số đó và xuất kết quả ra màn hình. - Thuật toán: + Khai báo 3 biến, 2 biến giữ giá trị a và b và một biến kq giữ giá trị của tổng a và b. - Cài đặt: #include <stdio.h> void main() { int a = 5, b = 9, kq; kq = a + b; //Dung ham print xuat kq ra man hinh printf(“ket qua cua %d + %d la: %d”,a,b,kq);//%d la ma dat ta cua bien a, kieu int } Chương 2: CÁC THÀNH PHẦN TRONG NGÔN NGỮ C 1/Định danh Trong C/C++, tên của các biến, hằng, hàm….được gọi là định danh, chiều dài tới đa là 32 ký tự. Tên biến hợp lệ là một chuỗi ký tự liên tục gồm: Ký tự chữ, số và dấu gạch dưới. Ký tự đầu của tên phải là chữ hoặc dấu gạch dưới. Khi đặt tên không được đặt trùng với các từ khóa. Ví dụ 1 : Các tên đúng: delta, a_1, Num_ODD, Case Các tên sai: 3a_1 (ký tự đầu là số) num-odd (sử dụng dấu gạch ngang) int (đặt tên trùng với từ khóa) del ta (có khoảng trắng) f(x) (có dấu ngoặc tròn) Lưu ý: Trong C, tên phân biệt chữ hoa, chữ thường 2/Kiểu dữ liệu(Data types): Có năm kiểu dữ liệu cơ sở: ký tự(char), số nguyên(int), số thực (float), số thực có độ chính xác gấp đôi (double), và kiểu vô định void. 3/Từ khóa(keywords) Là những từ có ý nghĩa riêng được dành bởi ngôn ngữ lập trình. Dùng để khai báo dữ liệu, viết hàm…. Ví dụ: auto; break; switch….case; for; if; continued ; goto. 4/Ghi chú: Ghi chú một dòng: “//” Ghi chú một đoạn: “/*… text… */” 5/ Khai báo: Dạng khai báo tổng quát: Kiểu dữ liệu [khoảng trắng] tên biến. Ví dụ: int a; Gán dữ liệu: C1: int a; a = 5; C2: int a = 5; 6/ Ép kiểu Ngôn ngữ C tự động chuyển kiểu dữ liệu trong các biểu thức. Tuy nhiên trong nhiều trường hợp, lập trình viên cần phải ép kiểu (casting) để đạt kết quả như mong muốn. Dạng tổng quát của casting là (type) expression hoặc type(expression) Ví dụ: float kq; kq = 7/2; Do 7/2 là phép chia nguyên nên kết quả không có phần thập phân => kq = 3, nên cần phải ép kiểu. kq = (float)7/2;//Thường sử dụng kq = 7/(float)2; kq = (float)7/(float)2; kq = float(7)/float(2); Sau khi ép kiểu kết quả là: kq = 3.5 NHẬP XUẤT DỮ LIỆU TRONG C 1. Hàm printf Printf(“Dòng điều khiển”,[các biểu thức]); Ví dụ: int a = 5; printf(“a = %d”,a); Trong đó: %d là mã đặt tả dùng để in ra một số nguyên Các đặt tả trong hàm printf như sau: Mã Tác dụng %c char %d int %f float %lf double %s Mảng ký tự 2. Hàm Scanf Scanf(“các đặt tả”,<danh sách biến tương ứng với các đặt tả>); Ví dụ: printf(“Nhap vao so nguyen a: ”); scanf(“%d”,a); printf(“Nhap vao 2 so a va b: ”); scanf(“%d%d”,a,b); Lưu ý: Hàm scanf không nhập được khoảng trắng. Để nhập được dòng ký tự có khoảng trắng ta phải viết: scanf(“%[^\n]”,a); // a là chuỗi(xâu) ký tự được nhập 3. Hàm gets Gets(Tên của mảng ký tự); Hàm này cho phép nhận một chuỗi từ bàn phím. Cho phép nhập khoảng trắng giữa các từ Lưu ý về các hàm scanf, gets: Hai hàm trên nhận dữ liệu từ stdin (dòng nhập chuẩn có thể hiểu như một vùng nhớ đặc biệt). Chúng nhận dữ liệu theo nguyên tắc sau: - Nếu trên stdin có đủ dữ liệu thì chúng sẽ nhận một phần dữ liệu mà nó yêu cầu. Phần dữ liệu còn lại vẫn nằm ở trên stdin. - Nếu stdin không đủ dữ liệu theo yêu cầu của hàm, thì máy tạm dừng để chờ người sử dụng đưa dữ liệu từ bàn phím lên stdin( cho đến khi gặp phím). - Hàm gets sẽ xóa ký tự \n trong stdin. - Hàm scanf không xóa \n trông stdin. Lý thuyết thì như thế, nói tóm lại khi sử dụng hàm scanf cùng với hàm gets hoặc getchar dữ liệu nhập từ bàn phím sẽ bị trôi. Để các hàm hoạt động đúng chúng khử ký tự \n bằng lệnh ffush(stdin) sau lệnh scanf. Ví dụ: #include <stdio.h> void main() { int a; char b; printf(“Nhap mot so: ”); scanf(“%d”,&a); //fflush(stdin); printf(“Nhap vao mot ky tu: ”); scanf(“%c”,&a); } Giả sử ta nhập vào 34 <enter>, khi đó lệnh scanf thứ 2 bị trôi và kết quả là a = 34, b không có dữ liệu. Chương 3: CÁC CẤU TRÚC ĐIỀU KHIỂN TRONG C 1. Giới thiệu: Có 3 loại cấu trúc điều khiển để xây dựng nên một chương trình máy tính: cấu trúc tuần tự, lựa chọn, lặp. Cấu trúc tuần tự: thực hiện các lệnh từ trên xuống dưới Cấu trúc lựa chọn: Dựa vào kết quả của biểu thức điều kiện mà thực hiện lệnh(khối lệnh) này hay lệnh(khối lệnh) khác. Các cấu trúc lựa chọn gồm if, switch. Cấu trúc lặp: Dựa vào điều kiện thực hiện khối lệnh cho đến khi nào biểu thức điều kiện sai. Các cấu trúc lặp gồm for, while,do while Lưu ý: Các câu lệnh như break, continue, goto còn ảnh hưởng đến thứ tự thực hiện các lệnh của chương trình 1.1 Câu lênh, khối lệnh: Mỗi câu lệnh thực hiện một chức năng nào đó, kết thúc bởi một dấu chấm phẩy. Khối lệnh là một dãy các câu lệnh được đặt trong dấu { }, về mặt cú pháp khối lệnh tương đương với một câu lệnh. 2. Cấu trúc điều khiển if 2.1 Dạng 1: if( biểu thức điều kiện) <lệnh>; Nếu biểu thức cho kết quả <> 0 (true) thì thực hiện lệnh. Nếu có từ 2 lệnh trở lên ta phải đặt trong dấu {}. Ví dụ: void main() { int a; printf("Nhap vao mot so nguyen: "); scanf("%d",&a); if(a>10) printf("So ban nhap lon 10\n"); printf("%d la so ban nhap.",a); } Kết quả: Nhap vao mot so nguyen: 20 <enter> So ban nhap lon hon 10 20 la so ban nhap. 2.2 Dạng 2: if( biểu thức điều kiện) <lệnh 1>; else <lệnh 2>; Nếu biểu thức điều kiện cho kết quả <> 0( true) thì thực hiện lệnh 1, ngược lại thực hiện lệnh 2. Ví dụ: #include <stdio.h> void main() { int a; printf("Nhap vao mot so nguyen: "); scanf("%d",&a); if(a>10) printf("So ban nhap lon 10\n"); else printf("So ban nhap nho lon 10\n"); printf("%d la so ban nhap.",a); } Kết quả: Nhap vao mot so nguyen: 9 <enter> So ban nhap nho hon 10 9 la so ban nhap. 3. Cấu trúc lựa chọn (Switch) Cấu trúc switch là cấu trúc lựa chọn có nhiều nhánh. Khi có nhiều sự lựa chọn thì đây là cấu trúc phù hợp thay vì phải dùng nhiều lệnh if… else lồng nhau 3.1 Cú pháp Switch(biểu thức { case n1: các câu lệnh case n2: các câu lệnh ……… case nk: các câu lệnh [default: các câu lệnh] } Ni là các hằng số nguyên, ký tự Phụ thuộc vào giá trị của biểu thức viết sau switch, nếu: + Giá trị này bằng ni thì thực hiện các câu lệnh của case ni +Khi giá trị biểu thức khác tất cả các ni thì thực hiện lệnh default nếu có Khi thực hiện xong câu lệnh của một ni thì nó sẽ tự thực hiện các lệnh thuộc ni bên dưới, vì vậy phải dùng lệnh break để dừng. Ví dụ: Yêu cầu người thực hiện chương trình nhập vào một số nguyên dương là tháng trong năm và in ra số ngày của tháng đó. + Tháng 31 ngày: 1, 3, 5, 7, 8, 10, 12. + Tháng 30 ngày: 4, 6, 9, 11 + Riêng tháng 2 có 28 hoặc 29 ngày tùy năm. + Nếu nhập số <1 hoặc >12 thì in ra câu thông báo “Số bạn nhập không hợp lệ”. #include <stdio.h> int main() { // Khai bao bien int ngay, thang, nam; int nhuan = 0; // Nhap du lieu printf("Nhap vao mot thang: "); scanf("%d", &thang); printf("Nhap vao mot nam: "); scanf("%d", &nam); // Kiem tra nam nhuan if((nam % 400 == 0) || (nam % 4 == 0 && nam % 100 != 0)) nhuan = 1; switch(thang) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: ngay = 31; break; case 4: case 6: case 9: case 11: ngay = 30; break; case 2: if(nhuan == 1) ngay = 29; else ngay = 28; break; } printf("So ngay cua thang %d nam %d la: %d\n", thang, nam, ngay); return 0; } 4. Các cấu trúc lặp Cấu trúc lặp cho phép một lệnh hoặc một khối lệnh lặp đi lặp lại nhiều lần khi biểu thức còn thỏa điều kiện 4.1 Cấu trúc lặp for Cú pháp: for(biểu thức 1; biểu thức 2; biểu thức 3) <Khối lệnh>; Cách hoạt động của vòng for: