BÀI TOÁN CỦA EM LÀ: +nhap 1 mang co phần tủ <50
+ sắp xếp mảng theo tăng dần các số nguyên tố và giảm dần các so không phải số nguyên tố.
#include<stdio.h>
#include<math.h>
void nhap_mang(int a[],int t)
{
int i;
for(i=0; i<t;i++)
{
printf("\n a[%d]:",i);
scanf("%d",&a[i]);
}
}
void xuat_mang(int a[], int t)
{
int i;
for(i=0;i<t;i++)
printf("%3d",a[i]);
}
int ktsnt(int t)
{
int i, m;
if(t==2) return(1);
if((t==1)||(t%2==0)) return(0);
m=(int)sqrt(t);
for(i=3;i<=m;i=i+2)
if(m%i==0) return(0);
return(1);
}
void sap_xep_tang_dan( int a1[], int t1)
{
int i,j, tam;
for(i=0;i<t1-1;i++)
for(j=i+1;j<t1;j++)
{
if(a1[i]>a1[j])
{
tam=a1[i] ;
a1[i] =a1[j];
a1[j]=tam;
}
}
for(i=0;i<t1;i++)
if(ktsnt(a1[i])==1) printf("%3d",a1[i]);
}
void sap_xep_giam_dan( int a2[], int t2)
{
int i,j, tam;
for(i=0;i<t2-1;i++)
for(j=i+1;j<t2;j++)
{
if(a2[i]<a2[j])
{
tam=a2[i];
a2[i] =a2[j];
a2[j]=tam;
}
}
for(i=0;i<t2;i++)
if(ktsnt(a2[i])==0) printf("%3d",a2[i]);
}
int main(void)
{
int a[51],t,sc;
printf("nhap sl phan tu:");
scanf("%d",&t);
while((t>0)||(t<51))
{
nhap_mang(a,t);
xuat_mang(a,t);
printf("\n snt tang dan:\n");
sap_xep_tang_dan(a,t);
printf("\n s ko nt giam dan:\n");
sap_xep_giam_dan(a,t);
xuat_mang(a,t);
}
}
Trong bt này em dung biến cục bộ tại các hàm . tại sao biến cục bộ a[t] ban đầu tại hàm chính lại thay đổi? . Trong khi em đưa GIÁ TRỊ a[t]vào các 1 biên mang a[1], a[2] trong các hàm sap_xep_tang_dan và sap_xep giam dan để xử lý riêng thế thì a[t] ban đầu phải không đổi VÌ NÓ LÀ HÀM CỤC BỘ CHỈ Ở HÀM MAIN vậy mà nó lại thay đổi KHI EM XUAT MANG A[T] . mọi người có thể giải thích giúp em . em xin cảm ơn,
Em hiểu sai khái niệm hết rồi. Cho nên việc em giải thích cũng không đúng.
- 2 hàm sap_xep_tang_dan và sap_xep_giam_dan : đều là hàm xử lý mang tính cục bộ, và nó được gọi lại trong hàm main.
Chứ nó không phải là "NÓ LÀ HÀM CỤC BỘ CHỈ Ở HÀM MAIN"
- Em truyền vào trong hàm sap_xep_tang_dan và sap_xep_giam_dan 1 mảng a1[] và a2[]. Thì 2 mảng này gọi là tham số.
Còn mảng thực chất em thực hiện việc sắp xếp là a[]
- Vì mảng là 1 con trỏ, trỏ tới địa chỉ của chính nó nên sau lời gọi hàm giá trị mảng sẽ thay đổi. (Phần này em không cần quan tâm, chỉ hiểu nó được sử dụng giống như 1 tham biến)
-
Học lập trình bắt đầu từ đâu ?
https://www.youtube.com/HWStudio2019