Video Ngôn Ngữ C - 09 - Mảng số tự nhiên

Sao e chạy thì bị lỗi nhỉ , làm giống video cũng bị ko hiểu tại sao ?
p/s: đã chạy được do nhầm lẫn giữa {} với () ^^

2 Likes

Trong video này không thấy @ltd nhắc đến việc gán giá trị cho mảng như thế nào nhỉ? chỉ có khai báo và truy xuất giá trị mảng.

@ltd có thể nói thêm về điểm này không? Thanks. :slight_smile:

Gán giá trị cho mảng hình như video sau có nói :smile:

Gán thì cũng giống như lấy ra. Nếu ta có mảng int so_nguyen[10] trong đó so_nguyen là tên mảng, 10 là số phần tử, int là mảng kiểu int. Việc gán giá trị có thể thực hiện như sau:

so_nguyen[i] = 3;

Trong đó i là số từ 0 tới 9.

Hoặc mảng cũng có thể khởi tạo giá trị ngay khi mình khai báo bằng cách

songuyen[10] = {1,2,3,4,5,6,7,8,9,10};
songuyen[10] = {1,2,3,4,5};
songuyen[10] = {};
songuyen[10];

Thử in toàn bộ giá trị của mảng ra là mình hiểu được mỗi cách khởi tạo có điểm khác nhau như thế nào thôi :smile:

Chắc bên phần C++ có nói về cái này rõ hơn

1 Like

Phần này phải dùng ví dụ thì mới dễ hiểu được.Mình xin lấy một ví dụ cụ thể như sau:

#include<stdio.h>
int main()
{
    int so_tu_nhien[10];
    int i;
    for(i=0; i<10; i++)
    {
        so_tu_nhien[i]=i;
        printf("%d\n",a[i]);
    }
    return 0;
}

Trong ví dụ trên mình tạo một mảng số nguyên gồm 10 phần tử: so_tu_nhien[10] và dùng vòng lặp for để gán giá trị cho 10 phần tử của mảng.
Ở đây mình xin nói rõ hơn về mảng so_tu_nhien[10].so_tu_nhien[10] là mảng gồm 10 phần tử đều là số nguyên:so_tu_nhien[0],so_tu_nhien[1],so_tu_nhien[2],so_tu_nhien[3],....,so_tu_nhien[9]. mình cũng có thể gán giá trị cho các phần tử của mảng so_tu_nhien[10] theo cách sau:

#include<stdio.h>
int main()
{
    int so_tu_nhien[10];
    int i;
    so_tu_nhien[0]=1;
    so_tu_nhien[1]=2;
    so_tu_nhien[2]=3;
    so_tu_nhien[3]=4;
    so_tu_nhien[4]=5;
    so_tu_nhien[5]=6;
    so_tu_nhien[6]=7;
    so_tu_nhien[7]=8;
    so_tu_nhien[8]=9;
    so_tu_nhien[9]=10;
    for(i=1; i<10; i++)
        printf("so_tu_nhien[%d]=%d\n",i-1,i);
    return 0;
}
3 Likes

Cho e hỏi là làm sao để yêu cầu nhập số phần tử của mảng từ bàn phím ạ?

#include <stdio.h>    
#include <stdlib.h>

int main()
{
    int n=0,i=1;
    printf("nhap so phan tu ban muon");
    scanf("%d",&n);
    int x[n]={};
    while (i-1<n)
    {
        printf("Nhap vao phan tu thu %d \t ",i);
        scanf("%d ",&x[i]);
        printf("%d",x[i]);
        i++;
    }

    return 0;
}

Code của bạn bị lỗi rồi.
1.

int x[n]={};

Dòng lệnh trên bạn viết sai cú pháp rồi.Khi khai báo mảng một chiều thì số phần tử của mảng phải là một hằng số nguyên.Ví dụ:

int x[100];

hoặc:

const int n=100;
int x[n];

Bạn dùng biến i truy cập đến các phần tử của mảng x nhưng bạn lại khai báo khai báo:

int i=1;

thì bạn đã bỏ qua phần tử x[0] của mảng x rồi.Bạn cần xem lại bài giảng:


Mình sửa lại code của bạn như sau:

#include <stdio.h>    
int main()
{
	int soPhanTu=0,i=0,soNguyen[100]={};
	printf("Nhap so phan tu cua mang: ");
	scanf("%d",&soPhanTu);
    while (i<soPhanTu)
    {
		if(i==0)
			printf("Nhap gia tri cua cac phan tu trong mang:\n");
        printf("Nhap vao phan tu thu %d:",i+1);
        scanf("%d",&soNguyen[i]);
        i++;
    }
	i=0;
	while(i<soPhanTu){
		if(i==0)
			printf("Gia tri cua cac phan tu co trong mang la:\n");
		printf("soNguyen[%d]=%d\n",i,soNguyen[i]);
		i++;
	}
    return 0;
}

Còn nếu như bạn muốn nhập số phần tử từ bàn phím thì phải dùng cấp phát động.Ở đây mình đưa code nhưng bạn nên xem video của anh Đạt về phần cấp phát động

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int soPhanTu=0,i=0,*soNguyen;
	printf("Nhap so phan tu cua mang: ");
	scanf("%d",&soPhanTu);
	soNguyen=(int*)malloc(sizeof(int)*soPhanTu);
    while (i<soPhanTu)
    {
		if(i==0)
			printf("Nhap gia tri cua cac phan tu trong mang:\n");
        printf("Nhap vao phan tu thu %d:",i+1);
        scanf("%d",&soNguyen[i]);
        i++;
    }
	i=0;
	while(i<soPhanTu){
		if(i==0)
			printf("Gia tri cua cac phan tu co trong mang la:\n");
		printf("soNguyen[%d]=%d\n",i,soNguyen[i]);
		i++;
	}
	free(soNguyen);
    return 0;
}

Video C++ Bài 40 - Cấp phát động

2 Likes

Mình hiểu rồi. Cảm ơn bạn nhiều lắm :smiley: .

1 Like

Mình copy nhầm nên cả 2 đoạn code giống hệt.Sorry nha,mình mới sửa lại rồi.

1 Like
#include <stdio.h>
#include <stdlib.h>
/*
 * Mạng Số Tự Nhiên
 */
int main()
{
    int so_chan[5] = {0, 2, 4};
    float so_le[5] = {1.5, 3.5, 5.5, 7.5, 9.5};
    printf("so le %0.1f %0.1f %0.1f %0.1f %0.1f\n", so_le[0], so_le[1], so_le[2], so_le[3], so_le[4]);
    printf("so chan %d %d %d %d %d\n", so_chan[0], so_chan[1], so_chan[2], so_chan[3], so_chan[4]);
    return 0;
}

/*Giai thich: vì trong phần tử của int so_chan từ 0 đến 4 gồm có ba phần tử

  • nhưng khi khai báo lại 5 phần vì vậy compile sẽ hiểu là so_chan[3] và [4] là 0 */

Anh @ltd cho em hỏi
Vd em có cái mảnh số

int i[]={3,5,3,2,5,3,5,3,34,5,3,553,53,0,54,34,....};

Vậy làm sao em biết đc mảng đó có bao nhiêu phần tử.
Cảm ơn!

số lượng phần tử của mảng bằng kích thước của nó chia số kích thước của một phần tử

sizeof(i) / sizeof(int)

1 Like

cho em hỏi kích thước có phải là số vị trí trên ram mà ram cấp cho biến lúc mình build ko anh?

Có thể hiểu như vậy. Nhưng nguyên tắc hoạt động của RAM và hệ điều hành phức tạp hơn vậy. Tuy nhiên, ở mặt trừu tượng, em hiểu như vậy hoàn toàn đúng.

1 Like

Viết hơi dài thì phải. Mình viết lại thế này nhé:blush:

int main()
{
    int so_tu_nhien[10] = {1,2,3,4,5,6,7,8,9,10};
    int i=0;
    for(i=0;i<10;i++){
    printf("so_tu_nhien[%d]=%d\n",i,so_tu_nhien[i]);
    }
    return 0;
}

Anh Đạt ơi! Anh có thể hướng dẫn e cái bài tập 1 trong video dc k ạ? Em làm quài mà nó k hiện số 1 với 3?

Anh ơi cho em hỏi…không biết lý do ts Codeblock bị lỗi này v a…các code khác vẫn chạy bình thường.nhưng khi e chạy thử code này thì lại báo lỗi

Anh ơi tại sao mình làm 2 bài một lúc khi in ra kết quả lại nằm 1 hàng vậy ạ

Bài làm:
int so_le[5] = {1, 3, 5};
printf(“so_le %d %d %d %d %d/n”, so_le[0], so_le[1], so_le[2], so_le[3], so_le[4]);
float so_chan[5] = {0.1, 2.2, 4.4, 6.6, 8.8};
printf(“so_chan %0.1f %0.1f %0.1f %0.1f %0.1f/n”, so_chan[0], so_chan[1], so_chan[2], so_chan[3], so_chan[4]);
return 0;
}
Kết quả:

Dư 1 dấu phẩy ở cuối gần dấu ngoặc kìa bạn

1 Like

Ok được rồi anh tcm nhé cảm ơn anh nhé.

Bạn phải chèn thêm ký tự \n vào sau %d chứ không phải là /n nhen :smiley:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?