测算机级别考試三级互联网技术性上机题(7)

读涵数readDat()的作用是以文档IN76.DAT中载入20行数据信息储放到标识符串数字能量数组xx中(每列标识符串长短均低于80)。请定编涵数 jsSort(),该涵数的作用是:以个人行为企业对标识符串按住面给定的标准开展排列,排列后的結果仍按行再次存进标识符串数字能量数组xx中,最终启用写涵数 writeDat()把結果xx輸出到文档OUT76.DAT中。
标准:从标识符串正中间一分成二,左侧一部分按标识符的ASCII值升序排列,排列后,左侧一部分与右侧一部分按事例所显示开展互换。假如原标识符串长短为单数,则最正中间的标识符不报名参加解决,标识符仍放到原部位上。
比如: 部位 0 1 2 3 4 5 6 7 8
源标识符串 d c b a h g f e
4 3 2 1 9 8 7 6
解决后标识符串 h g f e a b c d
9 8 7 6 1 2 3 4
留意:一部分源代码已得出。
请勿修改主涵数main()、读涵数readDat()和写涵数writeDat()的內容。
考题程序:
#include
#include
#include
char xx[20][80];
void readDat();
void writeDat();
void jsSort()
{
}
void main()
{
readDat();
jsSort();
writeDat();
}
void readDat()
{
FILE *in;
int i=0;
char *p;
in = fopen("IN76.DAT", "r");
while(i 20 ="" fgets(xx[i],="" 80,="" in)="" !="NULL)"
{
p = strchr(xx[i],'n');
if(p) *p = 0;
i++;
}
fclose(in);
}
void writeDat()
{
FILE *out;
int i;
system("CLS");
out = fopen("OUT76.DAT", "w");
for(i=0; i i++)=""
{
printf("%sn", xx[i]);
fprintf(out, "%sn", xx[i]);
}
fclose(out);
} 【回答】
void jsSort()
{
int i,j,k; /*界定电子计数器自变量*/
int str,half; /*界定储存标识符串长短的自变量*/
char temp; /*界定数据信息互换时的暂存自变量*/
for(i=0;i
{
str=strlen(xx[i]); /*求标识符串的长短*/
half=str/2; /*明确各行中标识符串的正中间部位*/
for(j=0;j
for(k=j+1;k
if(xx[i][j]>xx[i][k])
{
temp=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=temp;
}
for(j=half-1,k=str-1;j>=0;j--,k--) /*将左侧一部分与右侧一部分相匹配的标识符开展互换*/
{
temp=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=temp;
}
}
}
【分析】本题考核对二维标识符数字能量数组的解决。
最先规定得各行标识符串的长短(运用求标识符串长短的strlen()涵数),随后运用循环系统构造逐一浏览各行中的每个标识符。
在本题中,应先明确各行中标识符串的正中间部位,随后用挑选法先向正中间部位之前的标识符开展升序排列。然后把正中间部位前的一个部位列入原始部位,标识符串中的最终一个部位也视作原始部位,使2个部位所相匹配的标识符开展互换,互换之后,这2个相匹配部位(也便是下数值)各自移位,再开展相匹配部位标识符的互换。