Mọi người xem giúp em code này bị lỗi ở đâu?
Em vừa mới học lập trình C được vài ngày thôi, có viết thử chương trình : Nhập vào 1 mảng có n phần tử và 1 số nguyên dương k, sau đó xác định tất cả các phần tử chia hết cho k, nếu có thì in ra màn hình các số đó, nếu không có thì in ra màn hình “KHONG CO”. Nhưng có 1 trục trặc là code em viết chỉ đúng khi không có phần tử nào của mảng chia hết cho k( Tức là in ra màn hình chữ “KHONG CO”), còn khi xuất hiện các phần tử chia hết cho k thì nó không in ra được( Mà cụ thể là nó in ra 1 số rất lớn). Đây là code của em:
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Khai báo biến mảng
int n;
printf("Nhap vao so phan tu cua mang: ");
scanf("%d", &n);
int i,A[n];
//Nhập vào các phần tử của mảng
for(i=1; i<=n;i++)
{printf("Nhap A%d = ", i);
scanf("%d", &A[i]);}
//Xuất ra các phần tử của mảng đã nhập
printf("Mang A= ");
for(i=1; i<=n; i++)
printf("%d ", A[i]);
printf("
");
//Xac dinh cac phan tu chia het cho 1 so nguyen duong k nao do
int dem, k;
printf("Nhap so nguyen k: ");
scanf("%d",&k);
printf("Cac phan tu chia het cho k(%d) la: ", k);
dem=0;
for(i=1; i<=n;i++)
if(A[i] %k ==0)
dem++;
if(dem!=0)
printf("%d ", A[i]);
else
printf("KHONG CO");
return 0;
}
CẢM ƠN MỌI NGƯỜI NHÉ!
Bạn tránh khai báo mảng như thế này, chỉ chuẩn C99 mới compile được thôi. Kích thước mảng nên khai báo tại thời điểm biên dịch, có thể khai báo
int A[50]
hoặcint A[100]
,… nếu bạn muốn mảng chỉ cón
phần tử thì bạn đọc tới phần cấp phát động.Mảng trong C bắng đầu từ 0 đến n-1, nên các vòng for sửa lại là
for(i=0; i<n;i++)
Đoạn này mình nghĩ nên sửa lại là: