请编制程序ReadDat()实现从文件in.dat中读取100个十六进制数到字符串数组xx中;再编制函数h16to10(),将xx中的十六进制数转换成十进制数并把已转换的十进制数仍存放在字符串数组xx,最后调用函数WriteDat()把结果输出到out.dat文件巾。原始数据文件存放的格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。
请勿改动主函数main()、输出数据函数writeDAT()的内容。
[试题源程序]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAX 10
char xx[MAX][20];
void WriteDat(void);
int ReadDat(void)
FILE*fp;
if((fp=fopen("IN.DAT,"r"))==NULL)return 1:
fclose(fp);
return 0;
void H16tol0(void)
void main()
int i;
for(i=0;i<MAX;i++)memset(xx,0,20);
if(ReadDat())
printf("Can’t open the data file in.dat!\007\n");
return;
H16to10();
WriteDat();
void WriteDat(void)
FILE*fp;
int i;
fp=fopem("OUT DAT","w");
for(i=0;i<MAX;i++)fprintf(fp,"%s\n",xx[i]);
fclose(fp);
参考答案:int ReadDat(void)
{
FILE*fp;
int i,data;
char n[20];
if((fp=fopen("IN.DAT","r")==NULL)return 1;
for(i=0;i<MAX;i++)
{
fscanf(fp,"%x",&data);
itoa(data,yy,16);
strcpy(xx[i],yy);
}
fclose(fp);
return 0;
}
void H16tol0(void)
{
int i,data;
char yy[20];
for(i=0;i<MAX;i++)
{
data:strtol(xx[i],NULL,16);
itoa(data,yy,10);
strcpy(xx[i],yy);
}
}
解析: 本题主要考查的是进制转换问题。要注意本题还要编写ReadDat()函数,本题算法较为简单,难点在于几个关键的系统函数如何使用,比如{scan{(fp,“%x”,&.data)的作用是从文件指针fp指向的文件中读取一个十六进制数存放到变量data中。H16t010(void)实现从十六进制到十进制的转换,strtol()将字符型转换成长整型数,itoa(data,yy,16)将data数据转换成字符串,并存入yy所指的内存单元中,第三个参数表示转换成十六进制数。