Bài 53. Bài tập mảng 1 chiều có lời giải

Bài số 51 trong 69 bài của series Học C Không Khó

Chào các bạn, hôm nay Lập trình Không khó sẽ cùng các bạn giải quyết một số bài tập mảng 1 chiều nhé. Hiện tại, đề bài này chưa cho phép sử dụng hàm con nên code sẽ được thực thi toàn bộ trong hàm main nhé các bạn.

Nếu bạn chưa có kiến thức cơ bản về mảng 1 chiều, hãy đọc bài học Mảng 1 chiều trong C/C++ trước để có kiến thức nhé.

Các bài tập mảng 1 chiều phổ biến

Đây là một bài tập tổng hợp về kiến thức mảng 1 chiều.

Giải đề thi nhập môn tin học Đại học Điện Lực
Đề thi nhập môn tin học phần mảng 1 chiều

Đề bài tập mảng 1 chiều như sau:

Nhập từ bàn phím mảng số nguyên gồm n phần tử.

  1. Tính trung bình cộng các số lẻ ở vị trí chẵn
  2. Tìm số lớn nhất trong mảng vừa nhập
  3. Tìm vị trí các số nhỏ nhất trong mảng
  4. Đếm các số chính phương có trong mảng
  5. Hiện thị các số nguyên tố có trong mảng lên màn hình
  6. Thay thế các phần tử âm có trong mảng bằng giá trị 0
  7. Xóa các phần tử âm có trong mảng
  8. Sắp xếp mảng đã nhập theo thứ tự tăng dần

Với bài tập mảng 1 chiều này, do mình không sử dụng ma trận copy để làm câu 6 và 7. Mà hai câu 6 và 7 có sự xung đột. Do đo, khi chạy code các bạn lưu ý:

  • Comment phần số 6 nếu muốn chạy phần số 7, và ngược lại
  • Bỏ comment như mô tả trong code để xem kết quả thay đổi

Lời giải

Trong code dưới đây, các phần mình đều có comment giải thích code rõ ràng. Các phần cũng đã được chia theo bố cục rõ ràng. Các bạn có thể sử dụng code này làm lời giải tham khảo cho bài tập trên.

Đây là lời giải đề thi nhập môn tin học – bài tập mảng 1 chiều sử dụng ngôn ngữ C.

Một số bài tập mảng 1 chiều khác

Nhập, xuất mảng 1 chiều

Nhập vào 1 dãy số nguyên. Hiển thị dãy số đó ra màn hình.

Bài tập in ra các số nguyên tố trong mảng

Nhập 1 dãy số nguyên đưa ra màn hình các số nguyên tố có trong mảng, vị trí các số đó trong mảng.

Bài tập sắp xếp mảng, tìm trung bình cộng

Nhập 1 dãy số nguyên không quá 50 phần tử, in ra màn hình dãy số đã nhập

Đưa ra màn hình số lớn nhất có trong dãy và vị trí của nó trong dãy.

Sắp xếp dãy số theo giá trị các phần tử tăng dần

Tính tổng và trung bình cộng các số có trong dãy.

Bài tập chèn phần tử vào mảng

Nhập 1 dãy n số nguyên (0<n<30), in ra màn hình dãy số đã nhập

Đưa ra màn hình các số chẵn và vị trí số chẵn đó trong dãy

Sắp xếp dãy số theo giá trị các phần tử giảm dần.

