Nội dung bài học Bài 9: Cấu trúc rẽ nhánh dưới đây sẽ trình bày về cấu trúc rẽ nhánh trong môt tả thuật toán của một số bài toán đơn giản; hướng dẫn các em viết câu lệnh rẽ nhánh dạng đủ, dạng thiếu thông qua một số bài toán vận dụng cụ thể;... Mời các em cùng theo dõi nội dung chi tiết của bài học.
Ví dụ 1: Để giải phương trình bậc hai: ax2 +bx +c = 0 (a \(\neq\) 0 ) ta phải: Tính Delta = b*b - 4*a*c
Hoặc có thể nói: Nếu Delta < 0 thì phương trình vô nghiệm, ngược lại phương trình có nghiệm.
Ta có mệnh đề sau:
Cấu trúc này được gọi là cấu trúc rẽ nhánh thiếu và đủ.
Để mô tả cấu trúc rẽ nhánh, Pascal dùng câu lệnh if-then. Tương ứng với hai dạng mệnh đề thiếu và đủ nói ở trên, Pascal có hai dạng câu lệnh if-then:
Cú pháp: If < Điều kiện > then < Câu lệnh >;
Trong đó:
Sơ đồ:
Hình 1. Sơ đồ cấu trúc rẽ nhánh dạng thiếu
Ý nghĩa: Điều kiện sẽ được tính và kiểm tra. Nếu điều kiện đúng thì câu lệnh được thực hiện, nếu điều kiện sai thì câu lệnh sẽ bị bỏ qua.
Ví dụ 2:
if Delta < 0 then writeln('Phuong trinh vo nghiem.');
Cú pháp:
If < Điều kiện > then < Câu lệnh 1 >
else < Câu lệnh 2 >;
Trong đó:
Sơ đồ:
Hình 2. Sơ đồ cấu trúc rẽ nhánh dạng đủ
Ý nghĩa: Điều kiện sẽ được tính và kiểm tra. Nếu điều kiện đúng thì thực hiện câu lệnh 1, ngược lại thì thực hiện câu lệnh 2.
Chú ý 1: Trước từ khóa Else không có dấu chấm phẩy (;).
Ví dụ 3:
if a mod 3 = 0 then write('a chia het cho 3')
else write('a khong chia het cho 3');
Trong Pascal câu lệnh ghép có dạng:
Begin
< Các câu lệnh >;
End;
Chú ý 2: Sau END phải có dấu chấm phẩy (;)
Ví dụ 4:
if D < 0 then writeln('Phuong trinh vo nghiem.')
else
begin
x1:= (-b – sqrt(b*b – 4*a*c))/(2*a);
x2:= -b/a-x1
end;
Ví dụ 5. Tìm nghiệm thực của phương trình bậc hai:
ax2 + bx + c = 0 , với a \(\neq\) 0.
Xây dựng ý tưởng:
Dùng câu lệnh if-then dạng đủ.
Xác định bài toán:
program Giai_PTB2;
uses crt;
var a,b,c: real;
D, x1, x2: real;
begin
clrscr;
write(' a, b, c: ');
readln(a, b, c);
D:= b*b – 4*a*c;
if D < 0 then writeln('Phuong trinh vo nghiem.')
else
begin
x1:= (-b – sqrt(D))/(2*a);
x2:= -b/a – x1;
writeln(' x1 = ', x1: 8:3,' x2 = ', x2:8:3);
end;
readln
end.
Ví dụ 5:
Tìm số ngày của năm N, biết rằng năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100. Ví dụ, các năm 2000, 2004 là năm nhuận và có số ngày là 366, các năm 1900, 1945 không phải là năm nhuận và có số ngày là 365.
Hướng dẫn:
Biểu thức điều kiện: ((N mod 400 = 0) or (N mod 4 = 0) and (N mod 100<>0))
Xác định bài toán:
program Nam_nhuan;
uses crt;
var N, SN: integer;
begin
clrscr;
write('Nam: '); readln(N);
if (N mod 400 = 0)or((N mod 4 = 0)and( N mod 100 <> 0))
then SN:= 366 else SN:= 365;
writeln(' So ngay cua nam ', N,' la ', SN);
readln
end.
Sau khi học xong Bài 9: Cấu trúc rẽ nhánh, các em cần nắm vững các nội dung trọng tâm:
If < Điều kiện > then < Câu lệnh 1 >
else < Câu lệnh 2 >;
Các em có thể hệ thống lại nội dung kiến thức đã học được thông qua bài kiểm tra Trắc nghiệm Tin học 11 Bài 9 cực hay có đáp án và lời giải chi tiết.
Để mô tả cấu trúc rẽ nhánh trong thuật toán, nhiều ngôn ngữ lập trình bậc cao dùng câu lệnh IF – THEN, sau IF là < điều kiện > . Điều kiện là
Với cấu trúc rẽ nhánh IF < điều kiện > THEN < câu lệnh >, câu lệnh đứng sau THEN được thực hiện khi
Câu 3-5: Mời các em đăng nhập xem tiếp nội dung và thi thử Online để củng cố kiến thức về bài học này nhé!
Trong quá trình học tập nếu có thắc mắc hay cần trợ giúp gì thì các em hãy comment ở mục Hỏi đáp, Cộng đồng Tin học DapAnHay sẽ hỗ trợ cho các em một cách nhanh chóng!
Chúc các em học tập tốt và luôn đạt thành tích cao trong học tập!
-- Mod Tin Học 11 DapAnHay
Để mô tả cấu trúc rẽ nhánh trong thuật toán, nhiều ngôn ngữ lập trình bậc cao dùng câu lệnh IF – THEN, sau IF là < điều kiện > . Điều kiện là
Với cấu trúc rẽ nhánh IF < điều kiện > THEN < câu lệnh >, câu lệnh đứng sau THEN được thực hiện khi
Với cấu trúc rẽ nhánh IF < điều kiện > THEN < câu lệnh 1 > ELSE < câu lệnh 2 >, câu lệnh 2 được thực hiện khi
Muốn dùng biến X lưu giá trị nhỏ nhất trong các giá trị của hai biến A, B có thể dùng cấu trúc rẽ nhánh như sau:
Phát biểu nào sau đây có thể lấy làm biểu thức điều kiện trong cấu trúc rẽ nhánh?
Họ và tên
Tiêu đề câu hỏi
Nội dung câu hỏi
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int i, n;
int max;
max = 0;
do
{
printf("\nNhap n: ");
scanf("%d", &n);
}while(n < 0 && printf("\nLoi: n >= 0 !"));
if(n == 0)
max = 0;
do
{
i = n % 10;
if(i > max)
{
max = i;
}
}while(n /= 10);
printf("\nChu so lon nhat la %d", max);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int n;
int SoNghichDao = 0;
do
{
printf("\nNhap n: ");
scanf("%d", &n);
}while(n < 0 && printf("\nLoi: (n >= 0)"));
printf("\nSo dao nguoc cua %d la: ", n);
do
{
printf("%d", n % 10);
}while(n /= 10); // tương đương n = n / 10; n != 0;
// có thể viết
/*do
{
SoNghichDao = SoNghichDao * 10 + n % 10;
n /= 10;
}while(n != 0);
printf("\n%d", SoNghichDao);*/
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int n;
do
{
printf("\nNhap n(n >= 0): ");
scanf("%d", &n);
if(n < 0)
{
printf("\nN phai >= 0. Xin nhap lai !");
}
}while(n < 0);
printf("\nSo %d gom toan cac chu so le hay khong ?\n", n);
bool Check = true;
while(n /= 10)
{
if((n % 10) % 2 == 0)
{
Check = false;
break;
}
}
if(Check == true)
{
printf("Dung !");
}
else
{
printf("Sai");
}
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int i, n;
int min, dem;
dem = 0;
do
{
printf("\nNhap n: ");
scanf("%d", &n);
}while(n < 0 && printf("\nLoi: n >= 0 !"));
min = n % 10; // khởi tạo min
if(n == 0)
min = 0;
do
{
i = n % 10;
if(i == min)
dem++;
if(i < min)
min = i;
}while(n /= 10);
printf("\nChu so nho nhat la %d", min);
printf("\nSo luong chu so nho nhat la %d", dem);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int i, n;
int max, dem;
max = 0;
dem = 1;
do
{
printf("\nNhap n: ");
scanf("%d", &n);
}while(n < 0 && printf("\nLoi: n >= 0 !"));
if(n == 0)
dem = 1;
do
{
i = n % 10;
if(i == max)
dem++;
if(i > max)
max = i;
}while(n /= 10);
printf("\nSo lon nhat la %d", max);
printf("\nSo luong chu so lon nhat la %d", dem);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
#include<math.h>
/*
Kiểm tra số đối xứng
Định nghĩa : Số đối xứng là số đọc từ trái qua phải hay từ phải qua
trái đều ra kết quả như nhau
VD: ban đâu có số abcdef
=> số đảo ngược là fedcba
nếu 2 số đó bằng nhau => đối xứng
Vd : số 123 => đảo ngược là 321
số 12345 => đảo ngược là 54321
123 % 10 = 3 => ok
123 / 10 = 12
12 % 10 = 2 => ok
12 / 10 = 1
1 % 10 = 1 => ok
1 / 10 = 0 = > end
321 = 3*10^2 + 2*10^1 + 1*10^0
54321 = 5*10^4 + 4*10^3 + 3*10^2 + 2*10^1 + 1*10^0
=> start = 10^(số chữ số - 1)
=> end = 10^0
Ý tưởng: Tách ra từng chữ số và lấy chữ số đó bắt đầu nhân cho 10^(x)
với x là số chữ số - 1 và qua mỗi lần thì x sẽ liên tục giảm 1 đơn vị
Cách 2: số 123 ta tách thành các chữ số 3,2,1
0 * 10 + 3 = 3
3 * 10 + 2 = 32
32 * 10 + 1 = 321
*/
int main()
{
int n;
// Nhập n ( n > 0 )
do
{
printf("\nNhap vao n ( n > 0 ): ");
scanf_s("%d", &n);
if (n <= 0)
{
printf("\nGia tri ban nhap vao khong hop le. Xin vui long nhap lai! ");
}
} while (n <= 0);
int SoChuSo = (int)log10((float)n) + 1;
int SoNghichDao = 0;
int themang = n;
printf("\nSo %d co phai la so doi xung hay khong ?\n", n);
while (themang != 0)
{
int ChuSo = themang % 10; // Lấy chữ số ra
themang /= 10; // Bỏ chữ số vừa lấy ra
SoNghichDao += ChuSo * pow(10.0, --SoChuSo);
}
/*while(themang != 0)
{
SoNghichDao = SoNghichDao * 10 + themang % 10;
themang /= 10;
}*/
if(SoNghichDao == n)
{
printf("Dung !");
}
else
{
printf("Sai !");
}
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int n;
do
{
printf("\nNhap n(n >= 0): ");
scanf("%d", &n);
if(n < 0)
{
printf("\nN phai >= 0. Xin nhap lai !");
}
}while(n < 0);
printf("\nSo %d gom toan cac chu so chan hay khong ?\n", n);
bool Check = true;
while(n /= 10)
{
if((n % 10) % 2 == 1)
{
Check = false;
break;
}
}
if(Check == true)
{
printf("Dung !");
}
else
{
printf("Sai");
}
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int n;
// Nhập n ( n > 0 )
do
{
printf("\nNhap vao n ( n > 0 ): ");
scanf_s("%d", &n);
if (n <= 0)
{
printf("\nGia tri ban nhap vao khong hop le. Xin vui long nhap lai! ");
}
} while (n <= 0);
bool CheckGiamDan = true;
int themang = n;
int ChuSoCuoi = themang % 10; // lấy ra chữ số cuối
themang /= 10;
printf("\nCac chu so cua %d co giam dan tu trai sang phai khong ?\n ", n);
while(themang != 0)
{
int ChuSoKeCuoi = themang % 10;
themang /= 10;
if (ChuSoKeCuoi < ChuSoCuoi)
{
CheckGiamDan = false;
break;
}
else
{
ChuSoCuoi = ChuSoKeCuoi; // Cập nhật lại chữ số cho lần so sánh tiếp theo
}
}
if(CheckGiamDan)
printf("\Dung !");
else
printf("Sai !");
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int n;
// Nhập n ( n > 0 )
do
{
printf("\nNhap vao n ( n > 0 ): ");
scanf_s("%d", &n);
if (n <= 0)
{
printf("\nGia tri ban nhap vao khong hop le. Xin vui long nhap lai! ");
}
} while (n <= 0);
bool CheckTangDan = true;
int themang = n;
int ChuSoCuoi = themang % 10; // lấy ra chữ số cuối
themang /= 10;
printf("\nCac chu so cua %d co tang dan tu trai sang phai khong ?\n ", n);
while(themang != 0)
{
int ChuSoKeCuoi = themang % 10;
themang /= 10;
if (ChuSoCuoi < ChuSoKeCuoi)
{
CheckTangDan = false;
break;
}
else
{
ChuSoCuoi = ChuSoKeCuoi; // Cập nhật lại chữ số cho lần so sánh tiếp theo
}
}
if(CheckTangDan)
printf("\Dung !");
else
printf("Sai !");
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
float x, S, T;
int i, n;
S = 0;
T = 1;
i = 1;
printf("\nNhap x: ");
scanf("%f", &x);
x = -x;
do
{
printf("\nNhap n: ");
scanf("%d", &n);
if(n < 1)
{
printf("\nDu lieu khong hop le. Xin kiem tra lai !");
}
}while(n < 1);
while(i <= n)
{
T = T * x;
S = S + T;
i++;
}
printf("\nTong = %f", -S);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int a, b, i;
do{
printf("\nNhap vao so nguyen duong a = ");
scanf_s("%4d", &a);
if (a < 0)
{
printf("\nGia tri nhap vao khong hop le. Xin kiem tra lai !");
}
} while (a < 0);
do{
printf("\nNhap vao so nguyen duong b = ");
scanf_s("%4d", &b);
if (b < 0)
{
printf("\nGia tri nhap vao khong hop le. Xin kiem tra lai !");
}
} while (b < 0);
int Max = a > b ? a : b;
int Min = a < b ? a : b;
if(a == b)
return a;
else
{
for(i = Max; i < a * b; i++)
if(i % a == 0 && i % b == 0)
{
return i;
break;
}
}
printf("\nBCNN la %d", i);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int a, b;
do{
printf("\nNhap vao so nguyen duong a = ");
scanf_s("%4d", &a);
if (a < 0)
{
printf("\nGia tri nhap vao khong hop le. Xin kiem tra lai !");
}
} while (a < 0);
do{
printf("\nNhap vao so nguyen duong b = ");
scanf_s("%4d", &b);
if (b < 0)
{
printf("\nGia tri nhap vao khong hop le. Xin kiem tra lai !");
}
} while (b < 0);
int Max = a > b ? a : b;
int Min = a < b ? a : b;
//for(int i = Min; i >= 1; i--) // ước chung lớn nhất luôn là ước của min
//{
// if(Max % i == 0 && Min % i == 0)
// {
// printf("\nUSCLN = %d", i);
// break;
// }
//}
// Cách 2:
if (Max % Min == 0)
{
printf("\nUSCLN = %d", Min);
}
else
{
for (int i = Min / 2; i >= 1; i--)
{
if (Min % i == 0 && Max % i == 0)
{
printf("\nUSCLN = %d", i);
break;
}
}
}
// Cách 3:
while(a != b)
{
if(a > b)
a = a - b;
else
b = b - a;
}
printf("\nUSCLN = %d", a); // hay in ra b cũng được vì lúc này a == b
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int i, n;
float x, S, T;
long M;
printf("\nNhap x: ");
scanf("%f", &x);
do
{
printf("\nNhap n: ");
scanf("%d", &n);
if(n < 1)
{
printf("\n N phai >= 1. Xin nhap lai !");
}
}while(n < 1);
S = 0;
T = 1;
M = 0;
i = 1;
while(i <= n)
{
T = T * x;
M = M + i;
S = S + pow(-1, (float)i) * T/M;
i++;
}
printf("\nTong la %f", S);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int i, n;
float S, P;
S = 0;
P = 0;
i = 1;
do
{
printf("\nNhap n: ");
scanf("%d", &n);
if(n < 1)
{
printf("\nN phai lon hon hoac bang 1. Xin nhap lai !");
}
}while(n < 1);
while(i <= n)
{
P = P + i;
S = S + 1 * pow(-1, (float)(1 + i))/ P;
i++;
}
printf("\nTong la %f", S);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int i, n;
float x, T, S;
i = 0;
T = 1;
S = 0;
printf("\nNhap x: ");
scanf("%f", &x);
//x = -x;
printf("\nNhap n: ");
scanf("%d", &n);
while(i < n)
{
T = pow(x, (2 * i + 1)) * pow(-1, (float)i);
S = S + T;
i++;
}
printf("\nTong la %f", S);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int i, n;
float x, T, S;
i = 1;
T = 1;
S = 0;
printf("\nNhap x: ");
scanf("%f", &x);
//x = -x;
printf("\nNhap n: ");
scanf("%d", &n);
while(i <= n)
{
T = pow(x, (2 * i )) * pow(-1, (float)i);
S = S + T;
i++;
}
printf("\nTong la %f", S);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int i, n;
float x, S, T;
long M, N;
printf("\nNhap x: ");
scanf("%f", &x);
do
{
printf("\nNhap n(n >= 0) : ");
scanf("%d", &n);
if(n < 0)
{
printf("\n N phai >= 0. Xin nhap lai !");
}
}while(n < 0);
S = 1;
N = 1;
i = 1;
while(i <= n)
{
T = pow(x, (2 * i ));
M = i * 2;
N = N * M * (M - 1);
S = S + pow(-1, (float)i) * T / N;
i++;
}
printf("\nTong la %f", -S);
getch();
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int i, n;
float x, S, T;
long M;
printf("\nNhap x: ");
scanf("%f", &x);
do
{
printf("\nNhap n: ");
scanf("%d", &n);
if(n < 1)
{
printf("\n N phai >= 1. Xin nhap lai !");
}
}while(n < 1);
S = 0;
T = 1;
M = 1;
i = 1;
while(i <= n)
{
T = T * x;
M = M * i;
S = S + pow(-1, (float)i) * T/M;
i++;
}
printf("\nTong la %f", S);
getch();
return 0;
}
Câu trả lời của bạn
#include <stdio.h>
#include <conio.h>
int check(int n);
int main()
{
int i;
int max = 10000;
printf("cac so co dang 2^k trong khoang [0, %d]:\n", max);
for(i = 0; i < 10000; i++)
check(i) ? printf("%5d", i) : printf("");
getch();
return 0;
}
/* Số có dạng 2^k
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
VD: kiểm tra số 81
16 % 2 = 8 dư 0
8 % 2 = 4 dư 0
4 % 2 = 2 dư 0
2 % 2 = 1 dư 0 => hết
VD: kiểm tra số 12
12 % 2 = 6 dư 0
6 % 2 = 3 dư 0
3 % 2 = 1 dư 1 => sai !
*/
int check(int n)
{
int flag = 1;
n = n < 0 ? -n : n;
if(n < 2)
return 1;
/*while(n > 1)
{
if(n % 2)
return 0;
n /= 2;
}
return 1;*/
while(n > 1)
{
int du = n % 2;
if(du != 0) // nếu dư mà khác 0. lập tức báo sai
flag = 0;
n /= 2;
}
if(flag==1)
return 1;
else
return 0;
}
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int i, n;
float x, S, T;
long M, N;
printf("\nNhap x: ");
scanf("%f", &x);
do
{
printf("\nNhap n(n >= 1) : ");
scanf("%d", &n);
if(n < 1)
{
printf("\n N phai >= 1. Xin nhap lai !");
}
}while(n < 1);
S = 1;
N = 1;
i = 1;
while(i <= n)
{
T = pow(x, (2 * i + 1));
M = i * 2 + 1;
N = N * M * (M - 1);
S = S + pow(-1, (float)(i + 1)) * T/N ;
i++;
}
printf("\nTong la %f", S - x);
getch();
return 0;
}
0 Bình luận
Để lại bình luận
Địa chỉ email của hạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *