请编制程序,要求:将文件IN92.DAT中的200个整数读入数组xx中,求出数组xx中最大数max及最大数的个数ont和数组xx中值能被3整除或能被7整除的数的算术平均值pj(保留两位小数),结果max, cnt,pj输出到out92.dar中。
部分程序、读函数read_dat(intxx[200])及输出格式已给出。
试题程序:
#include<conio.h>
#include<stdi0.h>
#define N 200
void read_dar(int xx[N])
int i,j;
FILE *fp;
fp=fopen("IN92.DAT","r");
for(i=0;i<20;i++)
for (j=0; j<10; j++)
fscanf(fp,"%d,",&xx[i*10+j]);
printf("%d",xx[i*10+j]);
printf("\n");
fclose fp);
void main,
int i,k,cnt,xx[N],max;
float pj;
FILE *fw;
long j=0;
clrscr();
fw=fopen("out92.dat","w");
read_dat(xx);
printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max, cnt,pj
fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);
fclose(fw);
printf("\n");
fclose fp);
void main,
int i,k,cnt,xx[N],max;
float pj;
FILE *fw;
long j=0;
clrscr();
fw=fopen("out92.dat","w");
read_dat(xx);
printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max, cnt,pj
fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);
fclose(fw);
参考答案:
void main ( )
{
int i,k, cnt,xx[N] ,max;
float pj;
FILE *fw;
long j=0;
clrscr ();
fw=fopen ( "outIB.dat" , "w" );
read_dat (xx);
max=xx [0];
for (i=A, k=0; i<N; i++)
{
if (xx [i] >max)
max=xx [i]; /*求出数组xx中最大数max*/
if(xx[i]%C==0 ||xx[i]%G==0)
{
j+=xx[i]; /*求出数组xx中值能被C整除或能被G整除的数的总和* /
k++;
}
}
for (i=0, cnt=0; i<N; i++)
if (xx [i] ==max)
cnt++; /*求出数组xx中最大数max的个数*/
pj=(float) (j*A00/k)/A00;/*求出数组xx中值能被C整除或能被G整除的数的平均值*/
printf ("\n\nmax=%d, cnt=%d,pj=%F.Bf\n" ,max, cnt,pj);
fprintf (fw, "%d\n%dkn%F.B fin" ,max, cnt,pj );
fclose (fw);
解析:
本题考查的知识点如下:
(1)运算符“%”的使用。
(2)判断结构中多个条件的布尔运算。
首先,要找出数组中最大的元素。先定义第1个元素为最大的元素,然后依次和后面的元素比较,若后面的数中有大于第1个元素的,则将这个数定义为最大的元素。再和后面的数进行比较。一个数a除以b取余所得的数为0,则a能被b整除。根据题意可知,被3整除和被7整除两个条件满足一个即可,所以两个条件之间用“或”运算。在本题中,要求算术平均值保留两位小数。使用的方法是:将和乘以100除以个数强制类型转换后再除以100。为了保证和有效,我们定义了一个长整型变量来记录和。因为个数也为整型,运算符“/”在这里的含义是整除,而我们要保留小数,所以要使用强制类型转换将和乘以100的结果转换为浮点类型,这样就可以实现保留两位小数。