目录
2.1 在命令行输入表达式,实现计算器功能(直接在主函数实现就行)
一、思维导图(指针和二维数组、数组指针、指针数组、多级指针)
二、作业
2.1 在命令行输入表达式,实现计算器功能(直接在主函数实现就行)
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int a=*argv[1]-48;
char b=*argv[2];
int c=*argv[3]-48;
switch(b)
{
case '+':printf("a+c=%d\n",a+c);break;
case '-':printf("a-c=%d\n",a-c);break;
case '*':printf("a*c=%d\n",a*c);break; //运行的时候,*加''或者"",变成'*'、"*"
case '/':printf("a/c=%d\n",a/c);break;
}
return 0;
}
2.2 使用指针计算每一列的和
函数:void Sum(int (*p)[],int line,int row)
#include <stdio.h>
#include <string.h>
void Sum(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 a[2][3]={1,2,3,4,5,6};
int line=sizeof(a)/sizeof(a[0]);
int row=sizeof(a[0])/sizeof(int);
Sum(a,line,row);
return 0;
}
ubunt
2.3 使用指针计算每行最大值,每列最小值
void Max(int (*p)[],int line,int row)
void Min(int (*p)[],int line,int row
#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++)
{
max=0;
for(j=0;j<row;j++)
{
if(j==0)
max=*(*(p+i)+j);
if(*(*(p+i)+j)>max)
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 a[2][3]={12,78,29,34,54,65};
int line=sizeof(a)/sizeof(a[0]);
int row=sizeof(a[0])/sizeof(int);
Max(a,line,row);
Min(a,line,row);
return 0;
}
三、今日知识回顾
3.1 计算二维数组的最大值,返回最大值
函数:int Max(int (*p)[4],int line,int row)
#include <stdio.h>
#include <string.h>
int Max(int (*p)[4],int line,int row)
{
int i,j;
int max=0;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
if(i==0&&j==0) //第一次循环
max=*p[i]+j;
if(*p[i]+j>max)
max=*p[i]+j;
}
}
return max;
}
int main(int argc, const char *argv[])
{
//计算二维数组的最大值,返回最大值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int line=sizeof(a)/sizeof(a[0]);
int row=sizeof(a[0])/sizeof(int);
printf("max=%d\n",Max(a,line,row));
return 0;
}
3.2 使用指针实现杨辉三角
函数:void YangHui(int (*p)[6],int line)
#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<=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 a[6][6];
int line =sizeof(a)/sizeof(a[0]);
YangHui(a,line);
return 0;
}
3.3 计算每一行的和
函数:void Sum(int (*p)[3],int line,int row)
#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);
}
}
int main(int argc, const char *argv[])
{
//计算每一行的和
int a[2][3]={1,2,3,4,5,6};
int line=sizeof(a)/sizeof(a[0]);
int row=sizeof(a[0])/sizeof(int);
Sum(a,line,row);
return 0;
}
3.4 用指针进行二维数组转置:行变列,列变行
函数:void Transp(int (*p)[3],int (*q)[2],int line,int row)
#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;
}