C课设判断回文报告.docx

上传人:b****5 文档编号:11703551 上传时间:2023-03-30 格式:DOCX 页数:15 大小:138.01KB
下载 相关 举报
C课设判断回文报告.docx_第1页
第1页 / 共15页
C课设判断回文报告.docx_第2页
第2页 / 共15页
C课设判断回文报告.docx_第3页
第3页 / 共15页
C课设判断回文报告.docx_第4页
第4页 / 共15页
C课设判断回文报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C课设判断回文报告.docx

《C课设判断回文报告.docx》由会员分享,可在线阅读,更多相关《C课设判断回文报告.docx(15页珍藏版)》请在冰豆网上搜索。

C课设判断回文报告.docx

C课设判断回文报告

目录

一、需求分析2

二、概要设计2

三、详细设计4

四、调试分析9

五、用户手册9

六、测试数据10

七、附录11

一、需求分析

⒈用栈及队列的基本操作完成对字符串是否为回文的判断,其中栈及队列都是作为单独的子函数存在。

⒉通过创建栈和队列来存放字符串,然后分别取出栈和队列里元素,一个个比较,如果到栈和队列到最后一个元素从两边出来的字符都相同,则能说明用户输入的字符串为回文,否则就不是。

⒊用户要从屏幕上输入一串字符,完成对栈及队列的存储。

⒋程序完成对用户输入的字符串进行存储,然后完成对字符串的输出,比较丛

栈和队列中出来的字符,然后进行判断。

⒌程序执行命令:

⑴接受用户输入字符串;

⑵比较判断从栈和队列中出来的字符;

⑶输出最后判断的结果。

二、概要设计

⒈设计栈和队列的抽象数据类型定义:

基本操作:

操作结果

stinit(s)构造一个空栈,完成对栈的初始化s

quinit(q)构造一个空队列,完成对队列的初始化q

stpush(s,c)完成字符进栈的操作

enqueue(q,c)完成字符进队列的操作

stempty(s),quempty(q)判断栈和队列中是否还有元素

stpop(s),dequeue(q)比较出栈与出队列的字符是否匹配

⒉判断字符

基本操作:

stpop(s)==dequeue(q);

初始条件:

在子函数中已经定义了栈与队列,而且已经将字符分别输入空的栈和队列中,现在的关键就在于判断从栈和队列里出来的元素是否相同。

操作结果:

如果输入到栈和队列元素相同,那么代表输入的字符为回文字符。

3.本程序模块结构

⑴主函数模块

voidmain(){

初始化;

为栈和队列申请空间;

调用栈和队列功能子函数;

判断从栈和队列出来的字符是否相同;

得出最终的结果;

⑵栈模块----实现栈抽象数据类型,完成对栈的初始化,进栈和出栈的操作。

⑶队列模块----实现队列抽象数据类型,完成对队列的初始化,进队列和出队列的操作。

各模块之间的调用关系如下:

主程序模块

栈模块

队列模块

三、详细设计

1基本数据类型操作

1栈模块

1typedefstruct

{

charstack[m];

inttop;

}stackstru;//定义栈

2参数设置:

#definem100

//----------基本操作的算法描述--------------------

intstinit(stackstru*s)

{

s->top=-1;

return1;

}//初始化栈

intstempty(stackstru*s)

{

if(s->top==-1)//栈顶为空

return0;

else

return1;

}//判断栈是否为空

intstpush(stackstru*s,charx)

{

if(s->top==m)//栈满

{

puts("Thestackisoverflow!

");//输出提示信息

return0;

}

else//栈未满

{

s->top=s->top+1;/栈顶后移

s->stack[s->top]=x;//字符入栈

return1;

}

}//入栈操作

charstpop(stackstru*s)

{

chary;

if(s->top==-1)//栈为空

{

puts("Thestackisempty!

");//输出提示信息

return'';//返回空格

}

else//栈不为空

{

y=s->stack[s->top];//取出栈顶元素

s->top=s->top-1;//栈顶指示后移

returny;

}

}//出栈操作

2队列模块:

1typedefstruct

{

charqueue[m];

intfront;

intrear;

}queuestru;//定义队列

2参数设置:

#definem100

//----------基本操作的算法描述--------------------

intquinit(queuestru*q)

{

q->front=0;

q->rear=0;

return1;

}//初始化一个空的循环队列

intquempty(queuestru*q)

{

if(q->front==q->rear)//队头和队尾相等

return0;

else

return1;

}//判断队列是否为空

intenqueue(queuestru*q,chare)

{

if((q->rear+1)%m==q->front)//队列已满

{

puts("Thequeueisoverflow!

");//提示信息

return0;

}

else

{

q->queue[q->rear]=e;//入队

q->rear=(q->rear+1)%m;//移动队尾指针

return1;

}

}//入队操作

chardequeue(queuestru*q)

{

charf;

if(q->front==q->rear)//队列为空

{

puts("Thequeueisempty!

");//提示信息

return0;

}

else

{

f=q->queue[q->front];//取出队首元素

q->front=(q->front+1)%m;//移动对头指针

returnf;

}

}//出队操作

3主函数算法:

voidmain()

{

charc;

intflag=0;

stackstru*s=(stackstru*)malloc(sizeof(stackstru));

queuestru*q=(queuestru*)malloc(sizeof(queuestru));

stinit(s);

quinit(q);

puts("----------huiwenjiance----------");

puts("--102023ban10202331huangyawei--");

putchar('\n');

puts("Welcometocomehere,pleaseinputastring:

");

while((c=getchar())!

='\n')//输入字符串。

输入回车键结束

{

putchar(c);//输出输入的字符

stpush(s,c);//字符进栈

enqueue(q,c);//字符进队列

}

putchar('\n');

puts("Pleasepress'enter'tocontinue!

");//提示信息

getchar();

while(stempty(s))//栈中还有元素

{

if(stpop(s)==dequeue(q))//出战的字符与出队列的字符匹配

{flag=1;continue;}//将标志设置为1,继续从栈和队列中区配字符

else//字符不匹配

{flag=0;break;}//跳出循环,将标志设置为0

}

if(flag==1)

puts("Thisstringispalindrome(weihui)!

");//标志为1,完全匹配,是回文

else

puts("Thisstringisn'tpalindrome(huiwen)!

");//标志为0,不完全匹配,不是回文

puts("Pleasepress'enter'tocontinue!

");//提示信息

getchar();

puts("Ceshiisover,plesaepress'enter'toexit!

\n");//提示信息

getchar();

}

2函数的调用关系反映了本演示程序的层次结构

main

栈设置队列设置

stinitstemptystpushstpopdequeueenqueuequemptyquinit

 

判断是否相等

四、调试分析

⒈在写整个程序的时候应注意对已栈和队列的操作不能少了一个步骤,否则会出现一些关于栈和队列的常识错误,从而会影响整个程序。

⒉在程序中加了一些栈和队列基本的函数,比如判断栈和队列是否为空及栈和队列是否已满的函数,这样可以使程序更加完善。

⒊在主函数中使用一些实用的提示符及界面的一些提示,这样使使用者更好的使用。

五、用户手册

⒈本程序的运行环境是在tc2.0中,文件名为huiwen.c。

⒉打开文件后,按下Ctrl+F9进入界面。

⒊进入界面后,按照界面的提示输入一串字符。

⒋输入结束后,按Enter键结束输入。

⒌然后继续按Enter键查看结果,看输入的字符是否为回文。

⒍最后再次按Enter键退出判断程序。

六、测试数据

进入界面后出现下面界面

然后输入你想要输入的字符,假如输入abcdcba这一串字符,连续按两下Enter键结果:

然后再次按下Enter键后:

再次按下Enter键就结束了本次测试,再次测试下另一串字符,如:

abcdefg

通过上面两次的测试,分别对字符abcdcba和abcdefg进行测试,结果已经表明字符abcdcba为回文,而字符abcdefg不是回文,满足实际要求。

七、附录

源程序:

#include

#include

#definem100

typedefstruct

{

charstack[m];

inttop;

}stackstru;

typedefstruct

{

charqueue[m];

intfront;

intrear;

}queuestru;

intstinit(stackstru*s)

{

s->top=-1;

return1;

}

intstempty(stackstru*s)

{

if(s->top==-1)

return0;

else

return1;

}

intstpush(stackstru*s,charx)

{

if(s->top==m)

{

puts("Thestackisoverflow!

");

return0;

}

else

{

s->top=s->top+1;

s->stack[s->top]=x;

return1;

}

}

charstpop(stackstru*s)

{

chary;

if(s->top==-1)

{

puts("Thestackisempty!

");

return'';

}

else

{

y=s->stack[s->top];

s->top=s->top-1;

returny;

}

}

intquinit(queuestru*q)

{

q->front=0;

q->rear=0;

return1;

}

intquempty(queuestru*q)

{

if(q->front==q->rear)

return0;

else

return1;

}

intenqueue(queuestru*q,chare)

{

if((q->rear+1)%m==q->front)

{

puts("Thequeueisoverflow!

");

return0;

}

else

{

q->queue[q->rear]=e;

q->rear=(q->rear+1)%m;

return1;

}

}

chardequeue(queuestru*q)

{

charf;

if(q->front==q->rear)

{

puts("Thequeueisempty!

");

return0;

}

else

{

f=q->queue[q->front];

q->front=(q->front+1)%m;

returnf;

}

}

voidmain()

{

charc;

intflag=0;

stackstru*s=(stackstru*)malloc(sizeof(stackstru));

queuestru*q=(queuestru*)malloc(sizeof(queuestru));

stinit(s);

quinit(q);

puts("----------huiwenjiance----------");

puts("--102023ban10202331huangyawei--");

putchar('\n');

puts("Welcometocomehere,pleaseinputastring:

");

while((c=getchar())!

='\n')

{

putchar(c);

stpush(s,c);

enqueue(q,c);

}

putchar('\n');

puts("Pleasepress'enter'tocontinue!

");

getchar();

while(stempty(s))

{

if(stpop(s)==dequeue(q))

{flag=1;continue;}

else

{flag=0;break;}

}

if(flag==1)

puts("Thisstringispalindrome(weihui)!

");

else

puts("Thisstringisn'tpalindrome(huiwen)!

");

puts("Pleasepress'enter'tocontinue!

");

getchar();

puts("Ceshiisover,plesaepress'enter'toexit!

\n");

getchar();

}

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1