《C语言课程设计报告电子版.doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告电子版.doc(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 C语言课程设计报告 姓名:张林 班级:计算111班 学号:(1、)A类基本题1、围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:“可以,但必须先找到我,我就藏身于这十个洞中的某个洞。你从号洞找,下次隔个洞(即3号洞)找,第三次隔个洞(即6号洞)找,再隔3个以后在这个圆圈中如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。问兔子究竟藏在哪个洞里?#includeint main()int i,m=0,k=1;int a10;for(i=0;i10;i+)ai=i+1;for(i=0;i10)m=m%10;if(m=am-1)am-1=0;for(i=0;i10;i
2、+)if(ai!=0)printf(兔子在第%d个洞内n,ai);return 0;2、编写名为strdup的函数,此函数使用动态存储分配来产生字符串的副本。例如调用 p= strdup(str);将为和str相同的字符串分配空间,并且把字符串str的内容复制给新字符串,然后返回指向新字符串的指针,如果非配失败则返回空指针。#include#includechar * strdup(char t) char *p; int i; p=(char *)malloc(6*sizeof(char); for(i=0;i6*sizeof(char) return 0; else for(i=0;i6;
3、i+) *(p+i)=ti; return p;/是其长度和原来的相同 void jiancha(char *p) int i; if(p=0) printf(failuren); else printf(copy:); for(i=0;i6;i+) printf(%c,pi);/输出 3、 已知一个链表中存储了若干名学生的信息,每名学生的信息包括:学号、英语成绩、数学成绩、计算机成绩。现编写一个函数search(),要求根据输入的学生学号,输出他的各科成绩。#includestruct student int num; float English,math,Computer; struct
4、student *next;int search(struct student *head,int num) struct student *p1; if(head=NULL) printf(nlist null!n); return 0; p1=head; while(num!=p1-num & p1-next!=NULL) p1=p1-next; if(num=p1-num) printf(nnum:%dnEglish:%fnmath:%fnComputer:%fn,p1-num,p1-English,p1-math,p1-Computer); else printf(n%d not be
5、en found!n,num); return 0;void main()int num; struct student a,b,c,d,*head,*p; a.num=01;a.English=79;a.math=79;a.Computer=77; b.num=02;b.English=97;b.math=89;b.Computer=68; c.num=03;c.English=52;c.math=99;c.Computer=54;/输入三个学生信息 head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head;/连接 do printf(%d %f
6、%f %fn,p-num,p-English,p-math,p-Computer); p=p-next; while(p!=NULL); printf(please input the number:n);/输出 scanf(%d,&num); search(head,num);/查找学生 4、设计一个学生类(CStudent),它具有私有数据成员是:学号、姓名、数学、外语和计算机课程的成绩。要求能实现求三门课总成绩和平均成绩,并能设置和显示学生信息 (类声明和成员函数定义分离)。设计一个友元函数,按照成绩从高到低的顺序输出姓名、学号和成绩信息。#includeusing namespace
7、std;class lei;class studentprivate:int num;char name20;int math;int english;int computer;int pingjun;int chengji;public: void paixu();/友元函数void input();void average();void zongchengji();void display();a8;/student类建立void student:paixu()int i,j;for(j=4;j8;j+) aj+4=aj; for(i=j-4;i4;i+) if(aj.chengjiai.
8、chengji) bj=ai.; ai=aj; aj=bj; /将所有学生按总成绩由大到小排序void student:input()cout姓名:name;coutnum;cout数学成绩:math;cout英语成绩:english;cout计算机:computer;/输入成绩void student:average()pingjun=chengji/3;/平均成绩void student:zongchengji()chengji=computer+english+math;/总成绩void student:display()coutnameendl;coutnumendl;coutmath
9、endl;coutenglishendl;coutcomputerendl;cout总成绩chengjiendl;cout平均成绩pingjunendl;/输出成绩int main()int i,j;for(i=0;i4;i+)cout第i+1个学生的信息;coutendl; ai.input(); ai.zongchengji(); ai.average(); ai.display(); for(i=0;i4;i+) ai+4=ai;return 0;/主程序5、 定义了一个基类Animal, 它包含两个数据成员动物名称(string类型)和重量,还包含一个公共的虚拟成员函数who() 和一
10、个纯虚函数sound(),公共的虚拟成员函数who(),返回一个string对象,在派生类中sound()应返回一个string对象,表示该动物发出的声音。把Animal类作为一个公共基类,派生三个子类Sheep,Dog和Cow,在每个类中实现sound()函数。定义一个类Zoo,它至多可以在一个数组中存储50种不同类型的动物(使用指针数组)。编写一个main()函数,创建给定数量的派生类对象的随机序列,在Zoo对象中存储这些对象的指针。使用Zoo对象的一个成员函数,输出Zoo中每个动物的信息,以及每个动物发出的声音。(注意使用多文件结构)#include#includeusing names
11、pace std;class Animal private: string name; float m; public: Animal(string str,float d) name=str;m=d; virtual string who()constreturn name; virtual float weight()constreturn m; virtual string sound() const=0; ;/ 基类ANIMALclass Sheep:public Animal public: Sheep(string str,float d):Animal(str,d) virtua
12、l string sound() constreturn mei;/SHEEP派生类class Dog:public Animal public: Dog(string str,float d):Animal(str,d) virtual string sound() constreturn wan;/DOG派生类class Cow:public Animal public: Cow(string str,float d):Animal(str,d)virtual string sound() constreturn mo;/COW派生类class Zoopublic:Animal *p50;
13、 void out(int n);void Zoo:out (int n) int i; for(i=0;in;i+) cout(*pi).who()nweight:(*pi).weight()kg sound:(*pi).sound()endl;int main() Zoo zoo; Sheep sheep(sheep,50); Dog dog(dog,20); Cow cow(cow,250); zoo.p0=&sheep; zoo.p1=&dog; zoo.p2=&cow; zoo.out(3); return 0;6通讯录管理系统编程实现通讯录管理系统,要求该系统能够完成通讯信息的建立
14、、查询、插入、删除等基本功能。程序运行后至少给出下面7个菜单项的选择并分别实现其功能: 0、 通讯录的建立 1、通讯录信息输出2、 通讯者结点信息的删除 3、通讯者结点信息的查询4、 通讯者结点信息的插入 5、通讯录信息更改 6、 退出通讯录管理系统设计的任务要求,通讯录中每个学生的基本信息应包括姓名、地址、电话等基本信息,采用链表存储结构。(复习c语言结构体和链表知识)#include#include#define LEN sizeof(struct student)struct student long num; char name10; char ad20; long tel; stru
15、ct student *next;int n;struct student *creat(void) struct student *head; struct student *p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); scanf(%ld,%s,%s,%ld,&p1-num,&p1-name,&p1-ad,&p1-tel); head=NULL; while(p1-num!=0) n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct student *)malloc(LEN
16、); scanf(%ld,%s,%s,%ld,&p1-num,&p1-name,&p1-ad,&p1-tel); p2-next=NULL; return (head);void print(struct student *head) struct student *p; printf(nNow,These %d records are:n,n); p=head; if(head!=NULL) do printf(%-10ld %-10s %-20s %-20ldn,p-num,p-name,p-ad,p-tel); p=p-next; while(p!=NULL);struct studen
17、t *del(struct student * head,long num) struct student *p1,*p2; if(head=NULL) printf(nlist null!); return head; p1=head; while(num!=p1-num & p1-next!=NULL) p2=p1; p1=p1-next; if(num=p1-num ) if(p1=head) head=p1-next; else p2-next=p1-next; printf(delete:%ldn,num); n=n-1; else printf(%ld not been found
18、! n,num); return head;int search(struct student *head,long num) struct student *p1; if(head=NULL) printf(nlist null!n); return 0; p1=head; while(num!=p1-num & p1-next!=NULL) p1=p1-next; if(num=p1-num) printf(%-10ld %-10s %-20s %-20ldn,p1-num,p1-name,p1-ad,p1-tel); else printf(n%d not been found!n,nu
19、m); return 0;struct student *insert(struct student *head,struct student *stud) struct student *p0,*p1,*p2; p1=head; p0=stud; if(head=NULL) head=p0; p0-next=NULL; else while(p0-nump1-num)&(p1-next !=NULL) p2=p1;p1=p1-next; if(p0-numnum) if(head=p1) head=p0; else p2-next=p0; p0-next=p1; else p1-next=p
20、0;p0-next=NULL; n=n+1; return head;int change(struct student *head,long t) struct student *p1; if(head=NULL) printf(nlist null!n); return 0; p1=head; while(t!=p1-num & p1-next!=NULL) p1=p1-next; if(t=p1-num) printf(%-10ld %-10s %-20s %-20ldn,p1-num,p1-name,p1-ad,p1-tel); printf(改为:n); scanf(%ld,%s,%
21、s,%ld,&p1-num,&p1-name,&p1-ad,&p1-tel); else printf(n%d not been found!n,t); return 0;void main() long dn,num,ch; struct student *head,*stu; printf(请输入学生数据,按0结束输入:n); head=creat(); print(head); printf(请输入要删除的学生学号,按0结束删除:n); scanf(%ld,&dn); while(dn!=0) head=del(head,dn); print(head); printf(请输入要删除的学
22、生学号,按0结束删除:n); scanf(%ld,&dn); printf(请输入要找的学生学号,按0结束寻找:n); scanf(%ld,&num); while(num!=0) search(head,num); printf(请输入要找的学生学号,按0结束寻找:n); scanf(%ld,&num); printf(请输入要插入的学生数据,按0结束插入:n); stu=(struct student *)malloc(LEN); scanf(%ld,%s,%s,%ld,&stu-num,&stu-name,&stu-ad,&stu-tel); while(stu-num!=0) head
23、=insert(head,stu); print(head); printf(请输入要插入的学生数据,按0结束插入:n); stu=(struct student *)malloc(LEN); scanf(%ld,%s,%s,%ld,&stu-num,&stu-name,&stu-ad,&stu-tel); printf(请输入要更改的学生学号,按0结束更改:n); scanf(%ld,&ch); while(ch!=0) change(head,ch); printf(更改结果:n); print(head); printf(请输入要更改的学生学号,按0结束更改:n); scanf(%ld,
24、&ch); 7 职工信息表设计要求实现如下功能:1)建立职工的基本资料有工号、姓名、性别、出生日期、工资、参加工作时间和年龄(必须计算得到)2)根据职工信息表,建立只含有姓名和年龄的职工信息简表3)使用继承的方法构造3个类,(即雇员类虚基类,教师类和工人类派生类)使用相应的对象放置10个职工信息。4)编写同名display()成员函数,用来输出数组的内容5)要求对“”运算符进行重载。考虑到输入职工编号时,也会因不小心引入空格,而且名字中也需要有空格,所以重载“”运算符时,需要满足这个要求。参考界面如下:* 职工信息管理*增加一位教师记录*增加一位工人记录*显示全部职工信息*删除一个教师*删除一
25、个工人*按姓名检索所以信息*结束程序运行#include#include#includeusing namespace std;istream&operator(istream&ip,string&s)char a12;gets(a);s=a;return ip;class Timepublic:void display();void set();void age();int getage();/private:int year;int month;int day;void Time:display()coutyear-month-day;void Time:set() coutyear; c
26、outmonth; coutday;void Time:age()cout2010-year;int Time:getage() return (2010-year);class Laborpublic:void creat();void display();/protected:string num;string name;string sex;float wage;Time birthday;string workp;Time workt;int age;void Labor:creat()cout请按照提示操作,请输入endl;coutnum;coutname;coutsex;coutw
27、orkp;coutwage;cout出生日期:;coutendl;birthday.set();cout工作时间:;coutendl;workt.set();getchar();void Labor:display()cout工 号:numendl;cout姓 名:nameendl;cout性 别:sexendl;cout工作部门:workpendl;cout月 工 资:wage 元endl;cout出生日期:;birthday.display();coutendl;cout工作时间:;workt.display();coutendl;cout年 龄:;birthday.age();coute
28、ndl;cout=10)cout已满endl;elsecout请输入相关信息endl;L+num.creat();void Employee:display() /显示所有职工信息if(num=0)cout无信息,无法显示endl; else for(int i=1;i=num;i+) Li.display();void Employee:dele() /按工号删除信息if(num=0)cout无信息,无法删除endl;elsestring n; cout请输入要删除的员工工号n;for(int i=1;i=num;i+)if(Li.num=n) for(int k=i;knum)cout无此
29、工号的员工!endl;void Employee:search() /按姓名查询信息if(num=0)cout无信息,无法查询endl;elsestring nam; cout请输入要查询的员工姓名nam;for(int i=1;i=num;i+)if(Li.name=nam)cout查询到此员工的信息num)cout无此姓名的员工!endl;void Employee:show() /按部门显示信息 if(num=0)cout无信息,无法显示endl;elsestring wp; cout请输入工作部门wp;cout在此工作部门工作的员工信息如下endl;int b=0;for(int i=
30、1;i=num;i+)if(Li.workp=wp)b=1; Li.display();if(b=0)cout无在此部门工作的员工!endl; void Employee:averageage() /计算平均年龄if(num1)cout无信息无法计算平均年龄endl;elseint all=0,i;float av; for(i=1;i=num;i+) all=all+Li.birthday.getage(); av=(all/num); cout平均年龄为av岁endl; class Teacher:virtual public Employeepublic:void set()num=0;
31、void addin();void display();void dele();void search();void show();void averageage();void SET();void Teacher: SET()set(); ifstream ss(d:/1.txt); for(int j=1;jLnum.num; ssLnum.name; ssLnum.sex; ssLnum.workp; ssLnum.wage; ssLnum.birthday.year; ssLnum.birthday.month; ssLnum.birthday.day; ssLnum.workt.ye
32、ar; ssLnum.workt.month; ssLnum.workt.day; void Teacher :addin()if(num=10)cout教师信息存储已满endl;elsecout请输入相关教师信息endl;/getchar();L+num.creat();void Teacher:display() /显示所有职工信息if(num=0)cout无教师信息,无法显示endl; elsecout教师信息如下:endl; for(int i=1;i=num;i+) Li.display();void Teacher:dele() /按工号删除信息if(num=0)cout无教师信息
33、,无法删除endl;elsestring n; cout请输入要删除教师的工号n;int b=0;for(int i=1;i=num;i+)if(Li.num=n) b=1; cout删除的教师信息是:endl; Li.display(); for(int k=i;knum;k+) Lk=Lk+1; num-; if(b=0)cout无此工号的教师!endl;void Teacher:search() /按姓名查询信息if(num=0)cout无教师信息,无法查询endl;elsestring nam; cout请输入要查询的教师姓名nam;int b=0;for(int i=1;i=num;i+)if(Li.name=nam)b=1;cout查询到此教师的信息endl; Li.display();if(b=0)cout无此姓名的教师!endl;void Teacher:show() /按部门显示信息 if(num=0)cout无教师信息,无法显示endl;elsestring wp; cout请输入教师工作部门wp;cout在此工作部门工作的教师信息如下endl;
限制150内