Thứ Tư, 4 tháng 2, 2015

Mảng dữ liệu số trong C - array in C

Mảng dữ liệu số trong C - array in C

đây là bài viết về các mảng aray trong C các bạn có thể tải trước bài tập và code mình làm sẵn TẠI ĐÂY để tiện theo dõi bài viết:

đây là bài viết về mảng 1 chiều nếu các bạn chưa chắc về kiến thức về vòng lặp thì nên tham khảo lại TẠI ĐÂY . chúc các bạn vui vẻ.

lý thuyết Mảng:

đọc xong bài này, các bạn sẽ nắm được các vấn đề sau:
• Khái niệm về kiểu dữ liệu mảng cũng như ứng dụng của nó.
• Cách khai báo biến kiểu mảng và các phép toán trên các phần tử của mảng.

I. GIỚI THIỆU KIỂU DỮ LIỆU “KIỂU MẢNG”TRONG C


            Mảng là một tập hợp các phần tử cố định có cùng một kiểu, gọi là kiểu phần tử.
Kiểu phần tử có thể là có các kiểu bất kỳ: ký tự, số, chuỗi ký tự…; cũng có khi ta sử
dụng kiểu mảng để làm kiểu phần tử cho một mảng (trong trường hợp này ta gọi là
mảng của mảng hay mảng nhiều chiều).

            Ta có thể chia mảng làm 2 loại: mảng 1 chiều và mảng nhiều chiều.

            Mảng là kiểu dữ liệu được sử dụng rất thường xuyên. Chẳng hạn người ta cần
quản lý một danh sách họ và tên của khoảng 100 sinh viên trong một lớp. Nhận thấy
rằng mỗi họ và tên để lưu trữ ta cần 1 biến kiểu chuỗi, như vậy 100 họ và tên thì cần
khai báo 100 biến kiểu chuỗi. Nếu khai báo như thế này thì đoạn khai báo cũng như
các thao tác trên các họ tên sẽ rất dài dòng và rắc rối. Vì thế, kiểu dữ liệu mảng giúp
ích ta trong trường hợp này; chỉ cần khai báo 1 biến, biến này có thể coi như là tương
đương với 100 biến chuỗi ký tự; đó là 1 mảng mà các phần tử của nó là chuỗi ký tự.
Hay như để lưu trữ các từ khóa của ngôn ngữ lập trình C, ta cũng dùng đến một mảng
để lưu trữ chúng.

II. MẢNG 1 CHIỀU

           Nếu xét dưới góc độ toán học, mảng 1 chiều giống như một vector. Mỗi phần tử của mảng
một chiều có giá trị không phải là một mảng khác.

II.1. Khai báo

II.1.1. Khai báo mảng với số phần tử xác định (khai báo tường minh)
Cú pháp:
<Kiểu> <Tên mảng ><[số phần tử]>
Ý nghĩa:
- Tên mảng: đây là một cái tên đặt đúng theo quy tắc đặt tên của danh biểu. Tên này
cũng mang ý nghĩa là tên biến mảng.
- Số phần tử: là một hằng số nguyên, cho biết số lượng phần tử tối đa trong mảng là
bao nhiêu (hay nói khác đi kích thước của mảng là gì).
- Kiểu: mỗi phần tử của mảng có dữ liệu thuộc kiểu gì.
- Ở đây, ta khai báo một biến mảng gồm có số phần tử phần tử, phần tử thứ nhất là
tên mảng [0], phần tử cuối cùng là tên mảng[số phần tử -1]

Ví dụ:
int a[10]; /* Khai báo biến mảng tên a, phần tử thứ nhất là a[0], phần tử cuối cùng là a[9].*/
Ta có thể coi mảng a là một dãy liên tiếp các phần tử trong bộ nhớ như sau:

Vị trí                 0      1   2     3      4     5      6     7     8     9
Tên phần tử   a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]


II.1.2. Khai báo mảng với số phần tử không xác định (khai báo không tường
minh)

Cú pháp: 
<Kiểu> <Tên mảng> <[]>
        Khi khai báo, không cho biết rõ số phần tử của mảng, kiểu khai báo này thường được
áp dụng trong các trường hợp: vừa khai báo vừa gán giá trị, khai báo mảng là tham số hình
thức của hàm.
     a. Vừa khai báo vừa gán giá trị

