当前位置:文档之家› C语言大作业

C语言大作业

学院目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (3)2.1程序结构 (3)2.2主要功能 (10)2.3函数实现 (10)2.4开发日志 (17)3 程序调试及运行 (18)3.1程序运行结果 (18)3.2程序使用说明 (19)3.3程序开发总结 (20)4 附件(源程序) (20)1 摘要1.1 设计题目A题算法型:折半查找算法演示程序B题空间桁架结构节点位移求解1.2 设计内容A题:本程序是一个演示折半查找算法的演示程序。

当用户输入查找数据表列和要查找的数据时,程序会演示折半法查找该数的详细过程,并且支持多次查找、错误提示等功能。

B题:空间桁架结构节点位移求解1.3 开发工具Code Blocks 12.11(内置MinGW)1.4 应用平台Windows 7 64位2 详细设计2.1 程序结构A题:程序功能模块:本程序主要包含六大模块:程序说明模块、输入模块、排序模块、折半法查找模块、选择模块和程序退出模块。

工程文件结构:本程序的工程含有6个文件,其中main.cpp、print_stars.cpp、judge.cpp、sort.cpp、putout.cpp5个cpp 文件和include.h1个头文件(参见下图),两者共同存在于工程“折半法查找演示程序”中。

其中main.cpp 文件包含了程序的主体部分,程序说明模块、输入、排序、折半查找、选择、程序退出模块按线性排列。

其中输入、排序模块执行一次,这般查找、选择模块可多次执行,直到程序退出模块执行。

六大模块说明:(1) 程序说明模块:给使用者营造一个较为友好的界面,同时提供程序开发人员的相关信息以及程序操作的相关说明信息。

此部分模块主函数源代码如下:int a[N];/*存储要查找的数表,用户输入*/int i,n,num,count;/*count为折半次数计数器,n为数表数据个数,num存储所查数据*/int top,bottom,mid;char c;/*存储选择函数中的输入的字符y或n*/int flag=1;/*折半法循环标志变量*/int loc=-1;/*存储所查找数据位置*/double k=0;p_s(76);puts("\n");/*引用p_s函数,打出一行'*'*/(p_s函数位于print_star.cpp文件中,参见下文)printf("****欢****迎****使****用****折****半****查****找****法****演****示****器****\n");puts("\n");/*程序欢迎语*/p_s(13);printf("制作者:Haidong Chen***");/*作者信息*/p_s(4);printf("**Email:1562353594@");/*电子邮件*/p_s(11);puts("\n");p_s(76);puts("\n");/*再次引用p_s函数,程序说明部分结束*/附:print_star.cpp文件源代码#include<stdio.h>void p_s(int k){int i;for(i=1;i<=k;i++)/*连续输出ka个'*'*/printf("*");}(2) 输入模块:引导使用者输入要在其中查找数据的数表的数据个数和数表数据。

并通过一个judge函数判断输入是否合法,若不合法提醒用户继续输入。

此部分模块主函数源代码如下:printf("请输入你想要在其中查找数据的数据表列的数据个数(1--50):\n");//scanf("%d",&n);n=judge(n);/*引用judge函数,判断n值是否合法*/ (judge函数位于judge.cpp文件,参见下文)printf("请输入你要在其中查找数据的数据表列(%d个数据用空格间隔大小排序不限):\n",n);/*输入要查找的n 个数据*/for(i=0;i<=n-1;i++)scanf("%d",&a[i]);/*将要查找的n个数据存入数组a*/sort(a,n);/*引用sort函数,将数表排序*/printf("\n输出表列(从小到大排列)\n");附:judge.cpp文件源代码#include <stdio.h>int judge(int n2)/*函数作用:判断n2的值是否在1—50范围内*/{ int n3;while(n2<1 || n2>50){printf("你输入的数不正确,请重新输入。

\n");printf("请输入你想要在其中查找数据的数据表列的数据个数(1--50):\n");/*不合法重新输入并传递给主函数*/scanf("%d",&n3);return n3;}return n2;}(3) 排序模块:将用户输入数表的按升序排列并输出,为接下来的折半法查找做准备。

此部分模块主要通过sort.cpp 文件中的sort函数实现。

