1、三级信息管理技术机试-267 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()的功能是实现从文件 IN63.DAT 中读取一篇英文文章,并存入到字符串数组 XX 中。请编制函数 StrCharJL(),该函数的功能是:以行为单位把字符串中的所有字符的 ASC值左移 4 位,如果左移后其字符的 ASCII 值小于等于 32 或大于 100,则原字符保持不变,否则就把左移后的字符 ASC值再加上原字符的 ASC值,得到的新字符仍存入到原字符串对应的位置。之后把已处理的字符串仍按行重新存入字符串数组 xx 中,最后调用函数
2、 WfiteDat()把结果 xx 输出到文件 OUT63.DAT 中。注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于 80 个字符,含标点符号和空格。请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。试题程序#inciudestdio.h#includestring.h#includestdlib.hchar XX5080;int maxline=0;int ReadDat(void);void WriteDat(void);void StrCharJL(void)void main()system(“CLS“);if(Read
3、Dat()printf(“数据文件 IN63.DAT 不能打开/n/007“);return;StrCharJL();WriteDat();int ReadDat(void)FILE*fp;int i=0;char*P;if(fP=fopen(“IN63.DAT“,“r“)=NULL) return 1;while(fgets(xxi,80,fp)!=NULL)P=strchr(xxi,/n);if(P)*P=0;i+;maxline=i;fclose(fp);return 0:void WriteDat(void)FILE*fp;int i;system(“CLS“);fp=fopen(“O
4、UT63.DAT“,“w“);for(i=0;imaxline;i+)printf(“%s/n“,xxi);fprintf(fp,“%s/n“,xxi);fclose(fP);(分数:100.00)_三级信息管理技术机试-267 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()的功能是实现从文件 IN63.DAT 中读取一篇英文文章,并存入到字符串数组 XX 中。请编制函数 StrCharJL(),该函数的功能是:以行为单位把字符串中的所有字符的 ASC值左移 4 位,如果左移后其字符的 ASCII 值小于等于 32
5、或大于 100,则原字符保持不变,否则就把左移后的字符 ASC值再加上原字符的 ASC值,得到的新字符仍存入到原字符串对应的位置。之后把已处理的字符串仍按行重新存入字符串数组 xx 中,最后调用函数 WfiteDat()把结果 xx 输出到文件 OUT63.DAT 中。注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于 80 个字符,含标点符号和空格。请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。试题程序#inciudestdio.h#includestring.h#includestdlib.hchar XX5080;int m
6、axline=0;int ReadDat(void);void WriteDat(void);void StrCharJL(void)void main()system(“CLS“);if(ReadDat()printf(“数据文件 IN63.DAT 不能打开/n/007“);return;StrCharJL();WriteDat();int ReadDat(void)FILE*fp;int i=0;char*P;if(fP=fopen(“IN63.DAT“,“r“)=NULL) return 1;while(fgets(xxi,80,fp)!=NULL)P=strchr(xxi,/n);if
7、(P)*P=0;i+;maxline=i;fclose(fp);return 0:void WriteDat(void)FILE*fp;int i;system(“CLS“);fp=fopen(“OUT63.DAT“,“w“);for(i=0;imaxline;i+)printf(“%s/n“,xxi);fprintf(fp,“%s/n“,xxi);fclose(fP);(分数:100.00)_正确答案:(void StrCharJL(void)int i,j; /*定义循环控制变量*/int str; /*用来存储每行字符串的长度*/char ch: /*保存当前取得的字符*/for(i=0
8、;imaxline;i+) /*以行为单位获取字符*/str=strlen(xxi); /*求得当前行的字符串长度*/for(j=0;jstr;j+)ch=xxij; /*获取当前字符*/if(ch4 =32 | ch4 100)continue; /*如果左移 4 位后字符的。ASC值小于等于 32 或大于 100,则原字符保持不变*/elsexxlij+;ch4;/*否则把左移后的字符 ASC值加上原字符的 AS值*/)解析:解析 利用双重循环按照先行后列的顺序逐个取得数组中的字符,外层循环用来控制行数,内层循环用来依次取得各行中的每一个字符。循环内部用一个 if 语句判断当前字符的 ASC码左移 4 位后是否满足小于等于 32 或者大于 100 的条件,如果满足,则该字符保持不变,否则就把左移后的字符 ASC值加上原字符的 ASC值,作为得到的新字符存入当前位置。