Cú pháp:
<Kiểu> <Tên mảng> []= {Các giá trị cách nhau bởi dấu phẩy}
          Nếu vừa khai báo vừa gán giá trị thì mặc nhiên C sẽ hiểu số phần tử của mảng là số
giá trị mà chúng ta gán cho mảng trong cặp dấu {}. Chúng ta có thể sử dụng hàm sizeof()
để lấy số phần tử của mảng như sau:

          Số phần tử=sizeof(tên mảng)/ sizeof(kiểu)
           b. Khai báo mảng là tham số hình thức của hàm, trong trường hợp này ta không cần
chỉ định số phần tử của mảng là bao nhiêu.

II.2 Truy xuất từng phần tử của mảng

      Mỗi phần tử của mảng được truy xuất thông qua Tên biến mảng theo sau là chỉ số
nằm trong cặp dấu ngoặc vuông [ ]. Chẳng hạn a[0] là phần tử đầu tiên của mảng a được khai
báo ở trên. Chỉ số của phần tử mảng là một biểu thức mà giá trị là kiểu số nguyên.
Với cách truy xuất theo kiểu này, Tên biến mảng[Chỉ số] có thể coi như là một biến
có kiểu dữ liệu là kiểu được chỉ ra trong khai báo biến mảng.
Ví dụ
int a[10];

Trong khai báo này, việc truy xuất các phần tử được chỉ ra trong hình 1. Chẳng hạn
phần tử thứ 2 (có vị trí 1) là a[1]…


bài tập luyện tập:

Bài 1. Write a program that asks the user to type 10 integers of an array. The program must compute and write how many integers are greater than or equal to 10.


1. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng. Chương trình phải tính toán và viết bao nhiêu số nguyên lớn hơn hoặc bằng 10.

code:


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

/* Write a program that asks the user to type 10 integers of an array. The program must compute 
and write how many integers are greater than or equal to 10 */

int main(int argc, char *argv[]) {
 int a[10],i,t;
 for (i=0;i<10;i++) {
  printf("A[%d]= ",i+1);
  scanf("%d",&a[i]);
 }
 t=0;
 for (i=0;i<10;i++){
  if (a[i] > 10) t = t +1; 
 }
 printf("tong so lon hon 10 la: %d",t);
 
 printf("\n\n\n");
 system("pause");
 return 0;
}

dem-so-lon-hon-10
đếm số lớn hơn 10


bài 2. Write a program that asks the user to type 10 integers of an array. The program must output the largest element in the array, and the index at which that element was found.

2. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng. Sản lượng chương trình phải là yếu tố lớn nhất trong mảng, và các chỉ số mà tại đó yếu tố đó đã được tìm thấy.

code:

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

/* Write a program that asks the user to type 10 integers of an array.
 The program must output the largest element in the array, 
 and the index at which that element was found */

int main(int argc, char *argv[]) {
  int a[10],i,m;
 for (i=0;i<10;i++) {
  printf("A[%d]= ",i+1);
  scanf("%d",&a[i]);
 }
 m=a[0];
 for (i=0;i<10;i++) if (m<a[i]) m=a[i];
 printf("\nso lon nhat la: %d\nla nhung so tai vi tri: ",m);
 for (i=0;i<10;i++) if (m==a[i]) printf("%d  ",i+1);  
 printf("\n\n\n");
 system("pause");
 return 0;
}
tim-vi-tri-so-lon-nhat
tìm vị trí số lớn nhất


Bài 3. Input values are accepted from the user into the array. Displays highest of the entered values. Prints average of values entered.

3. Giá trị đầu vào được chấp nhận từ người sử dụng vào mảng. Hiển thị cao nhất của các giá trị nhập vào. In trung bình của các giá trị nhập vào.

code:


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

/* Input values are accepted from the user into the array. Displays highest of the entered values. Prints average of values entered */

