BÀI TẬP ðIỀU KIỆN
Môn : NGÔN NGỮ LẬP TRÌNH C++
CÂU HỎI CÂU 1.
Trình bày các cấu trúc ñiều khiển trong C++ (if…else, switch … case, vòng lặp for,
while, và do…while). Mỗi cấu trúc cho ví dụ minh họa.
CÂU 2.
Viết chương trình gồm hàm main() và 4 hàm khác thực hiện các công việc sau ñây:
Nhập một mảng số nguyên n phần tử từ bàn phím.
ðếm trong mảng có bao nhiêu phần tử có giá trị lẻ.
Sắp xếp mảng số nguyên theo thứ tự tăng dần.
Xuất mảng ñã sắp xếp ra màn hình. Trang 2/11BÀI GIẢI
CÂU I.
Một chương trình trong C++ bao gồm nhiều câu lệnh. Thông thường các câu lệnh
ñược thực hiện một cách lần lượt theo thứ tự mà chúng ñược viết ra. Các cấu trúc ñiều
khiển cho phép thay ñổi trật tự nói trên, do ñó máy có thể nhảy thực hiện một câu lệnh
cout << "a > b";
Trang 3/11
Các lệnh if có thể ñược lồng nhau bằng cách ñể cho một lệnh if xuất hiện bên trong
một lệnh if khác. Một hình thức ñược sử dụng thường của của những lệnh if lồng nhau liên
quan ñến phần else gồm có một lệnh if-else khác.
Ví dụ:
if (ch >= ‘0’ && ch <= ‘9’)
kind = digit;
else {
if (ch >= ‘A’ && ch <= ‘Z’)
kind = chu_hoa;
else {
if (ch >= ‘a’ && ch <= ‘z’)
kind = chu_thuong;
else
kind = kytu_dacbiet;
}
}
Chú ý : trong trường hợp có nhiều lệnh If lồng nhau thì Else sẽ gắn liền với If gần
nhất.
2. Cấu trúc rẽ nhánh: Switch … case
Cấu trúc rẽ nhánh switch cung cấp phương thức lựa chọn giữa một tập các khả năng
dựa trên giá trị của biểu thức. Hình thức chung của câu lệnh switch là:
switch (biểu thức) {
case n1 ;
các lệnh 1;
case n2 ;
case 2:
case 3:printf("Kem\n");break;
case 4:printf("Yeu\n");break;
case 5:
case 6:printf("Trung binh\n");break;
case 7:
case 8:printf("Kha\n");break;
case 9:
case 10:printf("Gioi\n");break;
default:printf("Vao sai\n");
}
printf("Tiep tuc 1, dung 0 :");
scanf("%d",&diem);
if (diem==1) goto tt;
Trang 5/11
getchar();
return;
}
3. Cấu trúc lặp: While
Lệnh while (cũng ñược gọi là vòng lặp while) cung cấp phương thức lặp một lệnh
cho tới khi một ñiều kiện ñược thoả. Hình thức chung của lệnh lặp là :
while (biểu thức)
lệnh (hoặc khối lệnh)
Biểu thức ( cũng ñược gọi là ñiều kiện lặp) ñược ước lượng trước tiên. Nếu kết quả
khác 0 thì sau ñó lệnh (cũng ñược gọi là thân vòng lặp) ñược thực hiện và toàn bộ quá
trình ñược lặp lại. Ngược lại, vòng lặp kết thúc.
Ví dụ : Tính tổng của tất cả các số nguyên từ 1 ñến n. ðiều này ñược diễn giải như
Trong thân while có thể sử dụng toán tử goto ñể nhảy ra khỏi chu trình ñến một vị trí
mong muốn bất kỳ. Ta cũng có thể sử dụng toán tử return trong thân while ñể ra khỏi một
hàm nào ñó.
4. Cấu trúc lặp: Do … while
Lệnh do (cũng ñược gọi là vòng lặp do) cũng tương tự như lệnh while ngoại trừ thân
của nó ñược thực thi trước tiên và sau ñó ñiều kiện vòng lặp mới ñược kiểm tra. Hình thức
chung của lệnh do là :
do
lệnh;
while (biểu thức);
Lệnh ñược thực thi trước tiên và sau ñó biểu thức ñược ước lượng. Nếu kết quả của
biểu thức khác 0 thì sau ñó toàn bộ quá trình ñược lặp lại. Ngược lại, vòng lặp sẽ kết thúc.
Ví dụ, chương trình dưới ñây sẽ viết ra bất kỳ số nào mà bạn nhập vào cho ñến khi
bạn nhập số 0
// number echoer
#include <iostream.h>
int main ()
{
unsigned long n;
do {
cout << "\nEnter number (0 to end): ";
cin >> n;
cout << "You entered: " << n << " ";
} while (n != 0);
return 0;
}
Vòng lặp do ít ñược sử dụng thường xuyên hơn là vòng lặp while. Nó hữu dụng
trong những trường hợp khi chúng ta cần thân vòng lặp thực hiện ít nhất một lần mà không
quan tâm ñến ñiều kiện lặp.
1 tới n.
sum = 0;
for (i = 1; i <= n; ++i)
sum += i;
ðiều này ñược ưa chuộng hơn phiên bản của vòng lặp while mà chúng ta thấy trước
ñó. Trong ví dụ này i thường ñược gọi là biến lặp.
C++ cho phép biểu thức ñầu tiên trong vòng lặp for là một ñịnh nghĩa biến. Ví dụ
trong vòng lặp trên thì i có thể ñược ñịnh nghĩa bên trong vòng lặp:
Trang 8/11
for (int i = 1; i <= n; ++i)
sum += i;
Trái với sự xuất hiện, phạm vi của i không ở trong thân của vòng lặp mà là chính
vòng lặp. Xét trên phạm vi thì ở trên tương ñương với:
int i;
for (i = 1; i <= n; ++i)
sum += i;
Bất kỳ biểu thức nào trong 3 biểu thức của vòng lặp for có thể rỗng. Ví dụ, xóa biểu
thức ñầu và biểu thức cuối cho chúng ta dạng giống như vòng lặp while:
for (; i != 0;) // tương ñương với: while (i != 0)
something; // something;
Xóa tất cả các biểu thức cho chúng ta một vòng lặp vô hạn. ðiều kiện của vòng lặp
này ñược giả sử luôn luôn là ñúng.
for (;;) // vòng lặp vô hạn
something;
Trường hợp vòng lặp với nhiều biến lặp thì hiếm dùng. Trong những trường hợp như
thế, toán tử phẩy (,) ñược sử dụng ñể phân cách các biểu thức của chúng:
for (i = 0, j = 0; i + j < n; ++i, ++j)
something;
void sapxep(int a[50],int n)
{
int tang,i;
cout<<"\nMang duoc sap xep lai la: \n";
for(i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
tang=a[i];a[i]=a[j];a[j]=tang;
}
}
cout<<a[i]<<" ";
}
cout<<endl;
}
void lietke_mang(int a[50],int n)
{
cout<<"\nCac phan tu cua mang la:\n";
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
Trang 10/11
cout<<endl;
}
if(a[i]%2==0) t++;
}
cout<<"\nSo phan tu co gia tri chan trong mang la: "<<t<<endl;
} Trang 11/11
void main()
{
int a[50],n,t=0;
cout<<"Hay nhap vao so phan tu (n) cua mang: ";cin>>n;
nhapmang(a,n);
lietke_mang(a,n);
dem_so_le(a,n);
dem_so_chan(a,n);
sapxep(a,n);
}