作业1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(int argc, const char *argv[])
{
int m, n;
int random_num;
printf("请输入总行数\t");
scanf("%d", &m);
printf("请输入总列数\t");
scanf("%d", &n);
int arr[m][n];
// 随机产生种子,通常使用当前时间作为种子
srand((unsigned)time(NULL));
// 将随机数置入数组中
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
arr[i][j] = rand() % 10 + 1; // 随机数置入数组中,1-10
printf("%d ", arr[i][j]);
}
printf("\n");
}
// 遍历所有行列,计算x[i,j]
long long sum = 1, max = 1;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
sum = 1; // 重置sum和max
max = 1;
// 计算第i行所有元素的乘积
for (int k = 0; k < n; k++)
{
sum *= arr[i][k];
}
// 计算第j列所有元素的乘积
for (int k = 0; k < m; k++)
{
sum *= arr[k][j];
}
sum /= arr[i][j] / arr[i][j]; // 去掉arr[i][j]的两次乘积
if (max < sum) // 如果sum更大,则赋值给max
max = sum;
}
}
printf("最大的乘积为%lld\n", max);
return 0;
}
作业2:
有一个unsigned char类型的数据data,把他的第六个bit位置为1。请写出将 data第6位清0的表达式
unsigned char data;
data |= (1 << 5); // 1左移五位即为0000 0001 << 5 0010 0000
data &= ~(1 << 5); // 对0010 0000 取反为1101 1111 按位与则为data的第六位与0 为0