1.数组的颠倒:若有10个数字,那么数组的颠倒即
a[0]与a[9]交换,a[1]与a[8]交换,a[2]与a[7]交换,......a[4]与a[5]交换,所以到a[4]就颠倒完毕,即
(n-1)/2
若不用指针代码如下
#include<stdio.h>void fun(int s[],int n)
{int i,temp,m=(n-1)/2;for(i=0;i<=m;i++){int j=n-1-i;temp=s[i];s[i]=s[j];s[j]=temp;}return;
}int main()
{int s[10]={1,2,3,4,5,6,7,8,9,10}; fun(s,10);for(int i=0;i<10;i++){printf("%d\n",s[i]);}return 0;}
若使用指针,则指针变量的位置如图所示
#include<stdio.h>void fun(int *x,int n)
{int *p,*i,*j,temp,m=(n-1)/2;i=x;p=x+m;j=x+n-1;for(;i<=p;i++,j--){temp=*i;*i=*j;*j=temp;}return;}int main()
{int s[]={1,2,3,4,5,6,7,8,9,10};fun(s,10);for(int i=0;i<10;i++){printf("%d\n",s[i]);}return 0;
}
2.数组的排序,代码如下
#include<stdio.h>
#include<string.h>void fun(int *x,int n)//void fun(x[],int n)
{int i,j,temp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(*(x+i)<*(x+j)) //(x[i]<x[j]){temp=*(x+i);*(x+i)=*(x+j);*(x+j)=temp;}}}return;
}
/*也可以写为
int t;
for(int i=0;i<n-1;i++)
{k=i;for(int j=0;j<n;j++){if(*(x+i)>*(x+k)) k=j;if(k!=i){t=*(x+i);*(x+i)=*(x+k),*(x+k)=t;}}}
效果相同*/int main()
{int a[10]={1,2,3,4,5,6,7,8,9,10};fun(a,10); for(int i=0;i<10;i++){printf("%d\n",a[i]);}return 0;
}
3.二维数组的表示
查找有一门以上课程不及格的学生,输出他们的全部课程的成绩
代码如下
#include<stdio.h>void search(float(*p)[4],int n)//p指向包含4个float型元素的一维数组的指针变量
{int i,j,flag;for(j=0;j<n;j++){flag=0;for(i=0;i<4;i++){if(*(*(p+j)+i)<60)flag=1;}if(flag==1){printf("第%d名学生有一门及以上的成绩不及格,他的成绩是:\n",j+1);for(i=0;i<4;i++)printf("%5.1f ",*(*(p+j)+i));//score[j][i]printf("\n");}}
}int main()
{float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};search(score,3);return 0;}
结果显示