指针作业:
1.输入n个元素,计算最大值,最小值,最大值的位置,最小值的位置
#include <stdio.h>
#include <string.h>
void Max(int *p,int n)
{
int max,maxi;
for(int i=0;i<n;i++)
{
if(i==0)
{
max=*p;
maxi=i;
}
if(max<*(p+i))
{
max=*(p+i);
maxi=i;
}
}
printf("最大值是:%d 下标是:%d\n",max,maxi);
}
void Min(int *p,int n)
{
int min,mini;
for(int i=0;i<n;i++)
{
if(i==0)
{
min=*p;
mini=i;
}
if(min>*(p+i))
{
min=*(p+i);
mini=i;
}
}
printf("最大值是:%d 下标是:%d\n",min,mini);
}
void CallBack(int *p,int n,void (*q)(int *,int))
{
q(p,n);
}
int main(int argc, const char *argv[])
{
int arr[10];
int n,i;
printf("请输入个数:");
scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&arr[i]);
}
CallBack(arr,n,Max);
CallBack(arr,n,Min);
return 0;
}
2.冒泡
#include<stdio.h>
#include<string.h>
void Bubble(int *p,int n)
{
int i,j,temp;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(*(p+j) < *(p+j+1))
{
temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;
}
}
printf("%d\t",*(p+j));
}
}
int main(int argc, const char *argv[])
{
int arr[]={27,34,45,1,54,68,79};
int n=sizeof(arr)/sizeof(arr[0]);
Bubble(arr,n);
return 0;
}
3.简单选择排序
#include<stdio.h>
#include<string.h>
void Sort(int *p,int n)
{
int min,temp;
for(int i=0;i<n-1;i++)
{
min=i;
for(int j=i+1;j<n;j++)
{
if(*(p+min)>*(p+j))
min=j;
}
if(min!=i)
{
temp=*(p+i);*(p+i)=*(p+min);*(p+min)=temp;
}
}
for(int i=0;i<n;i++)
{
printf("%d ",*(p+i));
}
}
int main(int argc, const char *argv[])
{
int arr[]={12,32,43,56,6,7};
int n=sizeof(arr)/sizeof(arr[0]);
Sort(arr,n);
return 0;
}
4.杨辉三角
#include<stdio.h>
#include<string.h>
void YangHui(int (*p)[6],int line)
{
int i,j;
for(i=0;i<line;i++)
{
for(j=0;j<line-i;j++)
{
printf(" ");
}
for(j=0;j<=i;j++)
{
if(j==0||i==j)
{
*(*(p+i)+j)=1;
}
else
{
*(*(p+i)+j)=*(*(p+i-1)+j)+*(*(p+i-1)+j-1);
}
printf("%4d",*(*(p+i)+j));
}
printf("\n");
}
}
int main(int argc, const char *argv[])
{
int arr[6][6];
int line=sizeof(arr)/sizeof(arr[0]);
YangHui(arr,line);
return 0;
}
5.二维数组转置:行变列,列变行
#include<stdio.h>
#include<string.h>
void Transp(int(*p)[3],int(*q)[2],int line,int row)
{
int i,j;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
*(*(q+j)+i)=*(*(p+i)+j);
}
}
for(i=0;i<row;i++)
{
for(j=0;j<line;j++)
{
printf("%d\t",*(*(q+i)+j));
}
printf("\n");
}
}
int main(int argc, const char *argv[])
{
int a[2][3]={1,2,3,4,5,6};
int b[3][2];
int line=sizeof(a)/sizeof(a[0]);
int row=sizeof(a[0])/sizeof(int);
Transp(a,b,line,row);
return 0;
}
6.计算二维数组的行和、列和
#include<stdio.h>
#include<string.h>
void Sum(int (*p)[3],int line,int row)
{
int i,j,sum;
for(i=0;i<line;i++)
{
sum=0;
for(j=0;j<row;j++)
{
sum+=*(*(p+i)+j);
}
printf("%d行的和是:%d\n",i+1,sum);
}
}
void Sum1(int (*p)[3],int line,int row)
{
int i,j,sum;
for(i=0;i<row;i++)
{
sum=0;
for(j=0;j<line;j++)
{
sum+=*(*(p+j)+i);
}
printf("%d列的和是:%d\n",i+1,sum);
}
}
int main(int argc, const char *argv[])
{
int arr[2][3]={1,4,2,8,6,9};
int line=sizeof(arr)/sizeof(arr[0]);
int row=sizeof(arr[0])/sizeof(int);
Sum(arr,line,row);
Sum1(arr,line,row);
return 0;
}
7.计算二维数组的行最大值、列最小值
#include<stdio.h>
#include<string.h>
void Max(int (*p)[3],int line,int row)
{
int i,j,max;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
if(j==0)
{
max=*(*(p+i)+j);
}
if(max<*(*(p+i)+j))
{
max=*(*(p+i)+j);
}
}
printf("第%d行的最大值是:%d\n",i+1,max);
}
}
void Min(int (*p)[3],int line,int row)
{
int i,j,min;
for(i=0;i<row;i++)
{
for(j=0;j<line;j++)
{
if(j==0)
{
min=*(*(p+j)+i);
}
if(min>*(*(p+j)+i))
{
min=*(*(p+j)+i);
}
}
printf("第%d列的最小值是:%d\n",i+1,min);
}
}
int main(int argc, const char *argv[])
{
int arr[2][3]={1,4,2,8,6,9};
int line=sizeof(arr)/sizeof(arr[0]);
int row=sizeof(arr[0])/sizeof(int);
Max(arr,line,row);
Min(arr,line,row);
return 0;
}
8.是一个对称矩阵,输出完美,否则输出不完美↓
9 2 3 4
2 8 1 6
3 1 8 7
4 6 7 9
#include <stdio.h>
#include <string.h>
void SymTran(int (*p)[4],int line,int row)
{
int count=0;
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
{
if(*(*(p+i)+j)!=*(*(p+j)+j))
count++;
}
}
if(count==0)
printf("不完美\n");
else
printf("完美\n");
}
int main(int argc, const char *argv[])
{
int arr[4][4];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
scanf("%d",&arr[i][j]);
SymTran(arr,4,4);
return 0;
}