C语言综合设计实例Word文档下载推荐.docx
- 文档编号:1282207
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:29
- 大小:99.70KB
C语言综合设计实例Word文档下载推荐.docx
《C语言综合设计实例Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言综合设计实例Word文档下载推荐.docx(29页珍藏版)》请在冰点文库上搜索。
(2)删除链表元素的程序流程图如图8.2所示。
图8.2删除链表元素的程序流程图
(3)求集合x,y的交集的程序流程图如图8.3所示。
图8.3求集合x,y的交集的程序流程图
(4)求集合x,y的并集的程序流程图如图8.4所示。
图8.4求集合x,y的并集的程序流程图
(5)求集合x-y的补集的程序流程图如图8.5所示。
创建空链表collSub,准备存放集合x和集合y的补集
p=x->
next;
p指向集合x的首节点
q=y->
q指向集合y的首节点
r=collSub;
r指向链表collSub的首地址
p!
=NULL
q!
是
p->
number!
=q->
number
否
q=q->
next
break
q==NULL
将p->
number插入链表r中
r=r->
p=p->
输出collSub
图8.5求集合x-y的补集的程序流程图
8.1.3编程
编码就是用高级语言表示设计阶段产生的算法。
在编码阶段,要遵循结构化程序设计思想。
按照结构化程序设计思想,功能模块独立,这样使程序层次清晰,容易保证程序开发时的正确性和易纠错性。
因此,按照这种思想开发的程序便于编写、阅读、修改和维护,减少了程序出错的机会,提高了程序的可靠性,保证了程序的质量。
下面是根据8.1.2的程序流程图编写的一个结构化程序,请读者参考。
#include"
stdio.h"
conio.h"
#include<
stdlib.h>
process.h"
voidPrintTable(structCollelm*x);
/*打印元素*/
voidAppendToTable(structCollelm*x);
/*为集合x输入元素*/
voidAddition(structCollelm*x,structCollelm*y);
/*求集合x,y的并集*/
voidInsertToTable(structCollelm*x,intnumber);
/*向集合x中插入元素number*/
voidMultiply(structCollelm*x,structCollelm*y);
/*求集合x,y的交集*/
voidDeleteTable(structCollelm*x,intnumber);
/*删除集合x中的元素number*/
voidSubtraction(structCollelm*x,structCollelm*y);
/*求集合x-y的补集*/
voidSubtractionhelp(structCollelm*x,structCollelm*y);
/*求两集合的补集菜单*/
structCollelm*CreateTable();
/*创建空链表*/
voidHelp();
/*显示系统主菜单*/
structCollelm/*定义结构体*/
{
intnumber;
structCollelm*next;
};
structCollelm*CreateTable()/*创建空链表*/
structCollelm*c;
c=(structCollelm*)malloc(sizeof(structCollelm));
c->
number=0;
next=NULL;
return(c);
/*返回链表头指针*/
}
voidAppendToTable(structCollelm*x)/*向集合中添加元素x*/
Help();
printf("
\n"
);
Pleaseinputthenumber(0toquit):
"
scanf("
%d"
&
number);
while(number)
{
InsertToTable(x,number);
scanf("
}
voidInsertToTable(structCollelm*x,intnumber)/*向集合x中插入一个元素number*/
structCollelm*newc,*last;
/*newc新建节点指针*/
last=x;
/*last是链表的尾指针*/
while(last->
next!
=NULL)
last=last->
newc=(structCollelm*)malloc(sizeof(structCollelm));
newc->
number=number;
last->
next=newc;
newc->
next=NULL;
voidAddition(structCollelm*x,structCollelm*y)/*求两集合的并集*/
structCollelm*p,*q,*r;
structCollelm*collAdd;
/*存放集合ab的并集*/
collAdd=CreateTable();
p=x->
q=y->
r=collAdd;
if(!
p)/*若集合p为空*/
{
if(!
q)/*若集合q为空*/
return;
else/*若集合q不为空*/
while(q)
{
InsertToTable(r,q->
r=r->
q=q->
}
else/*若集合p不为空*/
q)/*若集合q为空*/
while(p)
InsertToTable(r,p->
p=p->
else/*若集合q不为空*/
{
while(q)
q=y->
while(q)
{
if(p->
number)
q=q->
else
break;
}
if(!
q)
InsertToTable(r,p->
r=r->
}
}
PrintTable(collAdd);
voidMultiply(structCollelm*x,structCollelm*y)/*求两集合的交集*/
structCollelm*collMul;
/*存放集合ab的交集*/
collMul=CreateTable();
r=collMul;
p||!
q)/*p,q两个集合中有一个为空*/
return;
else
while(p)
if(p->
number==q->
p=p->
q=y->
PrintTable(collMul);
voidSubtractionhelp(structCollelm*x,structCollelm*y)/*求两集合的补集*/
system("
cls"
puts("
*********************************************"
*w=a-b*"
*s=b-a*"
*0toreturn*"
Pleasechoosewors:
"
if(getch()=='
w'
||getch()=='
W'
)/*求集合a-b*/
Subtraction(x,y);
s'
S'
)/*求集合b-a*/
Subtraction(y,x);
0'
)/*返回系统主菜单*/
Help();
voidSubtraction(structCollelm*x,structCollelm*y)/*求两集合x-y的补集*/
structCollelm*collSub;
/*存放集合ab的补集*/
collSub=CreateTable();
r=collSub;
while(p!
=NULL)
while(q!
q=q->
else
break;
if(q==NULL)
next;
PrintTable(collSub);
voidPrintTable(structCollelm*c)/*输出集合中元素的功能函数*/
structCollelm*t;
t=c;
t=t->
t)
puts("
ThetableisEMPTY!
while(t!
printf("
%3d\t"
t->
t=t->
voidDeleteTable(structCollelm*x,intnumber)/*删除集合x中的元素number*/
structCollelm*p,*q;
intn=0;
q=x;
while(q->
next)
if(number==q->
next->
n++;
printf("
HavingFind!
p=q->
q->
next=q->
free(p);
else
q=q->
PrintTable(x);
if(n==0)
Can'
tfindthenumber%d!
number);
voidHelp()/*显示系统主菜单*/
*CollectionSystemCommandHelp*"
*L=ListCollection*"
*+=Addition*"
**=Multiply*"
*-=Subtraction*"
*A=Appendrecords*"
*H=Showthishelpmessage*"
*D=Deleterecords*"
*C=Clearscreen*"
*Q=QuitSystem*"
*Designers(C)*"
*LiangYunchuan*"
*2008.07.03*"
voidmain()/*主函数*/
charkeyValue;
structCollelm*colla;
/*存放集合a*/
structCollelm*collb;
/*存放集合b*/
colla=CreateTable();
collb=CreateTable();
while((keyValue=getch())!
='
q'
&
&
keyValue!
Q'
=27)
switch(keyValue)
case'
l'
:
case'
L'
/*调用输出函数*/
printf("
PleaseselectionPrintobject:
aorb"
if((keyValue=getch())=='
a'
||keyValue=='
A'
)
PrintTable(colla);
else
PrintTable(collb);
break;
/*调用输入函数*/
PleaseselectionAppandobject:
AppendToTable(colla);
AppendToTable(collb);
d'
D'
/*调用删除函数*/
Pleaseinputthenumberyouwanttodelete:
scanf("
%u"
&
PleaseselectionDeleteobject:
aorb\n"
DeleteTable(colla,number);
DeleteTable(collb,number);
C'
case'
c'
/*调用清屏函数*/
system("
break;
h'
H'
/*调用系统菜单函数*/
Help();
+'
/*调用并集函数*/
\na+b=\n"
Addition(colla,collb);
*'
/*调用交集函数*/
\na*b=\n"
Multiply(colla,collb);
-'
/*调用补集菜单函数*/
Subtractionhelp(colla,collb);
default:
puts("
Errorcommand!
8.1.4测试
系统开发完成后,在软件开发阶段的最后一步工作就是对系统进行测试。
软件测试需经过制定测试计划,设计测试用例和填写测试报告等过程。
软件测试是为了发现程序中的错误。
软件测试的过程亦是程序运行的过程,程序运行需要数据,为测试设计的数据称测试用例。
设计测试用例的原则是尽可能多地暴露程序错误。
软件测试技术主要有白盒测试(WhiteboxTesting)和黑盒测试(BlackboxTesting)两大类。
白盒测试又称结构测试,是根据被测对象操作的逻辑结构设计测试用例;
黑盒测试又称功能测试,把被测对象看成一个黑盒子,检查各函数模块的操作是否满足功能要求。
实际测试中,常采用黑盒测试法。
如果发现错误,再采用白盒测试进行调试。
在软件测试过程中需要按照一定的策略选择一组能充分暴露程序可能发生错误的输入数据,观察程序的实际输出是否与预期结果一致。
因此测试用例由输入值和期望值组成。
8.2计算100的阶乘实例
8.2.1实例描述
【例8.2】计算100的阶乘。
题目要求及说明:
(1)数据类型不能定义为整型或长整型,其表示范围不能满足要求,以字符串形式进行计算;
(2)用字符串移位相加模拟乘法运算;
8.2.2程序设计
计算100的阶乘可划分为以下模块:
(1)计算多位数a乘以多位数b,函数名为mulbitmulmulbit(char*a,char*b,char*multiply);
(2)计算多位数a乘以一位数,函数名为bmulbitmulonebit(char*a,char*b,char*multiply);
(3)计算两个数相加,函数名为add(char*m1,char*m2,char*sum);
(4)一位数a与一位数b相乘,函数名为onebitmul(char*a,char*b,int*jw,int*m);
(5)字符串右移n位,函数名为rightmove(char*multiply,intn);
(6)字符串左移n位,函数名为leftmove(char*multiply,intn);
(1)计算多位数a乘以多位数b的程序流程图如图8.6所示。
m2[MAXMATRIX]="
0"
,sum[MAXMATRIX]={'
\0'
},计算字符串b的长度lenb
i=lenb-1,即从字符串b的最后一位开始与字符串a进行相乘
i>
=0
取b的一位数x,即x=b[i]
调用函数mulbitmulonebit()计算a*x,乘积为m1
将m1乘以10的lenb-1-i次方
计算m1和m2的和
将m2赋值给sum
将sum赋值给multiply
图8.6计算多位数a乘以多位数b的程序流程图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 综合 设计 实例