30/09/2018, 20:32

Thắc mắc về mảng một chiều trong C

Mình mới học C dc tầm 4 tháng, học đến chương mảng thì hơi thắc mắc chút, có một vài câu hỏi mong mọi người trả lời cho hiểu hơn một chút mình nghĩ cũng không khó nhưng mà muốn chắc chắn hơn.

  • Mảng tĩnh với mảng một chiều giống hay khác? (mình xem ở 1 số video và web thấy có ng dạy mảng 1 chiều có ng dạy mảng tĩnh thấy code thì nó y nhau. Chắc 2 cái này là một?

  • Trước giờ viế xuất mảng và nhập mảng chỉ biết là nó sẽ nhập cái này và xuất cái này chứ ko rõ nguyên lí lo như thế nào. Là a = ? của vị trí i trong vòng lặp hay là sao… Do không hiểu nguyên lí để giờ tình cờ gặp cái đoạn mảng a[n - 1 - i] không hiểu

  • ý nói là do không hiểu code cụ thể là:… ví dụ như 1 đoạn code

void NhapMang(int n, int a[])
{
	for (int i = 0; i < n; i++)
	{
		printf("
Nhap vao mang thu [%d] ", i);
		scanf("%d", &a[i]);  // a[i] này có nghĩa là gì?
	}
}

1 câu hỏi ở phần code trên.

1 câu nữa là… vd:

 for (int i = 0 ;i < n / 2; i++)
	{
        int t = a[i];
        a[i] = a [n - 1 - i]; // dòng này nghĩa là gì? tại sao nhập n = 5 và mảng a[0] = 3 thì a[i] = 9 (mình debug thấy vậy)
        a[n - 1 - i] = t;
    }

p/s: tks trươc nha.

Bé tập Code viết 22:41 ngày 30/09/2018
  • Mảng tĩnh để phân biệt với mảng động, mảng một chiều để phân biệt với mảng hai chiều, nó là hai trường khái niệm khác nhau sau bạn lại nói là giống nhau ???

  • Câu này lủng củng quá chẳng hiểu bạn đang muốn nói và hỏi cái gì ???

Nguyễn Văn Lâm viết 22:40 ngày 30/09/2018
  • câu 1 là hỏi chứ không phải khẳng định là giống
  • câu 2 ý nói là do không hiểu code cụ thể là:… ví dụ như 1 đoạn code
void NhapMang(int n, int a[])
{
	for (int i = 0; i < n; i++)
	{
		printf("\nNhap vao mang thu [%d] ", i);
		scanf("%d", &a[i]);  // a[i] này có nghĩa là gì?
	}
}

1 câu hỏi ở phần code trên.

1 câu nữa là… vd:

    for (int i = 0 ;i < n / 2; i++)
	{
        int t = a[i];
        a[i] = a [n - 1 - i];// dòng này nghĩa là gì? tại sao nhập n = 5 và mảng a[0] = 3 thì a[i] = 9 (mình debug thấy vậy)
        a[n - 1 - i] = t;
    }
KYN viết 22:37 ngày 30/09/2018
  1. như trên

  2. ví dụ

    int a[100]; // khai báo 1 mảng tên là a, có 100 phần tử
    a[0] = 1; // gán giá trị 1 cho phần tử đầu tiên( i = 0 ) của mảng a
    a[1] = 2; // gán giá trị 2 cho phần tử thứ hai ( i = 1 ) của mảng a

    a[i] = n; // gán giá trị n cho phần tử thứ i của mảng a

    hoặc

    int a[3] = { 1, 2, 3}; // mảng có 3 phần tử, a[0] = 1, a[1] = 2, a[2] = 3

Nguyễn Văn Lâm viết 22:48 ngày 30/09/2018

chỗ này là đoạn đầu trong câu 2 rồi. Mình tks bạn. Mình mới edit lại câu hỏi cho rõ bạn xem vs trả lời giùm mình nha.

KYN viết 22:35 ngày 30/09/2018

for (int i = 0 ;i < n / 2; i++)
{
int t = a[i];
a[i] = a [n - 1 - i];// dòng này nghĩa là gì? tại sao nhập n = 5 và mảng a[0] = 3 thì a[i] = 9 (mình debug thấy vậy)
a[n - 1 - i] = t;
}

=.= mảng của bạn đã nhập giá trị ở trên rồi, các phần tử đều có giá trị rồi, 
các lệnh trong vòng lặp chỉ đổi giá trị của các phần tử trong mảng thôi. 
bạn nhập n = 5, a[0] = 3 mà a[i] = 9 thì là do bạn đã nhập 1 giá trị = 9 vào.
bạn nhập giá trị khác thì kết quả nó khác.

Mới học để hiểu rõ thì nên thử ra giấy rồi so sánh với kết quả chạy được, ví dụ 
n = 5;
a[0] = 1; 
a[1] = 2; 
a[2] = 3;
a[3] = 4; 
a[4] = 5;

bắt đầu vòng lặp
i = 0 ;  
int t = a[0] // t = 1
a[0] = a[5-1-0] = a[4] = 5;
a[4] = t = 1;
vậy mảng lúc này sẽ là 5, 2, 3, 4, 1

i = 1;
int t = a[1] // t = 2
a[1] = a[5-1-1] = a[3] = 4;
a[3] = t = 2;
vậy mảng lúc này sẽ là 5, 4, 3, 2, 1

i = 2 không thỏa mãn đk i < n/2  = 5/2 nên vòng lặp kết thúc.
Nguyễn Văn Lâm viết 22:35 ngày 30/09/2018

:v thanks ban rất dễ hiểu

Bài liên quan
0