1.实现功能:输入3个整数,按数值由小到大的顺序输出。
方法一:只编写主函数,利用指针指向三个变量,不修改原变量的值,通过修改指针的指向实现输出顺序的改变。
#includeint main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int* ap=&a,*bp=&b,*cp=&c;
int *temp;
if(*ap>*bp)
{
temp=ap;
ap=bp;
bp=temp;
}
if(*ap>*cp)
{
temp=ap;
ap=cp;
cp=temp;
}
if(*bp>*cp)
{
temp=bp;
bp=cp;
cp=temp;
}
printf("%d,%d,%d",*ap,*bp,*cp);
}
方法二:只编写主函数,通过指针修改变量的值实现数据顺序的改变。
#includeint main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int* ap=&a,*bp=&b,*cp=&c;
int temp;
if(*ap>*bp)
{
temp=*ap;
*ap=*bp;
*bp=temp;
}
if(*ap>*cp)
{
temp=*ap;
*ap=*cp;
*cp=temp;
}
if(*bp>*cp)
{
temp=*bp;
*bp=*cp;
*cp=temp;
}
printf("%d,%d,%d",*ap,*bp,*cp);
}
方法三:编写排序函数,函数需要传入三个参数,通过调用排序函数实现数据交换。
#includevoid BubbleSort(int *ap,int *bp,int *cp)
{
int temp;
if(*ap>*bp)
{
temp=*ap;
*ap=*bp;
*bp=temp;
}
if(*ap>*cp)
{
temp=*ap;
*ap=*cp;
*cp=temp;
}
if(*bp>*cp)
{
temp=*bp;
*bp=*cp;
*cp=temp;
}
}
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
BubbleSort(&a,&b,&c);
printf("%d %d %d",a,b,c);
}
方法四:编写排序函数,函数只实现两个数的排序,通过多次调用函数来实现三个数的排序。
#includevoid BubbleSort(int *ap,int *bp)
{
int temp;
temp=*ap;
*ap=*bp;
*bp=temp;
}
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b) BubbleSort(&a,&b);
if(a>c) BubbleSort(&a,&c);
if(b>c) BubbleSort(&b,&c);
printf("%d %d %d",a,b,c);
}
2.改写冒泡排序程序,通过函数调用实现冒泡排序,利用指针实现排序功能。
#includevoid bubble_sort(int* a,int n)//n为数组a的元素个数
{
int i,j,temp;
for(j=0;ja[i+1])//数组元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
int main()
{
int number[8]={95,45,15,78,84,51,24,12};
int i;
bubble_sort(number,8);
for(i=0;i<8;i++)
{
printf("%d ",number[i]);
}
printf("\n");
}
3.编写程序,利用数组名加角标的形式实现一个3*3整型矩阵的转置。
#includeint main()
{
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int b[3][3];
int i,j;
printf("change before:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[j][i]=a[i][j];
printf("change after:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",b[i][j]);
printf("\n");
}
}
4.编写程序,利用指向整型变量的指针(列指针)实现3*3整型矩阵的转置。
#includeint main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int *p=a[0];
int i,j,temp;
for(i=0;i<3;i++)
for(j=0;j*(p+j*3+i))
{
temp=*(p+i*3+j);
*(p+i*3+j)=*(p+j*3+i);
*(p+j*3+i)=temp;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
5.编写程序,利用指向数组的指针(行指针)实现3*3整型矩阵的转置。
#includevoid transpose(int(*p)[3],int(*q)[3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
*(*(q+j)+i)=*(*(p+i)+j);
}
int main()
{
int b[3][3],j,i;
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
transpose(a,b);
printf("Transpose of matrix:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",b[i][j]);
printf("\n");
}
}