1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giải thực hành kỹ thuật lập trình

49 33 0

Đ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

Thông tin cơ bản

Tiêu đề Bài giải thực hành kỹ thuật lập trình
Trường học Đại Học Bách Khoa TP. Hồ Chí Minh
Chuyên ngành Kỹ thuật lập trình
Thể loại Bài tập thực hành
Thành phố Hồ Chí Minh
Định dạng
Số trang 49
Dung lượng 350 KB
File đính kèm cac bai thuc hanh c++.rar (908 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

BÀI GIẢI THỰC HÀNH KỸ THUẬT LẬP TRÌNH BÀI THỰC TẬP SỐ 1 2 Cơ bản về C++ 2 BÀI THỰC TẬP SỐ 2 4 Cấu trúc lựa chọn 4 BÀI THỰC TẬP SỐ 3 8 Cấu trúc lặp 8 BÀI THỰC TẬP SỐ 4 11 Mảng và Cấu trúc 11 BÀI THỰC TẬP SỐ 5 16 BÀI THỰC TẬP SỐ 6 21 Giới thiệu về Lớp Đối tượng 21 BÀI THỰC TẬP SỐ 7 27 Xử lý Đối tượng 27 BÀI THỰC TẬP SỐ 8 32 Xử lý Đối tượng (tiếp theo) 32 BÀI THỰC TẬP SỐ 9 38 Sự Thừa kế và Bao gộp trong C++ 38 BÀI THỰC TẬP SỐ 10 45 Đa hình và Khuôn hình 45

Trang 1

ĐẠI HỌC BÁCH KHOA TP HCM

KHOA CÔNG NGHỆ THÔNG TIN

BÀI GIẢI THỰC HÀNH KỸ THUẬT LẬP TRÌNH

BÀI THỰC TẬP SỐ 1 2

Cơ bản về C++ 2

BÀI THỰC TẬP SỐ 2 4

Cấu trúc lựa chọn 4

BÀI THỰC TẬP SỐ 3 8

Cấu trúc lặp 8

BÀI THỰC TẬP SỐ 4 11

Mảng và Cấu trúc 11

BÀI THỰC TẬP SỐ 5 16

BÀI THỰC TẬP SỐ 6 21

Giới thiệu về Lớp Đối tượng 21

BÀI THỰC TẬP SỐ 7 27

Xử lý Đối tượng 27

BÀI THỰC TẬP SỐ 8 32

Xử lý Đối tượng (tiếp theo) 32

BÀI THỰC TẬP SỐ 9 38

Sự Thừa kế và Bao gộp trong C++ 38

BÀI THỰC TẬP SỐ 10 45

Đa hình và Khuôn hình 45

Trang 2

area = radius * radius * PI; // Circle area calculation

cout << "The area is " << area << " with a radius of 5.\n";

radius = 20; // Compute area with new radius

area = radius * radius * PI;

cout << "The area is " << area << " with a radius of 20.\n";

int start_hour, start_minute, start_second;

int end_hour, end_minute, end_second;

cout << "Nhap thoi diem thu nhat: " << endl;

Trang 3

int start_elapsed, end_elapsed;

start_elapsed = start_hour * 3600 + start_minute * 60 + start_second;end_elapsed = end_hour * 3600 + end_minute * 60 + end_second;

int duration = end_elapsed - start_elapsed;

int hour = duration / 3600;

int minute = (duration % 3600) / 60;

int second = duration - hour * 3600 - minute * 60;

cout << "Hai thoi diem cach nhau: " << hour << " gio " << minute

<< " phut " << second << " giay";

}

Trang 4

BÀI THỰC TẬP SỐ 2 Cấu trúc lựa chọn

Câu 4: Dùng cấu trúc switch để viết lại đoạn chương trình sau:

if (num == 1)

{cout << “Alpha”; }else if (num == 2)

{ cout << “Beta”; }else if (num == 3)

{ cout << “Gamma”; }else

Trang 5

chuc = (so % 100) / 10;

don_vi = so - tram * 100 - chuc * 10;

int lon_nhat, giua, be_nhat;

lon_nhat = tram > chuc ? tram : chuc;

lon_nhat = lon_nhat > don_vi ? lon_nhat : don_vi;

be_nhat = tram < chuc ? tram : chuc;

be_nhat = be_nhat < don_vi ? be_nhat : don_vi;

giua = (tram + chuc + don_vi) - lon_nhat - be_nhat;

cout << "Cac chu so sau khi sap xep thu tu: "

<< be_nhat << giua << lon_nhat;

if (((mod4 == 0) && (mod100 != 0)) || (mod400 == 0))

cout << "Day la nam nhuan!\n";

c Nếu lớn hơn 30km thì mỗi km thêm sẽ là 3000

Hãy nhập số km sau đó in ra số tiền phải trả.

Trang 6

Câu 8: 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, nếu

hợp lệ cho biết ngày trước đó là bao nhiêu.

Ví dụ: Nhập 01/01/2003 Ngày trước đó 31/12/2002

#include <iostream.h>

void main()

{

int ngay, thang, nam;

cout << "Nhap vao ngay : ";

int mod4, mod100, mod400;

Trang 7

thang = 12;

nam = nam - 1;

}

switch (thang){

}

cout << "Ngay hom truoc ngay da nhap: "

<< ngay << "/" << thang << "/" << nam;

}

Trang 8

BÀI THỰC TẬP SỐ 3 Cấu trúc lặp

Câu 5: Viết một chương trình C++ tính tổng và giá trị trung bình của n số thực chính xác đơn được

nhập vào từ người sử dụng Trị của n cũng là một giá trị do người sử dụng nhập vào.

#include <iostream.h>

void main()

{

int i, n;

float num, s, avg;

cout << "Ban muon nhap bao nhieu so? ";

Câu 6: Viết một chương trình C++ sinh ra một bảng đổi nhiệt độ từ Celcius sang Fahrenheit Cho

nhiệt độ Celcius tăng từ 5 độ đến 50 độ với mỗi bước tăng 5 độ Bảng kết quả in ra có dạng:

Trang 9

Dựa vào công thức này, viết một chương trình C++ để tính xấp xỉ giá trị của e Hãy dùng

vòng lặp while mà dừng lại khi độ sai biệt giữa hai lần xấp xỉ nhỏ hơn 1.0E-6.

} while (error > epxilon);

cout << "Gia tri xap xi cua e tinh duoc la : " << e << endl;

}

Câu 8: Viết một chương trình C++ tính tóan và trình bày số tiền tích lũy được nếu gửi tiết kiệm

1000$ vào ngân hàng sau từng năm trong vòng 10 năm Chương trình cũng cần trình bày số tiền tích lũy được với lãi suất thay đổi từ 6% đến 12% với bước tăng 1% Như vậy, ta nên dùng hai vòng lặp lồng nhau: vòng lặp ngòai thay đổi theo lãi suất và vòng lặp trong thay đổi theo số năm Công thức để tính số tiền tích lũy L = P(1+ i)n với P là số tiền gửi ban đầu,

i là lãi suất, n là số chu kì tính lãi.

cout << " Nam thu " << n << " thu duoc so tien: "

<< deposit * pow(1 + i, n) << endl;

}cout << endl;

}

}

Trang 10

Câu 9: 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.

nguyen_to = false;

break;}

}}

while (!nguyen_to);

cout << "So nguyen to thu " << i << " la: " << so << endl;}

}

Trang 11

BÀI THỰC TẬP SỐ 4 Mảng và Cấu trúc

Câu 5: Hãy viết một chương trình C++ đọc vào một mảng gồm n số thực chính xác đơn và tìm số

nhỏ nhất trong array đó n là một trị số nguyên do người sử dụng nhập vào.

min = mangso[i];

j = i + 1;

}}

cout << "So thuc nho nhat trong mang la so thu " << j << ", co gia tri "

<< min;

}

Câu 6: Hãy viết một chương trình C++ đọc vào một mảng gồm n số thực chính xác đơn và sắp xếp

array đó theo thứ tự giảm dần.

