1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng ngôn ngữ lập trình c chương 5 mảng một chiều

11 344 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 99,43 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CHƯƠNG 5: MẢNG MỘT CHIỀU• Nội dung Khái niệm Mảng một chiều Khai báo mảng Khởi tạo mảng Nhập xuất mảng Sử dụng mảng làm tham số truyền cho hàm Thuật toán sắp xếp Thuật toán tim kiếm... K

Trang 1

CHƯƠNG 5: MẢNG MỘT CHIỀU

Nội dung

Khái niệm

Mảng một chiều

Khai báo mảng

Khởi tạo mảng

Nhập xuất mảng

Sử dụng mảng làm tham số truyền cho hàm Thuật toán sắp xếp

Thuật toán tim kiếm

Trang 2

Khái niệm

Mảng là một tập hợp các biến (phần tử) có cùng một kiểu và chung một tên

Mảng một chiều

• Mảng một chiều có thể hiểu là một dãy các phần tử được sắp xếp liên tiếp nhau trong bộ nhớ

Khai báo mảng

• <tên kiểu> <tên mảng> [<kích thuớc>];

• Mỗi phần tử của mảng có thể chứa giá trị thuộc kiểu của nó đã khai báo và

nó được truy nhập theo chỉ số Chỉ số là một số nguyên được đánh số từ 0 trở đi

Ví dụ 1:

• int a[10]; /*khai báo một mảng nguyên gồm 10 phần tử, mỗi phần tử có

kiểu int.*/

• Các phần tử của mảng a được phân bố trong bộ nhớ như sau:

Trang 3

Khởi tạo mảng

• Để khởi tạo mảng ta liệt kê danh sách giá trị của chúng trong cặp dấu {}

Ví dụ 2: int a[5] = {-6, 2, 7, -10, 9};

• Kích thước mảng cần không nhỏ hơn số giá trị trong danh sách

• Tuy nhiên khi khởi tạo mảng cũng có thể không cần chỉ ra kích thước của

nó, khi đó máy sẽ dành cho mảng một khoảng nhớ đủ để thu nhận danh sách giá trị khởi tạo

Ví dụ 3: float a[] = {4.2, 5,8, 3.9, 10};

• Khi đó số phần tử của mảng có thể được tính bởi công thức sau:

• n = sizeof(a)/sizeof(float);

Toán tử sizeof cho biết kích cỡ (tính theo byte) của một kiểu dữ liệu hay

một đối tượng dữ liệu

Trang 4

Nhập xuất mảng

Ví dụ 4:

• #define SIZE 20

• void main()

• { int a[SIZE]; // khai báo một mảng nguyên gồm SIZE phần tử

• int n; // lưu số phần tử mảng

• do { printf(“Nhap so phan tu:”);

• } while(n < 1 || n > SIZE);

• for(i = 0; i < n; i++) { // nhập dữ liệu cho mảng từ bàn phím

• printf(“pt thu %d:”, i);

• scanf(“%d”, &a[i]);

• for(i = 0; i < n; i++) // xuất dữ liệu của mảng ra màn hình

• printf(“\n”);

• }

Trang 5

Sử dụng mảng làm tham số truyền cho hàm

 Theo C tên mảng là một hằng địa chỉ và nó chính là địa chỉ phần tử đầu tiên của mảng

Ví dụ 5:

• int a[20]

• Với khai báo trên a tương đương với &a[0]

 Khi dùng mảng làm tham số truyền cho hàm thì thực chất là địa chỉ phần tử đầu tiên của mảng được truyền cho hàm Do đó đối số của hàm phải viết dưới dạng một con trỏ

Trang 6

Ví dụ 6:

• #define SIZE 20

• // khai báo nguyên mẫu hàm

• void Nhap(int *a, int *n);

• void Xuât(int *a, int n);

• // định nghĩa hàm

• void Nhap(int *a, int *n)

• printf(“Nhập so phan tu:”);

• scanf(“%d”, &(*n));

• } while(*n < 1 || *n > SIZE);

• for(i = 0; i < *n; i++)

• printf(“pt thu %d:”, i);

• scanf(“%d”, &a[i]);

• }

Trang 7

• void Xuat(int *a, int n)

• {

• for(i = 0; i < n; i++)

• printf(“\n”);

• }

• void main()

• { int a[SIZE];

• Nhap(a, &n);

• Xuat(a, n);

• }

Chú ý: Đối số thứ nhất của hai hàm trên có thể khai báo như một mảng

hình thức như sau:

• void Nhap(int a[], int *n);

• void Xuât(int a[], int n);

Trang 8

Thuật toán sắp xếp mảng

• Ý tưởng của thuật toán là bắt đầu từ phần tử đầu tiên so sánh với các phần

tử còn lại nếu thỏa điều kiện so sánh thì hoán vị hai phần tử đó với nhau, tiếp tục đến phần tử kế tiếp so sánh với các phần tử còn lại cho đến khi gặp phần tử cuối cùng, vì sau phần tử cuối cùng không còn phần tử nào để so sánh Việc sắp xếp hoàn tất

Ví dụ 7: Sắp xếp tăng

Trang 9

• void SapXepTang(int a[], int n)

• {

• int i, j;

• for(i = 0; i < n - 1; i++)

• for(j = i + 1; j <n; j++) {

• if(a[i] > a[j]) { //so sánh a[i] và a[j]

• }

Trang 10

Thuật toán tìm kiếm

• Giả sử cần tìm một phần tử có giá trị là x trong một mảng nguyên (x gọi là khóa tìm kiếm)

Tìm kiếm tuyến tính

• Thuật toán tiến hành so sánh x với các phần tử thứ 0, phần tử thứ 1, … của mảng cho đến khi gặp được phần tử có khóa cần tìm hoặc đã tìm hết mảng

mà không thấy x

• int LinearSearch(int a[], int n, int x)

• {

• for(i = 0; i < n; i++)

• if(a[i] == x) return i; // tìm thấy tại ví trí i

• return -1; //không tìm thấy

• }

Trang 11

Tìm kiếm nhị phân

• Thuật toán này chỉ áp dụng cho mảng đã có thứ tự tăng Ý tưởng của thuật toán là tại mỗi bước ta tiến hành so sánh với phần tử nằm ở vị trí giữa của dãy tìm kiếm hiện hành, dựa vào kết quả so sánh này để quyết định giới hạn dãy tìm kiếm ở bước kế tiếp là nửa trên hay nửa dưới của dãy tìm kiếm hiện hành

• int BinarySearch(int a[], int n, int x)

• {

• int dau = 0, cuoi = n-1;

• while(dau <= cuoi)

• if(a[giua] == x) return(giua);

• if(x < a[giua]) cuoi = giua – 1;

• reutrn -1;

• }

Ngày đăng: 03/12/2015, 20:45

HÌNH ẢNH LIÊN QUAN

Hình  thức như sau: - Bài giảng ngôn ngữ lập trình c   chương 5  mảng một chiều
nh thức như sau: (Trang 7)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm