函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组xx中,请编制函数ConvertCharA,其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母Z,则改

题目

函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组xx中,请编制函数ConvertCharA,其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母Z,则改写成字母a,大写字母和其他字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。最后main函数调用函数WriteDat把结果xx输出到文件out.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序存放在test.c文件中。 请勿改动主函数main、读函数ReadDat和输出函数WriteDat的内容。

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

函数ReadDat()的功能是实现从文件IN5.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数ConvertCharA(),该函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。

例如,原文:Adb.Bcdza

abck.LLhj

结果:Aec.Bdeab

bcdl.LLik

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序已给出。

请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。


#include
#include
#include
char xx[50][80] ;
int maxline = 0 ;/* 文章的总行数 */
int ReadDat(void) ;
void WriteDat(void) ;
void ConvertCharA(void)
{
int i,j; /*定义循环控制变量*/
int str; /*存储字符串的长度*/
for(i=0;i
{
str=strlen(xx[i]); /*求得当前行的字符串的长度*/
for(j=0;j
if(xx[i][j]>='a' && xx[i][j]<='z') /*如果是小写字母*/
if(xx[i][j]=='z')
xx[i][j]='a'; /*如果是小写字母z,则改写成字母a*/
else
xx[i][j]+=1; /*其他的小写字母则改写为该字母的下一个字母*/
}
}
void main()
{
system("CLS");
if(ReadDat())
{
printf("数据文件IN5.DAT不能打开!\n\007") ;
return ;
}
ConvertCharA() ;
WriteDat() ;
}
int ReadDat(void)
{
FILE *fp ;
int i =0 ;
char *p ;
if((fp = fopen("IN5.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(void)
{
FILE *fp ;
int i ;
system("CLS");
fp = fopen("OUT5.DAT", "w") ;
for(i = 0 ; i < maxline ; i++)
{
printf("%s\n", xx[i]) ;
fprintf(fp, "%s\n", xx[i]) ;
}
fclose(fp) ;
}

第2题:

函数ReadDat( )的功能是实现从文件IN7.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数SortCharD( ),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat( )把结果xx输出到文件OUT7.DAT中。

例如,原文:dAe,BfC

CCbbAA

结果:fedCBA,

bbCCAA

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序已给出。

请勿改动主函数main( )、读函数ReadDat( )和写函数WriteDat( )的内容。


#include
#include
#include
char xx[50][80];
int maxline=0;
int ReadDat(void);
void WriteDat(void);
void SortCharD()
{
int i,j,k; /*定义循环控制变量*/
int str; /*存储字符串的长度*/
char temp; /*定义数据交换时的暂存变量*/
for (i=0;i
{
str=strlen(xx[i]); /*求得当前行的字符串长度*/
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;
}
}
}
void main()
{
system("CLS");
if (ReadDat())
{
printf("数据文件IN7.DAT不能打开!\n\007");
return;
}
SortCharD();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("IN7.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("OUT7.DAT","w");
for(i=0;i
{
printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}

第3题:

函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组XX中,请编制函数ConvertCharD,其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z,其他字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。最后main函数调用函数WriteDat把结果xx输出到文件out.dat中。例:原文:Adb.Bcdza abck.LLhj结果:Aca.Bbcyzzabj.LLgi原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序存放在test.c文件中。 请勿改动主函数main、读函数ReadDat0和输出函数WriteDat的内容。


正确答案:
【审题关键句】以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,大小写不变,其他字符不变。
【解题思路】
①定义整型循环变量i、j。
②在第一层for循环中,循环变量i从0开始,依次递增直到其值等于maxline,实现对文章每行的处理。第二层for循环中,循环变量J从0开始,依次递增直到其值大于或等于strlen(xx[i]),在循环体中,利用if条件语句判断如果xx[i][j]的值为字符’a’,则把xx[i][j]的值设置为字符’2’。否则如果XX[i][D]的值在小写字符’at与’2’之间,则把xx[i][j]的值减1,把其值变成其前一个字符的ASCII码。
【参考答案】

第4题:

程序test.C的功能是:把S字符串中的所有字母改写成该字母的下一个字母,字母2改写成字母a,字母z改写成字母 A,其他字符不做改变。 请考生编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT把结果输出到文件0ut.dat中。例如:S字符串中原有的内容为:Mn.123xyz,则调用该函数后,结果为:N0.123Ayz。 注意:部分源程序存在test.c文件中。 请勿改动数据文件in.dat中的任何数据、主函数main和输出数据函数read writeDAT的内容。


正确答案:
【审题关键句】把str字符串中的所有字母改写成该字母的下一个字母。
【解题思路】
①定义局部字符变量ch和字符指针变量P,并使其指向字符串S。
②当P所指的字符非空时,把字符*p赋给字符ch,当字符ch不是字母Z或者’Z’时,把字符ch的ASCII码值加1,变成其下一个字符的ASCII码,并把这个值赋给字符*p,否则,如果字符ch是字符Z,则把字符*p的设置为字符’a’,否则,如果字符ch是字符’Z’,则把字符*p的设置为字符’Af,字符指针变量加1,使其指向字符串s的下一个字符,在下一次循环中处理。
【参考答案】

第5题:

函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组XX中,请编制函数StrCharJR,其函数的功能是t以该文章中的行为单位把字符串中的所有字符的二进制ASCII值右移4位,高位补0,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的值仍存入原字符串对应的位置上,之后把已处理的结果仍按行重新存入数组XX中。最后 main函数调用函数WriteOat把结果XX输出到文件out.dat中。 例如: ”z”对应的ASCII值为7AH,二进制值为01111010,右移4位后为00000111,加上原来”2”的ASCII值01111010得到10000001结果。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按字符处理。 注意:部分源程序存放在test.C文件中。 请勿改动主函数main、读函数ReadDat和输出函数WriteDat的内容。


正确答案:
【审题关键句】字符的ASCII值右移4位二进制位,高位补0后加原字符的ASCII值。
【解题思路】
①定义两个循环变量i、j和一个无符号字符变量tmp。
②在第一个for循环语句中,循环变量i从0开始,依次递增直到其值等于文章最大行数maxline。在第二个for循环中,从每行第1个字符开始,依次递增直到其值等于该行字符串的最大长度,然后在循环体中指定每次循环时,将第i行第i个位置上的字符的ASCII值的二进制数右移4位,然后将所得的值再加上原字符的ASCII码值。
【参考答案】

第6题:

函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组XX中;请编制函数SortCharD,其函数的功能是:以行为单位对字符按ASCII码从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组XX中。最后main函数调用函数WriteDat把结果XX输出到文件out.dat中。 例:原文:dAe,BfC. CCbbAA结果:fedCBA.,bbCCAA原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序存放在test.C文件中。 请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。


正确答案:
【审题关键句】以行为单位对字符按从大到小排序,结果仍按行重新存入字符串数组中。
【解题思路】
①首先定义字符变量ch和无符号整型变量i、j、k。
②对字符二维数组XX,在第一层for循环中,变量i从0开始,依次递增直到其值等于maxline,实现对文章每行的扫描,在第二层for时循环中,变量j从0开始,依次递增直到其值等于strlen(xx[i]),即第i行的长度。在第三层循环语句中,变量k从j开始,依次递增直到其值等于strlen(xx[i]),对每一行中的数组元素xx[il[j]、XX[i][k]按照它们的ASCII码值的大小进行比较,如果xx[i][j]的ASCII码小于XX[i][k]的ASCII码,则两者交换,实现整篇文章中的字符按ASCII码值从大到小的顺序进行排序。
【参考答案】

第7题:

函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组)XX中;请编制函数StrOR,其函数的功能是:以该文章中的行为单位依次扫描一行字符串中的小写字母0,每次将小写母0的左右字符串部分作交叉换位,即左边字符串移到小写字母0的右边,而原先右边的则反之,并把小写母O删除,依次直至这一行中的小写母0处理完,之后把已处理的字符串仍按行重新存入字符串数组)XX中。 最后main函数调用函数WriteDat把结果XX输出到文件out.dat中。例如原文:you have the correct record. 第1个o:U have the correct record.Y 第2个o:rrect record.yuhavethe c 第3个o:rd.yuhavethe crrect rec 提示:对于每一行字符串数组处理有如下一种递归调用算法可供参考: 查找字符串中首个小写字母'0'的位置;没有找到'0',则结束递归调用;找到'0',则按题意对字符串进行处理,形成新的字符串,然后返回,继续进行递归调用。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序存放在test.c文件中。 请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。


正确答案:
【审题关键句】以行为单位,依次把字符串中所有小写字母0左边的字符串内容移到该串的右边存放,然后把小写字母0删除,余下的字符串内容移到已处理字符串的左边存放。
【解题思路】
①定义循环变量i和字符数组before[80]、after[80]及字符指针变量P。
②在for循环语句中,循环变量i从0开始,依次递增直到其值等于maxline,在循环体中,利用while循环语句一直执行如下的操作,调用库函数strchr定位字母0在字符串xx[i]中第一次出现的位置P。如果P非空,说明在此字符串中找到了字母0,对于xx[i]有字母0的情况,从字符串xx[i]的第xx[i]+(p.xx[i]+1)字符开始,直到字符的结尾,调用字符串拷贝函数strcpy把字母0后面的字符串拷贝到字符数组after[80]中,然后把+p的值设置为0,删除字母0,调用字符串拷贝函数s仃cpy把字符串xx[i]拷贝到字符数组before[80]qh,调用字符串拷贝函数strcpy把字符数组after[80]中的值拷贝到xx[i],再调用字符串连接函数streat把xx[i]与before[80]相连接,实现字母0前后字符串的互换。如果P为空,说明在XX[i]中没有字母0,则退出while循环。进入下一行字符串的处理。
【参考答案】

第8题:

函数ReadDat实现从文件in.dat中读取一篇英文文章存入到无符号字符串数组xx中,请编制函数StrCharJL,其函数的功能是:以行为单位把字符串中的所有字符的ASCII值左移4位二进制位,低位补0,如果左移后,其值小于等于32或大于l00,则原字符保持不变,留在原字符串对应的位置上,否则就把左移后的值再加上原字符的ASCII值,得到新的值仍存入原字符串对应的位置上,之后把已处理的字符串仍按行重新存入无符号字符串数组xx中。最后main函数调用函数 WriteDat把结果xx输出到文件out.dat中。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序存放在test.c文件中。 请勿改动主函数main、读函数ReadDat和输出函数WriteDat的内容。


正确答案:
【审题关键句】字符的ASCII值左移4位二进制位,低位补0,新值小于等于32或大于100,则原字符保持不变;否则等于左移后的值再加上原字符的ASCII值。
【解题思路】
①定义无符号字符局部变量tmp和循环整型变量i、j。
②在第一层for循环中,循环变量i从0开始,依次递增直到其值等于或大于maxline,实现对文章每行字符串的处理。在第二层for循环中,循环变量j从0开始,依次递增直到其值等于strlen(xx[i]),在循环体中,对字符xx[i][j]的ASCII码值左移4位后所得的值保存到变量tmp,再利用if条件语句判断,如果tmp的值大于32且小于等于100,则把tmp的值与xx[i][j]的值相加之和赋给xx[i][j]。
【参考答案】

第9题:

函数ReadDat()的功能是实现从文件IN73.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数CovertCharD(),该函数的功能是:以行为单位把字符串中的所有小写字母改成该字母的上一个字母,如果是字母a,则改成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数 WriteDat()把结果xx输出到文件OUT73.DAT中。

例如:原文Adb Bcdza

abck LLhj

结果Aca Bbcyz,

zabj LLgi

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序已给出。

请勿改动主函数main()、读函数ReadDat()和写函数Wiltedat()的内容。

试题程序:

include<stdio. h>

include<string. h>

include<conio. h>

char xx[50] [80];

int maxline=0;

int ReadDat (void);

void WriteDat (void);

void CovertCharD ( )

{

}

void main ( )

{

clrscr ( );

if (ReadDat ( ) )

{

printf ( "数据文件IN73 .DAT 不能打开\n\007");

return;

}

CovertCharD ( );

WriteDat ();

}

int ReadDat ()

{

FILE *fp;

int i=0;

char *p;

if ( ( fp= fopen ( "IN73. DAT", "r" ) ) = =NULL) return

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 (void)

{

FILE *fp;

int i;

clrscr ( );

fp=fopen("OUT73 .DAT", "w");

for (i=0; i<maxline; i++)

{

printf ( "%s\n" ,xx [i] );

fprintf (fp, "%s\n" ,xx[i] );

}

fclose (fp);

}


正确答案:void CovertCharD ( ) { int i; char *pf; for ( i=0; imaxline; i++ ) { pf=xx [i]; /*指针pf指向各行的首地址*/ while (*pf) if (*pf=='a') /*如果是字母a则改成字母z*/ { *pf='z'; pf++; /*指向下一个字符*/ } else if(*pf>='b'&& *pf='z') /*小写字母'b'到'z'改成该字母的上一个字母*/ { *pf-=l; Pf++; /*指向下一个字符*/ } else pf++; /*如果不满足条件则不变字符指向下一个字符*/ } }
void CovertCharD ( ) { int i; char *pf; for ( i=0; imaxline; i++ ) { pf=xx [i]; /*指针pf指向各行的首地址*/ while (*pf) if (*pf=='a') /*如果是字母a,则改成字母z*/ { *pf='z'; pf++; /*指向下一个字符*/ } else if(*pf>='b'&& *pf='z') /*小写字母'b'到'z'改成该字母的上一个字母*/ { *pf-=l; Pf++; /*指向下一个字符*/ } else pf++; /*如果不满足条件,则不变字符,指向下一个字符*/ } } 解析:本题考查的知识点如下:
(1)字符串的计算。
(2)循环结构的使用。
(3)使用指针实现对数组的访问。
本题中,将字符存放在二维数组中,以行为字符处理的基本单位,可以定义一个指针,指向每一行字符。初始时,指针指向每一行的第一个元素,增加指针地址就可以实现对一行数据的完全访问,要将所有小写字母改成它的前一个字母,小写字母的ASCⅡ码是连续的,可直接将其ASCⅡ码减1,则得要求的字符。注意:字母a要单独处理,其他字符保持不变。