广工c语言课程设计 字符串处理.docx
- 文档编号:8194113
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:21
- 大小:598.14KB
广工c语言课程设计 字符串处理.docx
《广工c语言课程设计 字符串处理.docx》由会员分享,可在线阅读,更多相关《广工c语言课程设计 字符串处理.docx(21页珍藏版)》请在冰豆网上搜索。
广工c语言课程设计字符串处理
课程设计
课程名称__C语言程序设计_____
题目名称__字符串的处理______
学生学院__物理与光电工程____
专业班级__电子科学与技术(5)班___
学号____________
学生姓名_______
指导教师__________________
2015年1月5日
目录
一、设计目的3
二、程序设计内容与要求3
三、课程设计应完成的工作3
四、总体设计3
五、详细设计4
六、调试与测试14
七、总结18
八、成员设计内容19
九、参考资料19
一、设计目的
进一步加强、巩固所学《c语言》的基础理论知识,理论联系实际,培养自己分析问题与解决问题的能力。
掌握运用c语言独立地编写、调试应用程序和其他相关设计的技能。
培养结构化的程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。
掌握c语言的编程技巧和上机调试方法以及程序设计的常用方法。
二、程序设计内容与要求
2.1.实现字符串的输入输出。
2.2.对所有字符串按照从小到大的顺序排序,即指针数组中的第一个元素指向最小的字符串,第二个元素指向次小的字符串……以此类推。
2.3.判断这些字符串中是否有“回文”,所谓“回文”就是顺度和倒读都是一样的字符串。
2.4.设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。
在程序的后期完善过程中,我们增加了“字符串修改”这一功能。
而由于时间比较紧,加上对文件操作不熟悉,所以本系统最后没有加入文件操作来保存历史数据,每次进行字符串相关操作时必须先进行字符串录入,否则无法进行排序等功能操作。
三、课程设计应完成的工作
1.分析课程设计题目要求,查找相关资料
2.形成算法流程图,编写c语言程序
3.程序调试,分析问题,排除错误,优化完善算法
4.书写c语言课程设计报告
四、总体设计
功能一、录入字符串。
功能二、字符串回文判断。
功能三、字符串排序。
功能四、字符串修改(增加的功能)。
功能五、退出系统。
五、详细设计
系统的整体框图如下图1:
图1系统框图
5.1、字符串输入模块:
允许输入的字符串包括英文字母、数字、特殊符号或者是他们之间的组合。
比如well,goodmorning!
,2015,2persons等等。
通过用函数voidimport()来实现此操作。
具体程序如下:
voidimport()
{
inti,w;
printf("请输入字符串的个数:
\n");
do//do……while做输入判断
{
k=0;
scanf("%d",&k);
h=h+k;
getchar();
if(k<1)
{
w=1;printf("\n\t\t输入错误!
请重新输入。
\n");
}
elsew=0;
}while(w==1);
printf("您将要输入%d字符串\n",k);
printf("请输入字符串:
\n");
for(i=h-k+1;i<(h+1);i++)
{
gets(str[i]);//字符串输入
printf("您输入第%d字符串是:
%s\n",i,str[i]);//字符串输出
}
for(i=h-k+1;i<(h+1);i++)
{
p[i]=str[i];/*指向第i行第0列*/
}
printf("输入结束\n");
menu();//返回菜单
}
算法说明:
用一个do——while函数判断输入的字符串个数k的值是否符合要求,当不符合时,提示输入错误,并且要求重新进行k值输入,知道k值符合设计要求进入字符串输入for循环里。
通过字符串处理函数gets,将字符串保存在数组str[i]中。
然后通过另一个for循环,让指针p[i]指向数组str[i]里的每个元素。
最后返回主菜单,进行其他操作选择。
N-S流程图如下图2:
图2字符串输入函数算法流程图
5.2、字符串的回文判断模块:
通过三个函数voidadjust(char*name[],inth)、voidchoice()、voidhuiwen(char*name[],inth)来完成此操作。
程序代码如下:
voidadjust(char*name[],inth)//对某个字符串进行回文判断函数
{
inty,i,j,len,n,w;
printf("请选择要判断\"回文\"的字符串序号:
\n");
do//do……while做输入判断
{y=0;
scanf("%d",&y);
getchar();
if((y<1)||(y>h))
{
w=1;printf("\n\t\t字符串序号输入错误!
请重新输入。
\n");
printf("待处理字符串:
\n");
for(i=1;i<(h+1);i++)
{
printf("序号%d:
%s\n",i,name[i]);
}
printf("请选择要判断\"回文\"的字符串序号:
\n");
}
elsew=0;
}while(w==1);
n=0;
len=strlen(name[y]);
for(j=0;j { if(name[y][j]==name[y][len-1-j]) n++; } if(n==len) printf("%s是\"回文\"字符串.\n",name[y]); else printf("%s不是\"回文\"字符串\n",name[y]); choice();//判断完后回到choice函数进行下一步操作 } voidchoice()//函数功能: 是否继续回文判断,还是返回菜单函数 { intz,w; do//do……while做输入判断 { z=0; printf("请选择操作序号(1-2): \n"); printf("\t1: 继续\"回文\"判断\n"); printf("\t2: 返回菜单\n"); scanf("%d",&z); getchar(); if(z<1||z>2) { w=1;printf("\n\t\t选择错误! 请重新选择。 \n"); } elsew=0; }while(w==1); switch(z) { case1: adjust(p,h); break; case2: menu(); break; } } voidhuiwen(char*name[],inth)//函数功能: 判断回文方式选择 { inti,j,len,x,n; if(h==0) { printf("您还没输入字符串,请先进行输入\n"); menu(); } printf("待处理字符串序号: \n"); for(i=1;i<(h+1);i++) { printf("序号%d: %s\n",i,name[i]); } do//do……while做输入判断 { x=0; printf("\n请选择操作序号(1-2): \n"); printf("1: 对所有字符串进行\"回文\"判断\n"); printf("2: 对某个字符串进行\"回文\"判断\n"); scanf("%d",&x); getchar(); if((x==1)||(x==2))break; elseprintf("输入错误! 请重新输入\n"); }while((x! =1)||(x! =2)); if(x==1)//对所有字符串进行回文判断 { for(i=1;i<(h+1);i++) { n=0;//让m从0开始,否则会累积上一个循环的结果 len=strlen(name[i]); for(j=0;j { if(name[i][j]==name[i][len-1-j]) n++; } if(n==len) printf("%s是\"回文\"字符串.\n",name[i]); else printf("%s不是\"回文\"字符串\n",name[i]); } menu(); } else { adjust(name,h);//对单个字符串进行回文判断 } } 算法说明: 通过菜单函数调用voidhuiwen(char*name[],inth)函数,在该函数中首先进行判断是否已经输入字符串,如果数组中没有保存字符串数据,则提示先进行字符串输入。 然后进行回文判断方式选择,对输入的x进行判断是否合法。 当x=1,则对所有字符串进行回文判断。 当x=2时,则对某个字符串进行回文判断,该操作,通过函数voidadjust(char*name[],inth)、voidchoice()来实现。 通过voidchoice()函数调用voidadjust(char*name[],inth)函数,可以实现多次连续回文判断或者返回菜单进行其他操作。 在函数voidadjust(char*name[],inth)里面,先通过do——while选择进行操作的字符串序号y进行判断,检查是否合法。 当y不合法时,进行错误提示,同时要求重新输入。 当选择的序号合法时,通过一个for循环,比较字符串首尾是否相同,如果不同,则输出该字符不是回文,否则比较第二个字符和倒数第二个字符……知道比较完中间的字符,如果相同则输出该字符串是回文。 5.3、字符串排序模块: 通过函数voidcompare(char*string[],inth)来完成此功能。 程序代码如下: voidcompare(char*string[],inth) { char*temp; inti,j; if(h==0) { printf("您还没输入字符串,请先进行输入\n"); menu(); } printf("排序前的字符串是: \n"); for(i=1;i<(h+1);i++) { printf("%s\n",str[i]);//输出排列前的字符串 } printf("\n排序后的字符串是: \n"); for(i=1;i { for(j=i+1;j { if(strcmp(string[i],string[j])>0) { temp=string[j]; string[j]=string[i]; string[i]=temp; } } printf("%s\n",string[i]);//p[i]代表第i行字符串 } menu(); } 算法说明: 首先判断是否已经输入字符串,如果数组中没有保存字符串数据,则提示先进行字符串输入。 当已输入字符串后,先用for循环语句,输出排序前的字符串。 然后用另一个for语句,运用冒泡排序法,通过字符串处理函数strcmp()比较两个字符串的大小,如果(strcmp(string[i],string[j])>0为真,则字符串string[i]比字符串string[j]大,然后交换两者的值。 当所有字符串比较完后,输出比较后的字符串,返回菜单。 N-S流程图如下图2: 图2字符串排序算法流程图 5.4、字符串修改模块: 该模块的功能通过函数voidmodify(char*mod[],inth)和voidchange()来实现。 源程序如下: voidmodify(char*mod[],inth) { intf,w,i; char*temp; if(h==0) { printf("您还没输入字符串,无法进行此操作\n"); menu(); } printf("待处理字符串序号: \n"); for(i=1;i { printf("序号%d: %s\n",i,mod[i]);//修改前的字符串 } printf("\n请输入您要修改的字符串序号: \n"); do//do……while做输入判断 {f=0; scanf("%d",&f); getchar(); if(f<1||f>h) { w=1;printf("\n\t\t输入错误! 请重新输入。 \n"); printf("待处理字符串序号: \n"); for(i=1;i<(h+1);i++) { printf("序号%d: %s\n",i,mod[i]); } printf("\n请输入您要修改的字符串序号: \n"); } elsew=0; }while(w==1); printf("\n您要修改的字符串为: %s\n",mod[f]); temp=mod[f]; mod[f]=0; printf("\n请输入新的的字符串: \n"); gets(temp); mod[f]=temp; printf("\n修改后字符串为: %s\n",mod[f]); printf("\n处理后所有的字符串如下: \n"); for(i=1;i { printf("%s\n",mod[i]);//修改后的字符串 } change(); } voidchange() { intt,w; do//do……while做输入判断 { t=0; printf("请选择操作序号(1-2): \n"); printf("\t1: 修改某个字符串\n"); printf("\t2: 返回菜单\n"); scanf("%d",&t); getchar(); if(t<1||t>2) { w=1;printf("\n\t\t选择错误! 请重新选择。 \n"); } elsew=0; }while(w==1); switch(t) { case1: modify(p,h); break; case2: menu(); break; } } 算法说明: 通过菜单函数调用voidmodify(char*mod[],inth)函数,在该函数中首先进行判断是否已经输入字符串,如果数组中没有保存字符串数据,则提示先进行字符串输入。 然后输出修改前的所有字符串。 接着对输入要修改的字符串序号f进行判断是否合法。 如果不合法,则进行输入错误说明,并且提示重新输入。 当输入f合法时,输出要修改的字符串,接着提示输入新的字符串。 把新的字符串覆盖原字符串,达到修改的目的。 然后输出修改后的字符串。 5.5、退出系统: 用一个函数exit()来实现。 因为没有文件的相关操作,所以退出系统后,历史数据将被清除掉。 5.6、主函数和菜单函数程序: 菜单函数程序: voidmenu() { intn,w; do { printf("\n"); printf("\t\t\t欢迎来到字符串处理系统\n"); printf("\t\t*****************菜单**********************\n\n"); printf("\t\t请选择相应的操作序号(1-4)以enter结束: \n\n"); printf("\t\t\t1: 录入字符串\n"); printf("\t\t\t2: 判断字符串是否有\"回文\"\n"); printf("\t\t\t3: 对字符串排序\n"); printf("\t\t\t4: 字符串修改\n"); printf("\t\t\t5: 退出系统\n\n"); printf("\t\t*******************************************\n"); scanf("%d",&n); getchar(); if(n<1||n>5) { w=1;printf("\n\t\t选择错误! 请重新选择。 \n"); } elsew=0; }while(w==1); switch(n) { case1: import(); break; case2: huiwen(p,h); break; case3: compare(p,h); break; case4: modify(p,h); break; case5: printf("\t\t您已退出菜单。 \n"); exit(0); } } 主函数: voidmain() { menu();//调用菜单函数 } 六、调试与测试 6.1、算法调试过程中的出现的问题以及解决方法: (以下为其中一例) F: \c语言课程设计\ytj.cpp(257): errorC2065: 'change': undeclaredidentifier F: \c语言课程设计\ytj.cpp(262): errorC2373: 'change': redefinition;differenttypemodifiers 执行cl.exe时出错. ytj.obj-1error(s),0warning(s) 错误分析: change()函数的使用时没有进行声明。 解决办法: 在程序的开始部分对change()函数进行声明。 6.2.主要程序运行结果: 6.2.1: 运行开始: (如图6.1) 图6.1系统主菜单 6.2.2: 菜单界面下,选择1输入字符串: (如图6.2) 图6.2输入字符串界面 6.2.3: 菜单界面下,选择3,对字符串进行排序: (如图6.3) 图6.3字符串排序界面 6.2.4: 菜单界面下,选择4,对字符串进行修改: (如图6.4) 图6.4字符串修改界面 6.2.5: 字符串修改界面下,选择1,继续对字符串进行修改: (如图6.5) 图6.4继续字符串修改界面 6.2.6: 字符串修改界面下,选择2,返回菜单: (如图6.6) 图6.6返回主菜单界面 6.2.7: 菜单界面下,选择2,判断字符串是否有回文,然后在判断回文方式界面下,选1,对所有字符串进行回文判断: (如图6.7) 图6.7对所有字符串回文判断界面 6.2.8: 菜单界面下,选择2,判断字符串是否有回文,然后在判断回文方式界面下,选1,对所有字符串进行回文判断: (如图6.8) 图6.8对某个字符串判断回文界面 6.2.9: 在判断回文方式界面下,选1,继续进行回文判断: (如图6.9) 图6.9继续对某个字符串判断回文界面 6.2.10: 返回菜单: (如图6.10) 图6.10返回主菜单界面 6.2.11: 退出系统: (如图6.11) 图6.11退出系统界面 七、总结 虽然我们选择的题目——字符串处理——比较简单,但是在进行设计过程中还是遇到很多问题,让我们深深地体会到设计一个系统的不容易,也同时感受到C语言的精深与强大。 同时使我们对c语言有了更深的认识,对编程,调试等也有全新的认识。 C语言是计算机程序设计的重要理论技术基础,另外运用C语言编写的程序,可以实现对单片机的控制。 因此,学好C语言,懂得如何编程,对我们电子科学与技术的学生来说,是一个基本的也是重要的专业要求。 经过这次课程设计,我们体会到单单学习书本上的知识是不够的,还要有较高的实践能力。 因为我们学习知识就是为了实践,而只有通过大量的编写程序才能更好的理解与掌握书本上的东西,从而提高编程能力,让我们在专业的方向上走得更远。 本课程设计是运用C语言编写一个字符串处理系统,通过本课题,进一步熟悉了C语言的基本东西。 我们还要学会分析题目的要求,学会中合起来考虑问题,在逐步的展开思想,特别是碰到大问题时要细细的分解成为许多小的问题来解决。 同时我还学到了课外的知识,碰到难题是不要逃避,而是要迎难而上,反复的实验调试结果后,再错的基础上做修改。 在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。 八、成员设计内容 1组长: xxx负责的内容: 菜单界面设计、字符串录入模块、字符串修改 2组员: xxx负责的内容: 字符串回文判断模块、字符串排序模块 九、参考资料 [1]谭浩强.C程序设计(第三版)[M].北京: 清华大学出版社,2005. [2]谭浩强.C程序设计题解与上机指导(第三版)[M].北京: 清华大学出版社,2005. [3]XX文库
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广工c语言课程设计 字符串处理 语言 课程设计 字符串 处理