Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

MẢNG 1 CHIỀU

MỤC TIÊU:
 Hiểu được cấu trúc dữ liệu mảng 1 chiều.
 Lập trình và vận dụng được mảng 1 chiều vào từng bài toán cụ thể.
 Làm được các bài tập có ứng dụng mảng 1 chiều.

NỘI DUNG THỰC HÀNH


1. Tóm tắt lý thuyết.
a. Định nghĩa và khai báo mảng 1 chiều:

Lưu ý: Chỉ số mảng luôn luôn bắt đầu từ 0.


Ví dụ:

1
b. Tham số mảng của một hàm

c. Những thao tác trên mảng:

Ví dụ:

2
2. Bài tập mẫu hướng dẫn thực hành.
Bài 1: Viết chương trình nhập các giá trị cho mảng 1 chiều chứa các số nguyên, sau đó
xuất mảng vừa nhập (Lưu ý: Viết chương trình dạng hàm).

Yêu cầu:
 Viết 2 hàm con Nhập và Xuất mảng 1 chiều chứa các số nguyên.
 Gọi thực hiện 2 hàm con trong hàm main.

Hướng dẫn:
Bước 1: Tạo một Project mới  đặt tên: Mang1C_BaiTapMau1_<Tên sinh viên>, Ví
dụ Mang1C_BaiTapMau1_NguyenVanA

Bước 2: Khai báo thêm các thư viện cơ bản cho chương trình.
#include <conio.h>
#include <stdio.h>

Bước 3: Khai báo hằng số cho chương trình.


#define MAXSIZE 1000

Bước 4: Viết các khai báo nguyên mẫu hàm cho chương trình như sau:
void NhapMang1C_SoNguyen(int a[], int n);
void XuatMang1C_SoNguyen(int a[], int n);

3
Bước 5: Viết hàm main để thực thi chương trình.
void main()
{
int A[MAXSIZE];
int N;
do
{
printf("Cho biet so phan tu cua mang: ");
scanf_s("%d", &N);
}while(N<=0);
NhapMang1C_SoNguyen(A, N);
printf("\nNoi dung cua mang la: ");
XuatMang1C_SoNguyen(A, N);
getch();
}
Bước 6: Viết các định nghĩa hàm cần thiết cho chương trình như sau:
void NhapMang1C_SoNguyen(int a[], int n)
{
for(int i=0; i<n; i++)
{
printf("Gia tri phan tu a[%d]=", i);
scanf_s("%d", &a[i]);
}
}
//=======================================================================
void XuatMang1C_SoNguyen(int a[], int n)
{
for(int i=0; i<n; i++)
printf("%4d", a[i]);
}

Bài 2: Viết chương trình tạo ngẫu nhiên các giá trị cho mảng 1 chiều chứa các số nguyên,
sau đó thực hiện các thao tác sau (Lưu ý: Viết chương trình dạng hàm):
- Xuất các giá trị của mảng ra màn hình.
- Thêm vào mảng một giá trị x tại vị trí vt (kiểm tra tính hợp lệ của vt).
- Xóa khỏi mảng một giá trị x.
- Sắp xếp các giá trị của mảng theo thứ tự tăng dần.
- Xuất ra màn hình những giá trị là số chính phương.
Hướng dẫn:
Bước 1: Tạo một Project mới  đặt tên: Mang1C_BaiTapMau2 _<Tên sinh viên>, Ví
dụ Mang1C_BaiTapMau2 _NguyenVanA.

Bước 2: Khai báo thêm các thư viện cơ bản cho chương trình.
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>

4
Bước 3: Khai báo hằng số cho chương trình.
const int MAXSIZE=200; //Hoặc dùng lệnh define

Bước 4: Viết các khai báo nguyên mẫu hàm cho chương trình như sau:
void TaoMang1C_SoNguyen(int a[], int &n);
void XuatMang1C_SoNguyen(int a[], int n);
void ThemPhanTu(int a[], int &n, int x, int vt);
int TimPhanTu(int a[], int n, int x);
void XoaPhanTu(int a[], int &n, int x);
void SapXepTang(int a[], int n);
int KiemTraSoChinhPhuong(int x);
void LietKeSoChinhPhuong(int a[], int n);

Bước 5: Viết hàm main để thực thi chương trình.


void main()
{
int A[MAXSIZE], N;
int key, x, vt;
//************************************************
TaoMang1C_SoNguyen(A, N);
printf("\nNoi dung cua mang vua tao la:");
XuatMang1C_SoNguyen(A,N);
//************************************************
printf("\nBan hay cho biet phan tu muon them: ");
scanf_s("%d", &x);
printf("\nBan hay cho biet vi tri muon them: ");
scanf_s("%d", &vt);
ThemPhanTu(A, N, x, vt);
//************************************************
printf("\nBan hay cho biet phan tu muon xoa: ");
scanf_s("%d", &x);
XoaPhanTu(A, N, x);
//************************************************
SapXepTang(A, N);
//************************************************
LietKeSoChinhPhuong(A, N);

_getch();
}
Bước 6: Viết các định nghĩa hàm cần thiết cho chương trình như sau:
//=======================================================================
void TaoMang1C_SoNguyen(int a[], int &n)
{
do
{
printf("Cho biet so phan tu cua mang: ");
scanf_s("%d", &n);
} while(n<=0);
srand((unsigned)time(NULL));
for(int i=0; i<n; i++)
a[i] = (rand()%199)-99; //giá trị từ -99 đến 99
}
//=======================================================================
void XuatMang1C_SoNguyen(int a[], int n)
{

5
for(int i=0; i<n; i++)
printf("%4d", a[i]);
}
//=======================================================================
void ThemPhanTu(int a[], int &n, int x, int vt)
{
if(vt<0 && vt>n)
printf("\nVi tri %d khong hop le.", vt);
else
{
for(int i=n; i>vt; i--)
a[i] = a[i-1]; //Dịch các phần tử sang phải 1 vị trí
a[vt]=x; //Thêm x vào vị trí vt
n++; //Tăng số phần tử lên 1
printf("\nMang sau khi them %d vao vi tri %d la: ", x, vt);
XuatMang1C_SoNguyen(a, n);
}
}
//=======================================================================
int TimPhanTu(int a[], int n, int x)
{
for(int i=0; i<n; i++)
if(a[i] == x)
return i; //Tìm thấy x tại vị trí thứ i
return -1; //Không tìm thấy x trong mảng
}
//=======================================================================
void XoaPhanTu(int a[], int &n, int x)
{
int vt=TimPhanTu(a, n, x); //Tìm vị trí x trong mảng
if(vt==-1)
printf("\nKhong tim thay phan tu %d muon xoa.", x);
else
{
for(int i=vt; i<=n-2; i++)
a[i] = a[i+1]; //Dịch các phần tử sang trái 1 vị trí
n--; //Giảm số phần tử bớt 1
printf("\nMang sau khi xoa %d tai vi tri %d la: ", x, vt);
XuatMang1C_SoNguyen(a, n);
}
}
//=======================================================================
void SapXepTang(int a[], int n)
{
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
if(a[i]>a[j])
{ //Doi cho hai phan tu a[i], a[j] voi nhau
int tam = a[i];
a[i] = a[j];
a[j] = tam;
}
printf("\nMang sau duoc sap xep tang dan la: ");
XuatMang1C_SoNguyen(a, n);
}
//=======================================================================
int KiemTraSoChinhPhuong(int x)
{
if(x>3)

6
{
int cx=sqrt((double)x); //Tính căn bậc 2 và chỉ lấy phần nguyên
if(cx*cx == x)
return 1; // x là số chính phương
}
return 0; // x không phải là số chính phương
}
//=======================================================================
void LietKeSoChinhPhuong(int a[], int n)
{
printf("\nDanh sach cac so chinh phuong cua mang: ");
for(int i=0; i<n; i++)
{
int kq = KiemTraSoChinhPhuong(a[i]);
if(kq==1)
printf("%4d", a[i]);
}
}

3. Bài tập tương tự ở lớp


Cho một mảng 1 chiều chứa các số nguyên. Hãy viết một chương trình tổng hợp
dạng hàm như bài tập mẫu 2 với yêu cầu sau:
a. Tạo một mảng 1 chiều chứa các số nguyên.
b. Xuất một mảng 1 chiều chứa các số nguyên.
c. Nhập một số nguyên X từ bàn phím sau đó đếm số phần tử trong mảng có giá trị X
d. Tính tổng các giá trị mảng.
e. Tính giá trị trung bình các phần tử trong mảng.
f. Tìm giá trị lớn nhất trong mảng.
g. Tính tổng chẵn trong mảng.
h. Tìm số chẵn lớn nhất trong mảng.

4. Bài tập về nhà:


i. Tìm số nguyên tố nhỏ nhất trong mảng.
j. Tìm vị trị của giá trị x trong mảng, x nhập từ phím.
k. Tìm vị trí phần tử nhỏ nhất trong mảng.
l. Đếm phần tử dương trong mảng.
m. Đếm số lần phần tử x xuất hiện trong mảng.
n. Đếm số nguyên tố trong mảng.
o. Xuất ra danh sách các phần tử ở vị trí chẵn trong mảng.
p. Tìm “vị trí của giá trị chẵn đầu tiên” trong mảng 1 chiều các số nguyên. Nếu mảng
không có giá trị chẵn nào thì trả về -1.
q. Đảo ngược các giá trị mảng.
r. Kiểm tra tính đối xứng của mảng. Nếu mảng không đối xứng thì trả về -1.
s. Viết hàm tìm giá trị phần tử xuất hiện nhiều nhất trong mảng, nếu có nhiều phần tử có
số lần xuất hiện bằng nhau thì xuất phần tử đầu tiên.
t. Viết hàm kiểm tra mảng có phải là mảng tăng không.

You might also like