int main(int argc, char *argv[]) {
 int s;
 printf("so gia tri ban muon co trong mang: ");
 scanf("%d",&s);
 int a[s],i,j,m,t;
 for (i=0; i<s; i++){
  printf("A[%d]= ",i+1);
  scanf("%d",&a[i]);
 }
 m=a[0];
 t=0;
 for (i=0;i<s;i++){
  t=t+a[i];   
  if (m<a[i]) m=a[i];
 }
 printf("\nso lon nhat la: %d: ",m);
 printf("\nso trung binh cong la: %d",t/i); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
lon-nhat-trung-binh-cong
số lớn nhất và số TBC

Bài 4: Write a program that accepts the following numbers in an array and reverses the array


5: Viết chương trình chấp nhận những con số sau đây trong một mảng và đảo ngược mảng


code:


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

/* Write a program that accepts the following numbers in an array and reverses the array */

int main(int argc, char *argv[]) {
 int s;
 printf("nhap so luong cac gia tri trong mang: ");
 scanf("%d",&s);
 int a[s],b[s],i;
 for (i=0;i<s;i++){
  printf("A[%d]= ", i+1);
  scanf("%d",&a[i]);
  b[s-i-1] = a[i];                                                                                                                                           
 }
 printf("\n");
 for (i=0;i<s;i++) printf("A[%d]= %d\t",i+1,a[i]);
 printf("\n");
 for (i=0;i<s;i++) printf("B[%d]= %d\t",i+1,b[i]);
 printf("\n\n\n");
 system("pause");
 return 0;
}

in-nguoc-mang
in ngược mảng



5. Write a program to count the number of vowels in a line of text


5. Viết chương trình đếm số lượng các nguyên âm trong một dòng văn bản

code:


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

/*  Write a program to count the number of vowels in a line of text */

int main(int argc, char *argv[]) {
 char s[50];
 int i,j;
 printf("vao 1 chuoi: ");
 gets(s);
 j=0;
 for (i=0; s[i]!='\0';i++){
  if (s[i]=='u' || s[i]=='e' || s[i]=='o' || s[i]=='a' || s[i]=='i') j=j+1;
 }
 printf("tong cac chu cai la nguyen am la: %d",j); 
 printf("\n\n\n");
 system("pause");
 return 0;
}

dem-nguyen-am
đếm nguyên âm

6. Write a program that asks the user to type 10 integers of an array and an integer V. The program must search if V is in the array of 10 integers. The program writes "V is in the array" or "V is not in the array"


6. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng và một số nguyên V. Chương trình phải tìm kiếm nếu V là trong mảng 10 số nguyên. Chương trình viết "V là trong mảng" hoặc "V không phải là trong mảng".


code:


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

/* Write a program that asks the user to type 10 integers of an array and an integer V. 
The program must search if V is in the array of 10 integers. 
The program writes "V is in the array" or "V is not in the array" */

int main(int argc, char *argv[]) {
 int a[10],i,b,v;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 printf("nhap V= ");
 scanf("%d",&v);
 b=0;
 for(i=0;i<10;i++) if(v==a[i]) b=1;
 if (b==1) printf ("V is in the array"); else printf ("V is not in the array"); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
kiem-tra
kiểm tra 

Bài 7. Write a program that asks the user to type 10 integers of an array and an integer value V. The program must search if the value V exists in the array and must remove the first occurrence of V, shifting each following element left and adding a zero at the end of the array. The program must then write the final array


7. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng và một số nguyên V. Chương trình phải tìm kiếm nếu giá trị V tồn tại trong mảng và phải loại bỏ sự xuất hiện đầu tiên của V, chuyển mỗi yếu tố sau đây trái và thêm một số không ở cuối mảng. Sau đó chương trình phải viết các mảng thức

code:


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

/* Write a program that asks the user to type 10 integers 
of an array and an integer value V. The program must search 
if the value V exists in the array and must remove the first occurrence of V,
 shifting each following element left and adding a zero at the end of the array. 
 The program must then write the final array */

int main(int argc, char *argv[]) {
  int a[10],i,b,v;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 printf("nhap V= ");
 scanf("%d",&v);
 for(i=0;i<10;i++) if(v==a[i]) break;
 for (i;i<10;i++) a[i]=a[i+1];
 a[9]=0; printf("\n\n\n");
 for (i=0;i<10;i++) printf("%d  ",a[i]);
 
 printf("\n\n\n");
 system("pause");
 return 0;
}
them-phan-tu-vao-mang
thêm phần tử vào mảng


Bài 8. Write a program that asks the user to type 10 integers of an array and an integer value V and an index value i between 0 and 9. The program must put the value V at the place i in the array, shifting each element right and dropping off the last element. The program must then write the final array


8. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng và một số nguyên V và một giá trị chỉ số i giữa 0 và 9. Chương trình phải đặt giá trị V tại nơi i trong mảng, mỗi phần tử chuyển quyền và thả ra khỏi phần tử cuối cùng. Sau đó chương trình phải viết các mảng thức

code:


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

/* Write a program that asks the user to type 10 integers of 
an array and an integer value V and an index value i between 0 and 9. 
The program must put the value V at the place i in the array, shifting 
each element right and dropping off the last element. 
The program must then write the final array */

int main(int argc, char *argv[]) {
 int a[10],i,b,v,j;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 printf("nhap V= ");
 scanf("%d",&v); 
 printf("nhap i= ");
 scanf("%d",&j);
 j=j-1;
 printf("\n\n\n");
 for (i=0;i<10;i++) printf("%d ",a[i]); 
 for(i=9;i>j;i=i-1)  a[i]=a[i-1]; 
 a[j]=v; printf("\n\n\n");
 for (i=0;i<10;i++) printf("%d ",a[i]); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
them-vao-vi-tri
Thêm V vào vị trí i


Bài 9. Write a program that asks the user to type 10 integers of an array. The program will then display either "the array is growing", "the array is decreasing", "the array is constant", or "the array is growing and decreasing."

9. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng. Chương trình sau đó sẽ hiển thị hoặc là "mảng đang phát triển", "mảng đang giảm", "mảng là liên tục", hoặc "mảng đang phát triển và giảm."

code:


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

/* Write a program that asks the user to type 10 integers of an array. 
The program will then display either "the array is growing", "the array is decreasing", 
"the array is constant", or "the array is growing and decreasing". */

int main(int argc, char *argv[]) { 
 int a[10],i,j,k,l;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 j=k=l=0;
 for (i=0;i<9;i++){
  if (a[i] > a[i+1]) j=j+1;
  if (a[i] < a[i+1]) k=k+1;
  if (a[i]==a[i+1]) l=l+1;
 }
 if (k==9) printf("the array is growing");
 else  if (j==9) printf("the array is decreasing");
    else  if (l==9) printf("the array is constant");
      else printf("the array is growing and decreasing");
 printf("\n\n\n");
 system("pause");
 return 0;
}
xac-dinh-mang
xác định mảng

10. Write a program that asks the user to type 10 integers of an array. The program will then sort the array in descending order and display it.

10. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng. Chương trình sau đó sẽ sắp xếp mảng theo thứ tự và hiển thị nó.

code:


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

/* Write a program that asks the user to type 10 integers of an array. 
The program will then sort the array in descending order and display it. */

int main(int argc, char *argv[]) { 
 int a[10],i,j,k;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 for (i=0;i<10;i++) for(j=0;j<10;j++) if (a[i]<a[j]) {
  k=a[i];
  a[i]=a[j];
  a[j]=k;
 }
 for(i=0;i<10;i++)printf ("%d  ",a[i]); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
sap-xep-mang
sắp xếp mảng


11. Write a program which takes 2 arrays of 10 integers each, a and b. c is an array with 20 integers. The program should put into c the appending of b to a, the first 10 integers of c from array a, the latter 10 from b. Then the program should display c.

11. Viết một chương trình trong đó có 2 mảng 10 số nguyên mỗi a và b. c là một mảng với 20 số nguyên. Chương trình này nên đưa vào c các phụ thêm của b cho a, 10 số nguyên đầu tiên của c từ mảng một, sau 10 từ b. Sau đó chương trình sẽ hiển thị c.


code:


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

/* Write a program which takes 2 arrays of 10 integers each, a and b. 
c is an array with 20 integers. The program should put into c the appending of b to a, 
the first 10 integers of c from array a, the latter 10 from b. Then the program should display c */

int main(int argc, char *argv[]) { 
 int a[20],i; 
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }  
 for(i=10;i<20;i++){
  printf("B[%d]=",i-9);
  scanf("%d",&a[i]);
 }  
 for(i=0;i<20;i++) printf("C[%d]=%d\t",i+1,a[i]); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
cong-mang
cộng mảng

kết luận: trên đây là kiến thức về mảng số 1 chiều... chúc các bạn thành công trong các bài tập trên :v :v

Không có nhận xét nào:

Đăng nhận xét