Bài của bạn thì sửa lại thế này:
Code:
#include <conio.h>
#include <stdio.h>
void nhap(int a[],int n,int &i)
{
for (i;i<n;i++)
{
printf("nhap ma tran %d\t",i);
scanf("%d",&a[i]);
}
}
void xuat(int a[],int n)
{
for (int i=0;i<n;i++)
{
printf("%4d",a[i]);
}
}
int demso(int a[],int i, int n,int &dem)
{
n=n+1;
if(n<=0)
{
return 0;
}
if (i == 1)//thieu diem dug cho i
{
if (a[1] % 2 == 0)
{
if (a[0] % 2 == 0)
{
return 1;
}
}
return 0;
}
if(a[i-1]%2==0 )
{
if ((a[i-2]%2==0 /*&& i>2) || (a[i]%2==0 && i<n)*/))
{
dem++;
}
// demso(a,i-1,n,dem);//chi xet cho th pt cuoi cung chan
}
demso(a,i-1,n,dem);
return dem;
}
void main()
{ //clrscr();
int dem=0;
int a[100],n,i=0;
printf("hay nhap gia tri n");
scanf("%d",&n);
nhap(a,n,i);
xuat(a,n);
demso(a,i,n, dem);
printf(" ket qua %d",dem);
getch();
}
Nếu cải tiến hơn thì làm như sau:
Code:
#include <stdio.h>
#include <conio.h>
void NhapMang (int A[100], int &n)
{
printf("Nhap so luong phan tu: ");
scanf("%d", &n);
printf("\n");
for (int i = 0; i < n; i++)
{
printf("Nhap phan tu thu %d: ", i + 1);
scanf("%d", &A[i]);
}
printf("\n");
}
void XuatMang (int A[100], int n)
{
if (n == 1)
{
printf("%4d", A[0]);
}
else
{
XuatMang (A, n - 1);
printf("%4d", A[n - 1]);
}
}
int DemLanCanChan (int A[100], int n)
{
if (n == 1)
{
return 0;
}
if (A[n - 1] % 2 == 0)
{
if (A[n - 2] % 2 == 0)
{
return 1 + DemLanCanChan (A, n - 1);
}
}
return DemLanCanChan (A, n - 1);
}
void main ()
{
int A[100];
int n;
NhapMang (A, n);
XuatMang (A, n);
int k = DemLanCanChan (A, n);
printf("\nKQ = %d\n", k);
getch();
}
Đúng như Ran_rook nói nếu bạn khai thêm biến i thì nó sẽ tạo thêm nhiều biến khi gọi nhiều hàm liên tục
___KÔ BIÊT CÓ ĐÚNG KÔ (MÌNH CŨNG ĐANG HỌC VỀ ĐỆ QUI ĐỂ..."THI" ... HIX HIX )