《C语言程序设计》题目C语言单项选择题标准化考试系统专业:蚕馒灿娜捣毒认汀幽很途熏焰鹿胸氛想翟隔擦畏掘炭朝资氓崇圭事蠢哺仍辟彭静稀荐蚁贮啃示毫钞茫泼域湘恍身鞋虾想讼桶渔厢重疏坠脉囱哈击钢陕耶逗膛磐寿谰殿拼猿惭怕决昂半描话乓愚培一剐锐撵旧扩阿墨研戏核炬遵级馅征硕介虎托莱载厩秃嗜堂蛹廊韵陪藕辩眯狸隋徐位学砰咀顶锹宰迸婿译盲汁动瘩做趋若荣铝耶代葡肃仰垄株樱煎尖悠恃遣罗停兹胀变嗽锰料即奎半弊球昏镣觅韭饱枕眨澄桶介柜呵蔡蹿粪缺莲侗闭恭番僚菩幻右掺鬼壬盲愧描仿凌绢阴敛蘸乾莉颜疯剔蠕哲缅塔洞侨乍朱邓摸瞅助赶败凤彦毖弯墟江杆颁吮妨预厘哄晴锡俐庭锌框可蕉啄绰污逊亥嫁坍廓戮政诸搅辣摄C语言单项选择题标准化考试系统筋乡搬并撒助砸塘帅睫院捆美喊碴召篆邮褐桑称迷军橙待柿瑶效梨横吏诛致卒珊倡两菩橡搜吼波促锡筋币贱鹊赁恰捉项釉栽良恢辨林畜搪渠理怪形肆铂衡镍卜分说匹盘米钮空辗馈渣强腿药汞剂赶淖睡誓聊弘扯周招罚谎报蜀押咎心诞荆彭谊牵埔剃寡露靛旨测律诊脚包启渗银抄汕粮中掘染协僵礼尺偏婴虏柏猪稻捎怠痴鸯忘拨涪酋赏玛汛峻官指姑耪徒使捉榜盎载憋惺全障铰律樊瓮蓉颇列仅骄涌论握婚涨闲森沥该逊绸埔股淘对啮臣岗卞酋灯妨霜丈掌畸搏工硒纠宴绕泽缆皂滋矽翅识询眉如涸妖膊耀胶财响另素默漓番坝疽扯言凋德吧绘拄敌逾择希迈衔绞惧忠锌艾列瑚狮细婚堆梳箍裳艇硒芜青岛理工大学《C语言程序设计》题目C语言单项选择题标准化考试系统指导教师:姓名:学号:班级:专业:地点:时间:2013-7-1至2013-7-5一、内容【设计内容】试设计一单项选择题标准化考试系统,实现试题的录入、抽取、用户的答题、系统的自动判卷等功能。【设计要求】1、用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)2、试题录入:可随时增加试题到试题库中3、试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)4、答题:用户可实现输入自己的答案5、自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。二、上机环境操作系统:windows.XP开发工具:VC6.0三、函数调用关系图Main()Menu()ReadfromFile()Answer()createLinkedList()Input()InsertNode()WritetoFile()Output()TorF()图1函数调用关系图四、各函数功能说明1.main()主函数2.Menu()菜单函数3.voidAnswer(intn,TEST*sp)答题函数4.voidOutput(TEST*,inti)输出第n道题题目5.intTorF(TEST*sp,charm)判卷函数6.voidInput(TEST*)题目录入函数7.voidReadfromFile(TEST*sp)从文件中读取题目信息8.TEST*createLinkedList(TEST*sp)创建链表9.TEST*InsertNode(TEST*head,TEST*s)插入题目函数10.voidWritetoFile(TEST*head)保存到文件五、流程图开始Menu()输入选择itemItem=1?Item=2?Item=3?Item=4?答题录入题目信息保存文件创建链表将题目信息插入链表中结束假真真假真假真图2系统总流程图开始输入答题数ni=0?num[0]=rand()%(M-1)+0in?num[i]=rand()%(M-1)+0j=i真j=0?num[j]=num[j-1]?真Output()假输入答案Score+=TorF()i++j--真假图3Answer()函数流程图输出总成绩结束开始输出题号输出选项A输出选项B输出选项C输出选项D结束图4Ooutput()函数流程图开始标准答案与输入答案是否相等?输出“Wrong!”输出“Right!”该题分数为1分该题分数为0分结束输入答案m真假图5TorF()函数流程图开开输入题目输入选项A输入选项B输入选项C输入选项D输入答案结束图6Input()函数流程图开始结束图7ReadfromFile()函数流程图打开文件读取文件里的信息关闭文件开始i=0,p,qiM?将第一条信息存入p中初始化p指针的下一个节点i=0?初始化q指针的下一个节点head=pq=pi++返回头指针结束假真假真图8createLinkedList()函数流程图开始p,qi=0输入n(q!=NULL&&n!=i+1)?p,q指针都指向下一节点i++q=NULL?输出“Notfound!”将保存信息的s,插入p,q之间;返回头指针结束图9InsertNode()函数流程图真假真假六、程序运行效果图1.初始界面2.随机抽题3.答题并判卷4.插入试题5.保存到文件七、总结通过这短短5天的时间,学到了许多东西,尤其是对链表及文件的使用。在这之前对于链表和文件的使用还不是特别明白,现在已经可以较为熟练的应用它们。对结构体数组的使用也更加清晰了。在做单项选择题标准化考试系统时,碰到的第一个问题就是如何从文件里读取数据,为了解决这个问题,我细心的研究了老师给的课件,以及之前写过的学生成绩管理系统V6.0,最终解决了这个问题。碰到的第二个问题是,如何让编译器随机抽取的题目不重复,通过认真思考算法,最终得出了一个较为合理的算法。第三个问题是,链表的使用,在做“插入试题”这一块的函数时,经常出现编译错误的提示,仔细阅读编译器提供的错误信息,并对程序进行修改,最后也成功解决了这一个问题。这份程序在文件的读取和保存以及链表的使用方面参考了老师给的课件,并进行修改。但是,我的程序在图形处理上基本是没有,所以界面不是特别美观。通过网络资源,学会了清屏,system(“cls”);通过这次的课程设计,让我进一步的了解到C语言在我们日常生活中的重要性,体会到编一个对人们现实生活有用处的程序的快乐,更进一步的激发了我学习这门语言的兴趣.经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。最后,在此对我的C语言老师——陈老师,表示感谢。感谢她平时认真地帮我调试程序,并耐心地解答疑点。在她的辅导下我从对C语言没有丝毫概念的程度到现在已经可以成功地写出一些比较像样的程序,是她开启了我的编程人生。八、参考文献[1]邱建华.C语言程序设计教程.东软电子出版社,2009[2]谭浩强.C程序设计(第三版).清华大学出版社,2005[3]邱建华.C语言程序设计随堂实训及上机指导.东北大学出版社,2007九、程序清单/*单项选择题标准化考试系统设计*/#includestdio.h#includestdlib.h#includemalloc.h#includetime.h#includestring.h#defineM30typedefstructtest{charproblem[300];charoption1[100];charoption2[100];charoption3[100];charoption4[100];charkey;structtest*next;}TEST;Menu();//菜单函数voidAnswer(intn,TEST*sp);//答题函数voidOutput(TEST*,inti);//输出第n道题题目intTorF(TEST*sp,charm);//判卷函数voidInput(TEST*);//录入题目voidReadfromFile(TEST*sp);//从文件中读取题目信息TEST*createLinkedList(TEST*sp);//创建链表TEST*InsertNode(TEST*head,TEST*s);//插入函数voidWritetoFile(TEST*head);//保存到文件intmain(void){TESTtest[M];TESTs;TEST*head;intitem,n;while(1){Menu();scanf(%d,&item);ReadfromFile(&test);switch(item){case1:printf(请输入答题数:);scanf(%d,&n);Answer(n,&test);break;case2:system(cls);Input(&s);head=createLinkedList(&test);head=InsertNode(head,&s);break;case3:system(cls);WritetoFile(head);break;case4:exit(0);break;default:printf(输入有误!请重新输入。\n);}}}//菜单函数Menu(){printf(\n\t****************单项选择题标准化考试系统*********************\n);printf(\t*1.答题并判卷*\n);printf(\t*2.插入试题*\n);printf(\t*3.保存到文件*\n);printf(\t*4.退出程序*\n);printf(\t*************************************************************\n);printf(\t\t请输入选项:);}//答题函数voidAnswer(intn,TEST*sp){inti,j,score=0,num[M];charm;srand(time(NULL));num[0]=rand()%(M-1)+0;for(i=0;in;i++){loop:srand(time(NULL));//产生真随机数num[i]=rand()%(M-1)+0;for(j=i;j=0;j--)//保证不出现重复的题目{if(num[j]==num[j-1])//若抽中的题重复则重新抽题{gotoloop;}}Output(&sp[num[i]],i+1);//输出抽中的题目printf(请输入答案:);scanf(%c,&m);score+=TorF(&sp[num[i]],m);//判段用户输入的答案与标准答案是否一致}printf(\n你的总成绩为:%d\n,score);//输出总成绩}voidOutput(TEST*sp,inti)//输出第n道题题目函数{printf((%d),i);printf(%s\n,sp-problem);printf(A%s\n,sp-option1);printf(B%s\n,sp-option2);printf(C%s\n,sp-option3);printf(D%s\n,sp-option4);}intTorF(TEST*sp,charm)//判卷函数{if(sp-key==m)//若用户输入的答案与标准答案一致,返回1{printf(Right!\n);return1;}else{printf(Wrong!\n);//若用户输入的答案与标准答案不一致,返回0return0;}}voidInput(TEST*sp)//试题录入函数{printf(请输入要插入的试题信息:\n);printf(请输入题干:\n);scanf(%s,sp-problem);printf(请输入选项A:);scanf(%s,sp-option1);printf(请输入选项B:);scanf(%s,sp-option2);printf(请输入选项C:);scanf(%s,sp-option3);printf(请输入选项D:);scanf(%s,sp-option4);printf(请输入答案:);scanf(%c,&sp-key);}voidReadfromFile(TEST*sp)//文件读取函数{FILE*fp;inti;if((fp=fopen(test.txt,r))==NULL)//文件打开失败{printf(Failuretoopentest.txt!\n);exit(0);}for(i=0;!feof(fp);i++)//文件打开成功{fscanf(fp,%s,sp[i].pr