问题 问答题

请编写函数fun(),该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
例如,若二维数组中的数据为:
W WWW
S S S S
H H H H
则字符串中的内容应是WSHWSHWSHWSH。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#define M 3
#define N 4
void fun(char (*s)[N],char *b)


main()

char a[100],w[M][N]= ’W’, ’W’, ’W’, ’W’,
’S’, ’S’, ’S’, ’S’,’H’, ’H’, ’H’, ’H’;
int i,j;
printf("The matrix:\n");
for(i=0;i<M;i++)
for(j=0;j<N;j++)
printf("%3c",w[i][j]);
printf("\n");

fun(w,a);
printf("The A string:In");
puts(a);
printf("\n\n");

答案

参考答案:

void fun(char (*s) [N],char *b)

{

int i, j, k=0;

for (i=0; i<N; i++) /*按列的顺序依次放到一个字符串中*/

for (j=0; j<M; j++)

b [k++] =s [j] [i];

b[k]=’\0’;

}

解析:

看到程序后,我们很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。注意其中第1个循环条件为i<N(即列),第2个循环的条件为J<M(即行),这是因为在循环的嵌套中越在内层,循环变化就越快。另外,在编写程序中注意是s[j][i]而非s[i][j]。

单项选择题
多项选择题