題目:
已知數(shù)據(jù)文件IN.DAT中存有200個四位數(shù), 并已調(diào)用讀函數(shù) readDat()把這些數(shù)存入數(shù)組a中,請考生編制一函數(shù)jsVal(),其功能是:從數(shù)組a的頭開始,依次取每20個數(shù)中的值組成一個數(shù), 這樣可以獲得10個新數(shù)并存入數(shù)組b中,接著把數(shù)組b中的數(shù)按從小到大的順序重新存入數(shù)組b中。最后main()函數(shù)調(diào)用寫函 數(shù)writeDat()把結(jié)果b輸出到OUT.DAT文件中。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定義: a[200]、b[10]
請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù)、主函數(shù)main()、讀函數(shù)readDat()和寫函數(shù)writeDat()的內(nèi)容。
初始化程序:
#include
#define MAX 200
int a[MAX], b[10];
void jsVal()
{
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen(in.dat, r) ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, %d, &a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
for(i = 0 ; i < 10 ; i++)
printf(b[%d]=%d\n, i, b[i]) ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(out.dat, w) ;
for(i = 0 ; i < 10 ; i++) fprintf(fp, %d\n, b[i]) ;
fclose(fp) ;
}
參考答案:
#include
#define MAX 200
int a[MAX], b[10];
void jsVal()
{
int i,j,k; /* j,k,i-循環(huán)變量 */
int iMax;
for(i=0;i<10;i++) /* 根據(jù)取數(shù)要求循環(huán) */
{
iMax=0;
for(j=i*20;j<(i+1)*20;j++) if(iMaxb[i]=iMax;
for(j=0;j{
if(b[j]>iMax) /* 在b中尋找dt的位置 */
{
for(k=i;k>j;k--) b[k]=b[k-1]; /* 順序移動 */
b[j]=iMax;
break;
}
}
}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen(in.dat, r) ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, %d, &a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
for(i = 0 ; i < 10 ; i++)
printf(b[%d]=%d\n, i, b[i]) ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(out.dat, w) ;
for(i = 0 ; i < 10 ; i++) fprintf(fp, %d\n, b[i]) ;
fclose(fp) ;
}
本題評析:
本題,是一道考察循環(huán)和數(shù)組排序的題目,通過20個一個平均一般可以安排兩層循環(huán),結(jié)合本題獲得10個值的要求,在外層安排0-9的循環(huán)。
數(shù)組的排序一般可以使用冒泡和二分等算法排序,在本題目中,加入的因素是可以在獲得數(shù)據(jù)后直接在數(shù)組中尋找到合適的位置,這樣我們可以假設(shè)b已經(jīng)是有序的數(shù)組,可以簡化程序。
已知數(shù)據(jù)文件IN.DAT中存有200個四位數(shù), 并已調(diào)用讀函數(shù) readDat()把這些數(shù)存入數(shù)組a中,請考生編制一函數(shù)jsVal(),其功能是:從數(shù)組a的頭開始,依次取每20個數(shù)中的值組成一個數(shù), 這樣可以獲得10個新數(shù)并存入數(shù)組b中,接著把數(shù)組b中的數(shù)按從小到大的順序重新存入數(shù)組b中。最后main()函數(shù)調(diào)用寫函 數(shù)writeDat()把結(jié)果b輸出到OUT.DAT文件中。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定義: a[200]、b[10]
請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù)、主函數(shù)main()、讀函數(shù)readDat()和寫函數(shù)writeDat()的內(nèi)容。
初始化程序:
#include
#define MAX 200
int a[MAX], b[10];
void jsVal()
{
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen(in.dat, r) ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, %d, &a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
for(i = 0 ; i < 10 ; i++)
printf(b[%d]=%d\n, i, b[i]) ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(out.dat, w) ;
for(i = 0 ; i < 10 ; i++) fprintf(fp, %d\n, b[i]) ;
fclose(fp) ;
}
參考答案:
#include
#define MAX 200
int a[MAX], b[10];
void jsVal()
{
int i,j,k; /* j,k,i-循環(huán)變量 */
int iMax;
for(i=0;i<10;i++) /* 根據(jù)取數(shù)要求循環(huán) */
{
iMax=0;
for(j=i*20;j<(i+1)*20;j++) if(iMaxb[i]=iMax;
for(j=0;j{
if(b[j]>iMax) /* 在b中尋找dt的位置 */
{
for(k=i;k>j;k--) b[k]=b[k-1]; /* 順序移動 */
b[j]=iMax;
break;
}
}
}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen(in.dat, r) ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, %d, &a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
for(i = 0 ; i < 10 ; i++)
printf(b[%d]=%d\n, i, b[i]) ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(out.dat, w) ;
for(i = 0 ; i < 10 ; i++) fprintf(fp, %d\n, b[i]) ;
fclose(fp) ;
}
本題評析:
本題,是一道考察循環(huán)和數(shù)組排序的題目,通過20個一個平均一般可以安排兩層循環(huán),結(jié)合本題獲得10個值的要求,在外層安排0-9的循環(huán)。
數(shù)組的排序一般可以使用冒泡和二分等算法排序,在本題目中,加入的因素是可以在獲得數(shù)據(jù)后直接在數(shù)組中尋找到合適的位置,這樣我們可以假設(shè)b已經(jīng)是有序的數(shù)組,可以簡化程序。