if (array[j] < array[j+1]){

float tg;

Trang 12

tg = array[j];

array[j] = array[j+1];

array[j+1] = tg;

}}

vitri = i;

break;}

Trang 13

cout << "Khong co phan tu nao cua mang bang " << x;

cout << "Sau khi chen phan tu " << x << " vao vi tri dau tien: \n ";

cout << " mang tro thanh ( viet theo hang doc ) : " << endl;

Câu 9: Hãy viết một chương trình C++ đọc vào một ma trận n  n và chuyển vị ma trận này và in

ma trận chuyển vị ra Chuyển vị một ma trận vuông nghĩa là:

Trang 14

sau khi chuyển vi, nó trở thành

cout << "Nhap vao phan tu a(" << (i + 1) << ", " << (j + 1) <<

"): ";

cin >> mang[i][j];

}}

cout << "Ma tran ban nhap vao la :" << endl;

Trang 15

a Hãy khai báo một kiểu dữ liệu mang tên Car là kiểu cấu trúc mà mỗi chiếc xe (car) có thể gồm những thông tin như trong mỗi hàng của bảng sau:

25 36 44 52 68

1450 3240 1792 2360 2114

62 136 76 105 67

b Dùng kiểu dữ liệu được định nghĩa ở a., viết một chương trình C++ mà đọc vào dữ liệu

được cho ở bảng trên vào thành một array gồm 5 cấu trúc Một khi dữ liệu đã được đọc

vào, chương trình sẽ tính tóan và trình bày ra báo cáo gồm các cột: mã số xe, số km đã đi trên mỗi lít xăng

km_lit = array[i].kms_driven / array[i].litre_used;

cout << "So km da di tren moi lit xang : " << km_lit << endl;

}

}

Trang 16

BÀI THỰC TẬP SỐ 5 Câu 4: Cho một hàm như sau:

int square(int a){

a = a*a;

return a;

}

a Viết chương trình C++ nhập vào số nguyên x và gọi hàm square

để tính bình phương của x và trình bày kết quả này ra.

b Viết lại hàm square để hàm này trở thành một hàm gọi bằng địa

chỉ, đặt tên hàm mới là square2 Viết chương trình C++ nhập vào số nguyên x và gọi hàm square2 để tính bình phương của x và trình bày giá trị của x sau khi gọi hàm Có

nhận xét gì về giá trị của x sau khi gọi hàm?

cout << "Ham goi bang gia tri" << endl;

cout << "x^2= " << square(x) << endl;

cout << "Gia tri x sau khi goi ham: x= " << x << endl << endl;

cout << "Ham goi bang dia chi" << endl;

cout << "x^2= " << square2(x) << endl;

cout <<"Gia tri cua x sau khi goi ham: x= " << x << endl << endl;

}

Câu 5: Đọc hàm sau đây dùng để tính số nguyên lớn nhất mà bình phương của nó nhỏ hơn hay

bằng một trị số nguyên cho trước.

int Intqrt(int num){

int i;

i = 1;

do

Trang 17

++ i while i*i <= num;

cout << "So nguyen lon nhat ma binh phuong cua no <=" << n

<< " la so: " << Intqrt(n) << endl;

}

Câu 5: Hãy khai báo mảng động cho ma trận hai chiều có kích thước m x n Sau đó, kiểm tra có

phải ma trận đối xứng không.

cout << "phan tu [" << i << "][" << j << "] = ";

cin >> a[i][j];

}}

}

void in(int m, int n, int **a)

{

cout << "IN MANG 2 CHIEU " << m << "x" << n << endl;

for (int i = 0; i < m; i++)

{

for (int j = 0; j < n; j++)

cout << setw(5) << a[i][j];

cout << endl;

Trang 18

kt = 0;

break;}

if (kt == 0) break;}

cout << "Xoa mang 2 chieu";

for (int i = 0; i < m; i++)

Câu 6: Viết chương trình nhập số nguyên dương n gồm k chữ số (0 < k ≤ 5) , sắp xếp các chữ số

của n theo thứ tự tăng dần.

Trang 19

Ví dụ: Nhập n = 1536 Kết quả sau khi sắp xếp: 1356.

for (unsigned int i = 0; i < strlen(n) - 1; i++)

for (unsigned int j= i + 1; j < strlen(n); j++)

if (n[i] > n[j]){

t = n[i];

n[i] = n[j];

n[j] = t;

}}

b Viết chương trình C++ nhập vào hai số nguyên n và m và gọi hàm C định nghĩa ở câu a để tính C(n,m) và trình bày kết quả ra.

#include<iostream.h>

int tohop(int n, int m)

{

if (m == 0 || m == n)

Trang 21

BÀI THỰC TẬP SỐ 6 Giới thiệu về Lớp Đối tượng

Câu 1b Hãy tổ chức chương trình có sử dụng lớp đối tượng student thành file giao tiếp (interface file) và file thi công (implementation file) và chạy chúng trên môi trường Visual C++

cout<< " Roll no = "<< rollno << endl;

cout<< " Age =" << age << endl;

cout<< " Sex =" << sex << endl;

cout<< " Height =" << height << endl;

cout<< " Weight =" << weight << endl;

Trang 22

Câu 2 Cho lớp đối tượng student được định nghĩa như trong 1.a Hãy viết chương trình C++ hoàn chỉnh mà hàm main() khai báo một mảng (array) có kích thước là 10 để chứa các đối tượng

student, yêu cầu người dùng đọc dữ liệu của các đối tượng student trong mảng và trình bày các đối

Câu 3 Cho lớp đối tượng student được định nghĩa như trong 1.a Hãy viết chương trình C++ hoàn

chỉnh mà hàm main() theo các yêu cầu sau:

- Khai báo một mảng (array) có kích thước động để chứa các đối tượng student

- Yêu cầu người dùng nhập vào số nguyên n và tạo vùng nhớ heap để mảng trên có thể chứa

được n đối tượng student.

- Đọc dữ liệu của các đối tượng student vào mảng và trình bày các đối tượng student đó ra màn

Trang 23

for (i = 0; i < size; i++)

Câu 5 Xây dựng một lớp đối tượng Rectangle mà gồm hai thành viên dữ liệu kiểu số thực chính

xác đơn: length và width Lớp đối tượng có các hàm thành viên sau đây:

- hàm khởi tạo (constructor) không có thông số Hàm này gán trị 0 cho hai thành viên dữ liệu của đối tượng

- hàm khởi tạo có hai thông số kiểu số thực chính xác đơn Hàm này gán trị của hai thông số cho hai thành viên dữ liệu của đối tượng

- hàm perimeter() tính chu vi của một hình chữ nhật

- hàm area() tính diện tích của một hình chữ nhật.

- thủ tục getdata( ) để yêu cầu người dùng nhập giá trị cho length và width của hình chữ nhật

- thủ tục showdata( ) để trình bày ra màn hình length, width, chu vi và diện tính của hình chữ

nhật.

Hiện thực lớp đối tượng Rectangle vào một chương trình C++ hoàn chỉnh Chương trình này khai báo hai đối tượng thuộc lớp Rectangle sử dụng hai hàm khỏi tạo ở trên, đọc vào và trình bày dữ liệu

của hai đối tượng này nhằm kiểm tra sự hoạt động của các hàm thành viên.

Cải tiến chương trình: thay hai hàm khởi tạo đã định nghĩa ở trên của lớp Rectangle bằng một hàm

khởi tạo có thông số mặc định (default argument).

this->length = length;

this->width = width;

}

void getData()

Trang 24

cout << "Information of rectangle: " << endl;

cout << "Length: " << length << endl;

cout << "Width: " << width << endl;

cout << "Perimeter of rectangle: " << r2.perimeter() << endl;

cout << "Area of rectangle: " << r2.area() << endl;

}

Câu 6 Xây dựng một lớp đối tượng CStudent gồm các thành phần dữ liệu (data members) sau:

- mã số sinh viên (là số nguyên).

- một mảng (array) được khai báo tĩnh gồm 5 số thực chính xác đơn dùng để chứa tối đa 5 điểm số.

- một số nguyên chỉ số điểm số được nhập vào

