C 课程设计2.docx

上传人:b****1 文档编号:10705997 上传时间:2023-05-27 格式:DOCX 页数:47 大小:1.31MB
下载 相关 举报
C 课程设计2.docx_第1页
第1页 / 共47页
C 课程设计2.docx_第2页
第2页 / 共47页
C 课程设计2.docx_第3页
第3页 / 共47页
C 课程设计2.docx_第4页
第4页 / 共47页
C 课程设计2.docx_第5页
第5页 / 共47页
C 课程设计2.docx_第6页
第6页 / 共47页
C 课程设计2.docx_第7页
第7页 / 共47页
C 课程设计2.docx_第8页
第8页 / 共47页
C 课程设计2.docx_第9页
第9页 / 共47页
C 课程设计2.docx_第10页
第10页 / 共47页
C 课程设计2.docx_第11页
第11页 / 共47页
C 课程设计2.docx_第12页
第12页 / 共47页
C 课程设计2.docx_第13页
第13页 / 共47页
C 课程设计2.docx_第14页
第14页 / 共47页
C 课程设计2.docx_第15页
第15页 / 共47页
C 课程设计2.docx_第16页
第16页 / 共47页
C 课程设计2.docx_第17页
第17页 / 共47页
C 课程设计2.docx_第18页
第18页 / 共47页
C 课程设计2.docx_第19页
第19页 / 共47页
C 课程设计2.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C 课程设计2.docx

《C 课程设计2.docx》由会员分享,可在线阅读,更多相关《C 课程设计2.docx(47页珍藏版)》请在冰点文库上搜索。

C 课程设计2.docx

C课程设计2

成绩评定表

学生姓名

马舒阳

班级学号

1203070102

专业

电子信息科学与技术

课程设计题目

编程技术基础实训

 

 

组长签字:

成绩

 

日期

2013年月日

课程设计任务书

学院

信息科学与工程学院

专业

电子信息科学与技术

学生姓名

马舒阳

班级学号

1203070102

课程设计题目

编程技术基础实训

实践教学要求与任务:

利用C语言编写下题的代码。

题目名称:

设计求两数之差的绝对值的函数和学生成绩统计程序

内容及要求:

(1)题目一的内容和要求:

1).设计一个选择式菜单。

栈子系统

******************************************************

*1……入栈*

*2……出栈*

*3……显示*

*4……数制转换*

*0……返回*

******************************************************

请选择菜单号(0…4):

2).设计一个整型数据元素的链栈。

3).编写入栈、出栈和显示栈中全部元素的程序。

4).编写一个把十进制数转换成八进制数的应用程序。

(2)题目二的内容和要求:

通讯录实质上是一个线性表,由于通讯录长度不确定,且插入或删除操作比较频繁,因此,采用单链式存储结构。

要求实现如下功能:

1).设计一个选择式菜单。

通讯录管理系统

******************************************************

*1……通讯录单链表的建立*

*2……通讯者的插入*

*3……通讯者的删除*

*4……通讯者的查询*

*0……退出*

******************************************************

请选择菜单号(0…4):

2).编程实现通讯录单链表的建立、通讯者的插入、通讯者的删除、通讯者的查询、通讯录的输出。

工作计划与进度安排:

第1天:

1、指导教师布置课程设计题目及任务

2、查找相关资料

第2~4天:

1、根据具体设计题目进行具体分析

2、对设计题目进行编码和调试

3、指导教师进行验收

第5天:

1、指导教师针对课程设计进行答辩

2、完成课程设计报告

指导教师:

2013年月日

专业负责人:

2013年月日

学院教学副院长:

2013年月日

一、课程设计目的------------------------------------------------------------1

二、课程设计内容和要求---------------------------------------------------1

三、题目一设计过程---------------------------------------------------------2

四、题目二设计过程--------------------------------------------------------24

五、设计总结-----------------------------------------------------------------36

六、参考文献-----------------------------------------------------------------36

 

题目栈子系统、通讯录管理系统

一、课程设计的目的

本学期我们对《数据结构》这门课程进行了学习。

这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。

这次课程设计不但要求学生掌握《数据结构》中的各方面知识,还要求学生具备一定的C语言基础和编程能力。

(1)题目一的目的:

1.掌握栈的特点及其描述方法

2.掌握链式存储结构实现一个栈

3.掌握链栈的各种基本操作

4.掌握栈的典型应用的算法

(2)题目二的目的:

1.掌握线性表的特点

2.掌握线性表的顺序存储结构和链式存储结构的基本运算

3.掌握线性表的基本操作

二、课程设计的内容和要求

(1)题目一的内容和要求:

1).设计一个选择式菜单。

栈子系统

******************************************************

*1……入栈*

*2……出栈*

*3……显示*

*4……数制转换*

*0……返回*

******************************************************

请选择菜单号(0…4):

2).设计一个整型数据元素的链栈。

3).编写入栈、出栈和显示栈中全部元素的程序。

4).编写一个把十进制数转换成八进制数的应用程序。

 

(2)题目二的内容和要求:

通讯录实质上是一个线性表,由于通讯录长度不确定,且插入或删除操作比较频繁,因此,采用单链式存储结构。

要求实现如下功能:

1).设计一个选择式菜单。

通讯录管理系统

******************************************************

*1……通讯录单链表的建立*

*2……通讯者的插入*

*3……通讯者的删除*

*4……通讯者的查询*

*0……退出*

******************************************************

请选择菜单号(0…4):

2).编程实现通讯录单链表的建立、通讯者的插入、通讯者的删除、通讯者的查询、通讯录的输出。

三、题目一设计过程

1、题目分析

本题要求合理地设计一个栈的结构及入栈、出栈、删除、查找等基本操作,并运用此结构实现数制转换。

2、算法描述

首先定义一个结点结构体,指针域包括两个指针,分别指向前驱结点和后继结点,数据域为一个DataType类型的变量,其中DataTYpe类型为宏定义;在定义一个栈结构体,结构体内包括两个指针,分别为栈顶指针和栈低指针,还有一个int型记录栈的长度。

欢迎界面后,进入主菜单,主菜单用switch设计,其中调用函数NUM,该函数可返回有效的菜单号,可屏蔽并提示错误信息及重新输入,菜单下调用了其他功能函数,菜单内除退出和初始化函数外所有的功能函数均存放在FUN.c.下。

下面仅详细阐述一下各功能模块的工作原理。

入栈为栈的首次赋值,利用do{}while();可按需求循环输入多组信息,并及时退出返回到主菜单,在实现循环多组输入时调用了函数Push,Push为机械入栈一个新元素,将参数nn,入栈到栈tt内,栈的长度加一。

出栈函数Pop中,首先判断栈是否为空,为空时,不可出栈;非空时,输出栈顶元素及栈的长度,并删除栈顶节点,栈的长度减一。

信息输出完毕后按任意键返回主菜单。

显示函数Show中,即利用do...while循环多次调用出栈函数,每次输出时要按任意键继续一次,以保障画面整洁。

信息输出完毕后按任意键返回主菜单。

数制转换函数chang中,大体结构包括一个大的do...while允许多次使用信息转换,do中首先输入数及其进制和预期进制,然后判断是否为十进制,经费是禁止的数字转换为十进制,再将其循环除以预期进制,将其余数存在新建号的栈中,直到余数为零,停止循环,然后依次出栈,将栈顶元素依次显示出来,即转换结束。

可选N或Y,继续下一次转换,或者返回主菜单。

 

3、源代码

ST.h:

#ifndefST_H

#defineST_H

#include

#include

#include

#include

typedefintDataType;

typedefstructNode

{

structNode*pro;

DataTypedata;

structNode*next;

}NN;//双向链栈的结点

typedefstruct

{

NN*top;

NN*base;

intsize;

}ST;//栈

 

//main.c:

主函数

//Menu.c:

框架界面函数和初始化退出函数

voidInitiate(ST*tt);//栈的初始化及双向链的初始化

voidJM();//界面

intNum();//菜单序号选择

voidExit();//退出

//FUN.c:

具体功能函数

voidInput(ST*tt);//入栈

voidPush(ST*tt,DataTypenn);//机械入栈

intPop(ST*tt);//机械出栈

voidShow(STtt);//显示

voidchange(STtt);//数制转换

#endif

Menu.c:

#include"ST.H"

voidJM()//界面函数

{

intch;

STtt;

Initiate(&tt);

printf("\n\n\n\n\n\n\n\n\t\t欢迎您使用《栈子系统》!

\n\n\n");

printf("\t\t\t\t设计者:

马舒阳(1203070102)\n");

getch();

do

{

system("cls");

printf("\n\n\t\t\t\t栈子系统\n");

printf("\t********************************************\n");

printf("\t*1……入栈*\n");

printf("\t*2……出栈*\n");

printf("\t*3……显示*\n");printf("\t*4……数制转换*\n");

printf("\t*0……返回*\n");

printf("\t********************************************\n");

printf("\t*提示:

本系统仅可用于整型数数据的储存,望谅解。

*\t\n");

printf("\t********************************************\n");

ch=Num();

switch(ch)

{

case1:

Input(&tt);

break;

case2:

Pop(&tt);

break;

case3:

Show(tt);

break;

case4:

change(tt);

break;

case0:

Exit();

case-1:

;

}

}while(ch);

}

 

intNum()//判断菜单号

{

intk;

printf("\n\t\t请选择菜单号(0…4):

");

scanf("%d",&k);

getchar();

if(k<0||k>5)

{

printf("\n\t\t输入错误!

按任意键继续...");

getch();

return(-1);

}

else

returnk;

}

voidInitiate(ST*tt)

//栈空的初始化注意:

此函数内的tt为栈型指针,不同于JM内的tt

{

tt->base=(NN*)malloc(sizeof(NN));

tt->top=tt->base;

tt->size=0;

}

voidExit()//退出

{

system("cls");

printf("\n\n\n\n\n\n\t\t谢谢使用程序退出!

");

printf("\n\n\n\n\n\n\t\t\t");

printf("按任意键继续...");

getch();

}

main.c:

#include"ST.H"

intmain()

{

JM();

return0;

}

FUN.c:

#include"ST.H"

voidInput(ST*tt)//栈的初始化

{

DataTypenn;

intch;

system("cls");

printf("\n\n\t\t老师早安!

开始入栈!

\n\n");

do

{

printf("\n\t\t请输入新栈顶数据:

");

scanf("%d",&nn);//%d

getchar();

Push(tt,nn);//调用入栈函数

do

{

printf("\n\t\t继续?

");

ch=getchar();

getchar();

if(ch!

='N'&&ch!

='Y')

printf("\n\t\t请输入Y或N!

\n");

else

break;

}while

(1);

}while(ch=='Y');

}

voidPush(ST*tt,DataTypenn)

//将nn入栈到tt所指栈(栈中top指向还未赋值的结点)

{

NN*p;

p=(NN*)malloc(sizeof(NN));

tt->top->data=nn;

p->pro=tt->top;

(tt->top)->next=p;

tt->top=p;

tt->size++;

}

intPop(ST*tt)//出栈

{

NN*p;

if(tt->size==0)

{

printf("\n\t\t对不起,此栈已空!

\n");

getch();

return0;

}

else

{

printf("\n\t\t栈顶元素为%d\n",tt->top->pro->data);//%d

p=tt->top;

tt->top=tt->top->pro;

free(p);

tt->top->next=NULL;

if(!

(tt->top->next))

{

tt->size--;

printf("\n\t\t出栈成功!

栈中还有%d个元素!

按任意键继续...\n",tt->size);

getch();

}

return1;

}

}

voidShow(STtt)//显示全部出栈

{

system("cls");

do

{

if(!

tt.size)

break;

else

Pop(&tt);

}while

(1);

printf("\n\t\t马舒阳汇报完毕完毕!

按任意键继续...\n");

getch();

}

voidchange()//数值转换

{

STcc;

NN*p;

inti,nn,zz,yy,tem_1,tem_2,tem_3;

charch;

Initiate(&cc);

do

{

system("cls");

printf("\n\n\t\t欢迎进入数据转换!

\n\n\t\t(请注意:

系统暂不支持十以上进制转换!

)\n");

printf("\n\n\t\t请输入一个数字!

");

scanf("%d",&nn);//%d

getchar();

printf("\n\n\t\t请问已输入的数字是什么进制呢?

");

scanf("%d",&zz);//%d

getchar();

printf("\n\n\t\t请问您想要转换到几进制的呢?

");

scanf("%d",&yy);//%d

getchar();

if(zz>10||yy>10)

{

printf("\n\t\t待转换的数字进制输入不合理!

按任意键回到主菜单...");

getch();

return;

}

if(zz!

=10)//若不是十进制要转换成十进制

{

tem_3=1;//变量含义:

进制数的n次方

tem_2=0;//变量含义:

暂时存放和

tem_1=1;//变量含义:

各项数

for(i=0;nn;nn/=10)

{

tem_1=(nn%10)*tem_3;

tem_2+=tem_1;

tem_3*=zz;

}

nn=tem_2;

}

for(;nn;nn/=yy)//大除法入栈

{

if(nn%yy

Push(&cc,nn%yy);

else

{

printf("\n\t\t待转换的数字进制输入不合理!

按任意键回到主菜单...");

getch();

return;

}

}

printf("\n\n\t\t转换结果为");

for(;cc.base!

=cc.top;)//出栈

{

p=cc.top->pro;

printf("%d",p->data);//%d

cc.top=p;

free(p->next);

cc.size--;

}

do

{

printf("\n\n\t\t继续?

");

ch=getchar();

getchar();

if(ch!

='N'&&ch!

='Y')

printf("\n\t\t请输入Y或N!

\n");

else

break;

}while

(1);

}while(ch=='Y');

}

 

4、运行结果

欢迎界面,如图所示。

图1-1

按任意键继续后进入主菜单,选择菜单号1,进入入栈模块,如图所示。

图1-2

开始入栈,输入新的栈顶元素(整型),并输入Y或N选择是否继续,此过程中,输入错误有提示,如图所示,以1,3,5,7,9,2,4,6,8,入栈为例。

图1-3

 

图1-4

图1-5

选择N,输入结束,然后回到主菜单,下面选择菜单号2,进入出栈模块。

图1-6

按任意键继续后,回到主菜单,选择菜单号3,显示栈内剩余信息。

图1-7

 

图1-8

其间,每一次输出可按需要按任意键输出,并显示剩余信息。

图1-9

图1-10

汇报完毕后,即栈已空,按任意键返回到主函数,选择菜单号4,进入数制转换模块。

图1-11

输入被转换的数字,被转换数字的数制及预期数制,并可按需求输入Y或N选择继续或退出。

图1-12

图1-13

退出后返回主菜单,选择0,即可退出程序

图1-14

图1-15

四、题目二设计过程

1、题目分析

本题要求建立链表,以存储联系人信息,并设计出对其的建立,插入删除显示等基本操作即可。

2、算法描述

首先定义一个链表结点结构体,指针域包括一个next指针,数据域包括个人姓名及联系方式。

欢迎界面后,进入主菜单,主菜单用switch设计,其中调用函数NUM,该函数可返回有效的菜单号,可屏蔽并提示错误信息及重新输入,菜单下调用了其他功能函数,菜单内除退出和初始化函数外所有的功能函数均存放在Fx.c.下。

下面仅具体阐述一下各功能模块的工作原理。

函数Build,首先判断该表是否已建立过,即表内是否有一个空结点(头结点),表未初始化时便建立一个空表,否则提示“表已存在,无需建立”。

提示后延时2

s自动跳转到主菜单。

插入函数Insert,首先输入有效信息,然后利用头插法将其插入到头指针的下一个结点,再输出提示,提示用户选择N或Y,判断是否继续,若要继续,则递归本函数,否,直接返回主菜单。

删除函数Delete,首先判断表是否为空,表为空时,不允许删除,并弹出提示,按任意键继续后后跳转到主菜单;表非空时,输入要删除人的姓名,利用循环查找表中人的信息(暂不支持多元素的查找与删除),若查找成功则输出提示,询问是否确定删除,按需求,删除该结点(暂不支持误删恢复)或取消操作;若查找失败,不存在该联系人,则输出提示。

最后按任意键退回到主菜单。

查询函数Search,首先判断表是否为空,表为空时,不允许查找,并弹出提示,按任意键继续后后跳转到主菜单;表非空时,输入要查询人的姓名,利用循环查找表中人的信息(暂不支持多元素的查找),然后输出信息,按任意键退回到主菜单。

退出函数Exit,先输出表内所有信息,信息输出完毕后,按任意键结束程序。

3、源代码

MSY.h:

#ifndefMSY_H

#defineMSY_H

#include

#include

//#include

#include

#defineN20

typedefstructNode

{

charname[N];

charnum[N];

structNode*next;

}NODE;

voidWelcome();

voidjiemian();

intNum();

voidBuild(NODE**head);

voidinsert(NODE**head);

voidDelete(NODE*head);

voidFind(NODE*head);

voidExit(NODE*head);

//待改进:

多元素查询

//待改进:

当head没有初始化,要直接关闭,不允许进行插入和删除等操作

#endif

Fx.c:

#include"MSY.h"

voidjiemian()

{

staticNODE*head=NULL;

system("cls");

printf("\n\n\t\t\t\t通讯录管理系统\n");

printf("****************************************************\n");

printf("*1……通讯录单链表的建立*\n");

printf("*2……通讯者的插入*\n");

printf("*3……通讯者的删除*\n");

printf("*4……通讯者的查询*\n");

printf("*0……退出*\n");

printf("****************************************************\n");

printf("\t提示:

在2,3

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2