预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

课程设计报告学院、系:专业名称:课程设计科目所在班级:学生学号:学生姓名:指导教师:完成时间:数字金字塔设计任务与目标给出一个正整数n,一个存放1到n共n个正整数的数字金字塔构造如下:Ⅰ1在最上方第0层;Ⅱ如果x大于y并且x除以y的余数为0(即x>y&&x%y==0),x要放在y下方一层(即若y在第i层,x应在i+1层);Ⅲ每个数应尽可能放在更下方,即如果可以放在第i层,就不能放在i-1层;Ⅳ相同层上的数从左向右从小到大排列。其实第i层是有i个素数因子的数的从小到大的排列。要求编写程序,输入一个正整数n,5<n<50,再输入3个不大于n的正整数,然后程序输出所构造的数字金字塔,及所输入3个不大于n的正整数在数字金字塔中的编号。程序编写完成后,要求给出程序对下列两组输入的结果:(1)10,7,8,9(2)25,15,20,25二、方案设计与论证1.判断在金字塔中的每个数在哪一层2.确定数字金字塔的层数3.将确定好的数字分层储存在链表中4.将每一层进行连接5.为数字进行排名6.进行输出三、程序框图或流程图,程序清单与调用关系四、全部源程序清单#include<stdio.h>structNode{intnum;intlay;intsort;structNode*pNext;};voidmain(){printf("现将构筑一个数字金字塔\n");intn;inta;intb;intc;printf("请输入一个大于5小于50用来确定金字塔大小的基数\n");scanf("%d",&n);printf("请输入想在金字塔中确定位置的第一个数\na=");scanf("%d",&a);printf("请输入想在金字塔中确定位置的第二个数\nb=");scanf("%d",&b);printf("请输入想在金字塔中确定位置的第三个数\nc=");scanf("%d",&c);printf("\n\n");structNode*pNode=newNode[n];for(inti=0;i<n;i++)//初始化{pNode[i].num=i+1;pNode[i].lay=0;pNode[i].sort=0;pNode[i].pNext=NULL;}for(inti=0;i<n;i++)//确定每个数在哪一层{intj=i;while(j){if(pNode[i].num%j==0){pNode[i].lay=pNode[j-1].lay+1;break;}j--;}}//确定有多少层intlay=0;for(inti=0;i<n;i++){if(pNode[i].lay>lay)lay=pNode[i].lay;}//把所有的元素做成链表structNode**play=newstructNode*[lay];for(intj=0;j<=lay;j++){structNode*pTemp=NULL;intk=0;for(inti=0;i<n;i++){if(k==0){if(pNode[i].lay==j){play[j]=&pNode[i];pTemp=play[j];k=1;}}elseif(pNode[i].lay==j){pTemp->pNext=&pNode[i];pTemp=pTemp->pNext;}}}//输出信息structNode*ptemp=NULL;printf("构筑的数字金字塔为\n");for(inti=0;i<=lay;i++){ptemp=play[i];while(ptemp!=NULL){printf("%2d",ptemp->num);ptemp=ptemp->pNext;}printf("\n");}//将层与层相接structNode*pHead=play[0];for(inti=0;i<lay;i++){while(play[i]->pNext!=NULL){play[i]=play[i]->pNext;}play