Bài tập chương 7 - Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Giả sử thông tin mua hàng của khách hàng được lưu vào 1 mảng gồm 100 phần tử của các struct được định nghĩa ở trên. Hãy thực hiện thao tác nhập dữ liệu cho mảng đó và tính tổng số tiền bán hàng trong ngày. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

BÀI TẬP CHƯƠNG 7
Bài 1. Struct là gì? Cho ví d minh ha.
Bài 2. Thc hin li các ví d và làm các bài tp trong slide của chương 7.
Bài 3. Thc hiện đoạn chương trình sau, cho biết kết qu hin ra màn hình.
#include <stdio.h>
int main (void)
{
struct date
{
int month;
int day;
int year;
};
struct date today;
today.month = 9;
today.day = 25;
today.year = 2010;
printf ("Today's date is %i/%i/%.2i.\n", today.month, today.day, today.year % 100);
return 0;
}
Bài 4. Thông tin bán hàng trong ngày mà mt ca hàng cn qun lý gm:
S hóa đơn (xâu ký tự độ dài 10),
Tên khách hàng (xâu ký t độ dài 50),
Tng s tin mua hàng (kiu s thc).
Viết chương trình thực hin nhng công vic sau:
a) Định nghĩa cấu trúc để lưu giữ thông tin v khách hàng theo mô t như trên.
b) Gi s thông tin mua hàng của khách hàng được lưu vào 1 mảng gm 100 phn t ca
các struct được định nghĩa ở trên. Hãy thc hin thao tác nhp d liu cho mảng đó và
tính tng s tin bán hàng trong ngày.
Bài 5. Để qun lý các thành viên trong lp học môn CTDL, giáo viên lưu trữ thông tin v các
thành viên trong lp dùng mng. Thông tin v mi thành viên trong lp gm
typedef struct sv
{
long msSV; //mã s sinh viên
char hoten[30]; //h tên
float diem; //điểm thi cui k
} SINHVIEN;
Viết chương trình nhập thông tin cho lp (gi s s ng sinh viên trong lớp không vượt quá
100). Gi s giáo viên mun sp xếp các thành viên trong lp theo th t gim dần điểm thi để
d qun lý. Bn hãy giúp giáo viên viết chương trình thực hin vic sp xếp sinh viên theo điểm
gim dn và in danh sách sinh viên theo th t đã sắp xếp ra màn hình.
Bài 6. Thông tin v ngày tháng (DATE) gm :
Ngày : kiu s nguyên
Tháng : kiu s nguyên
Năm: kiểu s nguyên
Viết chương trình nhp vào hai thời điểm và tính s ngày chênh lch gia 2 khong thời điểm đó.
Ví d: thời điểm 1 là 1/1/2010 và thời điểm 2 là 3/1/2010 thì s ngày chênh lch s là 2 ngày.
Bài 7. Thông tin v hóa đơn tiền điện ca khách hàng gm:
S hóa đơn: kiểu xâu ký t độ dài 10
S hiu hợp đồng: kiu xâu ký t với độ dài tối đa 10
H tên : xâu ký t độ vi dài tối đa 50
Địa ch: xâu ký t với độ dài tối đa 255
Ngày tháng: thi gian thu tin (Vd. 15/3/2010), kiểu DATE như trong bài 6
Ch s công tơ trước: kiu s nguyên
Ch s công tơ sau: kiểu s nguyên
ợng điện tiêu th: s Kwh (tính bng ch s công tơ sau trừ ch s trước)
Hãy viết chương trình:
Định nghĩa kiểu cu trúc thích hợp để lưu trữ thông tin v khách hàng dùng điện.
Nhp vào thông tin ca 10 khách hàng t bàn phím (lưu trữ dùng mng)
Tính s tin phi tr của 10 khách hàng đó theo quy tắc:
o Giá là 550đ/Kwh cho mi Kwh trong khong t 1 đến 100
o Giá cho mi Kwh t th 101 tr đi sẽ là 1000 đ/Kwh
In ra màn hình s tin mi khách hàng phi tr theo dng
Khach hang So hieu hop dong Luong dien tieu thu Gia thanh (VND)
======================================================================
Nguyen Van A KHHN1010 50 27 500
Bài 8. Thông tin v kết qu thi đấu ca mỗi đội bóng trong 1 mùa bóng 2009 gm
Tên đội: xâu không quá 30 ký t
S trn thng: s nguyên
S trn hòa: s nguyên
S trn thua: s nguyên
Hãy viết chương trình thực hin nhng công vic sau:
Nhập thông tin cho các đội bóng (không quá 100 đội) cho đến khi nào nhp vào mt tên
trng thì dng.
Hin th thông tin v các đối bóng ra màn hình dưới dng
Ket qua thi dau mua bong 2009
STT Ten Doi So tran thang So tran hoa So tran thua Tong diem
==============================================================
1 MU 10 5 1 35
Vi tổng điểm tính như sau : trận thắng 3 điểm, hòa 1 điểm và thua 0 điểm
In ra màn hình các đội có tổng điểm cao nht trong mùa bóng, mỗi đội trên 1 dòng.
Bài 9. Thông tin v kết qu hc tp môn tin học đại cương của sinh viên gm
Đim ý thc
Đim gia k
Đim thc hành
Đim cui k
Hãy viết chương trình:
Định nghĩa kiểu cu trúc thích hợp để lưu trữ thông tin điểm s sinh viên.
Nhp vào thông tin ca 10 sinh viên t bàn phím (lưu trữ dùng mng)
Tính điểm trung bình ca sinh viên theo công thc
ý thc * 10% + (gia k + thc hành) * 20% + cui k *50%
In ra màn hình điểm của các sinh viên dưới dng
Sinh vien Diem cuoi ky Diem trung binh
============================================
Nguyen Van A 9 8
In ra màn hình h tên các sinh viên có điểm trung bình lớn hơn hoặc bng 5. Mi sinh
viên trên mt dòng.
Bài 10. Thông tin v mt xe máy gm
Bin s: xâu ký t độ dài tối đa 10
Tên ch s hu: xâu ký t độ dài tối đa 30
Năm đăng ký: số nguyên
Viết chương trình thực hin nhng công vic sau:
Nhập vào thông tin các xe đã đăng ký. Quá trình nhập cho đến khi gp thông tin bin s
là “$$$” thì dừng. (s ng tối đa không quá 1000)
Thng kê s ợng xe đăng ký trong các năm 2008, 2009
In ra màn hình thông tin v các xe đăng ký trong năm 2010 dưới dng bảng như sau
Tinh hinh dang ky xe 2010
STT Bien so Ten chu so huu
===============================
1 29K6 1234 Nguyen Van A
Bài 11. Thông tin ca khách hàng cn qun lý gm:
Mã khách hàng: xâu ký t độ dài không quá 10
H tên: xâu ký t độ dài không quá 50
Địa ch: xâu ký t độ dài không quá 100
S đin thoi: xâu ký t độ dài không quá 12
Tng s tin mà khách hàng đó đã mua sắm ti ca hàng
Viết chương trình thực hin nhng công vic sau:
Nhp vào thông tin các khách hàng. Quá trình nhp dừng khi người dùng nhp vào mã
khách hàng là “$$$” (số ng khách hàng tối đa không quá 1000)
Nhp vào mt s tin x, thống kê và đưa ra màn hình số lượng khách hàng mà có tng
s tin mua sm lớn hơn hoặc bng x.
Sp xếp các khách hàng theo th t h tên tăng dần theo bng ch cái và in ra màn hình
i dng bảng như sau
THONG TIN KHACH HANG
STT Ma KH Ho ten So tien
=============================================================
1 KH0001 Nguyen Van A 10201000
Bài 12. Để qun lý danh sách các s kiện như lịch hc, lch thi, sinh nht,.. ta cần lưu trữ được
thời điểm din ra các s kin và mô t cho các s kin này.
Mt cấu trúc để lưu trữ các thông tin này được định nghĩa như sau
struct date
{
int month;
int day;
int year;
};
struct time
{
int hour;
int min;
int sec;
};
struct dateTime
{
struct date sDate; //ngày
struct time sTime; //gi
char description[255];//mô t
};
Để nhc nh mình không quên các s kin thì ti mi thời điểm chúng ta s tính khong thi
gian ti s kin sắp đến.
Ví d. S kin Hp hàng tuần : 11/8/2010 08:00:00 (tháng/ngày/năm)và thời điểm hin ti là
11/5/2010 08:00:00 thì thời gian đến s kin sp ti là 24 gi.
Để tính s ng ngày gia hai thời điểm ta có công thc sau
 󰇛󰇜  󰇛󰇜 
Trong đó
󰇛

󰇜
 󰉦
󰉦󰉼󰉹󰉗
󰇛

󰇜
 󰉦
 󰉦󰉼󰉹󰉗
Ví d hai thời điểm August 8, 2004, và February 22, 2005
N1 = 1461 x f(2004, 8) / 4 + 153 x g(8) / 5 + 3
= (1461 x 2004) / 4 + (153 x 9) / 5 + 3
= 2,927,844 / 4 + 1,377 / 5 + 3
= 731,961 + 275 + 3
= 732,239
N2 = 1461 x f(2005, 2) / 4 + 153 x g(2) / 5 + 21
= (1461 x 2004) / 4 + (153 x 15) / 5 + 21
= 2,927,844 / 4 + 2295 / 5 + 21
= 731,961 + 459 + 21
= 732,441
Number of elapsed days = N2 - N1 = 732,441 732,239 = 202
Vy s ngày gia 2 thời điểm trên là 202 ngày
Hãy viết chương trình:
cho ngưi s dng nhp vào danh sách các s kin. Quá trình nhp kết thúc khi người nhp tr
lời là ‘K’ hoặc ‘k’.
Sau đó căn cứ vào ngày gi hin tại để đưa ra danh sách các sự kin sp din ra theo th t tăng
dn khong thi gian.
Danh sach cac su kien
Ngay gio hien tai : MM/DD/YYYY HH:MM:SS
STT su kien thoi diem thoi gian
=============================================================
1 Thi hoc ky mon THDC 15/12/2010 09:00:00 40 ngay va 03:50:00
2 Thi hoc ky mon triet 18/12/2010 09:00:00 43 ngay va 03:50:00
| 1/6

