#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int arrMAX_1(void *p,int n,int m,int x,int y);
int arrMAX_2(void *p,int n,int m,int x,int y);
int main(int argc, const char *argv[])
{
int n=0,m=0;
printf("请输入行数i 列数j\n");
scanf("%d%*c%d%*c",&n,&m);
int arr[n][m];
printf("请输入矩阵\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
printf("请输入第%d,第%d:",i+1,j+1);
scanf("%d%*c",&arr[i][j]);
}
}
int (*p)[m]=arr;
int max_1=0,temp_1=0;
int max_2=0,temp_2=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
temp_1=arrMAX_1(p,n,m,i,j);
temp_2=arrMAX_2(p,n,m,i,j);
if(max_1 <temp_1)
max_1=temp_1;
if(max_2<temp_2)
max_2=temp_2;
}
}
printf("剩余元素乘积最大值:%d 所在行列元素最大值:%d\n",max_1,max_2);
return 0;
}
//除去该元素所在行列后所有元素的乘积
int arrMAX_1(void *p,int n,int m,int x,int y)
{
int (*arr)[m]=(int(*)[m])p;
int sum=1;
for(int i=0;i<n;i++)
{
if(i==x)
continue;
for(int j=0;j<m;j++)
{
if(j==y)
continue;
sum*=arr[i][j];
}
}
// fprintf(stderr,"\t%d\n",sum);
return sum;
}
//该元素所在行列元素(除去元素本身)的乘积
int arrMAX_2(void *p,int n,int m,int x,int y)
{
int (*arr)[m]=(int(*)[m])p;
int sum=1;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if((i==x ||j==y) && !(i==x && j==y))
sum*=arr[x][j];
}
}
// fprintf(stderr,"\t%d\n",sum);
return sum;
}
- 有一个unsigned char类型的数据data,把他的第六个bit位置为1。请写出将 data第6位清0的表达式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
unsigned char data=0x08;
data |=0x20;
printf("%x\n",data);
data &=~0x20;
printf("%x\n",data);
return 0;
}