You are on page 1of 7

BÀI TẬP THỰC HÀNH 11

LẬP TRÌNH VỚI CON TRỎ (tiếp)

A. MỤC TIÊU
Trang bị cho sinh viên kỹ năng lập trình với con trỏ trong C++:
+ Con trỏ mảng, con trỏ xâu
+ Viết chương trình sử dụng con trỏ
+ Phát hiện và sửa lỗi
B. NỘI DUNG
Khai báo biến con trỏ mảng và con trỏ trỏ đến xâu ký tự
C. YÊU CẦU PHẦN CỨNG, PHẦN MỀM
Máy tính cài hệ điều hành Windows, RAM tối thiểu 256MB.
Phần mềm C FREE 5.0.
D. KẾT QUẢ SAU KHI HOÀN THÀNH
Sinh viên sử dụng thành thạo biến con trỏ mảng và con trỏ xâu để áp dụng
giải các bài tập từ đơn giản đến phức tạp.
E. TÓM TẮT LÝ THUYẾT
• Mảng và con trỏ có quan hệ chặt chẽ. Tên mảng cũng như hằng con trỏ (constant
pointer), có thể dùng chỉ số đối với các con trỏ.
• Dùng con trỏ để truy nhập các phần tử mảng
• Phần tử b[n] có thể truy nhập bởi *(bPtr + n)
• Địa chỉ: &b[3] tương đương bPtr + 3
• Tên mảng có thể coi như con trỏ: b[3] tương đương *(b+3)
• Con trỏ có thể viết với cặp ngoặc vuông (ký hiệu pointer/subscript): bPtr[3]
tương đương b[3]
• Mảng chứa con trỏ
• Quản lý nhiều mảng dữ liệu cùng kiểu
char *suit[4] ={"Hearts","Diamonds","Clubs", "Spaces”};
- Mỗi phần tử của suit trỏ đến char * (1 xâu)
- Mảng không chứa xâu, chỉ trỏ đến xâu
- Mảng suit có kích thước cố định, nhưng xâu thì không
F. HƯỚNG DẪN CHI TIẾT
1. Hướng dẫn ban đầu
Bài 1: Viết chương trình thực hiện các công việc sau:
a. Khai báo và khởi tạo một mảng 3 số integer
b. Lưu giữ các phần tử của mảng trong một mảng các con trỏ
c. In giá trị các phần tử của mảng con trỏ ra màn hình
Hướng dẫn:

1
Bước 1: Tạo mới một file*.cpp thực hiện thao tác File\New

File mới xuất hiện, sinh viên chuyển sang bước 2 thực hiện gõ các câu lệnh theo các
bước hướng dẫn.
Bước 2: Khai báo thư viện cần dùng
#include<iostream.h>
#include<iomanip.h>
#define MAX 3;
Bước 3: Khai báo biến mảng con trỏ
int A[MAX] = {10, 100, 200};
int *contro[MAX];
Bước 4: Lưu trữ các giá trị của mảng trong mảng số nguyên
for (int i = 0; i < MAX; i++)
{
contro[i] = &A[i]; //gan dia chi cua so nguyen
}
Bước 5: In các giá trị của các phần tử trong mảng
for (int i = 0; i < MAX; i++)
{
cout<< "Gia tri cua A[" << i << "] = ";
cout<< *contro[i] << endl;
}
Hoàn thiện chương trình như sau:
#include <iostream.h>
#include <iomanip.h>
#define MAX 3;
int main()
{
int A[MAX] = {10, 100, 200};
int *contro[MAX];
for (int i = 0; i < MAX; i++)
{
contro[i] = &A[i]; //gan dia chi cua so nguyen

2
}
for (int i = 0; i < MAX; i++)
{
cout<< "Gia tri cua A[" << i << "] = ";
cout<< *contro[i] << endl;
}
return 0;
}

Kết quả chạy chương trình:

Bài 2: Viết một chương trình để thực hiện các công việc sau:
a. Nhập vào 5 giá trị nguyên từ bàn phím và thực hiện lưu trữ trong một mảng con
trỏ.
b. In các phần tử của mảng ra màn hình
Hướng dẫn:
Bước 1: Tạo mới tương tự như bài số 1
Bước 2: Khai báo thư viện cần dùng
#include<iostream.h>
#include<iomanip.h>
Bước 3: Nhập giá trị vào mảng con trỏ
int A[5],i;
int *p=A;
cout<<"Nhap 5 so nguyen :"<<endl;
for(i=0; i<5; i++)
{
cout<<" Nhap phan tu thu "<<i+1<<": ";
cin>>*(p+i);
}
Bước 4: In các phần tử của mảng ra màn hình
cout<<"Cac so vua nhap la:"<<endl;
for(i=0;i<5;i++)
cout<<A[i]<<" ";

3
Hoàn thiện chương trình như sau:
#include <iostream.h>
#include<iomanip.h>
using namespace std;
int main()
{
int A[5],i;
int *p=A;
cout<<"Nhap 5 so nguyen :"<<endl;
for(i=0; i<5; i++)
{
cout<<"\n Nhap phan tu thu "<<i+1<<": ";
cin>>*(p+i);
}
cout<<"\n Cac so vua nhap la:"<<endl;
for(i=0; i<5; i++)
cout<<A[i]<<" ";
cout<<endl;
return 0;
}

Kết quả chạy chương trình:

2. Hướng dẫn thường xuyên


Bài 3: Sử dụng con trỏ để thực hiện các công việc sau:
a. Nhập vào một mảng các giá trị nguyên từ bàn phím
b. Tìm giá trị lớn nhất của mảng vừa nhập.

4
Hoàn thiện chương trình như sau:
#include <iostream.h>
#include <conio.h>
using namespace std;
int *MaxA(int data[],int n)
{
int *max=data;
int i;
for(i=1;i<n;i++)
if(*max<*(max+i))
*max=*(max+i);

return max;
}
int main()
{
int n,i,*p;
cout<<"Nhap so phan tu cua mang n=: "; cin>>n;
int A[n];
for(i=0;i<n;i++)
{
cout<<"\n Nhap gia tri thu "<<i+1<<" la:";
cin>>A[i];
}
p = MaxA(A,n);
cout<<"Gia tri lon nhat la: "<<*p<<endl;
return 0;
}

Kết quả chạy chương trình:

Bài 4: Sử dụng con trỏ trong, viết chương trình nhập 2 chuỗi s1 và s2, sau đó so
sánh xem s1 và s2 có giống nhau không.

5
Hoàn thiện chương trình như sau:
#include <iostream.h>
#include <conio.h>
using namespace std;
int main()
{
char *s1, *s2;
s1 = new char();
s2 = new char();
cout<<"\n Nhap xau thu nhat: ";
cin.getline(s1,50);
cout<<" Nhap xau thu hai: ";
cin.getline(s2,50);
if (strcmp(s1,s2)==0)
cout<<"Hai xau giong nhau "<<endl;
else
cout<<"Hai xau khac nhau "<<endl;
return 0;
}
Kết quả chạy chương trình

3. Bài tập tự giải


Bài 5: Khởi tạo mảng và nhập danh sách tên người và sử dụng con trỏ để trỏ tới vị trí
thứ n thì sẽ ra tên người đó.
Bài 6: Sử dụng con trỏ viết chương trình nhập một dãy số từ bàn phím và đếm xem
trong dãy có bao nhiêu số chẵn.
Bài 7: Sử dụng con trỏ viết chương trình nhập một dãy số từ bàn phím và đếm xem

6
trong dãy có bao nhiêu số nguyên tố.
Bài 8: Sử dụng con trỏ viết chương trình nhập một xâu ký tự từ bàn phím và thực
hiện chuẩn hóa xâu ký tự vừa nhập.
4. Bài tập về nhà
Bài 9: Sử dụng con trỏ viết chương trình nhập một xâu ký tự từ bàn phím và thực
hiện đếm xem trong xâu có bao nhiêu từ.
Bài 10. Sử dụng con trỏ, hãy viết một chương trình nhập một dãy số từ bàn phím và
thực hiện xóa một phần tử trong dãy ở vị trí thứ k trong dãy (với k nhập từ bàn phím).
Bài 11. Khởi tạo mảng và nhập danh sách tên người và sử dụng con trỏ để trỏ tới vị trí
thứ n thì sẽ ra tên người đó.
Bài 12. Sử dụng con trỏ viết chương trình nhập một dãy số từ bàn phím và đếm xem
trong dãy có bao nhiêu số chẵn

You might also like