Tải bản đầy đủ (.pptx) (121 trang)

Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Minh Thái

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (401.82 KB, 121 trang )

Lập trình C
Chương 1. Mảng một chiều
(6 tiết)

Trần Minh Thái
Email:
Website: www.minhthai.edu.vn
Cập nhật: 09/11/2016

1


Nội dung

1.
2.
3.
4.
5.
6.

Khái niệm kiểu dữ liệu mảng một chiều
Khai báo
Các thao tác nhập/ xuất mảng
Kỹ thuật tìm kiếm, liệt kê giá trị trong mảng
Kỹ thuật xóa, chèn
Chuỗi ký tự và các thao tác xữ lý cơ bản

2



KHÁI NIỆM VÀ KHAI BÁO

3


Khái niệm
• Mảng được cấp phát bộ nhớ liên tục và bao gờm nhiều
biến thành phần
• Mỗi biến thành phần có cùng KDL và cùng tên
Giá trị

0

1

2

3

4

5

6

7

8

9


Vị trí
Vị trí được tính từ 0

4


Khai báo
<KDL> < Tên mảng > [< Số phần tử tới đa của mảng>] ;

Ví dụ
int a[100]; //Khai bao mang so nguyen a toi da 100
phan tu
float b[50]; //Khai bao mang so thuc b toi da 50 phan
tu
char
str[30];
bao mang
tu định
strnghĩa
toi hằng
da số
30MAX
ky
Nhằm thuận
tiện cho//Khai
việc viết chương
trình,ky
ta nên
tu

ở đầu chương trình – là kích thước tối đa của mảng - như sau:
#define MAX 100
int main()
{
int a[MAX], b[MAX];
//Các lệnh
return 0;
}

5


Khai báo, gán giá trị ban đầu
Gán từng phần tử
int a[5] = { 3, 6, 8, 1, 12 };
Giá trị

3

6

8

1

12

Vị trí

0


1

2

3

4

Gán tồn bộ phần tử trong mảng có cùng giá trị
int a[8]3 = { 33 };
Giá trị
Vị trí

0

1

3

3

3

3

3

3


2

3

4

5

6

7

6


Truy xuất giá trị

TênMảng [vị trí cần truy xuất]
int main()

Vị trí 3

{
int a[5] = { 3, 6, 8, 11, 12 };
printf("Gia tri mang tai vi tri 3 = ",
a[3]);
getch();
return 0;
}
Kết quả: Gia tri mang tai vi tri 3 = 11

7


Các thao tác trên mảng

1.
2.
3.
4.
5.
6.
7.
8.

Nhập
Xuất (liệt kê)
Tìm kiếm
Đếm
Sắp xếp
Kiểm tra mảng thỏa điều kiện cho trước
Tách/ ghép mảng
Chèn / xóa
8


THAO TÁC NHẬP VÀ XUẤT

9



Nhập mảng

a[0]

a[1]

a[2]

Nhập a[0]
Nhập a[1]
Nhập a[2]

Nhập a[n-1]

a[3]

a[4]

a[5]



a[n-1]

 Nhập a[i], với 0 ≤ i ≤ n-1

10


Ví dụ nhập và xuất mảng số nguyên

#define MAX 100
void NhapKichThuoc(int &n)
{
printf("Nhap vao kich thuoc mang: ");
scanf("%d", &n);
}
void NhapMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("* Nhap vao phan tu tai vi tri %d: ",
i);
scanf("%d", &a[i]);
}
11
}