Preview text:

BÀI TẬP CHƯƠNG 7
Bài 1. Struct là gì? Cho ví dụ minh họa.
Bài 2.
Thực hiện lại các ví dụ và làm các bài tập trong slide của chương 7.
Bài 3. Thực hiện đoạn chương trình sau, cho biết kết quả hiện ra màn hình. #include int main (void) { struct date { int month; int day; int year; }; struct date today; today.month = 9; today.day = 25; today.year = 2010;
printf ("Today's date is %i/%i/%.2i.\n", today.month, today.day, today.year % 100); return 0; }

Bài 4. Thông tin bán hàng trong ngày mà một của hàng cần quản lý gồm:
 Số hóa đơn (xâu ký tự độ dài 10),
 Tên khách hàng (xâu ký tự độ dài 50),
 Tổng số tiền mua hàng (kiểu số thực).
Viết chương trình thực hiện những công việc sau:
a) Định nghĩa cấu trúc để lưu giữ thông tin về khách hàng theo mô tả như trên.
b) Giả sử thông tin mua hàng của khách hàng được lưu vào 1 mảng gồm 100 phần tử của
các struct được định nghĩa ở trên. Hãy thực hiện thao tác nhập dữ liệu cho mảng đó và
tính tổng số tiền bán hàng trong ngày.
Bài 5. Để quản lý các thành viên trong lớp học môn CTDL, giáo viên lưu trữ thông tin về các
thành viên trong lớp dùng mảng. Thông tin về mỗi thành viên trong lớp gồm typedef struct sv {
long msSV; //mã số sinh viên char hoten[30]; //họ tên
float diem; //điểm thi cuối kỳ } SINHVIEN;

Viết chương trình nhập thông tin cho lớp (giả sử số lượng sinh viên trong lớp không vượt quá
100). Giả sử giáo viên muốn sắp xếp các thành viên trong lớp theo thứ tự giảm dần điểm thi để
dễ quản lý. Bạn hãy giúp giáo viên viết chương trình thực hiện việc sắp xếp sinh viên theo điểm
giảm dần và in danh sách sinh viên theo thứ tự đã sắp xếp ra màn hình.
Bài 6. Thông tin về ngày tháng (DATE) gồm :
 Ngày : kiểu số nguyên
 Tháng : kiểu số nguyên  Năm: kiểu số nguyên
Viết chương trình nhập vào hai thời điểm và tính số ngày chênh lệch giữa 2 khoảng thời điểm đó.
Ví dụ: thời điểm 1 là 1/1/2010 và thời điểm 2 là 3/1/2010 thì số ngày chênh lệch sẽ là 2 ngày.
Bài 7. Thông tin về hóa đơn tiền điện của khách hàng gồm:
 Số hóa đơn: kiểu xâu ký tự độ dài 10
 Số hiệu hợp đồng: kiểu xâu ký tự với độ dài tối đa 10
 Họ tên : xâu ký tự độ với dài tối đa 50
 Địa chỉ: xâu ký tự với độ dài tối đa 255
 Ngày tháng: thời gian thu tiền (Vd. 15/3/2010), kiểu DATE như trong bài 6
 Chỉ số công tơ trước: kiểu số nguyên
 Chỉ số công tơ sau: kiểu số nguyên
 Lượng điện tiêu thụ: số Kwh (tính bằng chỉ số công tơ sau trừ chỉ số trước) Hãy viết chương trình:
 Định nghĩa kiểu cấu trúc thích hợp để lưu trữ thông tin về khách hàng dùng điện.
 Nhập vào thông tin của 10 khách hàng từ bàn phím (lưu trữ dùng mảng)
 Tính số tiền phải trả của 10 khách hàng đó theo quy tắc:
o Giá là 550đ/Kwh cho mỗi Kwh trong khoảng từ 1 đến 100
o Giá cho mỗi Kwh từ thứ 101 trở đi sẽ là 1000 đ/Kwh
 In ra màn hình số tiền mỗi khách hàng phải trả theo dạng
Khach hang So hieu hop dong
Luong dien tieu thu Gia thanh (VND)
====================================================================== Nguyen Van A KHHN1010 50 27 500
Bài 8. Thông tin về kết quả thi đấu của mỗi đội bóng trong 1 mùa bóng 2009 gồm
Tên đội: xâu không quá 30 ký tự
Số trận thắng: số nguyên
Số trận hòa: số nguyên
Số trận thua: số nguyên
Hãy viết chương trình thực hiện những công việc sau:
 Nhập thông tin cho các đội bóng (không quá 100 đội) cho đến khi nào nhập vào một tên trống thì dừng.
 Hiển thị thông tin về các đối bóng ra màn hình dưới dạng
Ket qua thi dau mua bong 2009 STT Ten Doi So tran thang
So tran hoa So tran thua Tong diem
============================================================== 1 MU 10 5 1 35
Với tổng điểm tính như sau : trận thắng 3 điểm, hòa 1 điểm và thua 0 điểm
 In ra màn hình các đội có tổng điểm cao nhất trong mùa bóng, mỗi đội trên 1 dòng.
Bài 9. Thông tin về kết quả học tập môn tin học đại cương của sinh viên gồm  Điểm ý thức  Điểm giữa kỳ  Điểm thực hành  Điểm cuối kỳ Hãy viết chương trình:
 Định nghĩa kiểu cấu trúc thích hợp để lưu trữ thông tin điểm số sinh viên.
 Nhập vào thông tin của 10 sinh viên từ bàn phím (lưu trữ dùng mảng)
 Tính điểm trung bình của sinh viên theo công thức
ý thức * 10% + (giữa kỳ + thực hành) * 20% + cuối kỳ *50%
 In ra màn hình điểm của các sinh viên dưới dạng Sinh vien Diem cuoi ky Diem trung binh
============================================ Nguyen Van A 9 8
 In ra màn hình họ tên các sinh viên có điểm trung bình lớn hơn hoặc bằng 5. Mỗi sinh viên trên một dòng.
Bài 10. Thông tin về một xe máy gồm
 Biển số: xâu ký tự độ dài tối đa 10
 Tên chủ sở hữu: xâu ký tự độ dài tối đa 30
 Năm đăng ký: số nguyên
Viết chương trình thực hiện những công việc sau:
 Nhập vào thông tin các xe đã đăng ký. Quá trình nhập cho đến khi gặp thông tin biển số
là “$$$” thì dừng. (số lượng tối đa không quá 1000)
 Thống kê số lượng xe đăng ký trong các năm 2008, 2009
 In ra màn hình thông tin về các xe đăng ký trong năm 2010 dưới dạng bảng như sau
Tinh hinh dang ky xe 2010 STT Bien so Ten chu so huu
=============================== 1 29K6 1234 Nguyen Van A
Bài 11. Thông tin của khách hàng cần quản lý gồm:
Mã khách hàng: xâu ký tự độ dài không quá 10
Họ tên: xâu ký tự độ dài không quá 50
Địa chỉ: xâu ký tự độ dài không quá 100
Số điện thoại: xâu ký tự độ dài không quá 12
Tổng số tiền mà khách hàng đó đã mua sắm tại cửa hàng
Viết chương trình thực hiện những công việc sau:
 Nhập vào thông tin các khách hàng. Quá trình nhập dừng khi người dùng nhập vào mã
khách hàng là “$$$” (số lượng khách hàng tối đa không quá 1000)
 Nhập vào một số tiền x, thống kê và đưa ra màn hình số lượng khách hàng mà có tổng
số tiền mua sắm lớn hơn hoặc bằng x.
 Sắp xếp các khách hàng theo thứ tự họ tên tăng dần theo bảng chữ cái và in ra màn hình
dưới dạng bảng như sau THONG TIN KHACH HANG STT Ma KH Ho ten So tien
============================================================= 1 KH0001 Nguyen Van A 10201000
Bài 12. Để quản lý danh sách các sự kiện như lịch học, lịch thi, sinh nhật,.. ta cần lưu trữ được
thời điểm diễn ra các sự kiện và mô tả cho các sự kiện này.
Một cấu trúc để lưu trữ các thông tin này được định nghĩa như sau struct date { int month; int day; int year; }; struct time { int hour; int min; int sec; }; struct dateTime { struct date sDate; //ngày struct time sTime; //giờ
char description[255];//mô tả };
Để nhắc nhở mình không quên các sự kiện thì tại mỗi thời điểm chúng ta sẽ tính khoảng thời
gian tới sự kiện sắp đến.
Ví dụ. Sự kiện Họp hàng tuần : 11/8/2010 08:00:00 (tháng/ngày/năm)và thời điểm hiện tại là
11/5/2010 08:00:00 thì thời gian đến sự kiện sắp tới là 24 giờ.
Để tính số lượng ngày giữa hai thời điểm ta có công thức sau Trong đó { {
Ví dụ hai thời điểm August 8, 2004, và February 22, 2005
N1 = 1461 x f(2004, 8) / 4 + 153 x g(8) / 5 + 3
= (1461 x 2004) / 4 + (153 x 9) / 5 + 3
= 2,927,844 / 4 + 1,377 / 5 + 3 = 731,961 + 275 + 3 = 732,239
N2 = 1461 x f(2005, 2) / 4 + 153 x g(2) / 5 + 21
= (1461 x 2004) / 4 + (153 x 15) / 5 + 21
= 2,927,844 / 4 + 2295 / 5 + 21 = 731,961 + 459 + 21 = 732,441
Number of elapsed days = N2 - N1 = 732,441 – 732,239 = 202
Vậy số ngày giữa 2 thời điểm trên là 202 ngày Hãy viết chương trình:
 cho người sử dụng nhập vào danh sách các sự kiện. Quá trình nhập kết thúc khi người nhập trả
lời là ‘K’ hoặc ‘k’.
 Sau đó căn cứ vào ngày giờ hiện tại để đưa ra danh sách các sự kiện sắp diễn ra theo thứ tự tăng dần khoảng thời gian. Danh sach cac su kien
Ngay gio hien tai : MM/DD/YYYY HH:MM:SS STT su kien thoi diem thoi gian
============================================================= 1 Thi hoc ky mon THDC 15/12/2010 09:00:00 40 ngay va 03:50:00 2 Thi hoc ky mon triet 18/12/2010 09:00:00 43 ngay va 03:50:00