首页

> 学术期刊知识库

首页 学术期刊知识库 问题

c语言程序设计论文模板

发布时间:

c语言程序设计论文模板

计算机专业C与C++程序设计研究论文

摘要 :首先介绍了目前高校计算机学院C族语言相关程序设计课程的建设状况。然后从C族语言的相互衍生关系出发,提出了在高校计算机课程体系中去除C语言的基础课程,将其综合成一门C++程序设计课程来供学生学习,并对课程内容、参考教材和课时安排上给出了自己的建议。

关键词 :C语言;C++语言;程序设计

高校的C族语言教学总是按照先学C语言,再学C++的顺序进行,这种学习顺序随着C++标准的不断升级改革后变得越来越不适用。早期的C++属于多面性语言,即可以像C一样进行模块化的面向过程的编程设计,也可以像Java一样进行抽象的面向对象程序设计。那时的教学者考虑的是学生应当从较为便于理解的面向过程的编程思路入门学习C语言编程,然后在熟练了面向过程的编程方式后再从C语言延伸到C++,转而学习面向对象的程序设计。可是随着面向对象的程序设计在应用市场上占领了绝对的主导地位后,再让学生从面向过程着手就等于是浪费学习时间。加上C++和C两门语言的初级语法思想是完全一致的,开设两门课程浪费了学时,也耽误后续更重要的核心课程的学习。

1程序设计语言C与C++的比较

与C++的共性。一般简要的介绍是把C++当作C的加强版,这种认知当然是错误的,C++语言的设计者在设计之初为了保障自家语言会受到开发者的关注,所以兼容了的C的语法,这就自然使得C++可以使用C的编程方式进行程序设计,所以也导致了很多人对这两种语言的关系产生了错误的认知。同时由于C语言本身设定上的优越性,所以C++在进行自我定义的时候也沿用了C语言很多优良的性质。基础数据结构一致,C与C++的基础数据类型都是以变量和常量作为基本属性划分,类型上有字符型、整型、长整型、单精度浮点型和双精度浮点型,不过C++额外增设了布尔型。复合型数据结构上也都同时具有数组、多维数组、结构体、枚举类型和共同体,但是C++增设了字符串类型以替代C语言中的字符数组,功能上更加强大,也更加便捷。在语法方面,声明、赋值、循环、选择的结构和实现都是一致的,并且C++虽然提倡使用类和对象的概念去设计程序结构,可也同样支持函数体结构的程序设计结构。并且C语言中函数的赋值都是间接调用,在使用C语言函数时总是会在指针上出现各种纰漏,但是C++的函数体可以使用引用参数,这就使得C++的函数体比之C的更加好用。总的说来就是,C++标准下用户可以完全使用C语法进行编程而不会出现任何BUG,同时C++自身的优越设定和标准使得其设计能力比C要强大数倍,是目前市场上大型程序开发的首选语言。

与C++的不同。上一节介绍了C++和C的.基础语法上的区别,这些区别都是C++的作者在C的基础之上修订而来的结果,是为了让C++标准下得面向过程的程序设计比之单纯的C更加便捷方便。但是C++的诞生伊始,就是一门向上使用面对对象的程序设计思想的高级编程语言。它的封装性、继承性、多态性和对象唯一性才是C++成为强大高级语言的重要原因,这些特性都是C语言不可能拥有的。所以C能够实现的程序,C++能够实现并且实现的更为方便,C不能实现的程序,C++同样可以实现。

的特色。承接上一节,C++和C之间最大的不同,也是C++自身最值得夸耀的特性,就是面向对象程序设计思想。这种思想使得C++语言设计出来的程序,变成了类和对象的有机结合,这种结合的代码比之面向过程的函数体架构的代码更加易读,共同开发起来容易上手,后续的维护者也不用费更多的脑筋去理解前人的代码含义。而类和对象的设计思路,使得开发者合作时相互之间的工作变的更为独立,双方之间只需要知道对方所写的类实现的功能和包含的数据就行。这种特性我们称之为良好的封装性,开发者之间不需要去知道对方的代码是如何实现,甚至在此之上还可以保证良好的代码健壮性。因为类的引入,更先进的作用域机制也被引入进来,类的书写者往往会将自己类中的数据进行严格的作用域限定,防止其他合作者擅自去修改和使用自己类中的数据。合作者想要知道类中的数据或者使用类中的数据,只能通过类的书写者定义的带有检查机制的方法才行。这样会使得很多人合作开发的大型项目的稳定性和安全性比之用C语言开发时再上一个台阶。同时类的概念中还有一个先进的设定就是继承性,并且由这个继承性还延伸出了接口的概念。有了可以继承的接口和类,那么开发者在对程序进行迭代的瀑布开发流程时,就可以很好的使用自己曾经开发的源代码,或者借用其他项目的源代码,因为只要学会科学的使用继承机制,就不仅仅是节约程序员的代码时间,也减少了程序员在回顾曾经代码时发生的错误和歧义。而与继承机制配合使用的是多态性,曾经C语言中定义的函数,其灵活度非常差,特定的函数只能满足特定程序定义的需求,想要重用曾经的源代码是几乎不可能的事情。我们刚才提到的继承机制使得C++开发者复用源代码成为了一种习惯,但是复用时不可避免的修改问题又摆到了台面上,多态机制顺应而生了。多态机制使得类不仅可以继承其他类,将父类的数据和方法都在本类体中自如的使用,同时还可以用本类中新的定义和代码去覆盖父类中的数据定义和方法。这就让程序员变的更加自由,想用父类的数据和方法时就去继承,但是不想全部使用时就加上多态机制去覆盖。这样代码之间的重复利用率变得十分客观,节约了大量的开发时间和开发成本。

2程序设计语言C与C++开设建议

C++课程的内容应当如下安排:第一部分,教授C++的基础语法,让学生可以编写出在DOS命令行下输入输出的程序,了解编程的基本概念和思想。并且这时应当同时进行C和C++的双向语法教学,为日后学生进入高年级后的方向选择打下基础。此部分使用半个学期最为适宜,并且此时并不灌输学生何为面向对象何为面向过程,而主在让学生使用基础语法进行最基本的编程探索。第二部分,在学生有了基础编程知识后,将数据结构的内容放入课程中去,用半学期的时间教授学生用C++实现的各类常见数据结构。并且结合实际开发项目中的代码作为阅读补充,让学生明白数据结构的知识对程序开发的意义,然后将简化后的小项目作为课堂的主要内容,用实际的代码让学生去理解那些枯燥的数学定理和概念。而且在实现数据结构的过程中,必然会面对一些更为高级的C++语法和概念。总的来说,用大一上的一个学期让学生对于基础编程有了良好的认知和深入,是十分值得和有效的。第三部分,在学生有了数据结构的基础和C++的基本语法掌握后,应当面对一些实际的开发项目和问题。当然实际的问题还是需要老师进行简化,其主要目的是让学生掌握C++的高级特性和实际软件开发的过程与思路,并且想学生传授基础的算法。这一部分较为困难,应当使用一个学期让学生慢慢的掌握和熟悉。第四部分,在学生算是对C++语言和数据结构与算法都有了基础的入门后,再进行课堂教学意义就不大了,应当再大二上学期开设一门课程设计实验课,让学生完成几个难度从小到大的项目,循序渐进的掌握基本的实际开发技巧和思维。

参考文献

[1]罗莉.计算机程序设计的多应用型开发与实现[J].产业与科技论坛,2015(14):54-55.

[2]邓薇,何锫,钱俊彦,等.深度优先的多基因表达式程序设计[J].模式识别与人工智能,2013(9):819-828.

[3]宛西原,汪霞.非计算机本科专业计算机程序设计课程的改革思考[J].计算机工程与科学,2014(z1):56-59.

什么是C语言程序设计呀?

设计报告格式要求课程设计封面使用最后的统一格式。各种图表必须严格符合规范。论文的图应有图名和图号,居中写在图的下方;表应有表名、表号,靠左写在表的上方。表题、图题用5号黑体,参考文献用5号楷体。课程设计报告分章节撰写,书写层次和章节序号作如下的约定:一、设计任务 (居中书写,3号黑体)╳ ╳ ╳ ╳ (左起书写, 4号黑体) ╳ ╳ ╳ ╳ (左起书写,小4号黑体)1. ╳ ╳ ╳ ╳ (空两格书写,小4号黑体)╳ ╳ ╳ ╳ (正文,小4号宋体 首行缩进2个字符)二、功能模块结构.......三、主要模块的流程图及说明.......四、运行结果.......

要论文自己写嘛,求人不如求己!

c语言程序设计课程设计论文

#include <>#define MAX 200int main(){ int a[MAX][MAX],n; void initmatrix(int a[][MAX]);//初始化矩阵,将所有元素赋0 void creatematrix_2k1(int a[][MAX],int n);//生成2n+1阶幻方 void creatematrix_4k(int a[][MAX],int n);//生成4n阶幻方 void creatematrix_4k2(int a[][MAX],int n);//生成4n+2阶幻方 void outputmatrix(int a[][MAX],int n);//输出n阶幻方 initmatrix(a); printf("please input a interger number:"); scanf("%d",&n); if(n%2) creatematrix_2k1(a,(n-1)/2); else {if(n%4==0) creatematrix_4k(a,n/4); else creatematrix_4k2(a,(n-2)/4);} outputmatrix(a,n); return 0;}void initmatrix(int a[][MAX]){ for(int i=0;ij)&&((i-j)%4==0||(i+j+1)%4==0)) {temp=a[i][j]; a[i][j]=a[4*n-1-i][4*n-1-j]; a[4*n-1-i][4*n-1-j]=temp;} for(i=0;i<2*n;i++) {temp=a[i][i]; a[i][i]=a[4*n-1-i][4*n-1-i]; a[4*n-1-i][4*n-1-i]=temp;}}void creatematrix_4k2(int a[][MAX],int n)//构造4n+2阶幻方{ int col=-1,row=-1,i; int exn=(2*n+1)*(2*n+1); int *p,*q; p=&col,q=&row; void fillmatrix_2(int a[][MAX],int *p,int *q,int cs, int rs,int n,int i);/*将i填入以a[cs][rs]为起始的2n+1阶幻方中,用p,q返回的i-1行列值*/ for(i=1;i<=exn;i++) fillmatrix_2(a,p,q,0,0,n,i); for(i=exn+1;i<=exn*2;i++) fillmatrix_2(a,p,q,2*n+1,2*n+1,n,i); for(i=2*exn+1;i<=3*exn;i++) fillmatrix_2(a,p,q,0,2*n+1,n,i); for(i=3*exn+1;i<=4*exn;i++) fillmatrix_2(a,p,q,2*n+1,0,n,i); void lastswap(int a[][MAX],int n);//对4n+2阶幻方做最后的变换 lastswap(a,n);}void fillmatrix_2(int a[][MAX],int *p,int *q,int cs, int rs,int n,int i){ int exn=(2*n+1)*(2*n+1); if(i%exn==1) { a[cs+0][rs+n]=i; *p=0,*q=n; } else {if((*p==0&&*q==2*n)||a[(*p+2*n)%(2*n+1)+cs][(*q+1)%(2*n+1)+rs]) { a[(*p+1)%(2*n+1)+cs][*q+rs]=i; *p=(*p+1)%(2*n+1); } else{ a[(*p+2*n)%(2*n+1)+cs][(*q+1)%(2*n+1)+rs]=i; *p=(*p+2*n)%(2*n+1),*q=(*q+1)%(2*n+1); } }}void lastswap(int a[][MAX],int n){ int temp,i,j; for(i=0;i3*n+2;j--) {temp=a[i][j]; a[i][j]=a[2*n+1+i][j]; a[2*n+1+i][j]=temp;}}求幻方的程序 #include <>#include <>#define IO "%d"//和下面一行共同扩展数据成员的格式typedef int ElemType;//同上typedef struct LinkNode{ ElemType data; struct LinkNode *next;}LinkNode,*Link;Link creat();//建立带头结点的链表,并返回头指针void print(Link);//输出链表所有结点bool insert(Link,int ,ElemType);//向head为头指针的链表中插入元素e使之成为链表第i个元素成功返回TRUE否则FALSEbool del(Link,int );//在head为头指针的链表中删除第i个结点,成功返回TRUE否则返回FALSEvoid operate(Link);//在本程序中进行链表的插入,删除,输出操作Link creat(){ Link head=(Link)malloc(sizeof(LinkNode)); Link pre=head,p; int count=1; char ch; printf("是否终止建立链表(Y/N):"); scanf("%c",&ch); while(ch=='n'||ch=='N') { p=(Link)malloc(sizeof(LinkNode)); printf("请输入第%d个结点内的数据:",count); scanf(IO,&(p->data)); fflush(stdin); pre->next=p; pre=p; printf("是否终止建立链表(Y/N):"); scanf("%c",&ch); count++; } pre->next=NULL; return head;}void print(Link head){ printf("链表目前情况为:\n"); Link p=head->next; int count=1; while(p) { printf("第%d个结点中数据为"IO" ",count,p->data); p=p->next; if((count++)%3==0)printf("\n"); } if(count%3!=1)printf("\n");}bool insert(Link head,int i,ElemType e){ Link pre,p; int k; for(k=0,pre=head;knext);//寻找第i-1个元素的指针 if(k!=i-1||(!pre))return false; p=(Link)malloc(sizeof(LinkNode)); p->data=e; p->next=pre->next; pre->next=p; return true;}bool del(Link head,int i){ Link pre,p; int k; for(k=0,pre=head,p=head->next;knext);//寻找第i-1个元素的指针 if(k!=i-1||(!p))return false; pre->next=p->next; free(p); return true;}void operate(Link head){ int n,i; ElemType e; do { printf("************************************************\n"); printf("请输入想进行何种操作\n1============插入结点\n2============删除结点\n3============输出链表\n"); scanf("%d",&n); switch(n) { case 1:printf("现在进行结点插入\n"); printf("请输入欲插入到何位置:");scanf("%d",&i); printf("请输入欲插入的数据:");scanf(IO,&e); if(insert(head,i,e))printf("插入成功!\n");else printf("插入失败!\n"); break; case 2:printf("现在进行结点删除\n"); printf("请输入欲删除结点位置:");scanf("%d",&i); if(del(head,i))printf("删除成功!\n");else printf("删除失败!\n"); break; case 3:print(head);break; default:break; } }while(n<4&&n>0);}int main(){ Link head=creat(); operate(head); return 0;}链表的操作#include <>#include <>//求积分int main(){ double f1(double); double f2(double); double f3(double); double f4(double); double f5(double); double (*p)(double); double integral(double a,double b,double(*p)(double)); double a,b;//记录积分区间 printf("请输入积分区间:"); scanf("%lf %lf",&a,&b); if(a>b){double temp=a;a=b;b=temp;}//确保a1e-6) { sum=0; for(i=0;i

发给你了邮箱里

C语言课程设计报告--学生成绩管理系C语言课程设计报告:学生成绩管理系统系统需求一、 当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息. 二、学生成绩查询: 输入一个学号, 在文件中查找此学生, 若找到则输出此学生的全部信息和成绩; 若找不到则输出查找失败的信息. 同时也可以全部把各科的平均成绩,最高和最低分输出。三、新生插入 :通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小则靠前排,将此生的信息保存下来。 四、输出全部学生信息和全部学生成绩。五、退出系统.六、附加说明:系统将来完善的功能有:可以通过性别来模糊查询,也可以通过姓名的姓来先进行模糊查询,以便后面精确查找。总体设计一、 仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。 2、查询模块:可用stu *lookdata(stu *p1) 来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。 3、插入模块:可用insert( )函数来实现。其中通过学号的大小来比较的,并且以此来排序。4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage() 、 maverage() 、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。 5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。二、系统主模块结构图:详细设计一、 界面设计此系统界面采用图形和数字化菜单设计。主界面设计如下: 学生成绩管理系统 请选择相应的数字执行相应的功能:1:是否输入其他数据2:查看数据3:插入数据4:查找数据5:更新数据6:保留数据7:显示或打印数据8:语文成绩状况9:数学成绩状况10:英语成绩状况11:计算机成绩状况12:?13:退出系统二、 数据结构设计: 程序设计中用到的结构体类型: 学生信息结构体类型:typedef struct student{ char name[MAX]; int num[MAX]; char sex[MAX]; int chinese; int mathematic; int english; int computer; struct student *next; }程序代码://原始密码是123456#include""#include""#include""#include""#define MAX 10typedef struct student{ /*定义结构体*/ char name[MAX]; /*姓名*/ int num[MAX]; /* 学号*/ char sex[MAX]; /*性别*/ int chinese; /*语文*/ int mathematic; /* 数学*/ int english; /*英语*/ int computer; /*计算机*/ struct student *next; /*结构体指针*/ }stu;stu *head; /*头指针*/void print() /*显示或打印函数*/ { system("cls"); printf("\t\t\tScore Manage System\n"); /*成绩管理系统*/ printf("<1>Enter Record\t"); /*输入数据*/ printf("<2>Display\t"); /*显示*/ printf("<3>Insert\t"); /*插入数据*/ printf("<4>Quest\t"); /*访问数据*/ printf("<5>Update\t"); /*以前数据*/ printf("<6>Save\t"); /*保留数据*/ printf("<7>Fresh\t"); /*更新数据*/ printf("<8>Chinese Average\t"); /*语文平均成绩*/ printf("<9>Math Average\t"); /*数学平均成绩*/ printf("<10>English Average\t"); /*英语平均成绩*/ printf("<11>Computer Average\t"); /*计算机平均成绩*/ printf("<12>Quit\t\n"); /*退出*/ }void cin(stu *p1) /*输入相关数据的函数*/ { printf("Enter name:\n"); scanf("%s",&p1->name); printf("Enter num:\n"); scanf("%d",&p1->num); printf("Enter sex:\n"); scanf("%s",&p1->sex); printf("Enter score:\n"); printf("Enter chinese:\n"); scanf("%d",&p1->chinese); printf("Enter math:\n"); scanf("%d",&p1->mathematic); printf("Enter English:\n"); scanf("%d",&p1->english); printf("Enter Computer:\n"); scanf("%d",&p1->computer); } stu *cindata() /*其他数据是否继续输入的函数*/ { stu *p1,*p2; int i=1; char ch; p1=(stu *)malloc(sizeof(stu)); head=p1; while(i) { cin(p1); printf("Do you Want to Continue?yes or no"); /*是否继续输入数据*/ ch=getchar(); ch=getchar(); if(ch=='n'||ch=='N') { i=0; p1->next=NULL; } else { p2=p1; p1=(stu *)malloc(sizeof(stu)); p2->next=p1; } } return(p1->next);}stu *lookdata(stu *p1) /*查看数据的函数*/ { while(p1!=NULL) { printf("Num:%d\t",p1->num); printf("Name:%s\t",p1->name); printf("Sex:%s\t",p1->sex); printf("\n"); printf("Chinese:%d\t",p1->chinese); printf("Math:%d\t",p1->mathematic); printf("English:%d\t",p1->english); printf("Computer:%d\t",p1->computer); printf("\n"); p1=p1->next; } return p1; }void insert() /*通过比较学号来插入数据的函数*/ { stu *p1,*p3,*p2; char ch; p1=head; p3=(stu *)malloc(sizeof(stu)); p3->next=NULL; if(head==NULL){ head=p3; return;} cin(p3); while(p1!=NULL&&(p1->numnum)) /*通过学号的比较来插入*/ { p2=p1;p1=p1->next;} if(p2==head) {p3->next=head; head=p3; return;} p3->next=p1; p2->next=p3;}find(stu *p2) /*通过姓名查找查看数据的函数*/ { char name[20]; int b=0; printf("Enter the name of the student you want to find:"); /*通过姓名查看*/ scanf("%s",name); while(p2!=NULL) {if(strcmp(name,p2->name)==0) { printf("The data you want has be found\n"); printf(" Name:%s\t",p2->name); printf("Num:%d\t",p2->num); printf("sex%s\t",p2->sex); printf("\n"); printf("Chinese:%d\t",p2->chinese); printf("Math:%d\t",p2->mathematic); printf("English:%d\t",p2->english); printf("Computer:%d\t",p2->computer); printf("\n"); b=1; } else if(b==0) printf("sorry not find data!"); p2=p2->next; } if(b==1) { print(); printf("Find one\n");} else {print(); printf("Not find\n"); }}void caverage() /*求各学生语文平均分、最高和最低分成绩的函数*/ { stu *p1; int i; float max=; float sum=; p1=head; if(p1==NULL) printf("not data!"); else {for(i=0;p1!=NULL;i++,p1=p1->next) sum+=p1->chinese; aver=sum/i; p1=head; for(i=0;p1!=NULL;i++,p1=p1->next) {if(maxchinese) max=p1->chinese; } p1=head; for(i=0;p1!=NULL;i++,p1=p1->next) if(min>p1->chinese) min=p1->chinese; } printf("Chinese Average:%f",aver); printf("Chinese Max:%f",max); printf("Chinese Min:%f",min); }void maverage() /*求各学生数学平均分、最高和最低分成绩的函数*/ { stu *p1; int i; float max=; float sum=; p1=head; if(p1==NULL) printf("not data!"); else {for(i=0;p1!=NULL;i++,p1=p1->next) sum+=p1->mathematic; aver=sum/i; p1=head; for(i=0;p1!=NULL;i++,p1=p1->next) {if(maxmathematic) max=p1->mathematic; } p1=head; for(i=0;p1!=NULL;i++,p1=p1->next) if(min>p1->mathematic) min=p1->mathematic; } printf("Mathe Average:%f",aver); printf("Mathe Max:%f",max); printf("Mathe Min:%f",min); }void eaverage() /*求各学生英语平均分、最高和最低分成绩的函数*/ { stu *p1; int i; float max=; float sum=; p1=head; if(p1==NULL) printf("not data!"); else {for(i=0;p1!=NULL;i++,p1=p1->next) sum+=p1->english; aver=sum/i; p1=head; for(i=0;p1!=NULL;i++,p1=p1->next) {if(maxenglish) max=p1->english; } p1=head; for(i=0;p1!=NULL;i++,p1=p1->next) if(min>p1->english) min=p1->english; } printf("English Average:%f",aver); printf("English Max:%f",max); printf("English Min:%f",min); }void comaverage() /*求各学生计算机平均分、最高和最低分成绩的函数*/ { stu *p1; int i; float max=; float sum=; p1=head; if(p1==NULL) printf("not data!"); else {for(i=0;p1!=NULL;i++,p1=p1->next) sum+=p1->computer; aver=sum/i; p1=head; for(i=0;p1!=NULL;i++,p1=p1->next) {if(maxcomputer) max=p1->computer; } p1=head; for(i=0;p1!=NULL;i++,p1=p1->next) if(min>p1->computer) min=p1->computer; } printf("Computer Average:%f",aver); printf("Computer Max:%f",max); printf("Computer Min:%f",min); }update(stu *p2) /*通过姓名查找来更新数据*/ { char name[10]; /*p2为指向结构体struct student的指针*/ int b=0; printf("Enter The Name"); /*输入姓名*/ scanf("%s",name); while(p2!=NULL) {if(strcmp(name,p2->name)==0) { printf("Find you data\n"); scanf("Name:%s",p2->name); scanf("Num:%s",p2->num); scanf("Sex:%s",p2->sex); scanf("Chinese:%d",p2->chinese); scanf("Math:%d",p2->mathematic); scanf("english:%d",p2->english); scanf("Computer:%d",p2->computer); printf("Success!"); b=1;} else if(b==0) printf("Sorry not Find data!"); p2=p2->next;} if(b==0) {print(); printf("Sorry not Find data!"); } else { print(); printf("Finish!"); } }save(stu *p2) /*保留数据函数*/ { FILE *fp; char file[10]; printf("Enter file name"); /*输入文件名*/ scanf("%s",file); fp=fopen(file,"w"); while(p2!=NULL) { fprintf(fp,"%s",p2->name); fprintf(fp,"%s",p2->num); fprintf(fp,"%s",p2->sex); fprintf(fp,"%d",p2->chinese); fprintf(fp,"%d",p2->mathematic); fprintf(fp,"%d",p2->english); fprintf(fp,"%d",p2->computer); p2=p2->next; } fclose(fp); }char password[7]="123456"; /*定义初始密码*/void main() /*主函数*/{ int choice; stu *p2; char s[8]; int flag=0,i; /*标志项*/ int n=3; do{ printf("Enter password:\n"); scanf("%s",s); if(!strcmp(s,password)) /*进行密码匹配验证*/ { printf("PASS\n\n\n"); flag=1; break; } else{ printf("Error Enter again:\n"); n--; } } while(n>0); if(!flag) {printf("you have Enter 3 times!"); /*输入密码超过了3次!!*/ exit(0); /*自动退出*/ } /*密码验证成功后进入的界面*/ printf("~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n"); /*操作界面*/ printf("\t\tWelcom to the Mis\n"); printf("Author:-----\tClass:------\tNum:------\n"); /*作者,班级和号码*/ printf("Adress:HG\n"); /*地址*/ printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); printf("\t\tEnter OP:\n"); printf("\n\n\n\n"); printf("==============\t\t==============\n"); printf("==============\t\t==============\n"); printf("\t\tEnter the MIS yes or no\n"); /*问进入系统与否*/ scanf("%d",&choice); if(choice=='n'||choice=='N') exit(1); print(); while(1) { printf("Enter choice:"); scanf("%d",&i); if(i<1||i>13) { printf("Enter num from 1 to 13:\n"); /*再从1-13中进行选择*/ exit(1); } switch(i) { case 1: p2=cindata(); /*其他数据是否继续输入的函数*/ break; case 2: p2=lookdata(head); /*查看数据的函数*/ break; case 3: insert(); /*通过比较学号来插入数据的函数*/ break; case 4: find(head); /*通过姓名查找查看数据的函数*/ break; case 5: update(head); /*通过姓名查找来更新数据*/ break; case 6: save(head); /*保留数据函数*/ break; case 7: print(); /*显示或打印函数*/ break; case 8: caverage(); /*求各学生语文平均分、最高和最低分成绩的函数*/ break; case 9: maverage(); /*求各学生数学平均分、最高和最低分成绩的函数*/ break; case 10: eaverage(); /*求各学生英语平均分、最高和最低分成绩的函数*/ break; case 11: comaverage(); /*求各学生计算机平均分、最高和最低分成绩的函数*/ break; case 12: ; /*空操作*/ case 13: exit(1); /*退出*/ break;} scanf("%d",&i);}}程序中出现的问题及解决方法问题一、学生初始信息模块:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。解决办法及步骤:1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。 2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错 3、输出用于循环检查语句中的学生信息,发现乱码 4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。问题二、查询模块:可用stu *lookdata(stu *p1) 来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。解决办法及步骤:1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。 2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。问题三、插入模块:可用insert( )函数来实现。其中通过学号的大小来比较的,并且以此来排序。当我们输入插入信息时,系统却提示插入不进数据。解决办法及步骤:1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入插入信息看能否插入进去得到所要插入的学生信息以及学生的语文、数学、英语和计算机的成绩。 2、检查当我们在输入插入信息时,看是否我们输入的插入信息有

#include #include #include using namespace std; const N=50; // 定义系统可录入的员工最大数值 string Ename[N]; long Enum[N]; char Esex[N]; int Eage[N]; char Emarriage[N]; int Edepart[N]; int Eposition[N]; int Edegree[50]; int Eworktime[N]; float Epay[N]; class Employee { public: string Employeename; long Employeenum; char Employeesex; int Employeeage; char Employeemarriage; int Employeedepart; int Employeeposition; int Employeedegree; int Employeeworktime; float Employeepay; static long EmployeeMaxNum; static float EmployeeBasePay; void NewInfo(); void ShowInfo(); void showall(); void showdepart(int depart); void showdegree(int degree); void showage(int min,int max); void shownum(long number); void RefreshInfo(); void DeleteInfo(); float Pay(int Employeegrade); static int MaxNum(); }; class DBOperate { public: string Employeename; long Employeenum; char Employeesex; int Employeeage; char Employeemarriage; int Employeedepart; int Employeeposition; int Employeedegree; int Employeeworktime; float Employeepay; static long EmployeeMaxNum; static float EmployeeBasePay; void WriteIn(int iflag); void ReadOut(); void RefreshMaxNum(int iflag); //i=1 or -1 or 0 }; long Employee::EmployeeMaxNum = 1000; float Employee::EmployeeBasePay = 1500; int Employee::MaxNum() //返回系统已经存储的人数 { int MN = 0; ifstream myf; (""); myf>>MN; cout<>Employee::Employeename; Employee::Employeenum = EmployeeMaxNum + Employee::MaxNum()+1; cout<<"新员工性别 (F为女性,M为男性): "; cin>>Employee::Employeesex; cout<<"新员工年龄: "; cin>>Employee::Employeeage; cout<<"新员工婚姻状况(Y为已婚,N为未婚): "; cin>>Employee::Employeemarriage; cout<<"新员工学历,请输入相应学历的序号: "<>Employee::Employeedegree; while(Employee::Employeedegree !=1&&Employee::Employeedegree !=2&&Employee::Employeedegree !=3&&Employee::Employeedegree !=4&&Employee::Employeedegree !=5) { cout<<"输入有误,请重新输入:"<>Employee::Employeedegree; } cout<<"新员工所在部门,请输入相应部门的序号:"<>Employee::Employeedepart; while(Employee::Employeedepart !=1&&Employee::Employeedepart !=2&&Employee::Employeedepart !=3&&Employee::Employeedepart !=4&&Employee::Employeedepart!=5) { cout<<"输入有误,请重新输入:"<>Employee::Employeedepart; } cout<<"新员工职位, 请输入相应职位的序号: "<>Employee::Employeeposition; while(Employee::Employeeposition !=1&&Employee::Employeeposition !=2&&Employee::Employeeposition !=3&&Employee::Employeeposition !=4&&Employee::Employeeposition !=5) { cout<<"输入有误,请重新输入:"<>Employee::Employeeposition; } cout<<"新员工的工作时(不需要输入单位): "; cin>>Employee::Employeeworktime; Employee::Employeepay = Employee::Pay(Employee::Employeeposition); DBOperate dbo; (); int MaxNum = Employee::MaxNum(); Enum[MaxNum] = Employee::Employeenum; Ename[MaxNum] = Employee::Employeename; Esex[MaxNum] = Employee::Employeesex; Eage[MaxNum] = Employee::Employeeage; Emarriage[MaxNum] = Employee::Employeemarriage; Edegree[MaxNum] = Employee::Employeedegree; Edepart[MaxNum] = Employee::Employeedepart; Eposition[MaxNum] = Employee::Employeeposition; Eworktime[MaxNum] = Employee::Employeeworktime; Epay[MaxNum] = Employee::Employeepay; (1); cout<<" 添加新成员成功!"<>choice1; switch(choice1) { case 1: showall();break; case 2: cout<<"请输入要查询职工的部门编号: [1:董事会 2:市场部 3:公关部 4:客服中心 5:信息中心] " ; cin>>choice2; (choice2);break; case 3: cout<<"请输入要查询职工的学历编号: [1:初中 2:高中 3:本科 4:硕士 5:博士] "; cin>>choice2; (choice2);break; case 4: cout<<"请输入要查询的年龄范围: "; cout<<"最小值: "; cin>>min; cout<<"最大值: "; cin>>max; (min,max);break; case 5: cout<<"请输入要查询的员工号: "; cin>>searchnum; (searchnum);break; default: cout<<"出错啦! "<"<"<"<"<"<"<=min&&Eage[i]<=max) { long number = Enum[i]; shownum(number); } else continue; } } void Employee::shownum(long number) //按员工编号输出函数 { int i; for(i=0;i"<"<"; if(Esex[i]=='F') cout<<"女 "<"<"; if(Emarriage[i]=='Y') cout<<"已婚 "<"; switch (Edegree[i]) { case 1:cout<<"初 中 "<"; switch (Edepart[i]) { case 1:cout<<"董事会 "<"; switch (Eposition[i]) { case 1:cout<<"临时成员 "<"<"<"; cin>>cNum; int MN; MN = Employee::MaxNum(); for(int i=0;i>Employee::Employeename; Ename[i] = Employee::Employeename; cout<<"新员工性别: [F为女性,M为男性]: "; cin>>Employee::Employeesex; Esex[i] = Employee::Employeesex; cout<<"新员工年龄: "; cin>>Employee::Employeeage; Eage[i] = Employee::Employeeage; cout<<"新员工婚姻状况(Y为已婚,N为未婚): "; cin>>Employee::Employeemarriage; Emarriage[i] = Employee::Employeemarriage; cout<<"新员工学历,请输入相应学历的序号:"<>Employee::Employeedegree; while(Employee::Employeedegree !=1&&Employee::Employeedegree !=2&&Employee::Employeedegree !=3&&Employee::Employeedegree !=4&&Employee::Employeedegree !=5) { cout<<"输入有误,请重新输入:"<>Employee::Employeedegree; } Edegree[i] = Employee::Employeedegree; cout<<"新员工所在部门,请输入相应部门的序号: "<>Employee::Employeedepart; while(Employee::Employeedepart !=1&&Employee::Employeedepart !=2&&Employee::Employeedepart !=3&&Employee::Employeedepart !=4&&Employee::Employeedepart!=5) { cout<<"输入有误,请重新输入:"<>Employee::Employeedepart; } Edepart[i] = Employee::Employeedepart; cout<<"新员工职位,请输入相应职位的序号:"<>Employee::Employeeposition; while(Employee::Employeeposition !=1&&Employee::Employeeposition !=2&&Employee::Employeeposition !=3&&Employee::Employeeposition !=4&&Employee::Employeeposition !=5) { cout<<"输入有误,请重新输入:"<>Employee::Employeeposition; } Eposition[i] = Employee::Employeeposition; cout<<"新员工的工作时 (不需要输入单位): "; cin>>Employee::Employeeworktime; Eworktime[i] = Employee::Employeeworktime; Epay[i] = Employee::Pay(Employee::Employeeposition); break; } } (0); } void Employee::DeleteInfo() //删除员工数据的函数 { char tmp; int cNum = 1000; DBOperate dbo; (); void Employee::shownum(long number); cout<<"请输入您要修改的员工编号>: "; cin>>cNum; int MN; MN = Employee::MaxNum(); for(int i=0;i>tmp; if(tmp=='Y') { if(i==MN-1) (-1); else { for(int j=i;j>DBOperate::Employeenum>>DBOperate::Employeename>>DBOperate::Employeesex>>DBOperate::Employeeage>>DBOperate::Employeemarriage >>DBOperate::Employeedegree>>DBOperate::Employeedepart>>DBOperate::Employeeposition>>DBOperate::Employeeworktime>>DBOperate::Employeepay; Enum[i] = DBOperate::Employeenum; Ename[i] = DBOperate::Employeename; Esex[i] = DBOperate::Employeesex; Eage[i] = DBOperate::Employeeage; Emarriage[i] = DBOperate::Employeemarriage; Edegree[i] = DBOperate::Employeedegree; Edepart[i] = DBOperate::Employeedepart; Eposition[i] = DBOperate::Employeeposition; Eworktime[i] = DBOperate::Employeeworktime; Epay[i] = DBOperate::Employeepay; } (); } void DBOperate::RefreshMaxNum(int iflag) //更新系统中员工计数文件的函数 { int MaxNum = 0; ifstream myif(""); myif>>MaxNum; (); MaxNum = MaxNum+iflag; ofstream myof(""); myof<>select; Employee e; DBOperate dbo; switch(select) { case 1: (); break; case 2: (); (); break; case 3: (); break; case 4: (); break; case 5: break; default: cout<<"命令错误!"<

程序设计论文模板

我建议你去BT之家的学习资料区那里找,因为我在那里看见有人发了计算机系的论文。含盖的范围很广有200多M.....-_-!其中可能有你需要的论文题目,快点去看看吧 完了就可能断种了--因为是9月份的帖子

毕业论文格式范文word

摘 要

数据结构算法设计和演示(C++)-树和查找是在面向对象思想和技术的指导下,采用面向对象的编程语言(C++)和面向对象的编程工具(Borland C++ Builder )开发出来的小型应用程序。它的功能主要是将数据结构中链表、栈、队列、树、查找、图和排序部分的典型算法和数据结构用面向对象的方法封装成类,并通过类的对外接口和对象之间的消息传递来实现这些算法,同时利用C++ Builder 中丰富的控件资源和系统资源对算法实现过程的流程和特性加以动态的演示,从而起到在数据结构教学中帮助理解、辅助教学和自我学习的作用。

关键词:数据结构;面向对象;可视化;算法

The Subject of Undergraduate Graduation Project of HEAU

Abstract

外文摘要要求用英文书写,内容应与“中文摘要”对应。使用第三人称,最好采用现在时态编写。

“Abstract”不可省略。标题“Abstract”选用模板中的样式所定义的“标题1”,再居中;或者手动设置成字体:黑体,居中,字号:小三,多倍行距倍行距,段后11磅,段前为0。

标题“Abstract”上方是论文的英文题目,字体:Times New Roman,居中,字号:小三,行距:多倍行距 ,间距:前段、后段均为0行,取消网格对齐选项。 Abstract正文选用设置成每段落首行缩进2字,字体:Times New Roman,字号:小四,行距:多倍行距 ,间距:前段、后段均为0行,取消网格对齐选项。

Key words与Abstract之间空一行。Key words与中文“关键词”一致。词间用分号间隔,末尾不加标点,3-5个,Times New Roman,小四,加粗。

Key Words:Write Criterion;Typeset Format;Graduation Project (Thesis)

目 录

1 引言

计算机与网络技术的高速发展,特别是面向对象技术的出现,使得C++的软件开发得到了迅速普及。

本课题主要 ………………

2 线性表的基本理论知识

线性表的定义

线性表是最简单、最常用的一种数据结构。线性表[1]是n(n>=0)个数据元素的.有限序列。

……。

线性顺序表

线性表的顺序存储结构的特点是为表中相邻的元素ai和ai+1 赋以相邻的存储位置。

三级标题名 三级标题名

1)四级以下标题 2)四级以下标题

线性链表

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组元素可以是连续的,也可以是不连续的)[1]。

……。

3 设计的主体内容

在着手进行上机设计之前首先做好大量准备:应熟悉课题,进行调查研究,收集国内、外资料、分析研究;交互界面的设计和实现。

……。

系统结构的设计

……。

交互界面的设计和实现

„„由公式(1)给出:

线性表的00P序设计

计算机内部可以采用两种不同方法来表示一个线性表,它们分别是顺序表示法和链表表示法。

……。

线性表的顺序存储的实现

…… 以上是顺序表的实现过程,第1-16行包含了list类的说明,接下来是成员函数的定义。 ……。

线性表的链表存储的实现

……

链表的实现包括两个类定义,第一个是link类,第二个是list类。由于一个链表由若干个单独的链结点对象组成,因此一个链结点应当作为单独的link类实现。

.3. 4 结果分析与讨论

例如由于起初未能真正掌握各种控件的功能,我设想是要一个下拉菜单,但是学识肤浅的我试了很多种就是达不到我要的效果,……。

……

关于……的影响如表4-1所示。

5 结语

本课题采用C++语言、面向对象的设计方法实现数据结构的重要算法。 ……

……而且还存在着许多不足之处。如: …… 。

参考文献

[1] 严蔚敏,吴伟民.数据结构(C语言版)[M]. 北京:清华大学出版社,

[2] 沈晴霓,聂青,苏京霞.现代程序设计—C++与数据结构面向对象的方法与实现[M].北京:北京理工大学出版社,

[3] Thomas Connolly Carolyn Begg. Database Systems [M].北京:电子工业出版社,

[4] Roger Bate, Sandy Shrum, CMM Integration Framework[J], CMU/SEI Spotlight

[5] J P Kuilboer,N Ashrafi, Software Process and Produt Improvement[J]. An Empirical Assessment,

[6] 张美金 著. 基于ASP技术的远程教育系统体系结构的研究. /~cddbn/Y517807/pdf/,2003-05-01.

[7]王伟国,刘永萍,王生年,徐晓鹏.B/S模式网上考试系统分析与设计[J].石河子大学学报(自然科学版),2003,6(2):145-147

[8] …

[9] …

[10] …

注 释

致 谢

大学四年的学习生活即将结束,在此,我要感谢所有曾经教导过我的老师和关心过我的同学,他们在我成长过程中给予了我很大的帮助。本文能够成功的完成,要特别感谢我的导师XXX教授的关怀和教导。………。

附录1:附录一题目

附录2:附录二题目

