# **TASK 02: CODING 2** ![](https://i.imgur.com/asTI0qF.jpg) *** ## **Tìm hiểu ngôn ngữ lập trình C theo các bài trên: [*'C cho người mới bắt đầu'*](https://codelearn.io/learning/c-cho-nguoi-moi-bat-dau)** >- Làm phần Biến, Đầu vào, Cấu trúc rẽ nhánh, Vòng lặp (từ bài 11 đến 43) >- Qua từng bài note lại các điều cần lưu ý về Biến, Đầu vào, Cấu trúc rẽ nhánh, Vòng lặp >- Cuối báo cáo nhớ chụp màn hình thể hiện đã submit hết các bài # **LƯU Ý:** ## **Biến** ### 1. Quy tắc khai báo biến trong C: >- Tên biến có thể có chữ cái, chữ số và dấu gạch dưới nhưng ký tự đầu tiên của tên biến bắt buộc phải là chữ cái hoặc dấu gạch dưới. >- Tên biến không được có khoảng trắng. >- Tên biến không được trùng với các từ khóa như int, float, char, double,... >- Biến trong C có phân biệt chữ hoa và chữ thường. >`Tên biến hợp lệ:⭕ int a; int _Aa; int a5;` >`Tên biến không hợp lệ:❌ int 9; int a b; int char;` ### 2. Không thể dùng biến kiểu số nguyên để lưu trữ số thực và nên sử dụng kiểu double thay cho kiểu float( Trừ khi sử dụng rất nhiều số học dấu phẩy động, như hàng ngàn số với hàng nghìn 0, hoạt động trên nhiều số / mảng / vectơ cùng một lúc). - Độ chính xác của double cao hơn float: ``` #include<stdio.h> int main () { float a=5.1/9.0; double b=5.1/9.0; printf("%.15f\n",a); printf("%.15lf",b); return 0; } ``` >Kết Quả: ![](https://i.imgur.com/4lkOkGW.png) - Một biến của kiểu float có dung lượng lưu trữ là 32 bit trong khi đó, một biến kiểu kép có dung lượng lưu trữ là 64 bit, nó biên dịch gấp đôi dung lượng lưu trữ lớn hơn so với float. ### 3. Cần sử dụng các kiểu dữ liệu một cách hợp lý vì kiểu dữ liệu có miền giá trị càng lớn sẽ càng tốn bộ nhớ. ## **Đầu Vào** ### 1. Để khống chế số chữ số thập phân muốn hiện sau dấu phẩy ta thay đổi chuỗi định dạng thành `%.xf` với x là số chữ số thập phân muốn hiện sau dấu phẩy. Vd `%.2f`, `%.3f`,... ### 2. Định dạng và sự áp dụng của chúng cho các hàm printf() và scanf(): >- %d để hiển thị giá trị của các biến kiểu số nguyên. >- %c để hiển thị giá trị của các biến kiểu ký tự. >- %f để hiển thị giá trị của các biến kiểu số thực. >- %lf để hiển thị giá trị của các biến kiểu double. >- %lld để hiển thị giá trị của các biến kiểu long long >- %s để hiển thị giá trị của các biến kiểu chuỗi. >- %x để hiển thị giá trị của các biến kiểu số ở hệ thập lục phân (hệ cơ số 16). >- ... ``` #include<stdio.h> int main(){ int a; char b; float c; double d; long long e; scanf("%d %c %f %lf %lld",&a,&b,&c,&d,&e); printf("%d %c %.2f %.3lf %lld",a,b,c,d,e); return 0; } ``` ## **Cấu Trúc Rẻ Nhánh** ### 1. Nhớ xét đủ tất cả các trường hợp có thể xảy ra, không được bỏ xót 1 trường hợp nào! ### 2. Với câu lệnh if, khi trong khối lệnh if có nhiều hơn 2 lệnh thì chúng ta phải dùng cú pháp lệnh if thông thường với cặp dấu {} ( Nếu chỉ có 1 lệnh thì có thể lượt bỏ cặp dấu này giống trong khối lệnh else). ``` #include<stdio.h> int main(void){ int a; scanf("%d",&a); if (a<18){ printf("Em chưa 18, khong duoc xem phim nay\n"); printf("Hen em lan sau");} else printf("Du 18, duoc vao rap"); return 0; } ``` ### 3. Giá trị của các case là một hằng số( có thể là biểu thức nhưng kết quả cần là hằng số) và các giá trị của các case phải khác nhau. Số lượng các case là không giới hạn nhưng chỉ có thể có duy nhất một default hoặc có thể là không có. ``` #include<stdio.h> int main(){ int a,b; char c; printf("Nhap vao phep toan: "); scanf("%c",&c); printf("\nNhap vao 2 so a, b: "); scanf("%d%d",&a,&b); switch(c){ case '+': printf("\n%d ",a+b); break; case '-': printf("%d ",a-b); break; case '*': printf("%d ",a*b); break; case '/': if(b==0){printf("\nKhong the chia cho 0");} else{printf("%.2f ",(float)a/b);} /* khai báo kiểu dữ liệu của giá trị a/b (nếu không khai báo đúng kiểu dữ kiệu, nhiều trường hợp sẽ cho ra kết quả sai)*/ break; default: printf("\nKhong co phep toan %c",c); break; } return 0; } ``` ### 4. Từ khóa break có thể sử dụng hoặc không. Nếu không được sử dụng thì chương trình sẽ không kết thúc khi đã thực hiện hết khối lệnh của case đó. Thay vào đó, nó sẽ thực hiện tiếp các khối lệnh của case tiếp theo cho đến khi gặp từ khoá break hoặc dấu } cuối cùng của cấu trúc switch-case. >**Khi không có break:** ``` #include<stdio.h> int main(){ int a,b; char c; printf("Nhap vao phep toan: "); scanf("%c",&c); printf("\nNhap vao 2 so a, b: "); scanf("%d%d",&a,&b); switch(c){ case '+': printf("\n%d ",a+b); case '-': printf("%d ",a-b); case '*': printf("%d ",a*b); case '/': if(b==0){printf("\nKhong the chia cho 0");} else{printf("%.2f ",(float)a/b);} } return 0; } ``` >Kết quả: ![](https://i.imgur.com/6vToKlz.png) ## **Vòng Lặp** ### 1. Trong câu lệnh for, có thể sẽ không có phần <khởi đầu> *( khai báo trước)*, có thể sẽ không có phần <điều kiện lặp> *( bị lặp vô hạn hoặc dùng lệnh break để dừng vòng lặp)*, có thể sẽ không có phần <bước nhảy> *( chỉ thực hiện 1 lần duy nhất)*. ``` #include<stdio.h> int main() { int i=0; for(;i<=5;i++){ //không cần khởi tạo biến i printf("%d ",i);} return 0; } ``` ``` #include<stdio.h> int main() { for(int i=0; ;i++){ //bị lặp vô hạn printf("%d ",i);} for(i=0; ;i++){ if (i>=5) break; //thoát vòng lặp for printf("%d ",i);} return 0; } ``` ``` #include<stdio.h> int main(){ for(int i=0;i<5; ) { //chỉ thực hiện 1 lần printf("%d ",i); i++;} //để vòng lặp xảy ra return 0; } ``` ### 2. Không được thêm ";" ngay sau lệnh for. ``` for(i=0;i<5;i++); //không được có ; ở đây {printf("%d ",i);} ``` ### 3. Các thành phần chính gồm <khởi đầu>, <điều kiện lặp>, <bước nhảy> cách nhau bằng dấu ";". Nếu có nhiều thành phần con trong mỗi thành phần chính thì được cách nhau bằng dấu ",". ``` for(int i=1,j=2;i+j<5;i++,j+=2) //j+=2 bằng j=j+2 {printf("%d %d",i,j);} ``` ### 4. <điều kiện lặp> trong for nên giới hạn rõ ràng để tránh trường hợp lặp vô hạn. *** ## **Ảnh chụp màn hình thể hiện đã submit hết các bài( 11 -> 43):** ![](https://i.imgur.com/04XXIL4.png) *** > Tham khảo học code tại [Codelearn](https://codelearn.io/home)