Bài 3: Câu Lệnh (Statement)
[BOOK]
I. TRUE VÀ FALSE TRONG C
Một biểu thức điều kiện khi cho hai giá trị hoặc đúng hoặc sai.
Trong C, 0 được coi là giá trị sai. Tất cả giá trị khác không, bao gồm cả giá trị âm, đều được coi là giá trị đúng.
II. LỆNH LỰA CHỌN
1. Lệnh if - else
if (điều_kiện) S1;
Else S2;
Mệnh đề elsse là tùy chọn, có thể có hoặc không.
Nếu điều kiện đúng thì S1 được thực thi, nếu không thì S2 thực thi.
VD:
#include<stdio. H>
Int main () {
Int a;
Printf ( "Nhap a =") ;
Scanf ( "%d", &a) ;
if (a>=0) printf ( "a la so khong am") ;
Return 0;
}
VD:
#include<stdio. H>
Int main () {
Int a;
Printf ( "Nhap a =") ;
Scanf ( "%d", &a) ;
if (a>=0) printf ( "a la so khong am") ;
else printf ( "a la so am") ;
Return 0;
}
Ta cũng có thể dùng if-else lồng nhau kiểu:
if (a>=0)
{
If (a==0) printf ( "a la so khong am cung khong duong") ;
Else printf ( "a la so duong") ;
}
else printf ( "a la so am") ;
Hoặc if - else liên tiếp:
if (a>0) printf ( "a la so duong") ;
Else if (a=0) prrintf ( "a la so khong am cung khong duong") ;
Else printf ( "a la so am") ;
2. Lệnh switch
switch (<biểu thức điều kiện>)
{
Case val1:
<lenh voi case 1>;
Break;
Case val2:
<lenh voi case 2>;
Break;
Case val3:
<lenh voi case 3>;
Break;
Case val4:
<lenh voi case 4>;
Break;
* * *
Default:
<lenh voi case n+1>;
}
Lệnh
switch.. case
- Trường hợp biểu thức điều kiện có giá trị kiểu nguyên
- Số lượng giá trị là hữu hạn
- Có thể dễ dàng thay thế bởi if.. Else
- Câu lệnh brea k giúp chương trình thoát khỏi vòng lựa chọn
VD. Nhập vào 1 tháng của năm, in ra số ngày của tháng đó (không phải năm nhuận)
#include <stdio. H>
Int main ()
{
Int month;
Printf ( "Nhap vao thang:") ;
Scanf ( "%d", &month) ;
switch (month)
{
Case 1: Case 3: Case 5: Case 7: Case 8: Case 10: Case 12:
Printf ( "Thang %d co 31 ngay! \n", month) ;
Break;
Case 2:
Printf ( "Thang %d co 28 ngay! \n", month) ;
Break;
Case 4: Case 6: Case 9: Case 11:
Printf ( "Thang %d co 30 ngay! \n", month) ;
Break;
Default:
Printf ( "Thang nhap vao khong hop le! \n", month) ;
}
Return 0;
}
III. LỆNH LẶP
1. Lệnh lặp for
for (<biểu thức khởi tạo>; <điều kiện lặp>; <biểu thức lặp>)
<lệnh lặp>;
VD:
int i=1;
For (i=0; i<=100;i++)
{
Printf ( "..."
I) ;
}
- <biểu thức khởi tạo>: Khởi tạo giá trị 1 lần
- Trong khi <điều kiện lặp> còn đúng thì thực hiện <lệnh lặp>, và sau đó thực hiện <biểu thức lặp> (chủ yếu để thay đổi giá trị biến lặp → thay đổi giá trị của điều kiện lặp)
- Không nhất thiết phải khai báo đủ các thành phần trong điều kiện ở for, nhưng vẫn cần có đủ ;
Int i=1;
For (; i<=100;)
{
Printf ( "..."
I) ;
I++;
}
2. Lệnh lặp while
Cú pháp:
while (điều_kiện)
{
Câu_lệnh;
}
Check điều kiện, nếu đúng mới thực hiện
VD:
Int i=1;
while (i<=100)
{
Printf ( "..."
I) ;
I++;
}
3. Lệnh lặp do.. while
Cú pháp:
do
{
Câu_lệnh;
}
While (điều_kiện) ;
Thực hiện lần đầu tiên, rồi mới check điều kiện
VD. Nhập n thỏa mãn điều kiện n>=0 và n<=100
do
{
Printf ( "Nhap n (0<=n<=100) :") ;
Scanf ( "%d", &n) ;
}
While (n<0
N>100) ;
IV. LỆNH NHẢY
1. Lệnh break
break;
Khi gặp câu lệnh break; chương trình sẽ thoát ra khỏi vòng lặp ngay lập tức và nhảy đến câu lệnh sau vòng lặp.
2. Lệnh goto
Lệnh goto ít khi được sử dụng trong các tình huống lập trình, bởi vì nếu sử dụng nhiều lệnh nhảy sẽ làm cho chương trình trở nên phức tạp khó gỡ rối.
Cú pháp:
goto <định_danh>;
trong đó định danh là tên của một chuỗi câu lệnh khác:
<định_danh>:
Câu_lệnh;
VD:
for (int i=1;i<10;i++)
{
If (i%5==0) goto ketthuc;
}
Ketthuc:
Printf ( "%d là so chia het cho 5) ;
3. Lệnh return
Cú pháp:
return biểu_thức;
Lệnh return dùng để thoát khỏi một hàm, nó được phân loại lệnh nhảy vì nó trở về đúng vị trí gọi hàm.
Lệnh return có thể mang một giá trị hoặc không. Nếu nó mang giá trị, thì đó cũng chính là giá trị của hàm.
VD:
return 0;
Retun x+1;
V. BÀI TẬP
Bài tập 1. Nhập vào 1 số nguyên, tính tổng các chữ số của số đó và in ra màn hình. Chú ý số ban đầu có thể là số âm.
- Chuyển số âm về số dương (nếu đầu vào là số âm)
- Tách các chữ số bằng cách chia % và / (vì số ban đầu là số nguyên)
Bài tập 2. Nhập vào 1 số nguyên, in lại số đó sao cho dễ đọc
123 → 123
12345 → 12, 345
123456789 → 123, 456, 789
Giới hạn số có tối đa 9 chữ số
- Tách số thành 3 phần dạng abc
- a = n/1000000 số hàng triệu
- c = n%1000 → số hàng đơn vị
- b =
- Để in ra xét các trường hợp
- A và b đều bằng 0
- A == 0
- Trường hợp còn lại
12025006 ta có thể phân tách
- A = 12
- B = 25
- C = 6
- printf (" %d, %d, %d ", a, b, c) → bị thiếu số 0
- C1. Nếu b >= 1000 → printf (" %d ", b) ;
Nếu 1000>b>=10 → printf (" 0%d ", b) ;
Ngược lại (b<10) → printf (" 00%d ", b) ;
* * *
#include <stdio. H>
Int main ()
{
Int n;
Printf (" n= ") ;
Scanf (" %d ", &n) ;
While (n<0
N>1000000000)
{
Printf (" Nhap lai n= ") ;
Scanf (" %d ", &n) ;
}
Printf (" So sau khi in lai: ") ;
Int a, b, c;
A = n/1000000;
C = n%1000;
B = (n/1000) %1000;
If (a==0)
{
If (b==0) printf (" %d\n ", c) ;
Else {
If (c>=100) printf (" %d, %d\n ", b, c) ;
Else if (c>=10) printf (" %d, 0%d\n ", b, c) ;
Else printf (" %d, 00%d\n ", b, c) ;
}
}
Else
{
If (b==0) printf (" %d, 000, %d\n ", a, c) ;
Else {
If (b>=100) {
If (c>=100) printf (" %d, %d, %d\n ", a, b, c) ;
Else if (c>=10) printf (" %d, %d, 0%d\n ", a, b, c) ;
Else printf (" %d, %d, 00%d\n ", a, b, c) ;
}
Else if (b>=10)
{
If (c>=100) printf (" %d, 0%d, %d\n ", a, b, c) ;
Else if (c>=10) printf (" %d, 0%d, 0%d\n ", a, b, c) ;
Else printf (" %d, 0%d, 00%d\n ", a, b, c) ;
}
Else // b<10
{
If (c>=100) printf (" %d, 00%d, %d\n ", a, b, c) ;
Else if (c>=10) printf (" %d, 00%d, 0%d\n ", a, b, c) ;
Else printf (" %d, 00%d, 00%d\n ", a, b, c) ;
}
}
}
}
Bài tập 3 . Viết chương trình nhập vào 1 số nguyên dương từ bàn phím, nếu các chữ số của số đó theo thứ tự không giảm thì in ra thông báo" So ky ao ", ngược lại in ra thông báo" So ban vua nhap cho la so binh thuong! "
Số kỳ ảo: 1223, 13356, 12567, 12
Bài tập 4 . Viết chương trình nhập vào 1 số, kiểm tra xem các chữ số của số đó có đối xứng hay không, nếu có thì in ra màn hình" So la Palindrome "
Số Palindrome: 121, 1221, 123231, 123443221
Bài tập 5 . Giả sử độ khó của việc" đào"1 bitcoin hiện tại là 13, 912, 524, 048, 946
Tốc độ của máy chuyên dụng có tốc độ tính toán x TH (Tetra Hashes per second)
Và mức độ tiêu tốn năng lượng là y kWh.
Giả sử giá tiền điện là 2500VND/kWh (giá cố định theo số)
Và giá bitcoin hiện tại là 1.401 tỷ VND/bit
Vậy bạn có thể có lãi với máy đào đó không, nếu có thì bao nhiêu tiền/ngày
Công thức time = difficulty * 2^32 / hashrate[/BOOK]