Để làm chủ ngôn ngữ lập trình C++, sử dụng mảng 1 chiều là một trong những kỹ năng thiết yếu nhất. Bài viết này sẽ giúp những bạn nào đang cảm thấy “lạc trôi” khi học lập trình cơ bản nắm được cách giải quyết các bài tập mảng 1 chiều C++ có lời giải.
Comparison of Nasal Steroids After FESS in CRSwNP – Full Text View – ClinicalTrials.gov testogel uk buy the future of pharma: how we could soon be prescribed personalised 4d printed drugs
Một số khái niệm về C++ cần nhớ
C++ là gì?
C++ nằm trong top 3 ngôn ngữ lập trình phổ biến nhất thế giới, hỗ trợ hầu như tất cả các phương pháp lập trình hiện nay như lập trình hướng thủ tục, lập trình hướng đối tượng, lập trình hướng module. Ngôn ngữ lập trình C++ được ra đời vào năm 1983 do nhà khoa học Bjarne Stroustrup nghiên cứu và cải tiến từ ngôn ngữ lập trình C. Do đó C++ gần như kế thừa toàn bộ các thuộc tính của C, đồng thời được nâng cấp và bổ sung nhiều chức năng tân tiến hơn.
Khái niệm mảng 1 chiều C++
Mảng 1 chiều (tiếng anh là One-Dimensional Array) là một loại cấu trúc dữ liệu trong ngôn ngữ lập trình C++, có chức năng lưu trữ một tập hợp gồm các phần tử (cùng kiểu dữ liệu), với độ dài cố định.
Mảng có kích thước là n sẽ có chỉ số chạy từ 0 đến n – 1. Ví dụ, với n = 5, khi đó các chỉ số của mảng sẽ có giá trị từ 0 tới 4 (tức 5 -1) tương ứng với 5 phần tử. Các phần tử trong mảng được gọi tên bằng code <em>array_name[index].
Bài tập mảng 1 chiều C++ có lời giải
Dưới đây là bài tập tổng hợp mang tính “kinh điển” về mảng 1 chiều trong lập trình C++.
Đề bài: Nhập từ bàn phím mảng số nguyên gồm n phần tử.
- Tính giá trị trung bình cộng của các số lẻ ở vị trí chẵn
- Tìm số lớn nhất trong mảng vừa nhập
- Tìm số nhỏ nhất trong mảng
- Đếm các số chính phương có trong mảng
- Hiển thị các số nguyên tố có trong mảng lên màn hình
- Thay thế các phần tử có giá trị âm trong mảng bằng số 0
- Xóa các phần tử âm có trong mảng
- Sắp xếp mảng đã nhập theo thứ tự tăng dần.
Lời giải:
- #include <stdio.h>
- #include <math.h> // Su dung ham sqrt
- const int MAX = 100000;
- int arr[MAX];
- int main(){
- int n;
- printf(“\nNhap so luong phan tu n = “);
- scanf(“%d”, &n);
- // Nhap mang
- for(int i = 0;i < n; ++i){
- printf(“\nNhap a[%d] = “, i);
- scanf(“%d”, &arr[i]);
- }
- /*————————————*/
- // 1 .Tinh trung binh cong cac so le o vi tri chan
- // Chu y: Vi tri chan = chi so le
- int sum = 0;
- int count = 0;
- for(int i = 1; i < n; i+=2){
- if(arr[i] % 2 == 1){
- ++count;
- sum += arr[i];
- }
- }
- printf(“\nTrung binh cong = %f”, (float)sum/count);
- /*————————————*/
- // 2. Tim so lon nhat trong mang vua nhap
- int maxNum = arr[0];
- for(int i = 1;i < n;++i){
- if(arr[i] > maxNum) maxNum = arr[i];
- }
- printf(“\nPhan tu lon nhat: %d”, maxNum);
- /*————————————*/
- // 3. Tim vi tri cac so nho nhat trong mang
- // Can lam 2 buoc:
- // 1. Tim gia tri nho nhat minNum.
- // 2. In ra cac vi tri co gia tri = minNum
- // Luu y: Vi tri = chi so + 1
- // Tim gia tri nho nhat
- int minNum = arr[0];
- for(int i = 1;i < n;++i){
- if(arr[i] < minNum) minNum = arr[i];
- }
- // In ra vi tri co gia tri nho nhat
- printf(“\nVi tri co gia tri nho nhat la: “);
- for(int i = 0;i < n;++i){
- if(arr[i] == minNum) printf(“%d “, i+1);
- }
- /*————————————*/
- // 4. Dem cac so chinh phuong co trong mang
- // So chinh phuong la so co can la so nguyen nhu: 1, 4, 9,…
- int scp = 0;
- float rs;
- for(int i = 0;i < n;++i){
- rs = sqrt(arr[i]);
- if(rs == (int)rs) ++scp;
- }
- printf(“\nMang co %d so chinh phuong!”, scp);
- /*————————————*/
- // 5. Hien thi cac so nguyen to co trong mang
- // So nguyen to la so chi co 2 uoc duy nhat la 1 va chinh no.
- // So nguyen to nho nhat la so 2
- printf(“\nCac so nguyen to co trong mang la: “);
- bool snt;
- for(int i = 0;i < n;i++){
- // Kiem tra a[i] co phai so nguyen to?
- // gia su no la so nguyen to
- // Neu no chia het cho so bat ky trong [2, a[i]] -> khong phai so nguyen to
- snt = true;
- for(int j = 2;j < arr[i]; ++j){
- if(arr[i] % j == 0) snt = false;
- }
- if(arr[i] >= 2 && snt == true) printf(“%d “, arr[i]);
- }
- /*————————————*/
- // 6. Thay the cac phan tu am trong mang = 0.
- for(int i = 0;i < n;++i){
- if(arr[i] < 0) arr[i] = 0;
- }
- // Muon xem thay doi thi bo comment
- // printf(“\nMang sau khi thay the la: “);
- // for(int i = 0;i < n;++i){
- // printf(“%d “, arr[i]);
- // }
- // 7. Xoa cac phan tu am co trong mang
- // Neu muon xem ket qua phan nay thi comment phan so 6 lai nhe
- // Cai nay ma giai thich bang ca 1 bai van luon ^^
- for(int i = 0;i < n;++i){
- if(arr[i] < 0){
- for(int j = i; j < n–1;j++){
- arr[j] = arr[j+1];
- }
- —n;
- }
- }
- // Muon xem thay doi thi bo comment
- // printf(“\nMang sau khi xoa phan tu am la: “);
- // for(int i = 0;i < n;++i){
- // printf(“%d “, arr[i]);
- // }
- /*————————————*/
- // 8. Sap xep mang da nhap theo chieu tang dan
- int tg;
- for(int i = 0;i < n–1;++i){
- for(int j = i+1; j < n;++j){
- if(arr[i] > arr[j]){
- // Hoan vi
- tg = arr[i];
- arr[i] = arr[j];
- arr[j] = tg;
- }
- }
- }
- // Muon xem thay doi thi bo comment
- printf(“\nMang sau khi sap xep tang dan la: “);
- for(int i = 0;i < n;++i){
- printf(“%d “, arr[i]);
- }
- }
Một số dạng bài tập mảng 1 chiều khác
Dạng bài nhập, xuất mảng 1 chiều
Đề bài: Nhập vào một dãy số nguyên. Hiển thị ra màn hình dãy số đó.
Lời giải:
- #include<stdio.h>
- #include<conio.h>
- main()
- {
- int a[50];
- int i,n;
- printf(“Nhap so phan tu mang: “);
- scanf(“%d”,&n);
- for(i=0;i<n;i++)
- {
- scanf(“%d”,&a[i]);
- }
- printf(“\nMang vua nhap la:”);
- for(i=0;i<n;i++)
- {
- printf(“%5d”,a[i]);
- }
- getch();
- }
Dạng bài in ra các số nguyên tố trong mảng
Đề bài: Nhập vào một dãy số nguyên và đưa ra màn hình các số nguyên tố có trong mảng cùng với vị trí của chúng trong mảng.
Lời giải:
- #include<stdio.h>
- #include<conio.h>
- main()
- {
- int a[50];
- int i,n,j,kt;
- printf(“Nhap so luong phan tu:”);
- scanf(“%d”,&n);
- for(i=0;i<n;i++)
- {
- scanf(“%d”,&a[i]);
- }
- printf(“\nCac so nguyen to co trong mang va vi tri cac so do trong mang la:”);
- for(i=0;i<n;i++)
- {
- kt=0;
- for(j=2;j<=a[i]/2;j++)
- {
- if(a[i]%j==0)
- kt=1;
- }
- if(kt==0)
- printf(“\nso nguyen to %d vi tri %d trong mang “, a[i], i );
- }
- getch();
- }
Dạng bài chèn phần tử vào mảng
Đề bài: Nhập 1 dãy n số nguyên (0<n<30)
- Hiển thị trên màn hình dãy số vừa nhập
- Hiển thị trên màn hình các số chẵn cùng với vị trí của chúng trong dãy
- Sắp xếp dãy số theo thứ tự giá trị giảm dần.
- Chèn một số X bất kỳ vào dãy số, với điều kiện sau khi chèn, thứ tự giá trị các phần tử vẫn giảm dần (X nhập từ bàn phím).
Lời giải:
- #include<stdio.h>
- #include<conio.h>
- main()
- {
- int a[50];
- int i,n,tg,max,j,s=0;
- printf(“nhap vao so phan tu: “);
- scanf(“%d”,&n);
- for(i=0;i<n;i++)
- {
- scanf(“%d”, &a[i]);
- }
- max=a[0];
- for(i=1;i<n;i++)
- {
- if(a[i]>max)
- {
- max =a[i];
- }
- }
- printf(“\nSo lon nhat =%d”,max);
- printf(“\nvi tri cua gia tri lon nhat trong day la: “);
- for(i=0;i<n;i++)
- {
- if (a[i]==max)
- {
- printf(“%6d”, i+1);
- }
- }
- //sap xep day so theo thu tu tang dan
- for(i=0;i<n–1;i++)
- for(j=i+1; j<n; j++)
- {
- if(a[i]>a[j])
- {
- tg=a[i];
- a[i]=a[j];
- a[j]=tg;
- }
- }
- printf(“\nday so sau khi sap xep la:”);
- for(i=0;i<n;i++)
- {
- printf(“%6d”,a[i]);
- }
- //Tinh tong va trung binh cong cac so trong day
- for(i=0;i<n;i++)
- {
- s=s+a[i];
- }
- printf(“\nTong cac so trong day la: %d”,s);
- printf(“\nTrung binh cong cac so trong day la: %f”, (float)s/n);
- getch();
- }
Trên đây là một số bài tập mảng 1 chiều c++ có lời giải để các bạn luyện tập. Dạng bài tập về mảng trong ngôn ngữ lập trình C++ còn rất nhiều ở phía trước, vì vậy hãy luyện tập thành thạo các dạng bài cơ bản trên để nắm chắc kỹ thuật sử dụng mảng 1 chiều nhé! Chúc các bạn sớm chinh phục thành công ngôn ngữ lập trình C++.