Professional Documents
Culture Documents
1. Giới thiệu
Dev-C++ (Dev-Cpp, phiên bản hiện tại là 4.9.9.2) là một bộ công cụ phát triển tích hợp (IDE
Integrated Development Environment) các ứng dụng C/C++ thuộc dạng mã nguồn mở và có
thể download tại ñịa chỉ http://www.bloodshed.net. DevCpp dựa trên trình biên dịch mã
nguồn mở MinGW (Minimalist GNU* for Windows, http://www.mingw.org/). MinGW sử dụng
GCC (the GNU g++ compiler collection) sử dụng cho cả hệ thống Windows và Linux. Hiện nay
DevCpp là công cụ phát triển các ứng dụng C/C++ ñược sử dụng rộng rãi ñể dạy về lập
trình cũng như ñể phát triển các ứng dụng mã nguồn mở.
Mặc dù không có nhiều tính năng cao cấp như các công cụ IDE thương mại khác (Visual
Studio của Microsoft) nhưng DevCpp vẫn là một công cụ rất thích hợp trong môi trường giáo
dục ở bậc ñại học khi dạy và học các ngôn ngữ C/C++. Lý do là Dev-C++ hỗ trợ C/C++ chuẩn,
mã nguồn viết trên Dev-C++ có thể biên dịch trên các IDE khác, ñiều ngược lại có thể không
ñúng.
2. Cài ñặt
Có 2 phiên bản của dev-c++. Bản cài ñặt và bản portable.
• Bản cài ñặt: Tải file cài ñặt tại ñịa chỉ: http://www.bloodshed.net/devcpp.html sau ñó,
thực hiện cài ñặt theo hướng dẫn trên màn hình.
• Bản portable: Phiên bản portable không cần cài ñặt có thể tải về từ ñịa chỉ
http://sourceforge.net/projects/devcpp-portable/
• Trong phòng lab, Dev-CPP ñược cài ñặt và có tại ổ dĩa D:\Dev-CPP
3. Thao tác với Dev-C++
3.1 Cấu hình Dev-C++ (Chỉ thực hiện lần ñầu)
Chạy DEV-C++ (file devcpp.exe) màn hình sau xuất hiện như hình 1.
• Vào menu "Tools" chọn "Compiler Options".
• Vào tab "Settings" tab, nhấn vào "Linker" ở khung bên trái và thay ñổi thông số
"Generate debugging information" sang "Yes":
• Nhấn OK
sọan thảo
Bước 3: Biên dịch (Compile)
Sau khi nhập file nguồn xong, ñể biên dịch chúng ta thực
hiện:
• Vào menu "Execute" chọn "Compile"
(CTRL+F9).
Thông thường, khi biên dịch lần ñầu sẽ có lỗi về
Syntax. Lỗi Syntax sẽ hiển thị ở tab biên dịch ở phía dưới
màn hình. ðể biết lỗi xảy ra ở vị trí nào của source
code, double-click vào lỗi ñó và contrỏ màn hình sẽ trở
về vị trí có lỗi khi biên dịch.
Hình bên minh họa lỗi syntax (thiếu dấu ;) khi biên dịch
Trong trường hợp biên dịch thanh công, hộp thọai thông báo có status là “Done”.
Bước 4: Thực thi chương trình.
Bây giờ, bạn có thể chạy chương trình
• Vào menu "Execute" chọn "Run".
Chú ý 1: Bc 4 & 5 có th thc hin ñng thi b ng menu Execute, ch
n Compile &
Run (F9)
Chú ý 2: Màn hình kết quả không xuất hiện:
Nếu khi chạy chương trình, bạn thấy màn hình console DOS màu ñen xuất hiện, chớp sáng 1
hoặc vài lần và trở lại màn hình sọan thảo thì có nghĩa là chương trình cũa bạn ñã chạy xong.
ðiều này có nghĩa là chương trình thực thi xong và tự ñóng cửa sổ console sau khi chương
trình thóat. ðể giải quyết trường hợp này chúng ta có thể sử dụng lệnh system và thông số
lệnh của HðH. Thêm ñọan code sau trước lệnh return trong hàm main hoặc trước bất kỳ hàm
exit() hoặc abort():
system(“pause”);
Bước 5: Debug.
Trong trường hợp chương trình chạy không như ý của bạn, sử dụng công cụ debugger ñể xác
ñịnh cụ thể. Chức năng debug cơ bản có tại tab debug ở cuối màn hình. Nhiều chức năng
khác nhau có tại menu debug. Một vài tính năng chính của debug như:
• Chạy tới con trỏ màn hình (Run to cursor )
• Thêm cửa sổ theo dõi
• Theo dõi giá trị của biến,…
4. Chương trình Hello World
ðể kiểm tra họat ñộng của Dev-Cpp, sau ñây là chương trình in ra màn hình chữ “Hello World
“ sử dụng ngôn ngữ C hoặc C++. Bạn hãy thực hiện theo các bước trên, nhập mã nguồn và
chạy thử ñể kiểm tra kết quả.
a) Ngôn ngữ C:
/* Chuong trinh C don gian
* In ra man hinh dong chu Hello World
* Nhan phim Enter de thoat
* luu file voi ten la hello.c
*/
# include <stdio.h>
# include <stdlib.h>
int main()
{
printf ("Hello World \n");
system(“pause”);
return 0;
}
k = k * x;
Quy Tắc 8: Các câu lệnh cùng thực hiện một công việc ñược viết riêng trên một ñoạn.
Ví dụ sai Ví dụ ñúng
int c = a; int c = a;
a = b; a = b;
b = c; b = c;
k = k * a;
x = b + c; k = k * a;
x = b + c;
3. Quy Tắc về khỏang trắng (space)
Quy Tắc 9: Các câu lệnh nằm giữa dấu ‘{‘, ‘}’ ñược viết cách vào một khoảng tab. Các câu
lệnh con của if, else, while, for, switch ñược viết cách vào một khoảng tab
Ví dụ sai Ví dụ ñúng
if (a > b) if (a > b)
cout << "a lon hon b"; cout << "a lon hon b";
else else
cout << "a nho hon b"; cout << "a nho hon b";
0. Mục tiêu
• Sử dụng môi trường sọan thảo và chạy một chương trình C++ ñơn giản
• Làm quen với các kiểu dữ liệu và tóan tử cơ bản của C++
• Làm quen với biến và lệnh gán, ñối tượng xuất nhập: cout, cin
• Hòan tất Lab01 tại lớp trong vòng 120 phút
1. Yêu cầu
• ðọc tài liệu hướng dẫn sử dụng DEV-CPP (Lab0)
• Kiểm tra ñã có phần mềm DEV-CPP (C:\Dev-Cpp) trên máy tính của phòng lab chưa?
o Chưa có: liên hệ giảng viên hướng dẫn phòng lab ñể copy & cài ñặt
o ðã có: Chạy chương trình devcpp.exe trong thư mục Dev-Cpp
• Ôn lại kiến thức về hằng, biến, kiểu dữ liệu, biểu thức, tóan tử trong C++
• Hiểu rõ tóan tử: +, -, *, /, %, ++, --, +=, -=, *=, /=, &&, ||, !, !=, >, <, <=, >=,…
• ðộ ưu tiên của tóan tử
• Biến , hằng, lệnh gán, ñối tượng xuất nhập: cout, cin
• Làm trước các bài 2.1~2.5 và 3.1~3.12 trước khi vào phòng Lab. Mỗi SV phải có 1 bản
copy của bài Lab này
2. Kiểm tra kiến thức lý thuyết (15 phút)
2.1 Cho biết kết quả màn hình khi chạy ñọan code sau:
#include <iostream.h>
int main() {
float a=1.2 ;
int b=a ;
std::cout <<b ;
return 0 ;
}
a) Chương trình có lỗi khi biên dịch
b) Kết quả không xác ñịnh ñược
c) Màn hình hiển thị (ñiền vào ô trống bên)
2.2 Cho biết kết quả màn hình khi chạy ñọan code sau:
# include <iostream>
int main()
{
int a = 5, b = 10, c = 15, d = 0;
std::cout << (a+b || c == d);
std::cout << (c >= 6) || (a+c <= 20);
std::cout << !(b <= 12) && a % 2 == 0;
std::cout << !(a >5) || c < a+b;
return 0 ;
}
a) Chương trình có lỗi khi biên dịch
b) Kết quả không xác ñịnh ñược
d) Màn hình hiển thị (ñiền vào ô trống bên)
2.3 Cho biết kết quả màn hình khi chạy ñọan code sau:
int main()
{
int x=5, y=-10, a=4, b=2;
int z = x++ - --y * b / a;
cout << z ;
return 0;
}
a) Chương trình có lỗi khi biên dịch
b) Kết quả không xác ñịnh ñược
e) Màn hình hiển thị (ñiền vào ô trống bên)
2.4 Cho biết kết quả màn hình khi chạy ñọan code sau:
int main()
{
int a = 2, b = 3;
int c = a++, d = ++b;
cout << (c-b || d-b);
cout << (a > c) || (d < b) ;
cout << !(c == 2) && a % 2 == 0 ;
return 0 ;
}
A. 001 B. 010 C. 011 D.100
E. 101 F. 110 G. 111 H. Khác
2.5 Cho biết kết quả màn hình khi chạy ñọan code sau:
int main()
{
int a=3, b=4, c=5, d;
d = a * b + c/2;
cout << d ;
d = a % b;
cout << d ;
d = a / b + c;
cout << d ;
return 0;
}
a) Chương trình có lỗi khi biên dịch
b) Kết quả không xác ñịnh ñược
f) Màn hình hiển thị (ñiền vào ô trống bên)
3.2 Tính tổng, hiệu, tích, thương 2 số nhập vào từ bàn phím
#include <iostream.h>
int main()
{
short int x , y, tong, hieu, tich;
float thuong;
cout << "Nhap so thu nhat: ";
cin >> x;
cout << "Nhap so thu hai:";
cin >> y;
tong = x + y ;
hieu = x – y ;
tich = x * y ;
thuong = x / y ;
cout << "Tong hai so la " << tong << endl;
cout << "Tong hai so la " << hieu << endl;
cout << "Tong hai so la " << tich << endl;
cout << "Tong hai so la " << thuong << endl;
}
a. Chạy thử chương trình trên, nhập giá trị x, y như bảng sau, cho biết kết quả và nhận
xét? Sửa lại code ñể chương trình chạy ñúng?
b. Giới hạn của x, y ñể kết quả của các phép tính vẫn còn ñúng?
100 100
2000 2000
c. Thay thế 4 dòng lệnh cout cuối bằng các dòng lệnh sau? Nhận xét?
cout << x << “ + ” << y <<” = “ << tong << endl;
…..
3.3 Biểu thức logic
#include <iostream>
using namespace std;
int main()
{
int i , j;
cout << "Enter an integer: ";
cin >> i;
cout << "Enter another integer: ";
cin >> j;
cout << "i > j is " << (i > j) << endl;
cout << "i < j is " << (i < j) << endl;
cout << "i >= j is " << (i >= j) << endl;
h) ((i!=i) || (j==6));
i) ( !(i>10));
j) (! ((i/6==3) && (j<8)));
k) ((i>11) && ((j<15) || (i>4))));
l) k= i+j%8;
m) k=i%3+4-2*j/5;
n) k=(i+j)/3*2%8*100;
o) k= ++i+j++;
p) k=i*8*3*(j%7);
q) k=i+j/3-2*++j/19;
r) k=++(i++ +j++);
3.7 Phân biệt cin và getline
#include <iostream>
using namespace std;
int main()
{
const int SIZE=100;
char buffer[ SIZE ];
cout << "Enter your fullname:\n“;
cin >> buffer ;
cout << "\nHello " << buffer << endl;
system(“pause”);
return 0;
}
a) Chạy thử chương trình trên, nhập họ và tên cách nhau bởi khỏang trắng sau ñó nhấn
enter, cho biết kết quả? Nhận xét
b) Thay thế dòng cin>> buffer ; bằng dòng lệnh cin.getline( buffer, SIZE ); thử lại và nhận xét?
3.8 Chạy chương trình sau, giải thích kết quả
a. Chương trình 1
int main()
{
short i = -3;
unsigned short u;
cout<< sizeof(i)<< &i;
cout<<sizeof(u)<<&u;
cout << (u = i) << "\n";
}
b. Chương trình 2
int main() {
char i = 125*4/10;
cout << i << "\n";
}
Toan: 9.3
Ly: 7.5
0. Mục tiêu
• Sử dụng thành thạo cấu trúc rẽ nhánh
o If, if…else, switch
• Hòan tất Lab02 tại lớp trong vòng 90 phút
1. Yêu cầu
• Hiểu rõ cấu trúc lệnh if, if…else, switch
• Kiến thức tóan học cơ bản: số nguyên tố, uscln, giải phương trình
• ðối tượng cout, cin và bảng mã ASCII
• Làm trước các bài trong mục 2 và 3 trước khi vào phòng Lab. Mỗi SV phải có 1 bản
copy của bài Lab này
2. Kiểm tra kiến thức lý thuyết (15 phút)
2.1 Kết quả khi chạy ñọan code sau: cout << f ;
return 0;
int main()
{ 2.4 Kết quả khi chạy ñọan code sau:
int x=1, t = x--;
int main()
if (x <= 0) {
t += 5 ; int x=0;
t += 10 ; switch(x) {
std::cout << t; case 1: cout << "One" ;
return 0 ; case 0: cout << "Zero" ;
}
case 2: cout << "Hello" ;
2.2 Kết quả khi chạy ñọan code sau: }
int main() { return 0;
}
int i=4, j=6;
float x;
2.5 Kết quả khi chạy ñọan code sau:
# include <iostream>
x = i/j;
int main() {
std::cout << x; int x = 5, y = x++;
char op = '*';
return 0 ;
switch (op) {
} default : x += 1;
case '+' : x += y;
2.3 Kết quả khi chạy ñọan code sau: case '-' : x -= y;
int a = 5, b = 6, c = 7, f; }
std::cout <<x<<y;
f = a*b != c*c; return 0 ;
if (f) a++;
}
else b--;
cout << f ;
f = (a>6) && (b<5);
cout << f ;
f = a>100 || b<50;
3. Bài Tập
3.1 Viết chương trình nhập vào 1 số nguyên. Và kiểm tra số ñó có chẵn không?
Giải thuật: Số chẵn là số chia hết cho 2.
Mô tả: Nếu số A chia cho 2 có phần dư = 0 thì A là số chẵn
Thực hiện trong c++: (a % 2)
3.2 Viết chương trình nhập vào 2 số nguyên a, b. Kiểm tra xem a có chia hết cho b
không
Giải thuật: Nhập 2 số nguyên a, b
Kiểm tra: if (a % b) ==0 printf ( Số a chia hết cho số b)
3.3 Viết chương trình Nhập vào 2 số nguyên a, b. Tìm số lớn nhất, nhỏ nhất
Gợi ý: Khai báo biến max và min ñể chứa giá trị lớn nhất và nhỏ nhất tương ứng.
Tìm số lớn nhất: Tìm số nhỏ nhất:
max = b min = a
Nếu (a > b) then max = b Nếu ( a > b) then min = b
3.4 Viết chương trình Nhập vào 3 số nguyên a, b, c. Tìm số lớn nhất, nhỏ nhất.
Giải thuật:
Số lớn nhất Số nhỏ nhất
Giả sử Max = a Giả sử Min = a
IF ( B > Max) Then Max = B IF ( Min > B) Then Min = B
IF (C > Max) Then Max = C IF (Min > C Then Min = C
3.5 ðiểm trung bình và xếp hạng
Nhập vào ñiểm trung bình của sinh viên (Thang ñiểm 100) và Hiển thị xếp loại theo tiêu chí
sau:
90 <= A
80 <= B < 90
70 <= C < 80
60 <= D < 70
E < 60
Gợi ý: Biến average chứa ñiểm trung bình của SV. Mã nguồn như sau:
if (average >= 90)
grade = 'A';
else if (average >= 80)
grade = 'B';
else if (average >= 70)
grade = 'C';
else if (average >= 60)
grade = 'D';
else
grade = 'E';
3.6 Beep
// BEEP : ‘\x07’
#include <iostream.h>
#define BEEP cout << “\a \n”
int main()
{
int num;
cout << “Please enter a number “;
cin >> num;
if (num == 1)
{ BEEP; }
else if (num == 2)
{ BEEP; BEEP; }
else if (num == 3)
{ BEEP; BEEP; BEEP; }
else if (num == 4)
{ BEEP; BEEP; BEEP; BEEP; }
else if (num == 5)
{ BEEP; BEEP; BEEP; BEEP; BEEP; }
else
cout <<”Invalid number!”;
return 0;
}
a) Chạy chương trình trên
b) Viết lại chương trình trên sử dụng lệnh switch
3.7 In số ngược
Viết chương trình nhập số nguyên có 3 chữ số và hiển thị các chữ số theo thứ tự ngược lại.
VD: Nếu số nhập là a = 356 thì hiển thị là 653.
Gợi ý:
Giải thuật Mã nguồn C++
Giả sử số nhập là n có ba chữ số. tram = n;
Số hàng ñơn vị = n % 10 donvi = tram % 10;
Số hàng chục = ( n / 10 ) % 10 tram = tram / 10;
Số hàng ñơn vị = n / 100 chuc = tram % 10;
tram = tram /10;
3.8 Tính cước taxi
Viết chương trình tính giá cước taxi theo công thức sau:
a. 1 km ñầu giá 15000ñ
b. Từ km thứ 2 ñến km thứ 5 giá 13000ñ
c. Từ km thứ 6 ñến km thứ 100 giá 11000ñ
d. Nếu trên 100km giá 9000ñ
Chương trình cho phép người sử dụng nhập vào số km (bao gồm số lẻ VD: 2.5km) và in ra số
tiền phải trả.
Gợi ý:
• Khai báo hằng: GIA1 = 15000; GIA2 = 13000; GIA3=…
• Chú ý: km = 1.1 sẽ tính tiền là 2km. Sử dụng hàm ceil (double) thực hiện round-up
value. VD: ceil(4.3) = 5
3.9 Chương trình máy tính ñơn giản
Nhập vào 2 số a, b và một phép toán p, thực hiện tính kết quả trả về dựa vào dữ liệu nhập
vào. Ví dụ a = 5, p = '+', b = 6, Kết quả hiển thị là 5 + 6 = 11.
Gợi ý:
• Phép tóan p: +, -, *, /
• Trường hợp phép chia: nhớ kiểm tra (≠0)
3.10 Giải và biện luận phương trình bậc nhất: ax+b=0
3.11 Giải và biện luận phương trình bậc 2: ax2 + bx + c = 0
• Gợi ý: sử dụng thư viện tóan math: # include <math.h> tính delta sử dụng hàm: double
sqrt(double x); Căn bậc 2 của x, trả về giá trị double
3.12 Tính tiền thuê phòng Dựa vào số ngày thuê và lọai phòng
Lọai A: 250 /ngày
Lọai B: 200 /ngày
Lọai C: 150 /ngày
Nếu số ngày thuê nhiều hơn 10 ngày thì giảm giá % trên tổng số tiền như sau: A: 10%,
B,C: 5%
Chương trình cho phép nhập số ngày thuê, lọai phòng và in ra giá tiền phải trả.
3.13 Nhập vào ngày, tháng của năm hiện tại.
Viết chương trình thực hiện:
• Kiểm tra tính hợp lệ ngày, tháng nhập.
• Cho biết tháng nhập có bao nhiêu ngày.
• Cho biết ngày hôm sau của ngày ñã nhập là ngày nào.
• Cho biết ngày hôm trước của ngày ñã nhập là ngày nào.
VD: Nếu ngày nhập là 1/12/2009 thì ngày trước ñó là 30/11/2009.
Gợi ý:
Tháng 1, 3, 5, 7, 8, 10, 12: 31 ngày
Tháng: 3, 4, 6, 9, 11: 30 ngày
Tháng 2: Nhuận/Không nhuận: 29/28 ngày
Năm nhuận là (những năm chia hết cho 400) hoặc (chia hết cho 4 và không chia hết cho 100). Ví dụ
2000 là năm nhuận nhưng 2100 không phải là năm nhuận. Code C++ như sau: if ( year % 400 ==0 ||
( year %100 != 0 && year % 4 == 0))
3.14 ðổi chữ hoa – thường
Nhập một chữ cái, nếu là chữ thường thì ñổi thành chữ hoa, ngược lại, nếu là chữ hoa thì ñổi
thành chữ thường. Ví dụ : nhập A in ra a, nhập b thì in ra B. (Không sử dụng thư viện string)
3.15 Kiểm tra chữ hoa, chữ thường
Nhập một ký tự bất kỳ, cho biết ký tự ñó thuộc loại nào: là chữ hoa, là chữ thường, là chữ số
hay các ký tự khác. (Không sử dụng thư viện string)
int k, N=8;
for (k = 2; k <= N; k += 2)
cout << k;
k++;
cout << k;
return 0;
}
2.6 Kết quả khi chạy ñọan code sau:
# define MAX 2
int main() {
int i=0, j=0 ;
for (i=0; i<=MAX; j++) {
cout << i ;
i = j;
}
cout << j ;
return 0;
}
3. Chương trình
3.1 Hiển thị số nguyên từ 1 ñến 1000 chia hết cho 2 và 3
int main()
{
int i = 0;
for (i = 0; i <=1000; i++)
if ( i % 2 == 0 ) && ( i % 3 == 0 )
cout << i<< endl;
}
a) Chạy ñọan chương trình trên, nhận xét ?
b) Sửa chương trình trên ñể hiển thị số nguyên trong khỏang [A, B] chia hết cho 2 số x, y
với A, B, x, y ñược nhập vào từ bàn phím
3.2 Xác ñịnh kết quả của ñọan code sau, giải thích?
int a = 1;
while (a < 4)
{
cout <<“This is the outer loop\n” ;
a++;
while (a <= 25)
{
break;
cout << “This prints 25 times\n”;
}
}
a. Nếu bỏ lệnh break; ñi thì kết quả màn hình như thế nào?
b. Thay thế lệnh break bằng lệnh continous, cho biết kết quả?
3.3 Xác ñịnh kết quả của ñọan code sau? Viết chương trình kiểm tra lại kết quả?
ðọan code Kết quả màn hình/giải thích
a for (ctr=10; ctr>=1; ctr-=3)
cout <<ctr <<endl ;
b n =10;
i=1;
for (i = 0 ; i < n ; i++)
cout << ++i << endl ;
c for (i=1; i<=10; i++);
for (j=1; j<=5; j++)
{
if ( i == j )
continue;
else ( i>j)
break;
else
cout << i << j << endl ;
}
hd i=1;
start=1;
end=5;
step=1;
for (; start>=end;)
{
cout << i << “\n”;
start+=step;
end--;
}
3.4 Tính giá trị pi
Viết chương trình tính giá trị của số pi, sử dụng dãy xấp xỉ sau:
pi/4 = (1-1/3+1/5-1/7+ ... + (-1)n/(2*n+1).
Chương trình sẽ ngừng khi sự chênh lệch giữa hai lần xấp xỉ là nhỏ hơn 1.0E-6
int main()
{
float pi=0;
int i=0;
float saiso = 4.0/(2.0*i+1.0);
while(saiso >= pow(10.0,-6.0))
{
pi = pi + 4.0 * pow(-1.0, i ) / (2.0 * i+1);
i = i+1;
saiso = 4.0/(2.0*i+1);
}
cout << "pi = " << pi ;
}
a) Biên dịch và chạy chương trình trên, sửa lỗi nếu có.
b) Sửa lại chương trình cho phép nhập giá trị sai số từ bàn phím
3.5 Tính giá trị e
Viết chương trình tính giá trị của số Euler e, sử dụng dãy xấp xỉ sau:
e = 1 + 1/1! + ½! + 1/3! + ¼! + … +1/n!
Chương trình sẽ ngừng khi sự chênh lệch giữa hai lần xấp xỉ là nhỏ hơn 1.0E-6
int main()
{
float e = 0;
float gt=1;
int i=1;
float saiso = 1;
LAB04: Hàm
0. Mục tiêu
• Sử dụng thành thạo hàm trong C++, bao gồm:
• Khai báo và ñịnh nghĩa hàm
• Phạm vi biến: Tòan cục, cục bộ, …
• Truyền tham số: trị, biến
• Gọi hàm
1. Yêu cầu trước khi vào buổi thực hành này
• Hòan tất Lab01, La02, Lab03.
• ðịnh nghĩa hàm, gọi hàm
• Biến tòan cục, biến cục bộ
• Truyền tham chiếu, tham trị
• Làm trước các bài trong mục 2 và 3 trước khi vào phòng Lab. Mỗi SV phải có 1 bản
copy của bài Lab này.
2. Kiểm tra kiến thức lý thuyết (3 phút/câu)
1. Cho biết kết quả màn hình khi chạy ñọan code sau: int main()
int foo(int j) {
{ int a = 3, b = 2;
int x = 5 ; swap(a,b);
if( j == 0 ) cout << a << b ;
{ return 0;
int x ; }
x=3; 3. Cho biết kết quả màn hình khi chạy ñọan code sau:
} # define MAX 5
return (x) ; int main()
} {
int main() int i = 0, sum = 0;
{ while (i++<MAX)
int x = 0, y; if (i%2 ) sum += i;
y = foo(x); cout << sum ;
cout << y ; return 0;
return 0; }
} 4. Cho biết kết quả màn hình khi chạy ñọan code sau:
2. Cho biết kết quả màn hình khi chạy ñọan code sau: void foo(int a, int &b)
void swap(int a, int b) {
{ a += 2; b += 4;
int t = a; }
a = b; int main ()
b = t; {
} int x=4, y=2;
foo(x, y); {
cout << x << y ; int s=2, t=3;
return 0; Twist(s,t);
} Twist(t,s);
5. Cho biết kết quả màn hình khi chạy ñọan code sau: std:: cout << s << t;
int check_prime(int n) return 0;
{ }
int j ;
if (n<2) return 0;
for ( j=2 ; j<= n/2 ; j++)
if (!(n%j)) break;
if (j>n/2)
return (1);
else
return (0);
}
int main()
{
int i, count = 0;
for (i=1 ; i<10; i++)
if (check_prime(i))
count++;
cout << count ;
return 0;
}
6. Cho biết kết quả màn hình khi chạy ñọan code
sau:
# include <iostream>
void increment( int i )
{ // i=i+1
i++;
}
int main()
{
int i;
for( i = 0; i < 10; increment( i ) )
std::cout << i;
return 0 ;
}
7. Cho biết kết quả màn hình khi chạy ñọan code
sau:
#include <iostream>
void Twist(int a, int & b)
{
a = a*2; b = b + 2;
}
int main ()
3. Chương trình
3.1 Khai báo và sử dụng hàm
Cho hàm sau
int square(int a)
{
a = a*a;
return a;
}
a) Viết chương trình nhập giá trị N và in ra N2 sử dụng hàm trên
b) Viết thêm hàm square2 truyền tham số by reference.
c) Viết chương nhập giá trị N, hiển thị giá trị N, sau ñó gọi hàm square, in ra giá trị N, gọi
hàm square2, in ra giá trị N . Giải thích kết quả
3.2 Phạm vi biến và truyền tham số
Cho chương trình sau:
#include <iostream>
using namespace std;
int xyz; // xyz là toàn cuc
int add1 (int xyz) // xyz la bien cuc bo trong than cua ham add1
{
if (xyz > 0)
{
int xyz; // xyz là cac bien cuc bo cua khoi nay
xyz = 5;
cout <<"xyz thuoc khoi: "<<xyz <<endl;
}
xyz = xyz+1;
cout <<"xyz cua ham: "<<xyz <<endl;
return (xyz);
} //end add1
// start main
int main()
{
xyz=3;
cout<<"Bien xyz toan cuc:"<<xyz<<endl;
cout<<"Truyen xyz cho tester:"<<add1(xyz)<<endl;
cout<<"Bien xyz toan cuc:"<<xyz<<endl;
return 0;
}
a) Chạy chương trình trên, giải thích kết quả
b) Sửa lại dòng int add1 (int xyz) thành int add1 (int & xyz) chạy lại chương trình, giải
thích kết quả
// start main
int main ()
{
int x=1, y=3, z=7;
duplicate (x, y, z);
cout << "x=" << x << ", y=" << y << ", z=" << z;
return 0;
}
a) Chạy chương trình trên, giải thích kết quả?
b) Nếu bỏ dấu & trong khai báo hàm duplicate thì kết quả thực hiện như thế nào? Giải
thích?
3.4 Biến tòan cục và cục bộ
#include <iostream.h>
float number = 21.3; // a global variable
int main()
{
float number = 26.4; // a local variable
cout << "The value of global number is " << ::number << endl;
cout << "The value of local number is " << number << endl;
return 0;
}
a) Chạy chương trình trên, cho biết kết quả? Giải thích?
3.5 Storage class
#include <iostream>
using namespace std;
int add2step (int); // function prototype
// start main
int main()
{
int count, value; // count is a local auto variable
for(count = 1; count <= 10; count++)
PP 2:
USCLN của a & b (a khác b), ký hiệu (a, b) là:
1. (a – b, b) nếu a > b
2. (a, b – a) nếu b > a
3. Lặp lại bước 1, 2 cho ñến khi a=b
VD: uscln của 8 và 12: (12, 8) = (12-8, 8) = (4, 4) =>uscln là 4
//code
while (a <> b)
{
if (a > b)
a = a – b;
else
b = b – a;
}
void in_nghiem_pt_bac2(int i)
{
// code here
}
Hòan tất các hàm trên, sau ñó viết chương trình sử dụng các hàm trên ñể giải và biện luận
nhiều lần phương trình bậc 2. Có nhắc dấu hiệu ñể thoát sau mỗi lần nhập.
Ví dụ màn hình kết quả khi thực hiện như sau:
• Nhập 3 số a, b, c: 1 2 1
• Phương trinh 1*x*x + 2*x + 1 = 0 co 1 nghiem kep: -1
• Ban muon tiep tuc (Nhan Y: tiep tuc; N: thoat)?: Y
• Nhap 3 so a, b, c: 0 0 0
• Phương trinh 0*x*x + 0*x + 0 = 0 co vo so nghiem
• Ban muon tiep tuc (Nhan Y: tiep tuc; N: thoat)?: N
3.13 Viết hàm trả vể số lớn nhất của 4 số a, b , c, d.
3.14 Viết hàm trả vể số nhỏ nhất của 4 số a, b , c, d
3.15 Viết hàm trả về giá trị True nếu ñối số là số nguyên tố. Viết chương trình sử dụng
hàm trên ñể in ra các số nguyên tố từ 1 ñến N, N nhập vào từ bàn phím
3.16 Viết lại các bài 3.12, 3.13, 3.14, 3.15 trong lab03 sử dụng hàm
0. Mục tiêu
• Sử dụng thành thạo mảng trong C++, bao gồm:
o Khai báo, truy cập mảng 1, 2 chiều
o Hàm và mảng
o Giải thuật cơ bản về mảng: sort, search,…
o Tách/gộp mảng
o Xóa, chèn phần tử vào mảng
o Cấu trúc và mảng
• Hòan tất Lab05 tại lớp trong vòng 90 phút
1. Yêu cầu trước khi vào buổi thực hành này
• Hòan tất Lab01, La02, Lab03, Lab04
• Nắm vững kiến thức về mảng, cấu trúc, mảng và hàm
• Hiểu rõ các ví dụ trong bài giảng Chương 5: Array
• Làm trước các bài trong mục 2 và 3 trước khi vào phòng Lab. Mỗi SV phải có 1 bản
copy của bài Lab này.
• Lưu ý: Các ñọan mã nguồn trong bài sau có thể có lỗi khi biên dịch. Hãy sửa lại và
thêm các file header phù hợp nếu cần.
2. Kiểm tra kiến thức lý thuyết (3 phút/câu)
2.1 Trả lời các câu hỏi sau: return 0;
a) Có bao nhiêu phần tử trong khai báo }
sau? Phần từ thứ nhất và phần tử sau 2.3 Cho biết kết quả màn hình khi chạy ñọan code
cùng? sau:
int a[5]; # define MAX 5
b) Tìm chỗ sai trong ñọan code sau, void bubbleSort(int a[ ], int n)
sửa lại cho ñúng: {
int a[5]; int i, j;
for(i = 1; i <= 5; i = i + 1) for (i = 0; i < n - 1; i++)
a[i] = 0; for (j = i + 1; j < n; j++)
c) Tìm chổ sai trong ñọan code sau, sửa lại if (a[i] > a[j])
cho ñúng {
int a[10] = { 0 }, b[10]; int t = a[i] ;
b = a; a[i] = a[j] ;
a[j] = t;
2.2 Cho biết kết quả màn hình khi chạy ñọan code
sau:
}
# define MAX 5 } //end function
int main() int main()
{ {
int a[MAX] = {0}, i, j = 2; int a[MAX] = {3, 7, 4, 6, 9};
for (i = 0; i < 3; i++) bubbleSort(a, MAX);
a[i] = j+i; cout << a[0] << a[3];
cout << a[0] << a[3]; return 0
3. Chương trình
3.1 Sắp xếp mảng
Chương trình nhập ñiểm trung bình của N SV và in ñiểm theo thứ tự từ lớn ñến nhỏ.
a) Nhập ñiểm của N sinh viên vào mảng diem_sv
b) Tạo bản sao của mảng diem_sv là diem_sv_sorted
c) Sắp xếp mảng diem_sv_sorted theo thứ tự tăng/giảm
In ra danh sách ñiểm theo thứ tự tăng/giảm
3.2 Mảng số nguyên
Viết Hàm thực hiện
a. Nhập N số nguyên vào mảng a, N ñược nhập vào từ bàn phím
b. In ra chuổi số nguyên ñã nhập.
c. Copy nội dung mảng a sang mảng b, sau ñây, thao tác trên b.
d. In ra chuỗi số nguyên theo thứ tự tăng dần
e. In ra chuỗi số nguyên theo thứ tự nhỏ dần
f. In ra số lớn nhất, nhỏ nhất trong chuỗi ñã nhập
g. Nhập thêm 1 số sau ñó chèn vào ñúng vị trí ñã sắp xếp trong mảng
h. Nhập vào vị trí cần xóa, sau ñó xóa phần tử mảng tại vị trí ñó
i. Nhập vào giá trị, tìm kiếm giá trị ñó trong mảng ñã nhập
j. Nhập số k (k<N), tách mảng b thành 2 mảng b1, b2
k. Tách mảng b thành 2 mảng: mảng b1: chứa số nguyên âm, b2: chứa số nguyên dương
Viết chương trình ñể kiểm tra lại các hàm trên.
Gợi ý: Xem lại giải thuật trong phần bài giảng, viết mỗi câu b, c, … k là 1 hàm
3.3 Nhập dãy số tăng, chèn số mới
Viết chương trình nhập vào một dãy các số theo thứ tự tăng, nếu nhập sai quy cách thì yêu
cầu nhập lại. In dãy số sau khi ñã nhập xong. Nhập thêm một số mới và chèn số ñó vào dãy
ñã có sao cho dãy vẫn ñảm bảo thứ tự tăng. In lại dãy số ñể kiểm tra.
3.4 Viết chương trình nhập 1 mảng số nguyên sau ñó
a. Kiểm tra mảng có bao nhiêu số chẵn
b. Mảng có bao nhiêu số lẻ
c. Bao nhiêu số chia hết cho 5 nhưng không chia hết cho 7
d. Bao nhiêu số nguyên tố
e. Bao nhiêu số chính phương
f. Bao nhiêu số hòan hảo
Sử dụng hàm cho mỗi câu. Viết chương trình ñể kiểm tra lại các hàm trên.
3.5 Mảng và số nguyên tố
Viết chương trình bao gồm:
1. Hàm kiểm tra 1 số có phải là số nguyên tố hay không
char sex;
float height;
float weight;
};
int main()
{
student cls[MAX];
int i, n;
cout << “ How many names do you want to input? \n“;
cin >> n;
for( i = 0; i <= n-1; ++i)
{
cout << “record = “<< i+1 << endl;
cout << “name : “; cin>> cls[i].name;
cout << “rollno : “; cin>> cls[i].rollno;
cout << “sex : “; cin>> cls[i].sex;
cout << “height : “; cin>> cls[i].height;
cout << “weight : “; cin>> cls[i].weight;
cout >> endl;
}
……
}
Thêm các phát biểu cần thiết vào chương trình trên ñể thực hiện các công việc sau:
a. Hiển thị dữ liệu của n sinh viên theo ñịnh dạng sau:
Name Rollno Sex Height Weight
------ -------- ---- ------- --------
------ -------- ---- ------- --------
b. Tính toán và hiển thị chiều cao (height) trung bình và cân nặng (weight) trung
bình của các sinh viên.
3.10 ðiểm thi
ðiểm tri IELTS của 1 SV bao gồm 4 phần: ðiểm Nghe (L), Nói (S), ðọc (R), Viết (W), các ñiểm
này ñược tính theo thang ñiểm 10, thấp nhất là 1 ñiểm, nhiều nhất là 10ñ. ðiểm IELTS là ñiểm
trung bình của 4 ñiểm nói trên ñược làm tròn ñến 1 con số.
Một phòng thi IELTS có tối ña 40 thí sinh. Mỗi thí sinh sẽ có báo danh từ 100 ñến 999. Viết
chương trình cho phép nhập số báo danh, ñiểm thi của 4 môn của các thí sinh tại 1 phòng thi,
sau ñó:
1) In ra ñiểm trung bình của 1 phòng thi
2) In ra danh sách thí sinh theo ñiểm trung bình từ cao ñến thấp
3) In ra thí sinh có ñiểm cao nhất của từng môn
4) In ra thí sinh có ñiểm thấp nhất của từng môn
103 5 7 6 8 6.5 1
….
Màn hình khi in ra câu (5, 6) như sau:
Maximum of Listening:
SV L S R W Mean Rank
103 9 7 6 8 X.5 4
Maximum of Speaking:
SV L S R W Mean Rank
103 5 8 6 8 6.5 3
3.11 Chương trình thống kê chuỗi
a. Viết chương trình nhập vào một chuỗi ñếm xem chuỗi có bao nhiêu từ. Các từ cách
nhau bằng khoảng trắng, dấu chấm câu: dấu chấm (.), dấu phẩy (,), dấu chấm phẩy (;),
dấu hỏi (?) và dấu chấm than (!).
b. Thêm chức năng ñổi những ký tự ñầu tiên của mỗi từ thành chữ in hoa
3.12 Số phức
Viết chương trình khai báo kiểu dữ liệu thể hiện một số phức, sử dụng khai báo này ñể viết
chương trình nhập 2 số phức, in ra tổng, hiệu, tích của hai số phức.