函数ReadDat( )的功能是实现从文件IN65.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数ChA( ),该函数的功能是:以行为单位把字符串的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个新的字符,第二个字符的ASCII值加第三个字符的ASCII值,得到第二个新的字符,以此类推一直处理到倒数第二个字符,最后一个字符的ASCII值加第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后把已处理的字符串逆转后仍按行重新存入字符串数组xx中,并调用函数WriteDat( )把结果xx输出到文件OUT65.DAT中。
注意:部分源程序已给出。
原始文件存放的格式是:每行的宽度小于80个字符,含标点符号和空格。
请勿改动主函数main( )、读函数ReadDat( )和写函数WriteDat( )的内容。
试题程序:
#include
#include
#include
char xx[50][80];
int maxline=0;
int ReadDat();
void WriteDat();
void ChA(void)
{
}
void main()
{
system("CLS");
if(ReadDat())
{
printf("数据文件IN65.DAT不能打开!\n\007");
return;
}
ChA( );
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("IN65.DAT","r"))==NULL)
return 1;
while(fgets(xx[i],80,fp)!=NULL)
{
p=strchr(xx[i],'\n');
if(p) *p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat()
{
FILE *fp;
int i;
system("CLS");
fp=fopen("OUT65.DAT","w");
for(i=0;i { printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); } fclose(fp); } 【答案】 void ChA(void) { int i,j,k; /*定义循环控制变量*/ int str; /*存储字符串的长度*/ char ch,temp; /*定义字符暂存变量*/ for(i=0;i { str=strlen(xx[i]); /*求得当前行的字符串长度*/ ch=xx[i][0]; /*将第一个字符暂存入ch*/ for(j=0;j /*将该字符的ASCII值与下一个字符的ASCII值相加,得到新的字符*/ xx[i][j]+=xx[i][j+1]; xx[i][str-1]+=ch; /*将最后一个字符的ASCII值与第一个字符的ASCII值相加,得到最后一个新的字符*/ for(j=0,k=str-1;j 组xx中*/ { temp=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=temp; } } } 【解析】本题要对二维数组中的字符元素按行处理,首先要求得当前行所包含的字符数,并保存第一个字符。接着通过循环逐个将每个字符的ASCII值与下一个字符的ASCII值相加,得到新的字符,存入当前位置。然后将保存的第一个字符与最后一个字符相加作为新的最后一个字符。最后再把已经处理过的字符串逆序重新存放到数组xx中。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |