-
#include ""
void main()
int m,n;
int i,j;
int a[100][100],b[100][100],c[200][200];
printf("请输入矩阵的行和列");
scanf("%d,%d",&m,&n);
printf("请为 %d 行 %d 列输入矩阵 a",m,n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
printf("请输入矩阵 b 作为 %d 行 %d 列",m,n);
for(i=0;ifor(j=0;jscanf("%d",&b[i][j]);
for(i=0;ifor(j=0;jc[i][j]=a[i][j]+b[i][j];
printf("A+B 结果为:");
for(i=0;ifor(j=0;jprintf("%-3d",c[i][j]);
printf("");
错误 1:声明的变量必须位于表达式之前。
错误 2:声明数组时,需要声明其长度。
-
认为第三个矩阵没有初始化,系统会给它一个默认的随机值(通常是一个大的负数),你应该开始将其全部归零。
-
最主要的是定义数组时使用变量。
事实上,您可以定义一个动态的两位数数组。
int m,n;
printf("请输入矩阵的行和列");
scanf("%d,%d",&m,&n);
int **a;
a=(int **malloc( m*sizeof(int *) 定义第一列。
for(int i=0;ia[i]=(int *)malloc(n*sizeof(int )) 定义行。
这样你就不会出错。
-
必须首先定义数组的长度。
-
如果数组不是动态分配的,则 m>0 和 n>0
如果是动态数组,则 m>=0, n>=0; 即使是 m<0,n<0 情况也允许在未定义的访问上。
-
使用 malloc 实现它:
int m,n;
int i,j;
int *p;
scanf("%d%d",&m,&n);
p=(int *)malloc(sizeof(int)*m*n);
p+m*i+j) 等价于元素 for(i=0; i
int main(void)
-
#include
#include
int main()
int n,m,i,j;
int a[4][4];
int row=0,col=0;
int min=100000;给 min 一个足够大的数字 printf("请输入 n 和 m");
scanf("%d%d",&n,&m);
printf("请输入 n 行和 m 列的数组");
for( i=0;i
-
int i,j,n,m;
int min,h,l;min、h、l表示最小值,行下标和列下标分别为下标。
int a[,]
for(i=0;i a[i,j]}
-
这个问题有很多方法可以处理,关键要看你是一次移动一个仓位还是多仓位,如果是一个仓位,那么就设置一个tmp变量,如果一次移动多个仓位,那么就需要设置另一个数组一次移动一个仓位, 那么在一个循环中移动 m 次就好了,for(i=0; 如果我移动了多个位置,那么最好为 (i=0; ib[i+n-m]=a[i];
for(i=m;ib[i]=a[i-m];
-
for(i=0;iscanf("%d ",p);
你没有看到循环末尾的分号吗? 这将进入一个空循环,这意味着您只输入数组的最后一个值。 scanf("%d ",p);不要在 %d 后面添加空格。 没有其他问题。
for(i=0;iscanf("%d",p);
-
void main ()
printf("请输入您要交换的号码:");
scanf("%d",&m);
printf("%d ",m);
xs(p,a,n,m);
void xs(int *p,int a[100],int n,int m) 没有改变,但如果直接在函数中使用 p+m+j 是有可能越线的,所以应该限制它。
for(j=0;jprintf("%d ",*p);
如果要接受 A 数组中的所有数字,而 B 只接受满足条件的数字,则会使 B 无法正常输出,在这种情况下,初始化 B 并包含 >>>More