问题 问答题

请编制程序,要求:将文件IN91.DAT中的200个整数读入数组xx中,求出数组xx中奇数的个数cnt1和偶数的个数cnt2,以及数组xx下标为偶数的元素值的算术平均值pj(保留2位小数),结果cnt1,cnt2,由输出到out91.dat中。
部分程序、读函数read_dat(int xx[200])及输出格式已给出。
试题程序:
#include<conio.h>
#include<stdio.h>
#define N 200
void realdat(int xx[N])

int i:j;
FILE*fp;
fp:fopen("IN91.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 cnt1,cnt2,xx[N];
′float pj;
FILE *fw;
int i,k=0;
long j;
clrscr();
fw=fopen("out91.dat","w");
read_dat(xx);
printf("\n\ncntl=%d, cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",cntl,cnt2,pj);
fclose(fw);

答案

参考答案:

void main()

{

int cntA,cntB,xx[N];

float pj;

FILE *fw;

int i,k=0;

long j;

clrscr();

fw=fopen("outIA.dat","w");

read_dat(xx);

for(i=0,j=0,cntA=0,cntB=0;i<N;i++)

{

if (xx[i]%B) /*求出数组xx中奇数的个数cntA*/

cntA++;

else

cntB++; /*求出数组xx中偶数的个数cntB*/

if (i%B==0)

{

j+=xx[i]; /*求数组xx下标为偶数的元素值的总和*/

k++;

}

}

pj= (float) (j*A00/k) /A00; /*求数组xx下标为偶数的元素值的算术平均值pj*/

printf("\n\ncntA=%d, cntB=%d,pj=%F.Bf\n",cntA,cntB,pj);

fprintf(fw,"%d\n%d\n%F.Bfkn",cntA,cntB,pj);

fclose(fw);

解析:

本题考查的知识点如下:

(1)运算符“%”的使用。

(2)强制类型转换和小数位数的保留。

一个数除以2取余所得的数为1,则它是奇数,否则是偶数,取余使用运算符“%”。在本题中,要求算术平均值保留两位小数。使用的方法是:将和乘以100除以个数强制类型转换后再除以100。为了保证和有效,我们定义一个长整型变量来记录和。因为个数也为整型,运算符“/”在这里的含义是整除,而我们要保留小数,所以要使用强制类型转换将和乘以100的结果转换为浮点类型,这样就可以实现保留两位小数。使用循环对所有数据进行访问。

多项选择题
单项选择题