Mảng trong lập trình C

97
Mảng trong lập trình C

Mục tiêu của bài học

  • Các phần tử của mảng và các chỉ số
  • Khai báo mảng
  • Cách quản lý mảng trong C
  • Cách khởi tạo mảng
  • Tìm hiểu chuỗi / mảng ký tự
  • Tìm hiểu mảng hai chiều
  • Cách khởi tạo mảng hai chiều

Khai báo mảng

Các đặc tính riêng của mảng cần được định nghĩa.

<kieu-dl> <tenmang> [<so phantutrongmang>]
  • Kiểu dữ liệu của các phần tử : int, char, float hoặc double
  • Tên mảng: tuân theo qui tắc đặt tên biến
  • Kích thước mảng: một hằng số khi biên dịch

Ví dụ:

int player[11];

Các qui tắc

  • Các phần tử của mảng có cùng kiểu dữ liệu
  • Mỗi phần tử của mảng có thể được sử dụng như một biến riêng lẻ

Các phần tử và chỉ số của mảng

  • Mỗi phần tử được xác định bằng một số thứ tự (còn gọi là chỉ số) duy nhất trong mảng
  • Chỉ số là một số nguyên dương trong [ ] đặt ngay sau tên mảng
  • Chỉ số của mảng (trong C) được bắt đầu là 0

Ví dụ: Mảng player khai báo ở trên có các ptử sau

player[0], player[1], player[2],…. player[10]

Quản lý mảng trong C

  • Trong ngôn ngữ C, mảng được “đối xử” không giống hoàn toàn với biến
  • Hai mảng có cùng kiểu và cùng kích thước cũng không được xem là tương đương nhau
  • Không thể gán trực tiếp một mảng cho một mảng khác.
  • Không thể gán trị cho toàn bộ mảng, mà phải gán trị cho từng phần tử của mảng
/*Input values are accepted from the user into the array ary[10]*/
#include <stdio.h>
void main(){
int ary[10];
int i, total, high;
for(i=0; i<10; i++) {
printf(“\n Enter value: %d : ”, i+1);
scanf(“%d”,&ary[i]);
}

 

 

/* Displays highest of the entered values */
high = ary[0];
for(i=1; i<10; i++){
if(ary[i] > high) high = ary[i];
}
printf(“\nHighest value entered was %d”, high);
/* prints average of values entered for ary[10] */
for(i=0,total=0; i<10; i++) total = total + ary[i];
printf(“\nThe average of the elements of ary is%d”,total/i);
}

Khởi tạo mảng

  • Mỗi phần tử của một mảng auto cần được khởi tạo riêng rẽ.
  • Trong ví dụ sau các phần tử của mảng được gán giá trị bằng cách sử dụng vòng lặp for
#include <stdio.h>
void main() {
char alpha[26];
int i, j;
for(i=65,j=0; i<91; i++,j++) {
alpha[j] = i;
printf(“The character now assigned is%c\n”,alpha[j]);
}
getchar();
}
  • Trong trường hợp mảng extern và static, các phần tử được tự động khởi tạo với giá trị 0

Chuỗi/Mảng ký tự

  • Chuỗi có thể được định nghĩa như là một mảng kiểu ký tự, được kết thúc bằng ký tự null
  • Mỗi ký tự trong chuỗi chiếm một byte và ký tự cuối cùng của chuỗi là “\0” (null)
  • Ví dụ:
#include <stdio.h>
void main(){
char ary[5];
int i;
printf(“\n Enter string : “);
scanf(“%s”,ary);
printf(“\n The string is %s \n\n”,ary);
for (i=0; i<5; i++)
printf(“\t%d”, ary[i]);
}

Chạy chương trình:
Enter string:
Nếu dữ liệu nhập là “appl”, output của chương trình là:
The string is appl
97 112 112 108 0​

Các hàm xử lý chuỗi

Các hàm xử lý chuỗi được tìm thấy trong thư viện chuẩn <string.h>

Mảng trong lập trình C - 01

Mảng hai chiều

  • Mảng đa chiều đơn giản nhất và thường được dùng nhất là mảng hai chiều
  • Mảng hai chiều có thể xem như là một mảng với mỗi phần tử là mảng một chiều
  • Về logic, một mảng hai chiều trông giống như một bảng lịch trình xe lửa, gồm các dòng và các cột
  • Khai báo mảng hai chiều:
int temp[4][3];
  • Khởi tạo mảng đa chiều
int ary[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};

Kết quả của phép gán trên như sau:

Mảng trong lập trình C - 02

int ary[3][4] ={{1,2,3},{4,5,6},{7,8,3}};

Kết quả của phép gán trên như sau:

Mảng trong lập trình C - 03

Một mảng chuỗi hai chiều được khai báo theo cách sau:

char str_ary[25][80];