19.已知数据文件IN.dat中存有200个四位数,并已调用读函数rdata()把这些数存入数组a中,请编写函数evenvalue(),其功能是:如果四位数每位上的数字均是0、2、4、6或8,则统计出满足此条件的四位数的个数count,并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。
【答案】
void evenvalue()
{ int bb[4];
int i, j, k, flag;
for (i=0; i<200; i++)
{ bb[0] = a[i]/1000;
bb[1] = a[i]%1000/100;
bb[2] = a[i]%100/10;
bb[3] = a[i]%10;
for (j=0; j<4; j++)
{ if (bb[j]%2 == 0)
{ flag = 1;
}
else
{ flag = 0;
break;
}
}
if (flag == 1)
{ b[count] = a[i];
count++;
}
}
for (i=0; i for (j=i+1; j if (b[i] < b[j]) { k = b[i]; b[i] = b[j]; b[j] = k; } } 20.函数RData()实现从文件IN.dat中读取一篇英文文章存入字符串数组StrResult中;请编写Strmove()函数,其功能是:以行为单位,依次把字符串中所有小写字母"o"左边的字符串内容移到该字符串的右边存放,然后把小写字母"o"删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组StrResult中。最后main()函数调用函数WData(),把结果StrResult输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 例如,原文:n any field.Yu can create an index you have the corlrectrecord. 结果:n any field.Yu can create an index rd.yu have the crlrectrec 【答案】 void Strmove(void) { int i, j, k; char buf[80]; for (i=0; i { j = strlen(StrResult[i])-1; while (StrResult[i][j]!='o' && j>=0) j--; if (j < 0) continue; StrResult[i][j] = 0; strcpy(buf, &StrResult[i][j+1]); k = j = 0; while (StrResult[i][j]) { while (StrResult[i][j]!='o' && StrResult[i][j]) j++; if (!StrResult[i][j]) { strcat(buf, &StrResult[i][k]); break; } StrResult[i][j] = 0; strcat(buf, &StrResult[i][k]); j++; k = j; } strcpy(StrResult[i], buf); } } 21.函数RData()实现从文件IN.dat中读取一篇英文文章并存入到字符串数组StrResult中,请编写函数StrRes(),其功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组StrResult中,最后调用函数WData(),把结果StrResult输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 例如,原文:You He Me I am a student. 结果:Me He You student a am I 【答案】 char StrRes(void) { int i, j, k, strl, l; for (i=0; i for (j=0; j<(int)strlen(StrResult[i]); j++) if (!isalpha(StrResult[i][j]) && StrResult[i][j]!=' ') StrResult[i][j] = ' '; for (l=0; l { char ch[80] = {0}; char pp[80] = {0}; strl = strlen(StrResult[l]); i = strl-1; k = 0; while(1) { while (isalpha(StrResult[l][i]) && i >= 0) { for (j=k; j>=0; j--) pp[j+1] = pp[j]; pp[0] = StrResult[l][i]; k++; i--; } strcat(ch, pp); strcpy(pp, ""); k = 0; if (i < 0) break; while (!isalpha(StrResult[l][i]) && i >= 0) { for (j=k; j>=0; j--) pp[j+1] = pp[j]; pp[0] = StrResult[l][i]; k++; i--; } strcat(ch, pp); strcpy(pp, ""); k = 0; if (i < 0) break; } strcpy(StrResult[l], ch); } }