二级B上级模拟试题及答案(1)
1.请编制函数readdat( )实现从文件hex.in中读取100个十六进 制数到字符串数组xx中; 请编制函数h16to10(), 将xx中的十六进 制数转换成十进制数并把已转换的十进制数仍存放在字符串数组xx 中, 最后调用函数writedat()把结果输出到dec.out文件中。 原始数据文件存放的格式是: 每行存放10个数, 并用逗号隔 开。(每个数均大于0且小于等于2000) 注意: 部分源程序存放在prog1.c中。 请勿改动主函数main()和输出数据函数writedat()的内容。 /*参考答案*/ #include #include #include #include #define max 100 char xx[max][20] ; void writedat(void) ; int readdat(void) { file *fp ; int i,j; char c; if((fp = fopen("hex.in", "r")) == null) return 1 ; /***********读入数据并存放到数组xx中*************/ for(i = 0; i < max; i++) { j = 0; while((c = (char) fgetc(fp)) != eof) { if(c == ’,’) { xx[j] = ’ ’; break; } else if(c != ’ ’ && c != ’ ’)/*去掉回车换行符*/ { if(!isdigit(c))/*如果是字母,则转换为大写*/ c &= 0xdf; xx[j] = c; ++j; } } if(c == eof) break; } fclose(fp) ; return 0 ; }void h16to10(void) { char str[20]; int i,j,len,val; for(i = 0; i < max; i++) { strcpy(str,xx); len = strlen(str); val = 0; for(j = 0; j < len; j++) { val *= 16; val += isdigit(str[j]) ? (str[j] - 48) : (str[j] - 55); } itoa(val,xx,10); }} void main() { int i ; for(i = 0 ; i < max ; i++) memset(xx, 0, 20) ; if(readdat()) { printf("数据文件hex.in不能打开! 07 ") ; return ; } h16to10() ; writedat() ; }void writedat(void) { file *fp ; int i ; fp = fopen("dec.out", "w") ; for(i = 0 ; i < max ; i++) fprintf(fp, "%s ", xx) ; fclose(fp) ; } 相关资料 |