1、三级数据库技术机试-65 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,要求:将文件 IN92.DAT中的 200个整数读入数组 xx中,求出数组 xx中最大数 max及最大数的个数 ont和数组 xx中值能被 3整除或能被 7整除的数的算术平均值 pj(保留两位小数),结果max, cnt,pj 输出到 out92.dar中。部分程序、读函数 read_dat(intxx200)及输出格式已给出。试题程序:#includeconio.h#includestdi0.h#define N 200void read_dar(int
2、 xxN)int i,j;FILE *fp;fp=fopen(“IN92.DAT“,“r“);for(i=0;i20;i+)for (j=0; j10; j+)fscanf(fp,“%d,“,printf(“%d“,xxi*10+j);printf(“/n“);fclose fp);void main,int i,k,cnt,xxN,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,pjfpri
3、ntf(fw,“%d/n%d/n%6.2f/n“,max,cnt,pj);fclose(fw);printf(“/n“);fclose fp);void main,int i,k,cnt,xxN,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,pjfprintf(fw,“%d/n%d/n%6.2f/n“,max,cnt,pj);fclose(fw);(分数:100.00)_三级数据库技术机试-
4、65 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,要求:将文件 IN92.DAT中的 200个整数读入数组 xx中,求出数组 xx中最大数 max及最大数的个数 ont和数组 xx中值能被 3整除或能被 7整除的数的算术平均值 pj(保留两位小数),结果max, cnt,pj 输出到 out92.dar中。部分程序、读函数 read_dat(intxx200)及输出格式已给出。试题程序:#includeconio.h#includestdi0.h#define N 200void read_dar(int xxN)int i,
5、j;FILE *fp;fp=fopen(“IN92.DAT“,“r“);for(i=0;i20;i+)for (j=0; j10; j+)fscanf(fp,“%d,“,printf(“%d“,xxi*10+j);printf(“/n“);fclose fp);void main,int i,k,cnt,xxN,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,pjfprintf(fw,“%d/
6、n%d/n%6.2f/n“,max,cnt,pj);fclose(fw);printf(“/n“);fclose fp);void main,int i,k,cnt,xxN,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,pjfprintf(fw,“%d/n%d/n%6.2f/n“,max,cnt,pj);fclose(fw);(分数:100.00)_正确答案:(void main ( )in
7、t i,k, cnt,xxN ,max;float pj;FILE *fw;long j=0;clrscr ();fw=fopen ( “out92.dat“ , “w“ );read_dat (xx);max=xx 0;for (i=1, k=0; iN; i+)if (xx i max)max=xx i; /*求出数组 xx中最大数 max*/if(xxi%3=0 |xxi%7=0)j+=xxi; /*求出数组 xx中值能被 3整除或能被 7整除的数的总和* /k+;for (i=0, cnt=0; iN; i+)if (xx i =max)cnt+; /*求出数组 xx中最大数 max的
8、个数*/pj=(float) (j*100/k)/100;/*求出数组 xx中值能被 3整除或能被 7整除的数的平均值*/printf (“/n/nmax=%d, cnt=%d,pj=%6.2f/n“ ,max, cnt,pj);fprintf (fw, “%d/n%dkn%6.2 fin“ ,max, cnt,pj );fclose (fw);)解析:解析 本题考查的知识点如下:(1)运算符“%”的使用。 (2)判断结构中多个条件的布尔运算。首先,要找出数组中最大的元素。先定义第 1个元素为最大的元素,然后依次和后面的元素比较,若后面的数中有大于第 1个元素的,则将这个数定义为最大的元素。再和后面的数进行比较。一个数 a除以 b取余所得的数为 0,则 a能被 b整除。根据题意可知,被 3整除和被 7整除两个条件满足一个即可,所以两个条件之间用“或”运算。在本题中,要求算术平均值保留两位小数。使用的方法是:将和乘以 100除以个数强制类型转换后再除以 100。为了保证和有效,我们定义了一个长整型变量来记录和。因为个数也为整型,运算符“/”在这里的含义是整除,而我们要保留小数,所以要使用强制类型转换将和乘以 100的结果转换为浮点类型,这样就可以实现保留两位小数。