本系列資料由"韜略宏智" 授權(quán)發(fā)布,任何網(wǎng)站不得轉(zhuǎn)載,否則追究法律責(zé)任。
第1套
請(qǐng)編寫一個(gè)函數(shù)jsValue(int m,int k,int xx[]),該函數(shù)的功能是:將大于整數(shù)m且緊靠m的k個(gè)素?cái)?shù)存入數(shù)組xx傳回。最后調(diào)用函數(shù)readwriteDat()讀取10組數(shù)據(jù),分別得出結(jié)果且把結(jié)果輸出到文件out1.dat中。部分程序已經(jīng)給出。
例如:若輸入17,5,則應(yīng)輸出:19,23,29,31,37。
請(qǐng)勿改動(dòng)主函數(shù)main()和輸出數(shù)據(jù)函數(shù)readwriteDat()的內(nèi)容。
#include
#include
void readwriteDat();
void jsValue (int m,int k,int xx[])
{
}
main()
{
int m,n,xx[1000];
clrscr();
printf("\nPlease enter two integers:");
scanf("%d,%d",&m,&n);
jsValue (m,n,xx);
for(m=0;m
printf("\n");
readwriteDat();
}
void readwriteDat()
{
int m,n,xx[1000],i;
FILE *rf,*wf;
rf=fopen("in1.dat","r");
wf=fopen("out1.dat","w");
for(i=0;i<10;i++)
{
fscanf(rf,"%d %d",&m,&n);
jsValue (m,n,xx);
for(m=0;m
fprintf(wf,"\n");
}
fclose(rf);
fclose(wf);
}
}
void main()
{
ReadDat();
jsSort();
WriteDat();
}
ReadDat()
{
FILE *in;
int i;
in=fopen("in2.dat","r");
for(i=0;i<200;i++)
fscanf(in,"%d,",&aa[i]);
fclose(in);
}
WriteDat()
{
FILE *out;
int i;
clrscr();
out=fopen("out2.dat","w");
for(i=0;i<10;i++)
{
printf("%d ",bb[i]);
fprintf(out,"%d \n ",bb[i]);
}
fclose(out);
}
答案解析
【答案】
void jsSort()
{
int i,j,data;
for(i=0;i<199;i++)
for(j=i+1;j<200;j++)
{
if (aa[i]%1000>aa[j]%1000)
{
data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}
else if(aa[i]%1000==aa[j]%1000)
if(aa[i]<aa[j])
{
data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}
}
for(i=0;i<10;i++)
bb[i]=aa[i];
}
【解析】
考點(diǎn):(1)數(shù)據(jù)的分解;
(2)分解后的篩選;
(3)篩選后的排序。
本題的解題思路是:對(duì)每個(gè)四位數(shù)的后三位數(shù)字進(jìn)行比較排序,若后三位相等則按原始值進(jìn)行排序。可以通過(guò)“%”來(lái)取出得當(dāng)前數(shù)的后三位數(shù)字,比較排序的算法是每次選定一個(gè)位置的元素和它后面的所有元素相比較,如果比后面的元素大則兩者交換,若相等則按實(shí)際大小排序,比較一趟完成后,此位置上元素的后三位數(shù)字,都不大于其后面所有元素的后三位數(shù)字。比較一直進(jìn)行到所有元素均被訪問(wèn)后結(jié)束,一共需要比較199趟,每趟需要比較199-j次。
程序的流程是:首先調(diào)用了ReadDat()函數(shù)讀入數(shù)據(jù)并且存放在數(shù)組aa中,然后調(diào)用jsSort()函數(shù)對(duì)數(shù)據(jù)進(jìn)行操作,最后由WriteDat()函數(shù)將結(jié)果寫回文件out2.dat中去。
在jsSort()函數(shù)中,前面兩重for循環(huán)的功能是對(duì)數(shù)組aa中的元素進(jìn)行排序,其排序的過(guò)程是根據(jù)每個(gè)元素的后三位數(shù)字大小進(jìn)行升序排列。其中aa[i]%1000操作是舍去千位上的數(shù)字,得到百位、十位和個(gè)位數(shù)字,然后通過(guò)下面else if語(yǔ)句和內(nèi)嵌if語(yǔ)句進(jìn)行判斷,如果元素的后三位相等,則按實(shí)際大小進(jìn)行降序排列。最后執(zhí)行一個(gè)for循環(huán),將排序好的前十位數(shù)字存入數(shù)組bb中,jsSort()函數(shù)結(jié)束。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |