作弊用的选择题索引

来源:互联网 发布:央视财经频道网络直播 编辑:程序博客网 时间:2024/06/05 23:44

最近我们要考英语,有65道选择题是从一本叫《轮机英语考证学习指南》的4000多道选择题中出的。我就想,能不能提取每道选择题题目中每个单词的首字母,然后再接上答案的选项(因为怕考试答案和书中ABCD顺序不一样),要是能成功的话,导入字典,考试就相当于查65个单词了。呵呵。因为我不喜欢我的本专业,而且英语很差,想了这个邪门外道,不过写这个程序还是收获了一点。贴上代码:

获取的答案像这个模式:“=”号前面是每个题目的首字母,“=”号后面是答案,“()”是原题的选项符号。不过还有个程序应该给它按字母排序一下。我正在想。


// 此程序用于截取 0001~9999 规则的文本#include <stdio.h>intlen = 10;chardir1[40] = {0}, dir2[40] = {0},ch[7] = {0},c = '\0';charc1,c2,c3;//查找正确答案的辅助信号量charA[10]={0}, B[10]={0}, C[10]={0}, D[10]={0};//存每道题的ABCD选项boolnoFind=true, noSave=true;FILE*fR = NULL, *fW = NULL;//去掉空格,返回第一个非空字符char passSpace(){do{c = fgetc(fR);} while (c==' ');return c;}// 保存每题答案函数void answer(char ch, char who){if (who=='A'){if (ch!='.' && ch!=' ')A[0] = ch;else{ch = passSpace();A[0] = ch;}for (int i=1; i<len; i++)// 每个选项记录首字母非空的6个字母,{c = fgetc(fR);A[i] = c;}}if (who=='B'){if (ch!='.' && ch!=' ')B[0] = ch;else{ch = passSpace();B[0] = ch;}for (int i=1; i<len; i++){c = fgetc(fR);B[i] = c;}}if (who=='C'){if (ch!='.' && ch!=' ')C[0] = ch;else{ch = passSpace();C[0] = ch;}for (int i=1; i<len; i++){c = fgetc(fR);C[i] = c;}}if (who=='D'){if (ch!='.' && ch!=' ')D[0] = ch;else{ch = passSpace();D[0] = ch;}for (int i=1; i<len; i++){c = fgetc(fR);D[i] = c;}}}//写答案void writeAnswer(char ch){if (ch=='A'){for (int i=0; i<len; i++)fputc(A[i], fW);}else if (ch=='B'){for (int i=0; i<len; i++)fputc(B[i], fW);}else if (ch=='C'){for (int i=0; i<len; i++)fputc(C[i], fW);}else if (ch=='D'){for (int i=0; i<len; i++)fputc(D[i], fW);}elseprintf("有题目查找不到 ABCD");}void main(){printf("源路径:");gets(dir1);fR = fopen(dir1, "r+");printf("输出路径:");gets(dir2);fW = fopen(dir2, "w+");printf("下列题号未成功获取:\n---------------\n");while ((ch[0] = fgetc(fR))!=EOF){if (ch[0]>='0' && ch[0]<='9'){ch[1] =fgetc(fR);if (ch[1]>='0' && ch[1]<='9'){ch[2] = fgetc(fR);if (ch[2]>='0' && ch[2]<='9'){ch[3] =fgetc(fR);if (ch[3]>='0' && ch[3]<='9'){ch[4] = fgetc(fR);if (ch[4]=='.' || ch[4]==','){// 若不为空格则去掉空格c = passSpace();fputc(c, fW);for (int i=0; i<5; i++){c = fgetc(fR);if (c==' '){c = fgetc(fR);fputc(c, fW);}elsei--;}fputc('=', fW);//把ABCD四个选项存入数组开始while (noSave){c1 = fgetc(fR);c2 = fgetc(fR);c3 = fgetc(fR);if (c1=='A' && c2=='.') {answer(c3, 'A');}else if (c2=='A' && c3=='.') {answer(c3, 'A');}else if (c1=='B' && c2=='.') {answer(c3, 'B');}else if (c2=='B' && c3=='.') {answer(c3, 'B');}else if (c1=='C' && c2=='.') {answer(c3, 'C');}else if (c2=='C' && c3=='.') {answer(c3, 'C');}//只要查到D选项即可停止遍历了else if (c1=='D' && c2=='.') {answer(c3, 'D');noSave = false;}else if (c2=='D' && c3=='.') {answer(c3, 'D');noSave = false;}fseek(fR, -1, SEEK_CUR);}noSave = true;//把ABCD四个选修存入数组结束// 开始查找答案while(noFind){c1 = fgetc(fR);c2 = fgetc(fR);c3 = fgetc(fR);if (c1==-47 && c2==-95 && (c3=='A' || c3=='B' || c3=='C' || c3=='D')){writeAnswer(c3);fputc('(', fW);//格式要求为 答案项(A/B/C/D)fputc(c3, fW);fputc(')', fW);noFind = false;}else if (c1==-95 && (c2=='A' || c2=='B' || c2=='C' || c2=='D')){writeAnswer(c2);fputc('(', fW);fputc(c2, fW);fputc(')', fW);noFind = false;}else if (c2==-47 && c3==-95){c = fgetc(fR);if (c=='A' || c=='B' || c=='C' || c=='D'){writeAnswer(c);fputc('(', fW);fputc(c, fW);fputc(')', fW);noFind = false;}fseek(fR, -1, SEEK_CUR);}}noFind = true;fputc('\n', fW);// 查找答案结束}else{printf("question: %c%c%c%c\n", ch[0], ch[1], ch[2], ch[3]);}}}}}}fclose(fR);fclose(fW);printf("---------------\n");}


原创粉丝点击