此部分模块主函数源代码如下:sort(a,n);/*引用sort函数,将数表排序*/printf("\n输出表列(从小到大排列)\n");putout(a,0,n-1);/*引用putout函数,输出排序后数表*/附:sort.cpp 文件源代码#include <stdio.h>void sort(int A[],int n1)/*将数组A的元素按从下到大顺序排序*/{int x,y,z;for(x=0;x<n1;x++)for(y=0;y<n1-x-1;y++){if(A[y]>A[y+1])/*二重循环将n1个数据由小到大排序*/{z=A[y];/*z暂时存储a[y]的值*/A[y]=A[y+1];A[y+1]=z;}}}(4) 折半法查找模块:提醒用户输入要查找的数据并判断是否合法。

若合法则进入折半法查找循环,在每次折半法查找过程中输出数表中间数据、查找数据与该数据的大小关系、下次再左还是右部分查找,并输出该次折半法后要查找的数表的,用来演示折半法的查找过程,并在每次折半过程中设定程序暂停一次,方便演示,最后输出该数据在排序后数表的位置,然后进入进程选择模块;若非法,则输出“这个数在表列中没有找到”,然后进入进程选择模块。

此部分模块主函数源代码如下:r_s: printf("请你输入要查找的数:\n");/*输出要查找的数据*/scanf("%d",&num);count=0;/*折半次数计数器初值赋0*/flag=1;top=n-1;bottom=0;mid=(top+bottom)/2;while(flag){count++;/*折半次数计数器自加1*/if( (num>a[top]) || (num<a[bottom]) )/*查找数据非法,loc为1*/{loc=-1;flag=0;}else if(a[mid]==num)/*折半法查找到该数据*/{loc=mid;printf("第%d次折半\n",count);/*输出此次折半后中间数据*/printf(" 中间数据为%d\n",a[mid]);system("pause");/*利用该语句暂停程序,便于演示,以下同理*/printf("找到数%6d 排序后的位置%2d\n",num,loc+1);/*输出结果*/loc=1;goto c_e;/*转至选择语句c_e,判断是否继续查找*/}else if(a[mid]>num){printf("第%d次折半\n",count);/*利用折半次数计数器和循环显示每次折半查找后的表列*/printf(" 中间数据为%d\n",a[mid]);/*输出此次折半后中间数据*/printf(" 因为%d<%d ",num,a[mid]);/*说明下步折半查找原因*/printf("所以在左半部分查找\n 折半后查找数表为:\n");top=mid-1;mid=(top+bottom)/2;putout(a,bottom,top);/*引用putout函数,输出该次折半后数表*/system("pause");}else if(a[mid]<num){printf("第%d次折半\n",count);/*利用折半次数计数器和循环显示每次折半查找后的表列*/printf(" 中间数据为%d\n",a[mid]);/*输出此次折半后中间数据*/printf(" 因为%d>%d ",num,a[mid]);/*说明下步折半查找原因*/printf("所以在右半部分查找\n 折半后查找数表为:\n");bottom=mid+1;mid=(top+bottom)/2;putout(a,bottom,top);/*引用putout函数,输出该次折半后数表*/system("pause");}}if(loc==-1){printf("%d 这个数在表列中没有找到。

\n",num);/*若查找数据非法,提示查找错误*/printf("请重新输入要查找的数据\n");goto r_s;/*利用goto语句转职r_s语句重新查找*/}此段函数会用到putout函数,因上文已经提到,在此不做赘述。

(5) 选择模块:通过判断用户输入的字符决定程序下一步的走向,若为“y”则进入下一次折半法查找演示过程,若为“n”则进入程序退出模块。

此部分模块主函数源代码如下:c_e:{ fflush(stdin);/*利用fflush语句清除按键缓存*/printf("请选择是否继续查找\n");printf("是——y,否——n\n");/*选择步骤操作说明*/c=getchar();if(c!='y'&&c!='n'){printf("选择错误!");/*若选择错误,继续选择*/goto c_e;}else{if(c=='y') goto r_s;/*选择y,转至r_s语句继续查找*/else goto end;/*选择n,转至end语句结束程序*/}}(6) 程序退出模块:与程序说明模块呼应,友好的退出程序。

相关主题