重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
new[row]|=((old[k]row)1)15-k
成都创新互联于2013年开始,是专业互联网技术服务公司,拥有项目成都网站制作、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元安平做网站,已为上家服务,为安平各地企业和个人服务,联系电话:18980820575
old[k]row 将old[k]向右移row位,举例:设old[k]=8,row=2,就相当于将8向右移2位,将用二进制表示8为1000,向右移两位后就变成0010,左边的补0,82后就变成了2
(old[k]row)1 ,这里1的意思是将(old[k]row)的最低位与1相位与,用上面的例子,即
(82)1 相当于21,用二进制表示即10 1,即为二进制的10,结果还是2.
((old[k]row)1)15-k ,再将((old[k]row)1)的结果向左移15-k位,设k=7, 接着上面的例子则有 215-7, 2用二进制表示为10,左移8位后为10 0000 0000 ,右边补0
new[row]|=((old[k]row)1)15-k 将
new[row] 与((old[k]row)1)15-k 作位或 再将结果补存在new[row]中,继续上面的例子
即new[2] = new[2] | 10 0000 0000,
已通过测试
#include stdio.h
void fun(int a[][10],int row,int col)
{ int i,j,k,sum;
int r[10],c[10];
k=0;
for(i=0;irow;i++)
{ sum=0;
for(j=0;jcol;j++)
sum+=a[i][j];
r[k]=sum;
k++;
}
k=0;
for(j=0;jcol;j++)
{ sum=0;
for(i=0;irow;i++)
sum+=a[i][j];
c[k]=sum;
k++;
}
for(k=0;krow;k++)
printf("the sum of NO.%d row is %d\n",k+1,r[k]);
for(k=0;kcol;k++)
printf("the sum of NO.%d column is %d\n",k+1,c[k]);
}
main()
{ int a[10][10],row,col;
int i,j;
printf("Input the row and column of array:");
scanf("%d%d",row,col);
for(i=0;irow;i++)
for(j=0;jcol;j++)
scanf("%d",a[i][j]);
fun(a,row,col);
}
row column就是行 列的意思
这个你学了线性代数就知道了 一个矩阵就是一个特殊的行列式 行和列是他的属性 描述矩阵的大小 和用来索引矩阵元素的位置
这段代码的意思就是寻找一个3 * 4矩阵中的最大元素
row column分别代表这个元素的行和列 max 代表这个元素的值
程序前两个嵌套for循环循环输入3 * 4 = 12个元素来填充矩阵 按照从左到右从上到下的顺序
后两个嵌套for循环 循环访问每一个矩阵中的元素 并且判断元素值与max的大小关系
元素大于max则让max等于该元素值 且用row column记录行列
循环结束后就得到最大的元素值max 与其行号row 列号column
第二种方法是因为类型不匹配(double*与(double(*)[ROW])产生错误,而且
((double (*)[row])matrix);
里的[row]是一个变量,而指向数组的指针
double (*matrix)[ROW]里的ROW只能使用常量,所以这里也有一个错误。
由于指向数组的指针指向的数组长度(即第一维)必须是确定的常量,所以你这种行列皆不确定的数组不能用这种形式返回。
我觉得用第一种形式好一点,访问二维数组a[i][j]可以转换成访问一维数组a[i*row+j];//row是列数
如果非要返回二维数组的话,我想用指针数组会好一点,不过分配空间的时候就麻烦一点。