void XuatMang(int a[], int n)
{
for(int i=0; i{
printf("%d\t", a[i]);
}
}
int main()
{
int a[MAX], n;
NhapKichThuoc(n);
NhapMang(a, n);

printf("Cac gia tri trong mang a:\n");
XuatMang(a, n);
getch();
return 0;
}
12


Phát sinh ngẫu nhiên giá trị nguyên
• Sử dụng thư viện hàm <time.h> và <stdlib.h>
• Dùng hàm srand() trong hàm main() trước khi gọi hàm
phát sinh: để khởi tạo bộ giá trị ngẫu nhiên
• Dùng hàm rand()%k để phát sinh số ngẫu nhiên: có giá trị
từ 0 đến k-1

13


Ví dụ: Chương trình tạo mảng số ngun có
giá trị ngẫu nhiên từ 1 đến MAX
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#pragma warning(disable: 4996);
#define MAX 100
void NhapKichThuoc(int &n);
void PhatSinh(int a[], int n);
void XuatMang(int a[], int n);


14


void NhapKichThuoc(int &n)
{
printf("Nhap vao kich thuoc mang: ");
scanf("%d", &n);
}
void PhatSinh(int a[], int n)
{
for (int i = 0; i < n; i++)
{
a[i] = rand() % MAX + 1;
}
}
void XuatMang(int a[], int n)
{
for(int i=0; i{
printf("%d\t", a[i]);
}
}

15


int main()
{
int a[MAX], n;
NhapKichThuoc(n);

srand((unsigned int)time(NULL));
PhatSinh(a, n);
printf("Cac gia tri trong mang
a:\n");
XuatMang(a, n);
getch();
return 0;
}

16


Bài tập
Cho mảng một chiều số nguyên a, kích thước n. Hãy viết
các hàm:
1. Phát sinh giá trị các phần tử ngẫu nhiên theo thứ tự
tăng dần cho a.
2. Phát sinh giá trị các phần tử ngẫu nhiên có giá âm và
dương.

17


XUẤT CÓ ĐIỀU KIỆN

18


Liệt kê các phần tử thỏa đk cho trước


Mẫu 1:
void LietKeXXX(<KDL> a[], int n)
{
for (int i = 0; iif (a[i] thỏa điều kiện)
Xuất a[i];
}

19


Liệt kê các phần tử thỏa đk cho trước

Mẫu 2:
void LietKeXXX(<KDL> a[], int n, int x)
{
for (int i = 0; iif (a[i] thỏa điều kiện so với x)
Xuất a[i];
}

20


Ví dụ 1: Liệt kê các phần tử có giá trị chẵn trong mảng số nguyên
void LietKeChan(int a[], int n)
{
for (int i = 0; iif (a[i] %2 ==0)
printf(“%d\t”, a[i]);

}
Ví dụ 2: Liệt kê các phần tử có giá trị lớn hơn x trong mảng số nguyên
void LietKeLonHonX(int a[], int n, int x)
{
for (int i = 0; iif (a[i] > x)
printf(“%d\t”, a[i]);
}
21


Ví dụ 3: Chương trình nhập vào mảng một chiều sớ ngun a,
kích thước n. In ra các phần tử có giá trị lớn hơn x có trong mảng
#define MAX 100
void NhapKichThuoc(int &n);
void NhapMang(int a[], int n);
void XuatMang(int a[], int n);
void LietKeLonHonX(int a[], int n, int x);
void NhapKichThuoc(int &n)
{
prinft(“Nhap vao kich thuoc mang: “);
scanf(“%d”, &n);
}
void NhapMang (int a[], int n)
{
for (int i = 0; i < n; i ++)
{
printf(“Nhap phan tu tai vi tri %d: “, i);
scanf(“%d”, &a[i]);
}

}

22


void XuatMang (int a[], int n)
{
for (int i = 0; i < n; i ++)
printf(“%d\t”, a[i]);
}
void LietKeLonHonX(int a[], int n, int x)
{
for (int i = 0; iif (a[i] > x)
printf(“%d\t”, a[i]);
}

23


int main()
{
int a[MAX], n, x;
NhapKichThuoc(n);
NhapMang(a, n);
printf("Cac phan tu cua mang:\n");
XuatMang(a, n);
printf("Nhap gia tri x: “);
scanf(“%d”, &x);
printf("Cac phan tu co gia tri lon hon %d:\n", x);

LietKeLonHonX(a, n, x);
getch();
return 0;
}
24


Bài tập tại lớp
Cho mảng số nguyên a, gồm n phần tử, viết chương
trình gờm các hàm thực hiện các yêu cầu sau:
1. Nhập vào kích thước mảng (0khơng thỏa miền giá trị thì cho phép người dùng
nhập lại
2. Nhập các giá trị vào mảng một chiều a
3. Xuất các phần tử là bội số của 5 trong mảng a
4. Xuất các phần tử là số nguyên tố trong mảng a
5. Hàm main() để gọi thực hiện các yêu cầu từ 1 đến 4
25


×