1、三级信息管理技术机试-270 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:把 s 字符串中的所有字母改成该字母的下一个字母,字母 Z 改成字母 a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数 chg(char*s)实现程序要求,最后调用函数 readwriteDAT()读取 in60.dat 中的字符串,并把结果输出到文件 out60.dat 中。例如:s 字符串中原有的内容为 Mn 123Zxy,则调用该函数后,结果为 No 123Ayz。注意:部分源程序已给出。请勿改动主函数 ma
2、in()和输入输出函数 readwriteDAT()的内容。试题程序#includestdio.h#includestring.h#includestdlib.h#includectype.h#define N 81void readwriteDAT();void chg(char*s)voidmain()char aN;system(“CLS“);printf(“Enter a string:“);gets(a);printf(“The original string is:“);puts(a);chg(a);printf(“The string after modified:“);puts
3、(a);readwriteDAT();void readwriteDAT()int i;char aN;FILE*f,*wf;rf=fopen(“in60.dat“,“r“);wf=fopen(“out60.dat“,“w“);for(i=0;i10;i+)fgets(a,81,rf);chg(a);fprintf(wf,“%s“,a);fclose(rf);fclose(wf);(分数:100.00)_三级信息管理技术机试-270 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:把 s 字符串中的所有字母改成该字母的下一个
4、字母,字母 Z 改成字母 a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数 chg(char*s)实现程序要求,最后调用函数 readwriteDAT()读取 in60.dat 中的字符串,并把结果输出到文件 out60.dat 中。例如:s 字符串中原有的内容为 Mn 123Zxy,则调用该函数后,结果为 No 123Ayz。注意:部分源程序已给出。请勿改动主函数 main()和输入输出函数 readwriteDAT()的内容。试题程序#includestdio.h#includestring.h#includestdlib.h#includectype.h#
5、define N 81void readwriteDAT();void chg(char*s)voidmain()char aN;system(“CLS“);printf(“Enter a string:“);gets(a);printf(“The original string is:“);puts(a);chg(a);printf(“The string after modified:“);puts(a);readwriteDAT();void readwriteDAT()int i;char aN;FILE*f,*wf;rf=fopen(“in60.dat“,“r“);wf=fopen(
6、“out60.dat“,“w“);for(i=0;i10;i+)fgets(a,81,rf);chg(a);fprintf(wf,“%s“,a);fclose(rf);fclose(wf);(分数:100.00)_正确答案:(void chg(char*s)while(*S) /*若当前字符不是字符串结束符,则循环一直进行*/if(*s=Z|*s=Z) /*如果当前字母是Z或者Z*/*s-=25; /*则分别将其改成a;或A*/S+; /*取下一个字母*/else if(*S=a/s+; /*取下一个字母*/else if(*S=A%*S=Y) /*若是大写字母,则改成该字母的下一个字母*/*S+=i;s+; /*取下一个字母*/else s+; /*取下一个字母*/)解析:解析 本题考查用指针访问字符串的方法。这里利用一个 while 循环对从字符串中逐个获取的字符进行判断,如果当前字符是小写字母z或Z,则相应地改成a或者A。如果不是,再接着判断是否是字母,如果是,就改成该字母的下一个字母,否则不作改变。