C语言程序设计、、说一下这道题整体步骤的含义?执行步骤?
将M行N列的二维数组中的数据按列的顺序依次放到一维数组中。例如,二维数组中的数据为333333334444444455555555则一维数组中的内容应是:33445533...
将M行N列的二维数组中的数据按列的顺序依次放到一维数组中。例如,二维数组中的数据为
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应是:33 44 55 33 44 55 33 44 55 33 44 55
int i,j;
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
b[(*n)++]=s[j][i];}
int i,j;*n=0;
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
b[(*n)++]=s[j][i];} 展开
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应是:33 44 55 33 44 55 33 44 55 33 44 55
int i,j;
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
b[(*n)++]=s[j][i];}
int i,j;*n=0;
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
b[(*n)++]=s[j][i];} 展开
展开全部
思路:
设行为j,列为i,s[j][i]为二维数组保存了以上数据,b[n]为一维数组,用于保存要显示的结果
根据要输出的结果,分步得出过程
第一步:给列i赋初值0,行j循环赋值0,1,2,此时将s[0][0],s[0][1],s[0][2]逐步赋给b[n++],n设初值为0,即n=0,循环结束时,n=3
第二步:循环给列i赋值1,行j循环赋值0,1,2,此时将s[1][0],s[1][1],s[1][2]逐步赋给b[n++],循环结束时,n=6
第三步:循环给列i赋值2,行j循环赋值0,1,2,此时将s[2][0],s[2][1],s[2][2]逐步赋给b[n++],循环结束时,n=9
第四步:循环给列i赋值3,行j循环赋值0,1,2,此时将s[3][0],s[3][1],s[3][2]逐步赋给b[n++],循环结束时,n=12,结束后,只有b[0]到b[11]保存有值,因为是n++,运用完n的值时,n再加1,这时所有循环已经结束,所以不会再对b[12]赋值,但前定义数组时,一定要定义数组的大小,固前定义时是b[12],这是语法要求,故通过2层循环,来给b[]赋值。
先来看看你的代码:
int i,j; n没有定义,数组没有定义
for(j=0;j<nn;j++) n如果是一个变量,那么nn只有满足是一个变量时才会正确,如果
for(i=0;i<mm;i++) 只有一个n变量,要是n*n,且这里逻辑不通,nn究竟你想表达什么?
b[(*n)++]=s[j][i];} mm同理数组中[ ]中的元素个数,没有用指针变量这种方式来使用的,
语法不通
修改后代码:
#include <stdio.h>
void main()
{
int s[3][4]={33,33,33,33,44,44,44,44,55,55,55,55};
int i,j,n,b[12];
n=0;/*n一定要在循环体外提前设好初值*/
for (i=0;i<4;i++)
for (j=0;j<3;j++)
b[n++]=s[j][i];
for (n=0;n<12;n++)
printf("%d ",b[n]);
getch();
}
设行为j,列为i,s[j][i]为二维数组保存了以上数据,b[n]为一维数组,用于保存要显示的结果
根据要输出的结果,分步得出过程
第一步:给列i赋初值0,行j循环赋值0,1,2,此时将s[0][0],s[0][1],s[0][2]逐步赋给b[n++],n设初值为0,即n=0,循环结束时,n=3
第二步:循环给列i赋值1,行j循环赋值0,1,2,此时将s[1][0],s[1][1],s[1][2]逐步赋给b[n++],循环结束时,n=6
第三步:循环给列i赋值2,行j循环赋值0,1,2,此时将s[2][0],s[2][1],s[2][2]逐步赋给b[n++],循环结束时,n=9
第四步:循环给列i赋值3,行j循环赋值0,1,2,此时将s[3][0],s[3][1],s[3][2]逐步赋给b[n++],循环结束时,n=12,结束后,只有b[0]到b[11]保存有值,因为是n++,运用完n的值时,n再加1,这时所有循环已经结束,所以不会再对b[12]赋值,但前定义数组时,一定要定义数组的大小,固前定义时是b[12],这是语法要求,故通过2层循环,来给b[]赋值。
先来看看你的代码:
int i,j; n没有定义,数组没有定义
for(j=0;j<nn;j++) n如果是一个变量,那么nn只有满足是一个变量时才会正确,如果
for(i=0;i<mm;i++) 只有一个n变量,要是n*n,且这里逻辑不通,nn究竟你想表达什么?
b[(*n)++]=s[j][i];} mm同理数组中[ ]中的元素个数,没有用指针变量这种方式来使用的,
语法不通
修改后代码:
#include <stdio.h>
void main()
{
int s[3][4]={33,33,33,33,44,44,44,44,55,55,55,55};
int i,j,n,b[12];
n=0;/*n一定要在循环体外提前设好初值*/
for (i=0;i<4;i++)
for (j=0;j<3;j++)
b[n++]=s[j][i];
for (n=0;n<12;n++)
printf("%d ",b[n]);
getch();
}
追问
这是事先给的在花括号里填!
下面这段是接上图片的
{ printf("%3d",a[i]);
fprintf(out,"%d ",a[i]);
}
printf("\n\n");
fclose(out);
/******************************/
}
展开全部
*n=0; (*n)++ 这就是所谓的内存非法引用, segment fault!!!!
*n=0,就是把 n这个 指针指向0地址, (*n)++ 就是把0地址里的内容加1,0地址是系统保留地址,显然是错误的。
正确的如下:
int i,j,n=0;
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
b[n++]=s[j][i];}
*n=0,就是把 n这个 指针指向0地址, (*n)++ 就是把0地址里的内容加1,0地址是系统保留地址,显然是错误的。
正确的如下:
int i,j,n=0;
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
b[n++]=s[j][i];}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下面的例子程序我都给了注释。。。 你也可以将index 换成 *n。 是一样的
#include<stdio.h>
#define M 3 //这里定义数组的行
#define N 3 // 这里定义数组的列
int main(){
int totalSize = M*N; // 计算将二维数组放到一维数组时一维数组需要空间
int al[totalSize]; //声明一维数组
int index = 0; //
int bl[M][N] = { //将二维数组赋初值,这里用3*3举例
{33,33,33},
{44,44,44},
{55,55,55}
};
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
al[index] = bl[j][i]; // 保持列不动,将每一列的每一行数字赋值给一维数组,这里可知index的作用
index++;
}
}
for(int i=0;i<totalSize;i++)
{
printf("%d ,",al[i]);
}
}
#include<stdio.h>
#define M 3 //这里定义数组的行
#define N 3 // 这里定义数组的列
int main(){
int totalSize = M*N; // 计算将二维数组放到一维数组时一维数组需要空间
int al[totalSize]; //声明一维数组
int index = 0; //
int bl[M][N] = { //将二维数组赋初值,这里用3*3举例
{33,33,33},
{44,44,44},
{55,55,55}
};
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
al[index] = bl[j][i]; // 保持列不动,将每一列的每一行数字赋值给一维数组,这里可知index的作用
index++;
}
}
for(int i=0;i<totalSize;i++)
{
printf("%d ,",al[i]);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询