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;
}
结果显示