BÀI TẬP ĐIỀU KIỆN MÔN NGÔN NGỮ LẬP TRÌNH C++

11 1.4K 6
BÀI TẬP ĐIỀU KIỆN MÔN NGÔN NGỮ LẬP TRÌNH C++

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BÀI TẬP ĐIỀU KIỆN MÔN NGÔN NGỮ LẬP TRÌNH C++

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/11 BÀ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 khác ở một ví trí trước hoặc sau câu lệnh hiện thời. 1. Cấu trúc ñiều kiện: If … else ðôi khi chúng ta muốn làm cho sự thực thi một lệnh phụ thuộc vào một ñiều kiện nào ñ1o cần ñược thỏa. Cấu trúc If ñược dùng khi một lệnh hay một khối lệnh chỉ ñược thực hiện khi một ñiều kiện nào ñó thoả mãn. Dạng của nó như sau: if (biểu thức) lệnh; Trước tiên biểu thức ñược ước lượng. Nếu kết quả khác 0 (biểu thức ñúng) thì sau ñó lệnh ñược thực thi. Ngược lại, kết quả có giá trị bằng 0 (biểu thức sai) thì lệnh sẽ bị bỏ qua (không thực thi) và chương trình tiếp tục thực hiện lệnh tiếp sau cấu trúc ñiều kiện. Ví dụ, ñoạn mã sau ñây sẽ viết x is 100 chỉ khi biến x chứa giá trị 100: if (x == 100) cout << "x is 100"; Một hình thức khác của cấu trúc If cho phép chúng ta chọn một trong hai lệnh : một lệnh ñược thực thi nếu như ñiều kiện ñược thỏa và lệnh còn lại ñược thực hiện nếu như ñiều kiện không thỏa. Hình thức này ñược gọi là lệnh if-else và cò hình thức chung là : if (biểu thức) lệnh 1; else lệnh 2; Trước tiên biểu thức ñược ước lượng. Nếu kết quả khác 0 thì lệnh 1 ñược thực thi. Ngược lại, lệnh 2 ñược thực thi. Ví dụ: Tìm số lớn nhất trong 2 số a, b: if (a<b) max = b; cout << "a < b"; else max = a; 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 ; các lệnh 2; …. case nk; các lệnh k; [default; các lệnh k+1;] } Trang 4/11 Biểu thức (gọi là thẻ switch) ñược ước lượng trước tiên và kết quả ñược so sánh với mỗi hằng số (gọi là các nhãn) theo thứ tự chúng xuất hiện cho ñến khi một so khớp ñược tìm thấy. Lệnh ngay sau khi so khớp ñược thực hiện sau ñó. Chú ý số nhiều: mỗi case có thể ñược theo sau bởi không hay nhiều lệnh (không chỉ là một lệnh). Việc thực thi tiếp tục cho tới hoặc là bắt gặp một lệnh break hoặc tất cả các lệnh xen vào ñến cuối lệnh switch ñược thực hiện Trường hợp default ở cuối cùng là một tuỳ chọn, không bắt buộc phải có, và ñược thực hiện nếu như tất cả các case trước ñó không ñược so khớp. Ví dụ: Lập chương trình phân loại học sinh theo ñiểm, sử dụng cấu trúc switch : #include "stdio.h" void main() { int diem; tt: printf("\nVao du lieu :"); printf("\n Diem ="); scanf("%d",&diem); switch (diem) { case 0: case 1: 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ư sau: i = 1; sum = 0; while (i <= n) { sum += i; i++; } Giả sử n là 5. Bảng sau ñây cung cấp bảng phác họa vòng lặp bằng cách liệt kê các giá trị của các biến có liên quan và ñiều kiện lặp. Vòng lặp i n i <= n sum += i++ Một 1 5 1 1 Hai 2 5 1 3 Ba 3 5 1 6 Bốn 4 5 1 10 Năm 5 5 1 15 Sáu 6 5 0 ðôi khi chúng ta có thể gặp vòng lặp while có thân rỗng ( nghĩa là một câu lệnh null). Ví dụ vòng lặp sau ñặt n tới thừa số lẻ lớn nhất của nó. while ( n % 2 == 0 && n /=2); Trang 6/11 Ở ñây ñiều kiện lặp cung cấp tất cả các tính toán cần thiết vì thế không thật sự cần một thân cho vòng lặp. ðiều kiện vòng lặp không những kiểm tra n là chẵn hay không chẵn, mà nó còn chia cho 2 và chắc chắn rằng vòng lặp sẽ dừng. Bên trong thân của một toán tử while lại có thể sử dụng các toán tử while khác. bằng cách ñó ta ñi xây dựng ñược các chu trình lồng nhau. Khi gặp câu lệnh break trong thân while, máy sẽ ra khỏi toán tử while sâu nhất chứa câu lệnh này. 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. Trang 7/11 Ví dụ, giả sử chúng ta muốn thực hiện lặp ñi lặp lại công việc ñọc một giá trị và in bình phương của nó, và dừng khi giá trị là 0. ðiều này có thể ñược diễn giải trong vòng lặp sau ñây: do { cin >> n; cout << n * n << ‘\n’; } while (n != 0); Không giống như vòng lặp while, vòng lặp do ít khi ñược sử dụng trong những tình huống mà nó có một thân rỗng. Mặc dù vòng lặp do với thân rỗng có thể là tương ñương với một vòng lặp while tương tự nhưng vòng lặp while thì luôn dễ ñọc hơn 5. Cấu trúc lặp: For Lệnh for (cũng ñược gọi là vòng lặp for) cũng tương tự như vòng lặp while nhưng có 2 thành phần thêm vào: một biểu thức ñược ước lượng chỉ một lần trước hết và một biểu thức ñược ước lượng mỗi lần ở cuối mỗi lần lặp. Hình thức tổng quát của lệnh for là : for (biểu thức 1; biểu thức 2; biểu thức 3) lệnh (hoặc khối lệnh); Biểu thức 1 (thường ñược gọi là biểu thức khởi tạo) ñược ước lượng trước tiên. Mỗi vòng lặp biểu thức 2 ñược ước lượng. Nếu kết quả không là 0 (ñúng) thì sau ñó lệnh ñược thực thi và biểu thức 3 ñược ước lượng. Ngược lại, vòng lặp kết thúc. Vòng lặp for tổng quát thì tương ñương với vòng lặp while sau: biểu thức1; while (biểu thức 2) { lệnh; biểu thức 3; } Vòng lặp for thường ñược sử dụng trong các trường hợp mà có một biến ñược tăng hay giảm ở mỗi lần lặp. Ví dụ, vòng lặp for sau tính toán tổng của tất cả các số nguyên từ 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; Bởi vì các vòng lặp là các lệnh nên chúng có thể xuất hiện bên trong các vòng lặp khác. Nói các khác, các vòng lặp có thể lồng nhau. Ví dụ, for (int i = 1; i <= 3; ++i) for (int j = 1; j <= 3; ++j) cout << '(' << i << ',' << j << ")\n"; cho tích số của tập hợp {1,2,3} với chính nó, kết quả như sau: (1,1) (1,2) (1,3) (2,1) (2,2) (2,3) (3,1) (3,2) (3,3) Trang 9/11 CÂU II. #include<iostream.h> void nhapmang(int a[50],int n) { for(int i=0;i<n;i++) { cout<<"Hay nhap vao phan tu a["<<i<<"]= "; cin>>a[i]; } } 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; } void dem_so_le(int a[50],int n) { int t,i; cout<<"\nCac phan tu le cua mang la:\n"; for(i=0;i<n;i++) { if(a[i]%2!=0) cout<<a[i]<<" "; } cout<<endl; for(t=i=0;i<n;i++) { if(a[i]%2!=0) t++; } cout<<"\nSo phan tu co gia tri le trong mang la: "<<t<<endl; } void dem_so_chan(int a[50],int n) { int t,i; cout<<"\nCac phan tu chan cua mang la:\n"; for(i=0;i<n;i++) { if(a[i]%2==0) cout<<a[i]<<" "; } cout<<endl; for(t=i=0;i<n;i++) { if(a[i]%2==0) t++; } cout<<"\nSo phan tu co gia tri chan trong mang la: "<<t<<endl; }

Ngày đăng: 10/05/2014, 11:25

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan