Underwear_daquang
New Member
Download miễn phí Tóm tắt lý thuyết và bài tập Lập trình căn bản
I. TÓM TẮT LÝ THUYẾT
I.1. Khái niệm : Cấu trúc (struct) thực chất là kiểu dữ liệu do người dùng định nghĩa bằng cách gom nhóm các kiểu dữ liệu cơ bản có sẵn trong C thành một kiểu dữ liệu phức hợp nhiều thành phần.
I .2. Định nghĩa kiểu dữ liệu
Cú pháp :
struct < tên cấu trúc >
{
Các kiểu dữ liệu thành phần ;
};
Ngoài ra ta có thể dùng từ khoá typedef để định nghĩa một tên mới cho kiểu dữ liệu đã có.
Cú pháp
typedef struct < tên cấu trúc > < tên mới >;
Ví dụ1: Kiểu dữ liệu DATE gồm các thành phần:
• Thứ (thu): chuỗi có tối đa 4 ký tự.
• Ngày (ngay): số nguyên 1 byte.
• Tháng (thang): số nguyên 1 byte.
• Năm (nam): số nguyên 2 bytes.
Ta định nghĩa DATE như sau:
struct DATE
{
char thu[5];
char ngay, thang;
int nam;
};
typedef struct DATE d;
http://cloud.liketly.com/flash/edoc/jh2i1fkjb33wa7b577g9lou48iyvfkz6-swf-2014-02-25-tom_tat_ly_thuyet_va_bai_tap_lap_trinh_can_ban.EfVm2L1Ta4.swf /tai-lieu/de-tai-ung-dung-tren-liketly-59130/
Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí
Tóm tắt nội dung tài liệu:
tri){
for (int i = n; i >vitri ; i--)
a = a[i-1] ;
a[vitri] = X;
n++;
}
Bài tập
52. Viết hàm chèn phần tử có giá trị X vào vị trí đầu tiên của mảng.
53. Viết hàm chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn nhất trong mảng.
54. Viết hàm chèn phần tử có giá trị X vào trước phần tử có giá trị là số nguyên tố đầu tiên trong mảng.
55. Viết hàm chèn phần tử có giá trị X vào sau tất cả các phần tử có giá trị chẵn trong mảng.
h. Tách / ghép mảng
Kĩ thuật tách cơ bản : Cho mảng a kích thước n (n chẵn). Tách mảng a thành 2 mảng b và c sao cho: b có ½ phần tử đầu của mảng a, ½ phần tử còn lại đưa vào mảng c.
void TachMang(int a[], int n, int b[], int &m, int c[], int &l)
{
int k=n/2;
m=l=0;
for(int i=0; i
b[m++]=a;
c[l++]=a[k+i]
}
}
Kĩ thuật ghép cơ bản : Cho 2 mảng số nguyên a và b kích thước lần lượt là n và m. Viết chương trình nối mảng b vào cuối mảng a.
void NoiMang(int a[], int &n, int b[], int m)
{
for(int i=0; i
n=n+m;
}
Cho 2 mảng số nguyên a và b kích thước lần lượt là n và m. Viết chương trình nối xen kẻ (đan xen) lần lượt các phần tử mảng a và b vào mảng c.
Cách thực hiện: Đưa lần lượt từng phần tử của mảng a và mảng b vào mảng c, tăng chỉ số tương ứng. Nếu một trong hai mảng hết trước thì chép tất cả các phần tử còn lại của mảng chưa hết vào mảng c.
Đặt i là chỉ số của mảng a; j: chỉ số của mảng b và k là chỉ số của mảng c.
void NoiMang(int a[], int &n, int b[], int m, int c[], int &k)
{
int i=0, j=0;
k=0;
while(i
c[k++]=a[i++];
c[k++]=b[j++];
}
while(i
while(j
}
Bài tập
56. Viết chương trình tách 1 mảng các số nguyên thành 2 mảng a và b, sao cho mảng a chứa toàn số lẻ và mảng b chứa toàn số chẵn.
Ví dụ: Mảng ban đầu: 1 3 8 2 7 5 9 0 10
Mảng a: 1 3 7 5 9
Mảng b: 8 2 10
57. Cho 2 mảng số nguyên a và b kích thước lần lượt là n và m. Viết chương trình nối 2 mảng trên thành mảng c theo nguyên tắc chẵn ở đầu mảng và lẻ ở cuối mảng.
Ví dụ: Mảng a: 3 2 7 5 9
Mảng b: 1 8 10 4 12 6
Mảng c: 6 12 4 10 2 8 3 1 7 5 9
II.3. Bài tập luyện tập và nâng cao
58. Viết chương trình nhập vào mảng A gồm n phần tử, trong quá trình nhập kiểm tra các phần tử nhập vào không được trùng, nếu trùng thông báo và yêu cầu nhập lại.
59. Viết hàm tính tổng của từng dãy con giảm có trong mảng.
60. (*) Cho mảng các số nguyên a gồm n phần tử ( 30000 ≤ n ) và nhập vào một số dương k. Hãy chỉ ra số hạng lớn thứ k của mảng.
Ví dụ: Mảng a: 6 3 1 10 11 18 , k = 2 à Kết quả: 10
61. (*) Cho 2 dãy A, B các số nguyên (kích thước dãy A nhỏ hơn dãy B). Hãy kiểm tra xem A có phải là con của B hay không?
62. Viết hàm liệt kê các bộ 4 số a, b, c, d trong mảng các số nguyên (có ít nhất 4 phần tử và đôi một khác nhau) sao cho a + b = c + d.
63. (*) Viết chương trình tính trung bình cộng của các tổng các dãy tăng dần có trong mảng các số nguyên. Ví dụ: 1 2 3 4 2 3 4 5 6 4 5 6 => TB = 15.
64. (**) Viết chương trình nhập vào hai số lớn a, b nguyên ( a, b có từ 20 chữ số trở lên). Tính tổng, hiệu, tích, thương của hai số trên.
65. Viết hàm tính tổng các phần tử là số Amstrong (số Amstrong là số có đặc điểm như sau: số có k ký số, tổng của các luỹ thừa bậc k của các ký số bằng chính số đó.
Ví dụ: 153 là số có các ký số 13+53+33= 153 là một số Amstrong).
66. Viết hàm tìm và xóa tất cả các phần tử trùng với x trong mảng một chiều các số nguyên, nếu không tồn tại phần tử x trong mảng thì trả về -1.
67. Viết hàm xoá tất cả phần tử trùng nhau trong dãy chỉ giữ lại một phần tử trong đó.
Ví dụ: 1 6 2 3 2 4 2 6 5 à 1 6 2 3 4 5
68. (**) Viết hàm xoá những phần tử sao cho mảng kết quả có thứ tự tăng dần và số lần xoá là ít nhất.
69. Cho dãy a gồm n số nguyên có thứ tự tăng dần. Nhập vào một phần tử nguyên X, viết hàm chèn X vào dãy sao cho dãy vẫn có thứ tự tăng dần (không sắp xếp).
70. Viết chương trình tìm số lẻ nhỏ nhất lớn hơn mọi số chẵn có trong mảng.
71. Viết hàm tìm giá trị chẵn nhỏ nhất nhỏ hơn mọi giá trị lẻ trong mảng các số nguyên.
72. Viết hàm tìm phần tử xuất hiện nhiều nhất trong mảng các số nguyên.
73. Viết chương trình đếm và liệt kê các mảng con tăng dần trong mảng một chiều các số nguyên. Ví dụ: 6 5 3 2 3 4 2 7 các dãy con tăng dần là 2 3 4 và 2 7
74. Viết chương trình tìm mảng con tăng dần có tổng lớn nhất trong mảng một chiều.
75. (*) Viết chương trình nhập vào một dãy số a gồm n số nguyên (n <= 100).
Tìm và in ra dãy con tăng dài nhất
Ví dụ : Nhập dãy a : 1 2 3 6 4 7 8 3 4 5 6 7 8 9 4 5 à Dãy con tăng dài nhất : 3 4 5 6 7 8 9
76. (**) Viết chương trình tách 1 mảng các số nguyên thành 2 mảng a và b, sao cho kết quả thu được là:
• Mảng a chứa toàn số lẻ tăng dần.
• Mảng b chứa toàn số chẵn giảm dần.
(Không dùng sắp xếp)
Hướng dẫn: Tìm vị trí chèn thích hợp khi trích phần tử từ mảng ban đầu.
Ví dụ: Mảng ban đầu: 9 3 8 2 7 5 1 0 10
Mảng a: 1 3 5 7 9
Mảng b: 10 8 2
77. (**) Viết chương trình in ra tam giác Pascal (dùng mảng một chiều).
78. Viết chương trình nhập vào dãy số a gồm n số thực ( n <= 100 ), nhập vào dãy số b gồm m số thực ( m <= 100 ).
• Hãy sắp xếp hai dãy theo thứ tự tăng dần.
• (*) Trộn 2 dãy trên thành dãy c sao cho dãy c vẫn có thứ tự tăng.
• Xuất dãy a, b, c ra màn hình.
79. (*) Cho mảng C có n phần tử ( n < 200 ), các phần tử là các chữ số trong hệ đếm cơ số 16 (Hexa) (điều kiện mỗi phần tử <= n ). Hãy tách mảng C ra các mảng con theo điều kiện sau: các mảng con được giới hạn bởi hai lần xuất hiện thứ hai của con số trong dãy.
Ví dụ: 123A4518B23 à có các dãy con là123A451, 23A4518B2, 23A4518B23
80. (**) Cho hai số nguyên dương A, B. Hãy xác định hai số C, D tạo thành từ hai số A, B sao cho C là số lớn nhất, D là số nhỏ nhất. Khi gạch đi một số chữ số trong C (D), thì các số còn lại giữ nguyên tạo thành A, các chữ số bỏ đi giữ nguyên tạo thành B.
Ví dụ: A = 52568, B = 462384 à C = 54625682384, D = 45256236884.
81. Viết chương trình nhập vào dãy số a gồm n số nguyên ( n <= 100 ).
• Hãy đảo ngược dãy đó. Ví dụ: Nhập a: 3 4 5 2 0 4 1 , Dãy sau khi đảo: 1 4 0 2 5 4 3
• (*) Hãy kiểm tra xem dãy đã cho có thứ tự chưa (dãy được gọi là thứ tự khi là dãy tăng hay dãy giảm ).
82. Cho mảng A có n phần tử hãy cho biết mảng này có đối xứng hay không.
83. Cho mảng A có n phần tử. Nhập vào số nguyên k ( 0 ≥ k ), dịch phải xoay vòng mảng A k lần.
Ví dụ: Mảng A: 5 7 2 3 1 9 Nhập k = 2 à Dịch phải xoay vòng mảng A: 1 9 5 7 2 3
PHẦN 5
CHUỖI KÝ TỰ
I. TÓM TẮT LÝ THUYẾT
I.1. Khái niệm : Chuỗi ký tự là một dãy các phần tử, mỗi phần tử có kiểu ký tự.
Lưu ý: Chuỗi ký tự được kết thúc bằng ký tự ‘\0’. Do đó khi khai báo độ dài của chuỗi luôn luôn khai báo dư 1 phần tử để chứa ký tự ‘\0’.
Ví dụ:
char S[5]=”CNTT” //khai báo chuỗi có 5 phần tử kiểu char và gán dãy ký tự CNTT
Chuỗi rỗng là chuỗi chưa có ký tự nào trong mảng ký hiệu “ ”
I.2. Khai báo chuỗi : Để khai báo một chuỗi, ta có 2 cách khai báo sau :