用指针实现以下题目:
- 输入N个元素,计算最大值以及最大值位置,最小值以及最小值位置
#include <stdio.h>
void Search(int (*p)[3],int line,int row);
int main(void)
{
int arr[3][3]={0};
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
scanf("%d",&arr[i][j]);
}
}
Search(arr,3,3);
return 0;
}
void Search(int (*p)[3],int line,int row)
{
int Max,Min,MaxNum1,MaxNum2,MinNum1,MinNum2;
Max=*p[0];
Min=*p[0];
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
{
if(*(*(p+i)+j)>Max)
{
Max=*(*(p+i)+j);
MaxNum1=i;
MaxNum2=j;
}
if(*(*(p+i)+j)<Min)
{
Max=*(*(p+i)+j);
MinNum1=i;
MinNum2=j;
}
}
}
printf("最大值为%d,在第%d行第%d列\n",Max,MaxNum1+1,MaxNum2+1);
printf("最小值为%d,在第%d行第%d列\n",Min,MinNum1+1,MinNum2+1);
}
-
#include <stdio.h>
void MaoPao(int *p,int n);
int main(void)
{
int arr[10]={58,96,74,12,32,13,82,71,93,82};
MaoPao(arr,10);
return 0;
}
void MaoPao(int *p,int n)
{
int temp;
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(*(p+j)>*(p+j+1))
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
for(int i=0;i<n;i++)
{
printf("%d ",*(p+i));
}
printf("\n");
}
-
#include <stdio.h>
void Choice(int *p,int num);
int main(void)
{
int arr[10]={58,96,74,12,32,13,82,71,93,82};
Choice(arr,10);
return 0;
}
void Choice(int *p,int num)
{
int temp;
for(int i=0;i<num-1;i++)
{
int Max=i;
for(int j=i+1;j<num;j++)
{
if(*(p+j)>*(p+Max))
{
Max=j;
}
}
if(Max!=i)
{
temp=*(p+Max);
*(p+Max)=*(p+i);
*(p+i)=temp;
}
}
for(int i=0;i<10;i++)
{
printf("%d ",*(p+i));
}
printf("\n");
}
-
#include <stdio.h>
void Triangle(int (*p)[10],int n);
int main(void)
{
int arr[10][10]={0};
Triangle(arr,10);
for(int i=0;i<10;i++)
{
for(int j=0;j<=i;j++)
{
printf("%d\t",arr[i][j]);
}
printf("\n");
}
for(int i=0;i<10;i++)
{
int num=4*(10-i);
printf("%*s",num,"");
for(int j=0;j<=i;j++)
{
printf("%d\t",arr[i][j]);
}
printf("\n");
}
}
void Triangle(int (*p)[10],int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
if(j==0)
{
*(*(p+i)+j)=1;
}
else
{
*(*(p+i)+j)=*(*(p+(i-1))+j)+*(*(p+(i-1))+(j-1));
}
}
}
}
- 二维数组,行变列,列变行。计算二位数组行与列的和,计算二维数组行与列的最大值和最小值
#include <stdio.h>
void LineSum(int (*p)[5],int line,int row);
void LineMax(int (*p)[5],int line,int row);
void RowSum(int (*p)[5],int line,int row);
void RowMax(int (*p)[5],int line,int row);
void TranSpose(int (*p)[5],int line,int row);
int main(void)
{
int arr[5][5];
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
scanf("%d",&arr[i][j]);
}
}
LineSum(arr,5,5);
LineMax(arr,5,5);
RowSum(arr,5,5);
RowMax(arr,5,5);
TranSpose(arr,5,5);
return 0;
}
void LineSum(int (*p)[5],int line,int row)
{
int Sum=0;
for(int i=0;i<line;i++)
{
int Sum=0;
for(int j=0;j<row;j++)
{
Sum+=*(*(p+i)+j);
}
printf("第%d行的和为:%d ",i+1,Sum);
printf("\n");
}
}
void LineMax(int (*p)[5],int line,int row)
{
int Max;
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
{
if(j==0)
{
Max=*(*(p+i)+j);
}
else
{
if((*(*(p+i)+j))>Max)
{
Max=*(*(p+i)+j);
}
}
}
printf("第%d行的最大值为:%d ",i+1,Max);
printf("\n");
}
}
void RowSum(int (*p)[5],int line,int row)
{
int Sum=0;
for(int i=0;i<row;i++)
{
int Sum=0;
for(int j=0;j<line;j++)
{
Sum+=*(*(p+j)+i);
}
printf("第%d列的和为:%d ",i+1,Sum);
printf("\n");
}
}
void RowMax(int (*p)[5],int line,int row)
{
int Max;
for(int i=0;i<row;i++)
{
for(int j=0;j<line;j++)
{
if(j==0)
{
Max=*(*(p+j)+i);
}
else
{
if(*(*(p+j)+i)>Max)
{
Max=*(*(p+j)+i);
}
}
}
printf("第%d列的最大值为:%d ",i+1,Max);
printf("\n");
}
}
void TranSpose(int (*p)[5],int line,int row)
{
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
{
printf("%d ",*(*(p+j)+i));
}
printf("\n");
}
}
-
#include <stdio.h>
void TellTran(int (*p)[5],int line,int row);
int main(void)
{
int arr[5][5];
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
scanf("%d",&arr[i][j]);
}
}
TellTran(arr,5,5);
return 0;
}
void TellTran(int (*p)[5],int line,int row)
{
int count=1;
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
if((*(*(p+i)+j))!=(*(*(p+j)+i)))
{
count=0;
}
}
}
if(count==0)
{
printf("这不是对称矩阵,不完美\n");
}
else
{
printf("这是对称矩阵,完美\n");
}
}