问答题 请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<stdlib.h>
#define M 14
void NONO();
void fun(char(*t)[M],int*a,int*c)
{
}
void get(char(*s)[M])
{int i,j; for(i=0;i<M;i++)
{for(j=0;j<M;j++)
{s[i][j]=65+rand()%12;printf("%c",s[i][j]);}
printf("/n");
}
}
main()
{char a[M][M];
int x,y;
get(a);
fun(a,&x,&y);
printf("A=%d C=%d/n",x,y);
NONO();
}
void NONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
FILE *fp,*wf;
int i,j,x,y;
char a[M][M];
fp=fopen("c:/test/in.dat","r");
wf=fopen("c:/test/out.dat","w");
for(i=0;i<M;i++)
{for(j=0;j<M;j++)
{fscanf(fp,"%c",&a[i][j]);}
}
fun(a,&x,&y);
fprintf(wf,"A=%d/n",x);
fprintf(wf,"C=%d/n",y);
fclose(fp);
fclose(wf);
【正确答案】
【答案解析】int i=0,j=0;//循环统计的下标
*a=0;//初始化a字符统计的个数
*c=0;//初始化c字符统计的个数
for(i=0;i<M;i++)//行
{
for(j=0;j<M;j++)//列
{
if(t[i][j]=="A")//字符是a,计数
(*a)++;
if(t[i][j]=="C")//字符是c,计数
(*c)++;
}
} [解析]
对二维数组的行列分别循环,行优先,查找数组中元素为A或者C,分别对其进行计数。