Các hàm thành viên (member functions) của lớp đối tượng như sau:

- hàm khởi tạo (constructor) của lớp đối tượng này để gán giá trị đầu = 0 cho tất cả các thành

viên dữ liệu của mỗi đối tượng CStudent.

- thủ tục nhập mã số sinh viên.

- thủ tục nhập một điểm số kỳ thi và cập nhập tổng số điểm đã nhập vào.

- hàm tính điểm trung bình để trả ra điểm trung bình cộng của các điểm số đã nhập.

- thủ tục xuất ra màn hình mã số sinh viên và điểm trung bình của sinh viên.

Trang 25

Hiện thực lớp đối tượng CStudent vào một chương trình C++ hoàn chỉnh Chương trình này khai báo một đối tượng thuộc lớp CStudent, đọc vào và trình bày dữ liệu của đối tượng này nhằm kiểm

tra sự hoạt động của các hàm thành viên.

void set_student_id(int student_id);

void add_mark(float mark);

Trang 26

for (int i = 0; i < num_of_mark; i++)

cout << "Student id: " << student_id << endl;

cout << "GPA of student: " << get_gpa() << endl;

Trang 27

BÀI THỰC TẬP SỐ 7

Xử lý Đối tượng Câu 1b Chỉnh sửa chương trình để không còn lỗi trên Chạy thử các sửa đổi trên trong môi trường

Auto::Auto(char* szMake, double dEngine){

szCarMake = new char[25];

strcpy(szCarMake, szMake);

dCarEngineSize = dCarEngine;

}

Auto::displayAuto(){

cout<< “The car make: “<< szCarMake<< endl;

cout<< “The car engine size: “<< dCarEngine<< endl;

}

void main(){

Trang 28

a Thêm vào lớp đối tượng trên một hàm khởi tạo sao chép (copy constructor) thích hợp.

b Thêm vào lớp đối tượng trên một hàm hủy bỏ (destructor) thích hợp.

Chạy thử các sửa đổi trên trong môi trường Visual C++.

Auto(char*, double);

Auto(const Auto &);

cout<< "The car make: "<< szCarMake<< endl;

cout<< "The car engine size: "<< dCarEngine<< endl;

Trang 29

Câu 5 Xây dựng một lớp đối tượng Dyn_Student gồm các thành phần dữ liệu (data members) như

sau:

- mã số sinh viên (là số nguyên).

- một mảng động (dynamic array) dùng để chứa điểm số của sinh viên, mảng động được hiện thực là một con trỏ kiểu số thực chính xác đơn.

- một số nguyên dùng để chỉ số điểm số của sinh viên

Các hàm thành viên (member functions) của lớp đối tượng như sau:

- hàm khởi tạo (constructor) không có thông số, hàm này gán giá trị đầu = 0 hoặc = NULL cho

tất cả các thành viên dữ liệu của mỗi đối tượng Dyn_Student.

- hàm khởi tạo có một thông số kiểu số nguyên, hàm này gán giá trị của thông số cho thành phần

dữ liệu số điểm số của sinh viên và sau đó tạo vùng nhớ heap cho mảng động

- hàm khởi tạo sao chép (copy constructor) để tạo đối tượng thuộc lớp Dyn_Student từ đối tượng

tượng có sẵn.

- thủ tục nhập mã số sinh viên.

- thủ tục nhập các điểm số của sinh viên.

- hàm tính điểm trung bình để trả ra điểm trung bình cộng của các điểm số.

- thủ tục xuất ra màn hình mã số sinh viên và điểm trung bình của sinh viên.

- hàm hủy (destructor) để hủy vùng nhớ heap đã cấp phát cho mảng động.

Hiện thực lớp đối tượng Dyn_Student vào một chương trình C++ hoàn chỉnh Chương trình này khai báo một đối tượng thuộc lớp Dyn_Student, đọc vào và trình bày dữ liệu của đối tượng này

nhằm kiểm tra sự hoạt động của các hàm thành viên.

DynStudent(int num_of_mark);

DynStudent(const DynStudent &);

Ngày đăng: 25/08/2023, 14:03

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w