76.函数RData()实现从文件IN.dat中读取20行数据存放到字符串数组str中(每行字符串长度均小于80)。请编写函数stringSort(),其功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组str中。最后调用函数WData(),把结果str输出到OUT.dat文件中。
条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。
例如,位置 0 1 2 3 4 5 6 7 8
原字符串 a b c d h g f e
1 2 3 4 9 8 7 6 5
处理后字符串 h g f e d c b a
位置 8 7 6 5 9 4 3 2 1
【答案】
void stringSort()
{ int i, j, k, strl, half;
char ch;
for (i=0; i<20; i++)
{ strl = strlen(str[i]);
half = strl/2;
for (j=0; j for (k=j+1; k if (str[i][j] < str[i][k]) { ch = str[i][j]; str[i][j] = str[i][k]; str[i][k] = ch; } for (j=half-1, k=strl-1; j>=0; j--, k--) { ch = str[i][j]; str[i][j] = str[i][k]; str[i][k] = ch; } } } 77.函数RData()的功能是实现从文件IN.dat中读取一篇英文文章存入到字符串数组original中。请编写函数CharAdd(),其功能是:以行为单位把字符串中的第1个字符的ASCII值加第2个字符的ASCII值,得到第1个新字符,第2个字符的ASCII值加第3个字符的ASCII值,得到第2个新字符,以此类推,一直处理到倒数第2个字符,最后1个字符的ASCII值加原第1个字符的ASCII值,得到最后1个新的字符。得到的新字符分别存放在原字符串对应的位置上,最后把已处理的字符串逆转后按行重新存入字符串数组original中。最后调用函数WData(),把结果original输出到OUT.dat文件中。 原始数据文件存放的格式是:每行的宽度均小于 80个字符(含标点符号和空格)。 【答案】 void CharAdd(void) { int i, j, k, str; char ch; for (i=0; i { str = strlen(original[i]); ch = original[i][0]; for (j=0; j original[i][j] += original[i][j+1]; original[i][str-1] += ch; for (j=0, k=str-1; j { ch = original[i][j]; original[i][j] = original[i][k]; original[i][k] = ch; } } } 78.编写函数FibValue(),其功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 最后调用函数WData()从IN.dat中读取50个数据t,分别得出结果,且把结果输出到OUT.dat文件中。 例如,当t=1000时,函数值为1597。 【答案】 int FibValue(int t) { int f1 = 0, f2 = 1, fn; fn = f1+f2; while (fn <= t) { f1 = f2; f2 = fn; fn = f1+f2; } return fn; }