1、国家三级(网络技术)机试模拟试卷 219及答案与解析 一、程序设计题 1 文件 IN DAT中存放有 100条对 10个候选人进行选举的记录,数据存放的格式是每条记录的长度均为 10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推。每一位内容均为字符 0或 1, 1表示此人被选中, 0表示此人未被选中,若一张选票选中人数大于 5个人时被认为无效的选票。函数ReadData()负责将 IN DAT中的内容读人数组 inBuf中。请编制函数 calculate()来统计每个人的选票数并把得票数依次存人 outBuf0 outBuf9中,最后调用函数WriteData()把结
2、果 outBuf输出到文件 OUT.DAT中。 注意;部分源程序已给出。 请勿改动主函数 main()、读函数 ReadData()和写函数 WriteData()的内容。 试题程序; #include #include(memory h #define LINE 100 #define COL 10 char inBufLINECOL; int outBufCOL; int ReadData(void); void WriteData(void); void calculate(void) void main() int i; for(i=0; i10; i+)outBufi=0; if(R
3、eadData() printf(“IN DAT cant be opened 007 n“); return; calculate(); writeData(); int ReadData(void) FILE*fp; int i; char ttCOL+1; if(fp=fopen(“IN DAT“, “r“)=NULL) return 1; for(i=0; iLINE; i+) if(fgets(tt, COL+1, fp)=NULL) return 1; memcpy(inBufi, tt, COL); fclose(fp); return 0; void WriteData(voi
4、d) FILE*fp; int i; fp=fopen(“OUT DAT“, “w“); for(i=0; i10; i+) fprintf(fp, “ d n“, outBufi); printf(“the amounts of number dsvotes= d n“, i+1, outBufi); fclose(fp); 国家三级(网络技术)机试模拟试卷 219答案与解析 一、程序设计题 1 【正确答案】 void calculate(void) int i, j, k, sum, use_i; int usefulLINE=-1; k=0; for(i=0; iLINE; i+) su
5、m=0; 将总和清零,将 ASCII码转化成对应的数字,并加入到总和中 for(j=0; jCOL; j+)sum+=(inBufij-0); if(sum=5) 如果该选票选的人数小于等于 5人,则视为有效选票 usefulk=i; 将有效的选票的标号放到数组 useful中 k+; 将有效选票的计数器加 1 use_i=k; 记录有效选票的个数 for(j=0; jCOL; j+) for(k=0; kuse_i; k+)outBufj+=(inBufusefulkj-0); 统计有效选票数 【试题解析】 本题主要考查如何将读入的字符型的数字转换成对应的整型数字。由于数字 O 9的 ASCII码是连续增加的,故可用 0 9的 ASCII码值减去 0的ASCII码值而得到数字 0 9。本题的另一个难点是如何在除去无效选票之后再进行统计。在程序中选用的是一个数组 useful来记录有效选票的号码,将该数组中的值作为选票数组 inBuf的行下标,从而实现了对无效选票的排除。