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

涵数readDat()的作用是以文档IN75.DAT中载入20行数据信息储放到标识符串数字能量数组xx中(每列标识符串长短均低于80)。请定编涵数 jsSort(),该涵数的作用是:以个人行为企业对标识符串按住面给定的标准开展排列,排列后的結果仍按行再次存进标识符串数字能量数组xx中,最终启用涵数 writeDat()把結果xx輸出到文档OUT75.DAT中。

标准:从标识符串正中间一分成二,左侧一部分按标识符的ASCII值降序排列,排列后,左侧一部分与右侧一部分按事例所显示开展互换。假如原标识符串长短为单数,则最正中间的标识符不报名参加解决,标识符仍放到原部位上。

比如, 部位 0 1 2 3 4 5 6 7 8

源标识符串 a b c d h g f e

2 3 4 9 8 7 6 5

则解决后标识符串 h g f e d c b a

8 7 6 5 9 4 3 2

留意:一部分源代码已得出。

请勿修改主涵数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("IN75.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("OUT75.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; /*根据自变量half将标识符串分成上下两台分*/

for(j=0;j

排列*/

for(k=j+1;k

if(xx[i][j]

{

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个部位值(也便是下数值)各自移位,再开展相匹配部位标识符的互换。