Professional Documents
Culture Documents
Tut and Lab 8
Tut and Lab 8
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.
1
b. Tham số mảng của một hàm
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 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);
_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]);
}
}