不知道这篇文章能够满足您的要求:面向对象的软件开发 1 历史回顾 针对日趋复杂的软件需求的挑战,软件业界发展出了面向对象(OO)的软件开发模式。目前作为针对“软件危机”的最佳对策,OO技术已经引起人们的普遍关注。最初被多数人看作只是一种不切实际的方法和满足一时好奇心的研究,现在得到了人们近乎狂热的欢迎。许多编程语言都推出了支持面向对象的新版本。大量的面向对象的开发方法被提出来。关于OO的会议、学术研讨班和课程极受欢迎。无数专业的学术期刊都为这一话题开辟了专门的版面。一些软件开发合同甚至也指明了必须使用OO的技术和语言。面向对象的软件开发对于90年代,就向是结构化的软件开发对于70年代那样让人着迷,而且OO的发展势头还在日益加速。 诸如“对象”和“对象的属性”这样的概念,可以一直追溯到1950年代初。它们首先出现于关于人工智能的早期著作中。然而,OO的实际发展却是始于 1966年 (当年文化大革命在中国爆发) 。 当时Kisten Nygaard和Ole-Johan Dahl开发了具有更高级抽象机制的Simula语言。Simula提供了比子程序更高一级的抽象和封装;为仿真一个实际问题,引入了数据抽象和类的概念。 大约在同一时期,Alan Kay正在尤他大学的一台个人计算机上努力工作,他希望能在其上实现图形化和模拟仿真。尽管由于软硬件的限制,Kay的尝试没有成功,但他的这些想法并没有丢失。70年代初期,他加入了Palo Alto研究中心(PARC),再次将这些想法付诸实施。 在PARC,他所在的研究小组坚信计算机技术是改善人与人、人与机器之间通讯渠道的关键。在这信念的支持下,并吸取了Simula的类的概念,他们开发出Smalltalk语言; 1972年PARC发布了Smalltalk的第一个版本。大约在此时,“面向对象”这一术语正式确定。Smalltalk被认为是第一个真正面向对象的语言。 Smalltalk 的目标是为了使软件设计能够以尽可能自动化的单元来进行。在Smalltalk中一切都是对象-----即某个类的实例。最初的Smalltalk的世界中,对象与名词紧紧相连。Smalltalk还支持一个高度交互式的开发环境和原型方法。这一原创性的工作开始并未发表,只是视为带浓厚试验性质的学术兴趣而已。 Smalltalk-80是PARC的一系列Smalltalk版本的总结,发布于1981年。1981年8月的< >杂志公布了Smalltalk开发组的重要结果。在这期杂志的封面图上,一个热气球正从一个孤岛上冉冉升起来,标志着 PARC的面向对象思想的启航。该是向软件开发界公开发表的时候了。起初,影响只是渐进式的,但很快就跃升到火爆的程度。热气球确实启航了,而且影响深远。早期Smalltalk关于开发环境的研究导致了后来的一系列进展:窗口(window),图标(icon),鼠标(mouse)和下拉式 window环境。Smalltalk语言还影响了80年代早期和中期的面向对象的语言,如:Object-C(1986), C++(1986), Self(1987),Eiffl(1987),Flavors(1986). 面向对象的应用领域也被进一步拓宽。对象不再仅仅与名词相联系,还包括事件和过程。1980 Grady Booch首先提出面向对象设计(OOD)的概念。然后其他人紧随其后,面向对象分析的技术开始公开发表。1985年,第一个商用面向对象数据库问世。 1990年代以来,面向对象的分析、测试、度量和管理等研究都得到长足发展。目前对象技术的前沿课题包括设计模式(design patterns)、分布式对象系统和基于网络的对象应用等。 2 动因 为什么面向对象运动发展到了现在这样火暴的程度?部分是源于人们长久以来的一个希望:人们希望它,象以前其他的软件开发技术一样,能够满足软件开发对于生产效率、可靠性、易维护性、易管理等方面的更高、更快、更强的迫切需求。除此之外,还有许多原因都促使了它的流行。 面向对象的开发强调从问题域的概念到软件程序和界面的直接映射;心理学的研究也表明,把客观世界看成是许多对象更接近人类的自然思维方式。对象比函数更为稳定;软件需求的变动往往是功能相关的变动,而其功能的执行者- ---对象----通常不会有大的变动。另外,面向对象的开发也支持、鼓励软件工程实践中的信息隐藏、数据抽象和封装。在一个对象内部的修改被局部隔离。面向对象开发的软件易于修改、扩充和维护。 面向对象也被扩充应用于软件生命周期的各个阶段---从分析到编码。而且,面向对象的方法自然而然地支持快速原型法和RAD(Rapid Application Development)。面向对象开发的使用鼓励重用,不仅软件的重用,还包括分析、设计的模型的重用。更进一步,OO技术还方便了软件的互换性,即,网络中一个节点上应用能够利用另一个节点上的资源。面向对象的开发还支持并发、层次和复杂等一些在目前的软件系统中常见的现象。今天我们常常会需要建造一些软件系统----不止是一黑盒应用。这些复杂系统通常包含由多个子系统组成的层次结构。面向对象的开发支持开放系统的建设;利用不同的应用来进行软件集成有了更大的柔性。最后,面向对象开发的使用可以减小开发复杂系统所面临的危险,主要是因为系统集成遍布软件生命周期的各个阶段。 3 面向对象的建模 面向对象的建模不仅仅是新的编程语言的汇总。它是一种新的思维方式,一种关于计算和信息结构化的新思维。面向对象的建模,把系统看做是相互协作的对象,这些对象是结构和行为的封装,都属于某个类,那些类具有某种层次化的结构。系统的所有功能通过对象之间相互发送消息来获得。面向对象的建模可以视为是一个包含以下元素的概念框架:抽象、封装、模块化、层次、分类、并行、稳定、可重用和可扩展性。 面向对象的建模的出现并不能算是一场计算革命。更恰当地讲,它是面向过程和严格数据驱动的软件开发方法的渐进演变结果。软件开发的新方法受到来自两个方面的推动:编程语言的发展和日趋复杂的问题域的需求驱动。尽管在实际中分析和设计在编程阶段之前进行,但从发展历史看却是编程语言的革新带来设计和分析技术的改变。同样,语言的演变也是对计算机体系的增强和需求的日益复杂的自然响应。 影响OO产生的诸多因素中,最重要的可能要算是编程方法的进步了。在过去的几十年中,编程语言中对抽象机制的支持已经发展到了一个较高的水平。这种抽象的进化从地址(机器语言)到名字(汇编语言),到表达式(第一代高级语言,如 Fortran),到控制(第二代高级语言,如Cobol),到过程和函数(第二代和早期第三代高级语言,如Pascal),到模块和数据(晚期第三代高级语言,如modula),最后到对象(基于对象和面向对象的语言)。Smalltalk和其他面向对象语言的发展使得新的分析和设计的技术的实现成为可能。 这些新的OO的技术实际上是结构化和数据库方法的融合。OO的方法中,小范围内对面向数据流的关注,如偶合和聚合,也是很重要的。同样,对象内部的行为最终也需要面向过程的设计方法。数据库技术中的实体-关系(ER图)的数据建模思想也在 OO的方法中得以体现。 计算机硬件体系结构的进步,性能价格比的提高和硬件设计中对象概念的引入都对OO的发展产生了一定的影响。OO的程序通常要更加频繁地访问内存,需要更高的处理速度。他们需要并且也正在利用强大的计算机硬件功能。哲学和认知科学的层次和分类理论也促进了OO的产生和发展。最后,计算机系统不断增长的规模、复杂度和分布性都对OO技术起了或多或少的推动作用。 因为影响OO发展的因素很多,OO技术本身还未成熟,所以在思想和术语上有很多不同的提法。所有的OO语言并非生而平等,他们在术语、概念的运用上也各不相同。尽管也存在统一的趋势,但就如何进行面向对象的分析、设计而言还没有完全达成共识,更没有统一的符号来描述这些活动。(说明:UML正在朝这方向努力)但是,OO的开发已经在以下领域被证明是成功的:空中交通管理、动画设计、银行、商业数据处理、命令和控制系统、CAD、CIM、数据库、专家系统、图象识别、数学分析、音乐合成、操作系统、过程控制、空间站软件、机器人、远程通讯、界面设计和VLSI设计。毫无疑问,OO技术的应用已经成为软件工业发展的主流。 4 面向对象编程 <1> 概念 在面向对象编程中,程序被看作是相互协作的对象集合,每个对象都是某个类的实例,所有的类构成一个通过继承关系相联系的层次结构。面向对象的语言常常具有以下特征:对象生成功能、消息传递机制、类和遗传机制。这些概念当然可以并且也已经在其他编程语言中单独出现,但只有在面向对象语言中,他们才共同出现,以一种独特的合作方式互相协作、互相补充。 过程化编程模式: 参数输入----- | 代 码 | ------结果输出 为实现某个功能,参数被传入某个处理过程,最后传回计算结果。 | 对象------ 数据结构 面向对象编程模式: 界面 | 对象------ 和 | 对象------ 操作 OOP中,功能是通过与对象的通讯获得的。对象可以被定义为一个封装了状态和行为的实体;或者说是数据结构(或属性)和操作。状态实际上是为执行行为而必须存于对象之中的数据、信息。对象的界面,也可称之为协议,是一组对象能够响应的消息的集合。消息是对象通讯的方式,因而也是获得功能的方式。对象受到发给他的消息后,或者执行一个内部操作(有时成为方法或过程),或者再去调用其他对象的操作。所有对象都是类的实例。类是具有相同特点的对象的集合,或者也可以说,类是可用于产生对象的一个模版。对象响应一个消息而调用的方法,由接受该消息的对象自己决定。类可以以一种层次结构来安排。在这个层次结构中,子类可以从比他高的超类中继承得到状态和方法。当对象接收到一个消息后,寻找相应的方法的过程将在从该对象的类开始,并在该类所处的层次结构中展开,最后,直到找着该方法,或者什么也没找到(将会报错)。在某些语言中,一个给定的类可以从不止一个超类中继承,称之为多继承。如果采用动态联编,继承就导致了多态性。多态性描述的是如下现象:如果几个子类都重新定义了超类的某个函数(都用相同的函数名),当消息被发送到一个子类对象时,在执行时该消息会由于子类确定的不同而被解释为不同的操作。方法也可以被包括在超类的界面中被子类继承,而实际上并不去真正定义他。这样的超类也叫抽象类。抽象类不能被实例化,因此也就只能被用于产生子类。 <2> 语言 面向对象的语言包含4个基本的分支: 1 基于Smalltalk的; 包括smalltalk的5个版本,以Smalltalk-80为代表。 2 基于C的; 包括 objective-C, C++, Java 3 基于LISP的; 包括 Flavors, XLISP, LOOPS, CLOS 4 基于PASCAL的。包括 Object Pascal, Turbo Pascal, Eiffel, Ada 95 Simula实际上是所有这些语言的老祖宗。在这些OO语言中,术语的命名和支持OO的能力都有不同程度的差别。 尽管Smalltalk-80不支持多继承,它仍被认为是最面向对象的语言(the truest OO language)。 在基于C的OO语言中,Object-C 是Brad Cox开发的,它带有一个丰富的类库,已经被成功用于大型系统的开发。C++是由贝尔实验室的Bjarne Stroustrup写的。它将C语言中的STRUCT 扩展为 具有数据隐藏功能的CLASS。多态性通过虚函数(virtual functions)来实现。C++ 支持多继承。在多数软件领域,尤其是Unix平台上,C++都是首选的面向对象编程语言。同C和C++相类似的新一代基于Internet的面向对象语言Java是由Sun microsystems研制的。它于1995年伴随着Internet的崛起而风靡一时。用Java写的applets可以嵌入HTML中被解释执行,这使它具备了跨平台特性。Java和Ada一样支持多线程和并发机制,又象C一样简单、便携。 基于LISP的语言,多被用于知识表达和推理的应用中。其中CLOS(Common LISP Object System)是面向对象LISP的标准版。 在基于Pascal的语言中,Object Pascal是由Apple和Niklaus Wirth为Macintosh开发的,它的类库是MacApp。Turbo Pascal 是Borland公司以Object Pascal为范本开发的。 Eiffel由交互软件工程公司的Bertrand Meyer于1987年发布的。它的语法类似Ada,运行于Unix环境。Ada在1983年刚出来时并不支持继承和多态性,因而不是面向对象的。到了 1995年,一个面向对象的Ada终于问世,这就是Ada 95。 除了上述的面向对象的语言之外,还有一些语言被认为是基于对象(Object-based)的。它们是:Alphard, CLU, Euclid, Gypsy, Mesa, Modula。5 面向对象的软件工程 生命周期 尽管面向对象的语言正在取得令人激动的进展,但我们都知道,编码并非是软件开发中的问题的主要来源。相比之下,需求和分析的问题更加普遍,而且它们的纠错代价更加昂贵。因此,对OO开发技术的关注就不能仅仅集中在编码上面,更应集中关心软件工程的其他方面。OO方法在处理复杂系统的分析和设计、分析和设计的重用方面的应用前景也是非常可观。如果我们承认OO的软件开发不仅仅局限于编码活动,那么就必须采用一种全新的开发模式,包括新的软件生命周期。目前最常见的生命周期是“瀑布”模型(结构化)。它是在60年代末“软件危机”后出现的第一个生命周期模型。如下所示。分析 ----- 设计 ----- 编码 ----- 测试 ------ 维护 如图所示,瀑布式生命周期的开发过程是顺序行进的;活动流向基本是单向的。它假设开发者在开发初期对系统的了解足够清楚。不幸的是,任何软件开发活动都不可避免地要涉及大量迭代过程,无论你事先是否安排。好的设计人员指的是那些能同时在抽象的层面和具体的细节上进行工作的实践家。总的来说,瀑布式生命周期的缺点表现在三个方面:<1> 后期的变化、迭代、改动困难 <2> 不支持重用 <3> 没有一个联系各个阶段的统一模型。 面向对象的方法从问题模型开始,然后就是识别对象、不断细化的过程。它从本质上就是迭代的和渐增的。在这里,快速原型和反馈环路是必需的标准结构。开发过程就是一次次的迭代反复过程。随着迭代的进行,系统的功能不断完善。这里,传统的开发模式中在分析、设计和编码等各个阶段之间的明显界限变得模糊起来。其原因是因为对象的概念弥漫了整个开发过程。对象和它们之间的关系成为分析、设计和编码等各个阶段的共同表达媒介。开发的重心从编码向分析偏移,从功能为中心向数据为中心偏移。而且,面向对象开发的迭代和无缝性使得重用变得更加自然。 近来,为改善面向对象开发的可管理性,玻姆(Boehm,1988)提出了一个结合了宏观和微观视角(macro & microview)的螺旋开发模型。宏观包括3个阶段:1分析---发现和识别对象;2 设计---发明和设计对象;3 实施---创建和实现对象。每个宏观阶段都包含一些微观迭代活动。6 OOA和OOD 由于面向对象的技术还比较新,目前存在许多种面向对象的分析和设计方法。面向对象的分析(OOA)建立于以前的信息建模技术的基础之上,可以定义为是一种以从问题域词汇中发现的类和对象的概念来考察需求的分析方法。OOA的结果是一系列从问题域导出的“黑箱”对象。OOA通常使用“剧情(scenarios)”来帮助确定基本的对象行为。一个剧情是发生在问题域的一个连续的活动序列。在对一个给定的问题域进行 OOA时,“框架”(Frameworks)的概念非常有用。框架是应用或应用子系统的骨架,包含一些具体或者抽象的类。或者说,框架是一个特定的层次结构,包含描述某一问题域的抽象父类。当下流行的所有的OOA方法的一个缺点就是他们都缺乏一种固定的模式(formality)。 在面向对象的设计(OOD)阶段,注意的焦点从问题空间转移到了解空间。OOD是一种包含对所设计系统的逻辑的和物理的过程描述,以及系统的静态和动态模型的设计方法(Booch,1994)。 在OOA和OOD中,都存在着对重用性的关注。目前,OO技术的研究人员们正在尝试定义“设计模式(design patterns)”这一概念。它是一种可重用的“财富”,可以应用于不同的问题域。通常,设计模式指的是一种多次出现的设计结构或解决方案。如果对他们进行系统的归类,即可被重用,可以构成不同设计之间通信的基础。 OOD技术实际上早于OOA技术而出现。目前在OOA和OOD已经很难画出一条清晰的界限。因此,下面的描述给出一些常用的OOA/OOD技术的(联合)概貌。 Meyer 用语言作为表达设计的工具。(1988) Booch的OOD技术扩展了他以前在Ada方面的工作。他采用一种“反复综合(round-trip gestalt)”的方法,包括以下过程:识别对象,识别对象的语义,识别对象之间的关系,进行实施,同时包含一系列迭代。Booch是最先使用类图,类分类图,类模板和对象图来描述OOD的人(1991)。 Wrifs-Brock's的OOD技术是由职责代理来驱动的。类职责卡(Class Responsibilities Cards)被用来记录负责特定功能的类。在确定了类及其职责之后,再进行更详细的关系分析和子系统的实施。(1990) Rumbaugh使用3种模型来描述一个系统:1 对象模型,描述系统中对象的静态结构;2 动态模型,描述系统状态随时间变化的情况;3 功能模型,描述系统中各个数据值的转变。对象图,状态转换图和数据流图分别被用于描述这3个模型。(1991) Coad和Yourdon采用以下的OOA步骤来确定一个多层OO模型(5个层次):找出类和对象,识别结构和关系,确定主题,定义属性,定义服务。5 个步骤分别对应模型的5个层次,即类和对象层,主题层,结构层,属性层和服务层。他们的OOD方法既是多层次的又是多方面的 (multicomponent)。层次机构和OOA一样。多方面包括:问题域,人与人的交互,任务管理和数据管理。 Ivar Jacobson 提出了Objectory方法(或Jacbson法),一种他在瑞典Objective系统中开发的面向对象软件工程方法。Jacbson的方法特别强调了“Use Case”的使用。 Use Case成为分析模型的基础,用交互图(Interaction Diagram)进一步描述后就形成设计的模型。Use cases同时也驱动测试阶段的测试工作。到目前为止,Jacbson法是最为完整的工业方法。 (1992) 以上所述的方法还有许多的变种,无法一一列出。近年来,随着各种方法的演变,它们之间也互相融合。1995年,Booch,Rumbaugh和Jacbson联手合作,提出了第一版的UML(Unified Modelling Language),一体化建模语言。(目前已经成为OO建模语言的事实标准)7 管理问题 当组织向面向对象的开发技术转向时,支持软件开发的管理活动也必然要有所改变。承诺使用OO技术即意味要改变开发过程,资源和组织结构。 (Goldberg 1995) OO开发的迭代、原型以及无缝性消除了传统开发模式不同阶段之间的界限。新的界限必须被重新确定。同时,一些软件测度的方法也不在适用了。“代码行数” LOC(Lines of Code)绝对过时了。重用类的数目,继承层次的深度,类与类之间关系的数目,对象之间的耦合度,类的个数以及大小显得更有意义。在OO的软件测度方面的工作还是相当新的,但也已经有了一些参考文献。(Lorenz 1993) 资源分配和人员配置都需要重新考虑。开发小组的规模逐步变小,擅长重用的专家开始吃香。重点应该放在重用而非LOC上。重用的真正实现需要一套全新的准则。在执行软件合同的同时,库和应用框架也必须建立起来。长期的投资策略,以及对维护这些可重用财富的承诺和过程,变的更加重要。 至于软件质量保证,传统的测试活动仍是必须的,但它们的计时和定义必须有所改变。例如,将某个功能“走一遍”将牵涉到激活一个剧情(scenario),一系列对象互相作用,发送消息,实现某个特定功能。测试一个 OO系统是另一个需要进一步研究的课题。发布一个稳定的原型需要不同与以往控制结构化开发的产品的配置管理。 另一个管理方面要注意的问题是合适的工具支持。一个面向对象的开发环境是必须的。同时需要的还包括:一个类库浏览器,一个渐增型编译器,支持类和对象语义的调试器,对设计和分析活动的图形化支持和引用检查,配置管理和版本控制工具,以及一个象类库一样的数据库应用。 除非面向对象开发的历史足以提供有关资源和消耗的数据,否则成本估算也是一个问题。计算公式中应该加入目前和未来的重用成本。最后,管理也必须明白在向面向对象方法转变的过程中要遇到的风险。如消息传递、消息传递的爆炸增长、动态内存分配和释放的代价。还有一些起步风险,如对合适的工具,开发战略的熟悉,以及适当的培训,类库的开发等。8 向面向对象转变 这个转变的时期可能相当长。培训是必须的。一个实验性质的向导项目也是有必要的。建议不要使用结构化和面向对象像结合的办法。越来越多的证据表明,成功需要完全的 OO解决方案. 9 未来 总的来说,面向对象的技术是以前的软件开发技术自然演进的成果,对许多应用领域的软件开发都极具前途。借用Maurice Wilkes在他图灵奖颁奖仪式上的演讲的话:“对象是软件界从70年代以来最激动人心的革新之一。” (1996) 然而,面向对象的开发并非是包医百病的灵丹妙药,其发展还远未成熟。可是尽管OO技术的未来还未确定,但在90年代初期的一些预言都已实现。 (Winblad 1990) 类库和应用程序框架在市场上已经可用。应用和环境之间的透明信息存取业已实现。支持用户在应用之间通信的的环境以及面向对象的继承多媒体工具包正在涌现。随着经验的积累,OO的发展将日渐流行,OO技术也将日趋成熟。当然,OO技术也有可能为某种处理更高一级抽象的开发技术取代或融合。这些都只是猜想。虽然在不远的将来,谈论对象无疑会显得过时,但现在,还有许多的问题等着我们去付出真正的热情。