Chèn số X vào dãy sao cho sau khi chèn gái trị các phần tử vẫn giảm dần(x nhập từ bàn phím.

Bạn có thể xem bài hướng dẫn chi tiết: Thêm, xóa phần tử trong mảng 1 chiều

Bài tập tính tổng số dương, xóa các số âm

Nhập 1 dãy số thực không quá 50 phần tử, đưa ra màn hình tổng các số dương trong dãy.

Xóa tất cả các số âm có trong dãy.

Bài tập tổng hợp

Nhập 1 dãy số nguyên không quá 50 phần tử, đưa ra màn hình trung bình cộng các số chia hết cho 3 có trong dãy. Chèn số X vào vị trí thứ k trong dãy(x,k nhập từ bàn phím)

Các bạn có thể viết lời giải của các đề bài trên bằng cách sử dụng hàm nhé!

Nên tham khảo thêm: 1000 bài tập lập trình C/C++ có lời giải

Kết luận

Như vậy, bài viết này mình đã hướng dẫn và cung cấp lời giải đề thi nhập môn tin học đại học Điện Lực. Mình mong muốn các bạn chuyển source code này về dạng hàm để tối ưu và rút gọn số dòng code này. Hãy coi như đó là một bài tập dành cho các bạn.

Chúc các bạn học tốt!

Các bài viết trong SeriesBài trước: Bài 52. Thêm/ xóa phần tử trong mảng 1 chiềuBài sau: Bài 54. Mảng 2 chiều trong C

17 COMMENTS

  1. ý thứ 7 if sửa thành while mới đúng phải không anh?.Code của anh khi chạy 2 số âm liền kề thì số âm thứ 2 bị đè lên nên nó bị xóa đi anh ạ.

  2. Cho em hỏi với đề: “nhập vào 1 mảng số nguyên,tìm tất cả các vị trí của x và lưu vào 1 mảng khác, xuất mảng vị trí đó ra màn hình” thì mình làm sao ạ em cảm ơn

  3. câu 7 của anh chỉ xóa đi những số âm không liền kề nhau nếu liền kê thì luôn luôn còn số sót lại số đứng sau

  4. Cho dãy N số nguyên (mỗi phần tử của dãy có thể là số âm, dương hay bằng 0). Cần chọn trong các số các phần tử của dãy 2 phần tử khác nhau sao cho tích của chúng là nhỏ nhất có thể.

    Input Format

    Dòng 1 ghi số N (2
    N Dòng tiếp theo mỗi dòng ghi một phần tử, mỗi phần tử có giá trị không quá 10^9.
    Constraints

    50% test tương ứng với 50% số điểm có N ≤ 1000.

    50% test tương ứng với 50% số điểm có N ≤ 1000000.

  5. Giúp mình giải bài này với!

    Hãy kiểm tra các chữ số của số ngiyeen dương n có tăng dần từ trái sang phải hay không. Vẽ sơ đồ biểu diễn thuật toán của bài này.

  6. void Xoaam(int *a,int *n)
    {int i,j,L;
    i=0;
    while(i<*n)
    {if(a[i]<0)
    {for(j=i;j<*n-1;j++)
    a[i]=a[j+1];
    (*n)–;
    continue;
    }
    i++;
    }
    }

    Số 7 của anh em đã hiểu, nhưng còn hàm phía trên em không hiểu cho lắm chỗ lệnh continue. Có phải hàm trên sẽ giúp giảm thời thực hiện hàm không anh?

  7. trong bài số 7, khi hai số âm kề nhau thì chỉ bỏ đc 1 số âm đầu. phải sửa lại tại if bằng while thì hoàn toàn đúng với mọi trường hợp

  8. anh ơi cho em xin code ” nhập vào một mảng đưa ra các phần tử là số hoàn hảo của mảng đó” với ạ

  9. e có 1 bài pascal khó hiểu ak giải hộ e vs ak.
    bài tập: nhập một mảng số nguyên n phần tử, dém ,in,và tính tổng các số lẻ chia hết cho 3 và sắp xếp giảm dần

    • Cho dãy N số nguyên (mỗi phần tử của dãy có thể là số âm, dương hay bằng 0). Cần chọn trong các số các phần tử của dãy 2 phần tử khác nhau sao cho tích của chúng là nhỏ nhất có thể.

      Input Format

      Dòng 1 ghi số N (2
      N Dòng tiếp theo mỗi dòng ghi một phần tử, mỗi phần tử có giá trị không quá 10^9.
      Constraints

      50% test tương ứng với 50% số điểm có N ≤ 1000.
      50% test tương ứng với 50% số điểm có N ≤ 1000000.

    • vị trí trong mảng em ạ: số thứ nhất, số thứ 2, … Ta chỉ xét các số ở vị chỉ là số chẵn + bản thân nó là số lẻ.

LEAVE A REPLY

Please enter your comment!
Please enter your name here