您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C程序设计、数据结构综合模拟实习
一、实习目的通过模拟实习,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。信管08级学生的模拟实习主要是复杂程序和简单软件的实现。通过该模拟实习,可以将学生课堂上掌握的理论知识与处理数据的业务相结合,以检验我们同学们掌握知识的宽度、深度及对知识的综合运用能力。二、实习环境(如软硬件)(1)硬件:CPUPⅣ,内存1G(2)操作系统:Windows7(3)软件:Visualc++6.0,MicrosoftWord2003三、实习内容内容一:纸牌游戏任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:这时正面向上的牌有哪些?内容二:文章编辑功能:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出全部字母数、数字个数、空格个数、文章总字数(3)输出删除某一字符串后的文章内容三:1.设计学生成绩管理系统。该系统中存储学生的学号、姓名、性别、年龄、课程成绩等信息。要求:1)浏览学生信息2)添加学生信息3)删除学生信息4)查找学生信息5)修改学生信息6)对成绩的处理①求出每个学生各门课程的总成绩、平均成绩、最高分和最低分。②求出某一门课程所有学生的总成绩、平均成绩、最高分和最低分。7)按照学生某门课程的成绩对学生排序四、算法分析、设计与描述1.算法分析和设计内容一:当每个号码每次遇到是某个数的倍数时,都会相应的翻一次,这样,每张牌会翻的次数就各不一样,可能很多次,也可能只有一两次,结果就只是要输出在经过各个不同次数的翻牌后,正面向上的牌都有哪几个。举例说明一下,比如24,第一次它是2的倍数时要从正面翻到背面,当进行到3时,就又要从背面翻回来,而到4时还要在翻,同理呢,到6.8.12…它都要来回的翻。如果它在多次的翻牌后,正面还向上了,那么它就是要输出的结果之一。内容二:定义结构体structline,文本行采用顺序存储,行与行之间采用链式存储。利用指针、链表来实现文章编辑数据结构设计内容三:(1)整个系统均用C语言实现;(2)利用指针、链表来实现学生成绩的数据结构设计;(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;(4)系统的各个功能模块都用函数的形式来实现;(5)可以将学生成绩信息保存在文件中;(6)可以将学生信息从文件中读取出来。2.算法描述(可插入流程图)内容一:内容二:内容三:五、程序设计1.程序设计的基本思路内容一:用#defineOPPOSITE(i)i=i?0:1这个宏将牌的状态标志求反,也即为翻牌操作。将所有的牌建立一个数组,运用for的循环嵌套执行以下操作:把52张牌初始化成正面朝上、控制基数和翻牌次数,判断最终的纸牌朝向并打印出结果内容二:将文本框中的信息读入,系统处理了大多记事本应有的功能,进行简单的文件处理(包括保存,另存为,新建等)。同时对读入的数据进行相关的统计功能。系统处理了大多记事本应有的功能,进行简单的数据统计和文件处理(包括保存,另存为,新建等)。内容三:(1)主函数main()利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。2.初始化函数STUDENT*init()这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!3.菜单选择函数intmenu_select();这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!4.输入记录函数STUDENT*create()这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。算法:先声明一个首节点head,并将head-next设为NULL。每输入一个数据就声明一个新节点p,把p-next设为NULL,并且链接到之前列表的尾端。5.显示记录函数voidprint(STUDENT*head)这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。6.查找记录函数voidsearch(STUDENT*head)这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进行查找,并显示所查找到的记录。算法:采用线性查找法往下一个节点查找。输入所要查找的学生的学号s,设一个指针变量p,先指向第一个结点,当strcmp(p-name,s)&&p!=NULL时,使p后移一个结点,如果p!=NULL,输出p所指的结点。7.删除记录函数STUDENT*delete(STUDENT*head)这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可按“Y”进行删除。算法:从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的那个学号。如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。8.排序函数STUDENT*sort(STUDENT*head)这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。9、插入函数STUDENT*insert(STUDENT*head,STUDENT*new)这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返回。算法:先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求按平均分的高低顺序插入。先用指针变量p0指向待插入的结点,p1指向第一个结点。如果p0-averagep1-average,则待插入的结点不应插在p1所指的结点之前。此时将p1后移,并使p2指向刚才p1所指的结点。重复以上的步骤,直到p0-average=p1-average为止。这时将p0指向的结点插到p1所指结点之前。但是如果p1所指的已是表尾结点,则p1就不应后移了。如果p0-average比所有结点的average都小,则应将p0所指的结点插到链表末尾。如果插入的位置既不在第一个结点之前,又不在表尾结点之后,则将p0的值赋给p2-,使p2-next指向待插入的结点,然后将p1的值赋给p0-next,使得p0-next指向p1指向的变量。如果插入位置为第一个结点之前,则将p0赋给head,将p1赋给p0-next。如果要插到表尾之后,应将p0赋给p1-next,NULL赋给p0-next。最后再调用排序的函数,将学生成绩重新排序.10、保存数据到文件函数voidsave(STUDENT*head)这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。11、从文件读数据函数STUDENT*load()这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。2.程序代码内容一:#includestdio.hvoidmain(){inti,j,card[52];for(i=0;i52;i++)//52张牌所有状态均为1,即均为正面card[i]=1;for(j=2;j=52;j++)//对52张牌(序号放在i里)对2,3...52(放在j里)按i+1是否是j的倍数进行状态翻转。for(i=0;i52;i++)if((i+1)%j==0)card[i]=card[i]?0:1;printf(positivecardare:);for(i=0;i52;i++)//对翻转处理后状态仍然是正面的(card保持为1)的将其编号输出。{if(card[i])printf(%d,i+1);}}内容二:#includeiostream#includefstream#includeassert.husingnamespacestd;structListNode{chardata;ListNode*link;};ListNode*first;intko;//定义全局变量,存储键盘输入的长度(包括回车)ListNode*CreatList(){ListNode*first,*p,*q;chari;intm=1000000;intcount=0;boolflag;cout请输入文章,以#号结束:;/////////创建链表//////////first=newListNode;q=first;for(intj=1;j=m;j++){p=newListNode;cin.get(i);//接收字符函数if(i!='#'){flag=true;}if(i=='#'){flag=false;}//如果遇到结束标识符,flag的值为falseif(flag==true){count++;//每输入一个字符,count加一,记录文章长度p-data=i;//向链表结点赋值p-link=NULL;q-link=p;//指针向后移q=q-link;}if(flag==false)//当输入结束,将count的值赋给ko{ko=count;gotoloop;}}loop:returnfirst;//返回first指针}//////////////查文章中共有多少个字符//////////////////voidcountchar(ListNode*j)//j的返回指针为first指针{ListNode*h;h=j-link;//h为头指针的下一个结点的指针intmm;mm=ko;//将全局变量的值赋给mmfor(intrr=0;rrko;rr++){if(h-data=='\n')//如果结点的内容为回车{mm--;}//mm的值减一,最后mm的值就是字符数h=h-link;}cout这篇文章共有mm个字。endl;}/////////////查文章中共有多少个数字////////////////////voidcountnumber(ListNode*w)//w的返回指针为first指针{intsum=0;ListNode*m;m=w-link;//m为头指针的下一个结点的指针for(intcc=0;ccko;cc++)//ko为全局变量{if(m-data='0'&&m-data='9')//如果字符在0~9之间{sum++;}//sum加一,sum的最后值就是数字的个数m=m-link;}cout文章中的数字个数是:sumendl;}//////////////查文章中共有多少个字母/////////////////////voidcountletter(ListNode*e)//e的返回指针为first指针{int
本文标题:C程序设计、数据结构综合模拟实习
链接地址:https://www.777doc.com/doc-3354806 .html