Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Sao có lúc đáp án nó ra đúng , đáp án nó ra số -4982548 lộn xộn có khi lại ra 0 nữa
#include<iostream>
#include<math.h>
const int nMax=200;
using namespace std;
int main()
{
int X[nMax];
int n,i;
cout<<"Moi ban nhap so luong phan tu: ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"Moi ban nhap gia tri phan tu: ";
cin>>X[i];
}
cout<<"Mang vua nhap la: ";
for(i=1;i<=n;i++)
cout<<"\t "<<X[i];
int kq,tich=1;
for(i=0;i<=n;i++){
if(X[i]%3==0)
tich *= X[i];
kq=pow(tich,2);
}
cout<<"\n Tich binh phuong cac so chia het cho 3 la: "<<kq;
}
bạn khai báo mảng
X
với số lượng phần tử tối đa lànMax
, nhưng bạn không sử dụng biếnnMax
trong khai báo mảng. Thay vào đó, bạn sử dụng biếnn
để nhập số lượng phần tử cho mảng. Điều này có thể gây ra lỗi khi người dùng nhập giá trị lớn hơnnMax
, dẫn đến tràn bộ nhớ.Lỗi logic là việc bạn sử dụng biến
i
bắt đầu từ0
trong vòng lặp, trong khi phần tử đầu tiên của mảngX
làX[1]
. Do đó, bạn sẽ bỏ qua phần tử đầu tiên của mảngX
và tính toán sai kết quả.Một cách để sửa mã nguồn của bạn là thay đổi vòng lặp
for
để bắt đầu từ1
thay vì0
, và sử dụng biếnnMax
trong khai báo mảng. Ngoài ra, bạn cần phải kiểm tra xem có phần tử nào trong mảngX
chia hết cho3
trước khi tính toán kết quả.#include<iostream>
#include<math.h>
const int nMax = 200;
using namespace std;
int main()
{
int X[nMax];
int n, i;
cout << "Moi ban nhap so luong phan tu: ";
cin >> n;
for (i = 1; i <= n; i++)
{
cout << "Moi ban nhap gia tri phan tu: ";
cin >> X[i];
}
cout << "Mang vua nhap la: ";
for (i = 1; i <= n; i++)
cout << "\t " << X[i];
int kq = 1;
for (i = 1; i <= n; i++) {
if (X[i] % 3 == 0) {
kq *= X[i] * X[i];
}
}
cout << "\n Tich binh phuong cac so chia het cho 3 la: " << kq;
}