c语言程序毕业论文查重

业界有句话是这样说的程序员就是个粘贴复制的人,那么问题来了。论文都是自己写的,c代码部分是网上找的,这个"部分"很重要。如果都是你自己写的,自己都理解透彻里,你怕啥,代码可以借鉴啊,问了就直接说呗,不要抱着老师不知道的态度去应对就行,只要把握住那部分自己可以完全写出来或者理解里,怕啥。不行的就告诉老师那是我借鉴的就行。你自己都写里。从事程序员的,代码难免一样。还有就是,像我们学习语言的时候第一步就是找网上代码,弄来原封不动照搬一遍,习惯了就学会了。没事的,代码查重怕啥,论文你都写了,就没问题了。我就回答一下,没给你准确的答案,但是就希望你现在信心十足,对自己论文由九足的把握。

#include <>int lookup(char *str, char *key);main(){ char str[1024] = "asdfjad asdfh adsf adsf adsf adf adsfasdfkjasdf andsf akdf sdkf" char key[32]; int pos[100]; printf("输入要查询的单词: "); scanf("%s", key); lookup(str, key, pos); printf("共重复了%d次\n,位置分别是:", pos[0]); for(i = 1 ; i <= pos[0]; i ++) { printf("%d “, pos[i]); } printf("\n");}int lookup(char *str, char *key, int pos[]){ int i, j; pos[0] = 0; /* 记录重复次数 */ for(i = 0; i < strlen(str); i ++) { if(key[0] == str[i]) { for(j = 1; j < strlen(key); j ++) { if(key[j] != str[i+j]) break; } if(j == strlen(key)) { /* found */ pos[0] ++; pos[pos[0]] = i; i += j-1; } } }}

看你的论文中,是否包含了C代码如果在论文中包含完整C代码或者部分C代码 那么这部分代码必然会被查重如果C代码本身不在论文中,而是作为附件形式存在,就看学校严不严了,有的查有的不查。

/*请输入字符串 : I love my home要查找的串 : m7 12请按任意键继续. . .*/#include <>#include <>void FindWord(char *s, char *w) { //显示w在s中出现的索引位置 char *q,*p = s; int i,start; while(*p) { q = w; i = 0; if(*p == *q) { start = p - s; while(p[i] == q[i]) ++i; if(q[i] == '\0') printf("%d ",start); } ++p; } printf("\n");}int main() { char s[81],t[81]; printf("请输入字符串 : "); gets(s); printf("要查找的串 : "); gets(t); FindWord(s,t); return 0;}

c语言设计毕业论文

兄弟,论文要自己用心写。我是过来人,自己写论文只有好处,没有坏处的。

做个毕设100分就有人做?真是值得怀疑?

要么是某某管理系统要么是某种常见软件。你可以做个根据人的照片做成表情包的,就像iphone x上那个相机一样。另外就是面部识别,跟踪,这个也比较新

数据挖掘人工智能方面

相关百科

热门百科