一道三级编程题(整数统计运算题)

来源:百度知道 编辑:UC知道 时间:2024/05/27 02:51:44
第97套(整数统计运算题)
请编制程序prog1.c,从文件in97.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶数的个数cnt2以及数组xx下标为偶数的元素值的算术平均值pj(保留2位小数)。
结果cnt1,cnt2,pj输出到out.dat中。

#include <conio.h>
#include <stdio.h>
#define N 200

void read_dat(int xx[N])
{
int i,j;
FILE *fp;
fp=fopen("in97.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;
system("CLS")
fw=fopen("out.dat","w");
read_dat(xx);

printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj

1、system("CLS")是调用DOS的清屏命令cls,clrscr()是C库函数里的清屏函数。效果是一样的,就是把DOS屏幕上的文字清空。

2、(float)(j*100/k)/100; 是因为整数的除法只保留整数部分结果,会造成结果小数部分丢失。(j*100/k)/100保证了两位有效小数。

3、j+=xx[i]; 有这句可以得到,j是所有下标为偶数的数的和。k是这些数的个数。
pj是求它们的平均数的。

4、把这部分填写到空白处就行:
for(i=0,j=0,cnt1=0,cnt2=0;i<N;i++)
{
if(xx[i]%2!=0)
cnt1++;
else
cnt2++;
if(i%2==0)
{
j+=xx[i];
k++;
}
}
pj=(float)(j*100/k)/100; //这里应该是pj

考试的时候只添关键代码段,也就是整个问题的核心部分。

一般情况下,代码中两个/************************/这样的注释之间就是要你添加的部分,其他地方千万别改哦。

这个问题中你要添加的就是:
for(i=0,j=0,cnt1=0,cnt2=0;i<N;i++)
{
if(xx[i]%2!=0)
cnt1++;
else
cnt2++;
if(i%2==0)
{
j+=xx[i];
k++;
}
}
pj=(float)(j*100/k)/100;
这个题要求得到cnt1、cnt2、pj,答案中通过一个for循环把数组xx从头到尾走了一遍就得到了这三个值,每次循环当中先判断当前数组元素的奇偶性,利用cnt1、cnt2的自增长进行计数,最后是判断该数组元素下标的奇偶性,k用来计数,j用来累加符合条件的元素值,这样以来就基本上得到了我们想要的数据,只是求pj的时候要做一下处理。