Ngôn ngữ lập trình C/C++ - Chương 2: Cấu trúc điều khiển
Cấu trúc tuần tự Cấu trúc lựa chọn Cấu trúc lặp Cấu trúc điều khiển
Bạn đang xem trước 20 trang tài liệu Ngôn ngữ lập trình C/C++ - Chương 2: Cấu trúc điều khiển, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Cấu trúc tuần tự
Cấu trúc lựa chọn
Cấu trúc lặp
Cấu trúc điều khiển
Các lệnh trong chương trình
thực hiện tuần tự từ trên xuống.
Cấu trúc tuần tự
Lệnh 1
Lệnh 2
Lệnh 3
. . .
4void main()
{
int a, b, tong, hieu, tich;
float thuong;
printf(“Nhap vao a: “);
scanf(“%d”,&a);
printf("Nhap vao b: “);
scanf(“%d”,&b);
tong = a + b;
hieu = a - b;
tich = a * b;
thuong = (float)a / b; //Ép kiểu
printf("Tong=%d ",tong);
printf(“\nHieu=%d“,hieu);
printf(“\nTich=%d“,tich);
printf(“\nThuong= %f“,thuong);
}
Ví dụ Bắt đầu
Kết thúc
Cấu trúc lựa chọn cho phép máy tính chọn thực hiện một
khối lệnh nào đó dựa vào kết quả của biểu thức điều kiện.
Có hai dạng:
If
If Else
Cấu trúc lựa chọn
Cấu trúc If
Cấu trúc lựa chọn
if (biểu thức điều kiện)
{
;
}
Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối lệnh bên trong if.
Ví dụ: Viết chương trình nhập vào một số nguyên từ 1 đến 10, nếu
nhập sai thì hiển thị thông báo
void main()
{
int k;
printf(“Nhap mot so [1..10]: “);
scanf(“%d”,&k);
if (k 10)
{
printf("So vua nhap khong hop le“);
}
}
Cấu trúc If Else
Cấu trúc lựa chọn
if (biểu thức điều kiện)
{
;
}
else
{
;
}
Nếu biểu thức điều kiện cho kết quả true thì
thực hiện khối lệnh 1, ngược lại thi ̀ thực hiện
khối lệnh 2
Ví dụ: Nhập vào số nguyên a và b, nếu a là bội số của
b thì in thông báo “a là bội số của b”, ngược lại in “a
không là bội số của b”
printf(“Nhap vao a: “);
scanf(“%d”,&a);
printf(“Nhap vao b: “);
scanf(“%d”,&)b;
{
printf(“a la boi so cua b“);
}
else
{
printf(“a khong la boi so cua b“);
}
if(a%b==0)
Begin
End
Lưu đồ thuật toán
Chương trình cài đặt:
void main()
{
int a, b;
printf("Nhap so a:");
scanf("%d",&a);
printf("Nhap so b:");
scanf("%d",&b);
if(a%b==0)
printf("%d la boi so cua %d",a,b);
else
printf("%d khong la boi so cua %d",a,b);
}
Ví dụ:
Giải và biện luận phương trình phương trình bậc1
ax+b=0
Begin
End
Lưu đồ thuật toán
void main()
{
float a, b;
printf("Nhap so a:");
scanf("%f",&a);
printf("Nhap so b:");
scanf("%f",&b);
if (a==0)
if (b==0)
printf("Phuong trinh vo so nghiem");
else
printf("Phuong trinh vo nghiem");
else
printf("Phuong trinh co nghiem x = %.2f",-b/a);
}
Cài đặt
1. Cho biết kết quả của chương trình sau:
Bài tập 1
int a=9, b=6;
a++;
a=a+b--;
a=a+(--b);
if(a%2==0)
printf(“Gia tri cua a la chan”);
printf(“Tong cua a va b la: %d“,a + b);
2. Cho biết kết quả của chương trình sau:
int a=7, b=8;
a++;
a=a+b--;
--b;
a--;
a = (--a)+(--b);
if(a%2 != 0)
printf(“a la so le”);
else
printf(“a la so chan”;
Printf(“Gia tri cua a: %d“, a);
Bài tập 2: Viết chương trình
1. Nhập từ bàn phím hai số nguyên a, b. In ra màn hình giá trị số
lớn nhất.
2. Nhập từ bàn phím ba số nguyên a, b, c. In ra màn hình số lớn
nhất.
3. Nhập từ bàn phím ba số nguyên a, b, c. Hãy in ra màn hình theo
thứ tự tăng dần. (Chỉ được dùng thêm hai biến phu ̣).
4. Viết chương trình nhập vào một số nguyên n gồm ba chữ sô ́. Xuất ra màn
hình vị trí của chữ số lớn nhất
Ví dụ: n=291. Chữ số lớn nhất nằm ở hàng chục (chữ số 9).
5. Viết chương trình nhập vào số nguyên n gồm ba chữ số. Xuất ra màn hình
theo thứ tự tăng dần của các chữ số.
Ví dụ: n=291. Xuất ra 129.
6. Viết chương trình tính diện tích và chu vi các hình: tam giác, hình vuông,
hình chữ nhật và hình tròn với những thông tin cần được nhập từ bàn phím
Bài tập 2: Viết chương trình
1. Nhập vào ngày, tháng, năm. Kiểm tra xem ngày, tháng, năm đó có hợp lê ̣
hay không? In kết quả ra màn hình.
2. Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút, giây đó có hợp lê ̣ hay
không? In kết quả ra màn hình.
3. Viết chương trình nhập vào ngày, tháng, năm hợp lê ̣. Cho biết năm này có
phải là năm nhuận hay không? In kết quả ra màn hình.
4. Nhập vào 3 số nguyên dương. Kiểm tra xem 3 số đó có lập thành tam giác
không? Nếu có hãy cho biết tam giác đó thuộc loại nào
Bài tập 3*
switch (biểu thức)
case n1:
các câu lệnh ;
break ;
case n2:
các câu lệnh ;
break ;
case nk:
;
break ;
[default: các câu lệnh]
Giá trị biểu thức = n1
Giá trị biểu thức = n2
Các trường hợp còn lại
• Cấu trúc switch
Cấu trúc switch
ni là các hằng số nguyên hoặc ký tự.
ni phụ thuộc vào giá trị của biểu thức sau switch
Nếu: giá trị của biểu thức = ni thì thực hiện câu lệnh sau case ni.
Nếu gia ́ trị biểu thức không thỏa các ni thi ̀ thực hiện câu lệnh sau
default nếu có, hoặc thoát khỏi câu lệnh switch.
Mặc định chương trình thực hiện tuần tự các câu lệnh của các case ni,
do đó sau mỗi case phải dùng lệnh break để thoát khỏi switch.
22
Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 12. In ra màn hình tháng tương ứng,
nếu n có giá trị 12 thì in ra chuỗi “tháng không hợp lệ”.
void main()
{
int n;
printf(“Nhap vao n (1<=n<=12): “);
scanf(“%d”, &n);
switch (n)
{
case 1: ptintf(“thang mot”); break;
case 2: ptintf(“thang hai“); break;
case 3: printf(“thang ba”); break;
case 12: printf(“thang 12”); break;
default : printf(“thang khong hop le“);
}
}
1. Viết chương trình nhập vào 1 số nguyên dương gồm 2 chữ số,
in ra cách đọc của số này
2. Viết chương trình nhập vào ngày tháng năm, kiểm tra xem ngày
tháng năm có hợp lệ không? In kết quả kiểm tra ra màn hình
Bài tập
Tổng quát
Cấu trúc lặp
Lệnh / Khối
lệnh
Điều kiện
lặp
Yes
No
Cấu trúc lặp For
Khởi gán
Điều kiện lặp
Lệnh / Khối lệnh
Cập nhật vòng lặp
Yes
for ( ; ; )
{
;
}
Cấu trúc For
Khởi gán: khởi gán giá trị ban đầu cho biến điều khiển vòng
lặp
Điều kiện lặp: kiểm tra điều kiện thực hiện vòng lặp
Cập nhật: cập nhật giá trị của biến điều khiển vòng lặp
Bất kỳ đối số nào trong câu lệnh for đều có thể thiếu nhưng phải
có dấu chấm phẩy (;) để phân cách.
Cấu trúc lặp For
Các bước thực hiện vòng lặp for
Bước 1: Khởi gán
Bước 2: Kiểm tra điều kiện
Nếu giá trị của biểu thức điều kiện bằng true thi ̀
Thực hiện các lệnh của vòng lặp
Cập nhật biến điều khiển vòng lặp. Quay trở lại bước 2.
Ngược lại thoát khỏi lặp.
Cấu trúc lặp For
Ví dụ: viết chương trình in ra bảng cửu chương n, với n là số nguyên dương nhập từ
bàn phím.
Chương trình
Ví dụ: viết chương trình nhập số n nguyên dương từ bàn phím. Tính tổng các số từ 1
đến n
S = 0
i = 1
i <= n
S = S + i
Yes
n
i = i + 1
“Tổng = “ S
Bắt đầu
Kết thúc
Chương trình
Lưu ý: Cách hoạt động của while giống for
Cấu trúc lặp - While
while ()
lệnh/ khối lệnh;
Ví dụ: viết chương trình nhập số n nguyên dương từ bàn phím. Tính tổng các số từ 1
đến n
Cấu trúc lặp Do While
do
{
;
;
} while (điều kiện);
• Thực hiện lệnh trước, sau đó kiểm tra điều kiện
• Lệnh được thực hiện đến khi biểu thức có giá trị sai
Khởi gán
Điều kiện lặp
Lệnh / Khối lệnh
Cập nhật vòng lặp
Yessai đúng
Ví dụ: nhập các số nguyên dương có giá trị <=10, xuất ra tổng các số hợp lệ.
Cấu trúc For và While: kiểm tra điều kiện trước khi thực hiện lệnh
lặp, do đó các lệnh lặp có thể không thực hiện lần nào.
Cấu trúc do while: thực hiện lệnh trước, kiểm tra điều kiện sau,
do đó các lệnh có thể được thực hiện ít nhất là 1 lần.
Nhận xét
break: thoát khỏi cấu trúc lệnh switch, while, for,
dowhile đang chứa nó.
return: thoát khỏi chương trình đồng thời cũng thoát khỏi
các vòng lặp và trả về kết quả.
Lệnh break và return
Lệnh continue được sử dụng trong các vòng lặp while,
for, dowhile.
Khi kệnh continue được gọi thì chương trình sẽ kết thúc
vòng lặp hiện tại và bắt đầu vòng lặp mới tiếp theo.
Lệnh continue
Ví dụ: Cho phép người dùng nhập liên tục số nguyên dương, nếu nhập
số nguyên âm thì dừng
Ví dụ: In ra màn hình giá trị từ 10 đến 20 trừ đi số 13 và số 17.
Bài tập: Xác định kết quả của các chương trình sau
int a=18;
for(int i = 1; i <= a; i++)
if(a%i == 0)
printf(“%d\t”,i);
1.
for(int i = 0; i < 5; i++)
{
for(int j = 0; j <= i; j++)
printf(“%d\t”,j);
printf(“\n”);
}
2.
Bài tập: Xác định kết quả của các chương trình sau
int i = 10, s = 0;
while(i > 0)
{
if(i%2 == 0)
s+=i;
else
if(i > 5)
s+=2*i;
i--;
}
printf(“s = %d”,s);
3.
Bài tập: Xác định kết quả của các chương trình sau
int a = 18, i = 1;
do{
if(a%i == 0)
printf(“%d\t”,i);
i++;
} while(i <= a);
4.
Bài tập: Xác định kết quả của các chương trình sau
int a = 11, b = 16, i = a;
while( i < b )
{
if(i%2 == 0)
{
printf(“%d\t”,i);
break;
}
i++;
}
5.
Bài tập: Xác định kết quả của các chương trình sau
int a = 10, s = 0, i = 0;
while( i < a )
{
i++;
if (i % 2 == 0)
continue;
s=s+i;
}
printf(“Tong = %d" ,s);
6.
Bài tập: Xác định kết quả của các chương trình sau
int i = 1, s = 0;
while(true)
{
s = s + i++;
if (i % 2)
i = i + 2;
else
i = i + 1;
if (i > 20)
break;
}
printf(“Tong = %d" ,s);
7.
Bài tập: Xác định kết quả của các chương trình sau
int i = 1, s = 0;
while(true)
{
s = s + i++;
if (i % 2)
i = i + 2;
else
i = i + 1;
if (i > 20)
break;
}
printf(“Tong = %d" ,s);
7.
1. Viết chương trình nhập số nguyên dương n. Liệt kê n số nguyên tô ́ đầu
tiên.
2. Viết chương trình nhập vào hai sô ́ nguyên dương a va ̀ b. Tìm ước sô ́
chung lớn nhất va ̀ bội sô ́ chung nho ̉ nhất của a va ̀ b.
3. Viết chương trình nhập vào một sô ́ nguyên n gồm tối đa 10 chữ sô ́ (4
bytes). In ra màn hình giá trị nhị phân của sô ́ trên. (Hướng dẫn: chia lấy
dư cho 2 va ̀ xuất theo thứ tự ngược lại).
4. Viết chương trình đếm sô ́ ước sô ́ của sô ́ nguyên dương N.
Ví dụ: N=12
sô ́ ước sô ́ của 12 là 6
Bài tập viết chương trình
5. Một sô ́ hoàn thiện là một sô ́ có tổng các ước số của nó (không
kê ̉ nó) bằng chính nó. Hãy liệt kê các số hoàn thiện nho ̉ hơn
30000.
Ví dụ: sô ́ 6 là sô ́ hòan thiện vì tổng các ước sô ́ là 1+2+3 = 6.
6. Nhập vào ngày, tháng, năm. Cho biết đó là ngày thứ mấy trong
năm.
Bài tập viết chương trình