30/09/2018, 18:53

Anh nào chỉ em đọan này của bài tập C cái ạ

> #include<stdio.h>
> #include<conio.h>
> // Nhap 2 mang xoa di cac ptu trung nhau giua 2 mang
> int i,j,x=0,n2,n;
> void nhap(int a1[], int n){
> 	for(i=0;i<n;i++){
> 		printf("a[%d]= ",i); scanf("%d", &a1[i]);
> 	}
> }
> void xuat(int a1[], int n){
> 	for(i=0;i<n;i++){
> 		printf("%d ",a1[i]); 
> 	}
> }
> void xoa(int a1[],int vitri, int n){
> //    vitri-=1;
> 	while(vitri<n){
> 		a1[vitri]=a1[vitri+1];
> 		vitri++;
> 	}
> }
> void trung(int a1[], int a2[],int c[]){
> //	int x=0; Sai dong nay
> 	for(i=0;i<n;i++){
> 		for(j=0;j<n;j++){
> 			if(a1[i]==a2[j]){
> 				c[x]=a1[i];
> 				x++;
> 			}
> 		}
> 	}
> }
> void xoatrung(int a1[],int c[]){
> 	i=0;
> 	while(i<n){
> 		for(j=0;j<x;j++){
> 			if(a1[i]==c[j]){
> 				xoa(a1,i,n);
> 				n--;
> 				i--;
> 			}
> 		}
> 		i++;
>     }
> 	xuat(a1,n);
> }
> int main(){
> 	int a1[100], a2[100],c[100];
> 	printf("n= "); scanf("%d", &n);
> 	n2=n;
> 	printf("Nhap mang 1: 
");
> 	nhap(a1,n);
> 	printf("Nhap mang 2: 
");
> 	nhap(a2,n);
> 	trung(a1,a2,c);
> 	printf("Mang 1: 
");
> 	xoatrung(a1,c);
> 	n=n2;
> 	printf("Mang 2: 
");
> 	xoatrung(a2,c);
> 	
> }
Viruts viết 21:01 ngày 30/09/2018

Tại sao trong hàm main lại gán n2=n; sau đó lại cho n=n2 để làm gì ạ. e ngu quá mới học nên k biết ạ

Vu Van Chung viết 21:05 ngày 30/09/2018

Trả lời câu hỏi của em, vì khi em gọi xóa trùng thì có dòng n–, do n là biến toàn cục nên nó sẽ bị giảm đi, giờ muốn gọi lại thì nó phải lấy giá trị ban đầu là n2 = n ( n2 = n lúc đầu, sau đó n thay đổi do gọi hàm xoatrung(), sau đó gán lại n = n2 thì n lại có giá trị ban đầu

Viruts viết 20:55 ngày 30/09/2018

OH em hiểu rồi . thế mà k nghĩ ra gà thậc . thank you anh ạ

Bài liên quan
0