实验5循环结构参考答案.doc

实验5循环结构参考答案.doc
实验5循环结构参考答案.doc

C语言程序设计实验教学(5)

【实验目的】通过程序设计实现,掌握while结构、do-while结构和for结构各种类型的循环结构,完成各种循环程序的设计和实现。

【实验要求】同一个题目尝试使用多种循环控制结构来实现,并分析其设计和实现的差别和难易程度。

【实验课时】6.0

【实验内容】

一、以下程序使用while结构实现。

1、完成课堂实例的实现。

(1)计算s=1+2+…+100。(累加型)

main()

{int i=1,sum=0;

while(i<=100)

{sum+=i; i++;}

printf("1+2+3+...+100=%d\n",sum);

}

main()

{int i,sum=0;

for(i=1;i<=100;i++)

sum+=i;

printf("1+2+3+...+100=%d\n",sum);

}

(2)请输入数n,计算n!。(连乘型)

main()

{int i=1,n; long fac=1;

scanf("%d",&n);

while(i<=n)

{fac*=i; i++;}

printf("%d!=%ld\n",n,fac);

}

main()

{int i,n; long fac=1;

scanf("%d",&n);

for(i=1;i<=n;i++)

fac*=i;

printf("%d!=%ld\n",n,fac);

}

(3)输出所有的水仙花数。(范围型)

main()

{int n=100,a,b,c;

while(n<=999)

{a=n/100;

b=n/10%10;

c=n%10;

if(a*a*a+b*b*b+c*c*c==n)

printf("%6d",n);

n++;}

printf("\n");

}

main()

{int n,a,b,c;

for(n=100;n<=999;n++)

{a=n/100;

b=n/10%10;

c=n%10;

if(a*a*a+b*b*b+c*c*c==n)

printf("%6d",n);}

printf("\n");

}

(4)判断n是否为素数。(反向思维型)

main()

{int n,i=2;

scanf("%d",&n);

while(i<=n-1)

{if(n%i==0) break;

i++;}

if(i>=n)

printf("%d is a prime number\n",n); else

printf("%d is not a prime number\n",n); }

main()

{int n,i;

scanf("%d",&n);

for(i=2;i<=n-1;i++)

{if(n%i==0) break;}

if(i>=n)

printf("%d is a prime number\n",n); else

printf("%d is not a prime number\n",n); }

(5)输入n个数,计算其中偶数的个数。

main()

{int n,i=1,num,count=0;

scanf("%d",&n);

while(i<=n)

{scanf("%d",&num);

if(num%2==0) count++;

i++;}

printf("count is %d\n",count);

}

main()

{int n,i,num,count=0;

scanf("%d",&n);

for(i=1;i<=n;i++)

{scanf("%d",&num);

if(num%2==0) count++;}

printf("count is %d\n",count);

}

(6)输出以下图形(1):

(7)输出以下图形(2):

(8)输出以下图形(3):

图形(1)图形(2)图形(3)

main()

{int i,j;

for(i=1;i<=4;i++)

{for(j=1;j<=4-i;j++)

printf(" ");

for(j=1;j<=2*i-1;j++)

printf("*");

printf("\n");

}

for(i=3;i>=1;i--)

{for(j=1;j<=4-i;j++)

printf(" ");

for(j=1;j<=2*i-1;j++)

printf("*");

printf("\n");

}

}

main()

{int i,j;

for(i=1;i<=5;i++)

{for(j=1;j<=5-i;j++)

printf(" ");

for(j=1;j<=2*i-1;j++)

printf("%d",j);

printf("\n");

}

for(i=4;i>=1;i--)

{for(j=1;j<=5-i;j++)

printf(" ");

for(j=1;j<=2*i-1;j++)

printf("%d",j);

printf("\n");

}

}

main()

{int i,j;

for(i=1;i<=5;i++)

{for(j=1;j<=5-i;j++)

printf(" ");

for(j=1;j<=i;j++)

printf("%d",j);

for(j=i-1;j>=1;j--)

printf("%d",j);

printf("\n");

}

for(i=4;i>=1;i--)

{for(j=1;j<=5-i;j++)

printf(" ");

for(j=1;j<=i;j++)

printf("%d",j);

for(j=i-1;j>=1;j--)

printf("%d",j);

printf("\n");

}

}

(9)输入一批字符,计算大写字母的个数,输入‘#’结束。(个数未知型)

#include "stdio.h"

main()

{char ch; int count=0;

ch=getche();

while(ch!='#')

{if(ch>='A' && ch<='Z')

count++;

ch=getche();

}

printf("\ncount is %d\n",count);

}

2、计算s1=1*3*5*…*(2*n-1)。

main()

{int i=1,n; long s=1;

scanf("%d",&n);

while(i<=n)

{s=s*(2*i-1); i++;}

printf("s1=1*3*5*...*%d=%ld\n",2*n-1,s); }

main()

{int i,n; long s=1;

scanf("%d",&n);

for(i=1;i<=n;i++)

s=s*(2*i-1);

printf("s1=1*3*5*...*%d=%ld\n",2*n-1,s); }

3、计算所有水仙花数的和。

main()

{int i=100,s=0; int a,b,c;

while(i<=999)

{a=i/100;

b=i/10%10;

c=i%10;

if(a*a*a+b*b*b+c*c*c==i) s+=i;

i++;

}

printf("sum=%d\n",s);

}

main()

{int i,s=0; int a,b,c;

for(i=100;i<=999;i++)

{a=i/100;

b=i/10%10;

c=i%10;

if(a*a*a+b*b*b+c*c*c==i) s+=i;

}

printf("sum=%d\n",s);

}

4、求100~200间的全部素数。

main()

{int n=101,k=0,i;

while(n<200)

{for(i=2;i<=n-1;i++)

if(n%i==0) break;

if(i>=n) {printf("%6d",n); k+=1;}

if(k%10==0) printf("\n");

n=n+2;}

printf("\n");

}

main()

{int n,k=0,i;

for(n=101;n<200;n=n+2)

{for(i=2;i<=n-1;i++)

if(n%i==0) break;

if(i>=n) {printf("%6d",n); k+=1;}

if(k%10==0) printf("\n");}

printf("\n");

}

5、一张纸厚度为0.3毫米,现有一张无限大的纸,并进行若干次对折,请问对折几次后,高度超过珠峰8848米?

main()

{int count=0;

long h=3; /* long 不能换int ,因为数值较大*/

while(h<=88480000)

{count++;

h=h*2;};

printf("The result is: %d \n",count);

}

6、输入2个正整数m,n,求其最大公约数和最小公倍数。

main()

{int m,n,t,p,r;

printf("please input two numbers:\n ");

scanf("%d,%d",&n,&m);

if(n

{t=n;n=m;m=t;}

p=n*m;

while(m!=0)

{r=n%m;n=m;m=r;}

printf("gys is:%d\n",n);

printf("gbs is:%d\n",p/n);

}

main()

{int m,n,t,p,i;

printf("please input two numbers:\n "); scanf("%d,%d",&n,&m);

if(n

{t=n;n=m;m=t;}

p=n*m;

for(i=m;i>1;i--)

{if(n%i==0 && m%i==0) break;} printf("gys is:%d\n",i);

printf("gbs is:%d\n",p/i);

}

7、求∑

=

20

1

!

n

n

(即求1!+2!+3!+……+20!)

main()

{int i; double t=1,s=0;

for(i=1;i<=20;i++)

{t=t*i;s=s+t;}

printf("1!+2!+...+20!=%lf\n",s);

8、请编程序打印出以下数列:1、1、2、3、5、8、13、…的前40项。每行输出4个数。(斐波那契数列)

方法一:

main()

{int i;

long f1=1,f2=1,f;

printf("%12ld%12ld",f1,f2);

for(i=3;i<=40;i++)

{f=f1+f2;

printf("%12ld",f);

if(i%4==0) printf("\n");

f1=f2;f2=f;

}

printf("\n");

}

方法二:

main()

{int i;

long f1=1,f2=1;

for(i=1;i<=20;i++)

{printf("%12ld%12ld",f1,f2);

f1=f1+f2;

f2=f2+f1;

if(i%2==0) printf("\n");

}

printf("\n");

}

9、求下列分数序列的前20项之和。

12,23,35,58,813,1321,……

main()

{int i;

float fz=2,fm=1,s=0;

for(i=1;i<=20;i++)

{s=s+fz/fm;

fz=fz+fm;

fm=fz-fm;

}

printf("sum=%9.6f\n",s);

}

10、找出1000之内的所有完数,一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。输出时按下面的格式输出其因子: 6 its factors are 1,2,3

main()

{int i,n,s;

for(n=2;n<1000;n++)

{s=0;

for(i=1;i

if(n%i==0) s=s+i;

if(s==n)

{printf("%d,its factors are:",n);

for(i=1;i

if(n%i==0) printf("%d,",i);

printf("\n");

}

}

}

补充作业:(以下题目任选2题)

1、若一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?

main()

{int i;

float sn=100,hn=sn/2;

for(i=2;i<=10;i++)

{sn=sn+2*hn;

hn=hn/2;

}

printf("sn=%fm.\n",sn);

printf("hn=%fm.\n",hn);

}

2、猴子吃桃问题。猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,就只剩一个桃子了。求第一天猴子共摘了多少桃子。

main()

{int i,x1,x2=1;

for(i=9;i>=1;i--)

{x1=(x2+1)*2;

x2=x1;

}

printf("total=%d\n",x1);

}

3、输入m个字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include "stdio.h"

main()

{char ch;

int letters=0,space=0,digit=0,other=0;

while((ch=getchar())!='\n')

{if(ch>='a' && ch<='z' ||ch>='A' && ch<='Z')

letters++;

else if(ch==' ')

space++;

else if(ch>='0' &&ch<='9')

digit++;

else

other++;

}

printf("letters is: %d \n",letters);

printf("space is: %d \n",space);

printf("digit is: %d \n",digit);

printf("other is: %d \n",other);

}

4、输入一个自然数,计算各数位上数字之和。如:5246对应和为5+2+4+6=17。

main()

{int n,s=0;

scanf("%d",&n);

while(n>0)

{s=s+n%10;

n=n/10;}

printf("sum is: %d \n",s);

}

5、对输入的一正整数a(a在1到9之间),求Sn=a+aa+aaa+..+aaa..a,(10个a),例a=3,则S=3+33+333+..+333..3

void main()

{int a,i=1; double sn=0,tn;

scanf("%d",&a);

printf("\na=%d\n",a);

tn=a;

while(i<=10)

{sn=sn+tn;tn=tn*10+a;++i;}

printf("sn=%lf\n",sn);}

void main()

{int a,i; double sn=0,tn;

scanf("%d",&a);

printf("\na=%d\n",a);

tn=a;

for(i=1;i<=10;i++)

{sn=sn+tn;tn=tn*10+a;}

printf("sn=%lf\n",sn);}

6、求S=1+12+123+1234+12345

main()

{int i,t=1,s=1;

for(i=2;i<=5;i++)

{t=t*10+i; s=s+t;}

printf("s=%d\n",s);

}

数据结构实验答案1

重庆文理学院软件工程学院实验报告册 专业:_____软件工程__ _ 班级:_____软件工程2班__ _ 学号:_____201258014054 ___ 姓名:_____周贵宇___________ 课程名称:___ 数据结构 _ 指导教师:_____胡章平__________ 2013年 06 月 25 日

实验序号 1 实验名称实验一线性表基本操作实验地点S-C1303 实验日期2013年04月22日 实验内容1.编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。 2.编程实现把顺序表中从i个元素开始的k个元素删除(数据类型为整型)。 3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an)变成 (an,…..a2,a1)。(单链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,年龄) 实验过程及步骤1. #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct

{ ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); void main() { SeqList *l; int p,q,r; int i; l=(SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; i<=l->last; i++) { scanf("%d",&l->elem[i]); } px(l,i); printf("请输入要插入的值:\n");

大一上期C语言实验报告5 循环控制语句

成都工业学院·计算机工程学院 《程序设计基础》实验报告 1.实验目的 (1)熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用三 种循环语句实现循环结构; (2)掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧; (3)进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。2.实验内容 (1)输出两个整数m和n,求它们的最大公约数和最小公倍数。 要求: ①画出算法流程图,从键盘输入m和n; ②对负数和零可不做考虑; ③运行程序,对m>n、m

③按照数字、大写字母、小写字母及其他字符数的顺序输出结果 3.流程图 4.源程序

5. 运行结果 (1 ) 求最大公约数和最小公倍数 (2)求1000内最大的10个素数之和(3)计算π值

实验2-循环结构

实验2 循环结构 程序填空 1. 题目描述:马克思曾经出过这样一道趣味数学题:有30个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花了3先今,每个女人花了2先令,每个小孩花了1先令,一共花去50先令。问男人、女人以及小孩各有几个人。以下是完成此项工作的程序,请将未完成的部分填入,实现其功能,并在计算机上调试程序,以测试填入的部分是否正确。代码: #include using namespace std; int main() { int n; //n记录解的个数 int a,b,c; //分别记录男、女、小孩的人数 n=0; //初始化n的值 for(a=1;a<=30;a++) { for(b=1;b<=30;b++) { c=30-a-b; if(3*a+2*b+c==50) { cout<<"男人有:"< using namespace std; int main() { int n, k=1, s=0, m ; for (n=1 ; n<=100 ; n++) { k=1 ; s=0 ; m=n; while (m>=1&&m<=100 )

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

实验4 循环控制 答案

实验4 循环控制 班级:学号: 姓名:日期: 一、实验目的 (1)熟悉掌握用while语句、do—while语句和for语句实现循环的方法。 (2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 (3)进一步学习调试程序。 二、实验内容 1.while语句 while 语句的一般形式为: while(表达式)语句; while 语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。 编程:求1-100的奇数和。 提示:循环变量的步长值为2。 #include void main() { int i=1,sum=0; while(i<=100) { sum=sum+i; i=i+2; } printf("sum=%d\n",sum); } 2.do-while语句 do-while 语句的一般形式为: do { 语句; }while(表达式);

do-while 语句的语义是:先执行循环体语句一次,再判别表达式的值,若为真(非0)则继续循环,否则终止循环。 编程:求1—100的偶数和。 #include void main() { int i=0,sum=0; do { i=i+2; sum=sum+i; }while(i<100); printf("sum=%d\n",sum); } 3.for语句 其一般形式为: for(表达式1;表达式2;表达3) 语句; for 语句的语义是: ⑴首先计算表达式1 的值。 ⑵再计算表达式2 的值,若值为真(非0)则执行循环体一次,否则结束循环。 ⑶执行循环体后再计算表达式3 的值,转回第2 步重复执行。 下列程序用于输出fibnocci 数列的前20 项,每行输出5 个。请填空。 说明:fibnocci 数列的前两项均为1,以后各项等于其前两项之和。 #include void main( ) { int i,f1,f2,f3,n; f1=1;f2=1; printf("\n%d %d ",f1,f2); n=2; for(i=1; i<=18 ;i++) { if (n % 5==0 ) printf("\n"); f3=f1+f2 ; printf("%d ",f3); n++;` f1=f2;f2=f3; } }

《数据结构》实验报告

苏州科技学院 数据结构(C语言版) 实验报告 专业班级测绘1011 学号10201151 姓名XX 实习地点C1 机房 指导教师史守正

目录 封面 (1) 目录 (2) 实验一线性表 (3) 一、程序设计的基本思想,原理和算法描述 (3) 二、源程序及注释(打包上传) (3) 三、运行输出结果 (4) 四、调试和运行程序过程中产生的问题及采取的措施 (6) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (6) 实验二栈和队列 (7) 一、程序设计的基本思想,原理和算法描述 (8) 二、源程序及注释(打包上传) (8) 三、运行输出结果 (8) 四、调试和运行程序过程中产生的问题及采取的措施 (10) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (10) 实验三树和二叉树 (11) 一、程序设计的基本思想,原理和算法描述 (11) 二、源程序及注释(打包上传) (12) 三、运行输出结果 (12) 四、调试和运行程序过程中产生的问题及采取的措施 (12) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (12) 实验四图 (13) 一、程序设计的基本思想,原理和算法描述 (13) 二、源程序及注释(打包上传) (14) 三、运行输出结果 (14) 四、调试和运行程序过程中产生的问题及采取的措施 (15) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (16) 实验五查找 (17) 一、程序设计的基本思想,原理和算法描述 (17)

二、源程序及注释(打包上传) (18) 三、运行输出结果 (18) 四、调试和运行程序过程中产生的问题及采取的措施 (19) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (19) 实验六排序 (20) 一、程序设计的基本思想,原理和算法描述 (20) 二、源程序及注释(打包上传) (21) 三、运行输出结果 (21) 四、调试和运行程序过程中产生的问题及采取的措施 (24) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (24) 实验一线性表 一、程序设计的基本思想,原理和算法描述: 程序的主要分为自定义函数、主函数。自定义函数有 InitList_Sq、Out_List、ListInsert_Sq、ListDelete_Sq、LocateElem_Sq 、compare。主函数在运行中调用上述的自定义函数,每个自定义函数实现程序的每部分的小功能。 1.程序设计基本思想 用c语言编译程序,利用顺序存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行数据的插入、删除、查找,并在插入或删除数据后,再输出线性表;最后在屏幕菜单中选择结束按钮,即可结束程序的运行。 2.原理 线性表通过顺序表现,链式表示,一元多项式表示,其中链式表示又分为静态链表,双向链表,循环链表等,在不同的情况下各不相同,他可以是一个数字,也可以是一个符号,通过符号或数字来实现程序的运行。 3.算法描述

实验07 循环结构程序设计(二)

实验七循环结构序程序设计(二) 循环结构是三种基本程序结构之一,是用于解决复杂问题的一类程序结构。在实验六中已经学习了循环结构的基本概念,以及DO循环语句和DO WHILE循环语句的基本功能和使用规则,但这仅是循环结构的基本内容,还需要学习和掌握循环结构的综合应用,以及更复杂的循环结构,用于解决更复杂的问题。 循环结构允许嵌套,嵌套的循环结构称为多重循环,即一个循环结构的循环体中包含另一个循环结构,根据实际需要可使用多层嵌套。FORTRAN90新增了强制性终止循环语句CYCLE 和EXIT,使用这两条语句可在循环体执行过程中提前终止本次循环或者整个循环。这两条语句的使用虽然不符合结构化程序设计思想,但使用得当,可使用程序简洁、短小、高效。 本次实验是学习和掌握循环结构的综合应用的一次实系统验活动。通过本次实验,能够设计和编写比较复杂的循环结构程序。 一.实验目的 1.进一步掌握三种基本循环结构的使用。 2.掌握强制性终止循环语句EXIT和CYCLE的基本功能和使用规则,以及相互区别。 3.掌握嵌套循环结构概念和应用。 4.掌握顺序结构、选择结构和循环结构相互嵌套和综合应用。 5.掌握设计和编写较复杂程序的基本技能。 二.实验内容1 1.问题描述 公元五世纪末,我国古代数学家张丘建在《算经》中提出了“百钱买百鸡问题”:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问公鸡、母鸡、小鸡各几何?”意思是:公鸡每只5元,母鸡每只3元,小鸡一元三只。100元买100只鸡。公鸡、母鸡、小鸡各买多少只?编写程序实现之。 2.算法设计 求解本题,有两个限定条件:其一是所有的鸡共计100只;其二是所有买鸡的钱共计100元。根据这两个条件可列出下面两个方程式:(设公鸡、母鸡和小鸡数分别为x、y、z) x+y+z=100 5x+3y+z/3=100 这是一个三元一次方程组,但是其限定条件也就是方程式只有两个,这就意味着它是一个多解题。求解该问题,有多种解法,可利用计算机快速计算的特点采用试探法求解该问题。

数据结构实验报告-答案

数据结构(C语言版) 实验报告

专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测 试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"" #include"" #include"" #include"" typedef struct node . . 示意图:

head head head 心得体会: 本次实验使我们对链表的实质了解更加明确了,对链表的一些基本操作也更加熟练了。另外实验指导书上给出的代码是有一些问题的,这使我们认识到实验过程中不能想当然的直接编译执行,应当在阅读并完全理解代码的基础上再执行,这才是实验的意义所在。

实验2 实验题目:二叉树操作设计和实现 实验目的: 掌握二叉树的定义、性质及存储方式,各种遍历算法。 实验要求: 采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历 的操作,求所有叶子及结点总数的操作。 实验主要步骤: 1、分析、理解程序。 2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针), 如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求 所有叶子及结点总数。 实验代码 #include"" #include"" #include"" #define Max 20 ertex=a; irstedge=NULL; irstedge; G->adjlist[i].firstedge=s; irstedge; R[i] 留在原位

实验5 循环控制

实验5 循环控制 一、实验目的 熟悉掌握用while语句,do-while语句和for语句实现循环的方法。掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。进一步学习调试程序。 二、实验内容 编程序并上机调试运行。 1.输入两个正整数m和n,求它们的最大公约数和最小公倍数。 源程序:(以T5_1作为文件名。) 运行程序,分别用8和12、22和10做为测试数据,写出运行结果: 2.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。 源程序:(以T5_2作为文件名。) 运行程序,写出运行结果:

3.编程计算1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+n)的值。 (本题中的n从键盘输入,且假设在20以内) 源程序:(以T5_3作为文件名。) 4.试编程:找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例52=25,5在25的右边,5是同构数;252=625,25在625的右边,25是同构数。 源程序:(以T5_4作为文件名。) 运行程序,写出运行结果: 5.编程求100~300之间的全部素数的和 源程序:(以T5_5作为文件名。)

运行程序,写出运行结果: 课后思考题(以前考试题): 1.利用下面公式求s的值(求20项之和) s=1/(1*2*3)-1/(2*3*4)+1/(3*4*5)-1/(4*5*6)+...+1/(19*20*21)-1/(20*21*22) 2.一个素数加上1000以后是43的倍数,求满足这个条件的最小素数。 3.有2个小于40的正整数a和b,a的平方与b的和是1053,b的平方与a的和是873,请编程求满足条件的a和b的值。(提示:满足条件的a,b的值唯一) 4.一个自然数除以2余1,除以3余2,除以4余3,除以5余4,除以7余5,求满足这个条件的最小的自然数? 5.求所有的"水仙花数"之和。所谓"水仙花数"是指一个三位数,其各位数字的立方和等于该数本身。例如153是一个"水仙花数",因为:153=1*1*1+5*5*5+3*3*3。 6.分别计算500到1300之间所有既能被7整除又能被13整除的奇数和偶数之和。 7.统计用0-9之间不同的3个数构成一个三位数有多少种方法

数据结构实验报告(2015级)及答案

数据结构实验报告(2015级)及答案

《数据结构》实验报告 专业__信息管理学院______ 年级__2015级___________ 学号___ _______ 学生姓名___ _ _______ 指导老师____________ 华中师范大学信息管理系编

I 实验要求 1.每次实验中有若干习题,每个学生至少应该完成其中的两道习题。 2.上机之前应作好充分的准备工作,预先编好程序,经过人工检查无误后,才能上机,以提高上机效率。 3.独立上机输入和调试自己所编的程序,切忌抄袭、拷贝他人程序。 4.上机结束后,应整理出实验报告。书写实验报告时,重点放在调试过程和小节部分,总结出本次实验中的得与失,以达到巩固课堂学习、提高动手能力的目的。 II 实验内容 实验一线性表 【实验目的】 1.熟悉VC环境,学习如何使用C语言实现线性表的两种存储结构。 2.通过编程、上机调试,进一步理解线性表的基本概念,熟练运用C语言实现线性表基本操作。 3.熟练掌握线性表的综合应用问题。 【实验内容】 1.一个线性表有n个元素(n

的顺序不变。设计程序实现。要求:采用顺序存储表示实现;采用链式存储表示方法实现;比较两种方法的优劣。 2. 从单链表中删除指定的元素x,若x在单链表中不存在,给出提示信息。 要求: ①指定的值x由键盘输入; ②程序能处理空链表的情况。 3.设有头结点的单链表,编程对表中的任意值只保留一个结点,删除其余值相同的结点。 要求: ①该算法用函数(非主函数)实现; ②在主函数中调用创建链表的函数创建一个单链表, 并调用该函数,验证算法的正确性。 LinkedList Exchange(LinkedList HEAD,p)∥HEAD是单链表头结点的指针,p是链表中的一个结点。本算法将p所指结点与其后 继结点交换。 {q=head->next;∥q是工作指针,指向链表中当前待处理结点。 pre=head;∥pre是前驱结点指针,指向q的前驱。 while(q!=null && q!=p){pre=q;q=q->next;} ∥

实验2-循环结构程序设计

实验2 循环结构程序设计 一、实验目的 1.学习循环语句for、while和do-while语句的使用方法。 2.学习用循环语句实现各种算法,例如穷举法、迭代法等。 3.进一步熟悉C语言集成环境的使用方法 二、实验内容 1.用while循环实现数据统计问题。:从键盘输入一批任意数量的整数,统 计其中不大于100的非负数数值的个数。 2.编写并调试程序,使用do-while循环控制语句实现上面的数据统计问 题。调试数据仍参照上面给出的几种情况设计使用。 3.编写并调试程序,使用for循环控制语句实现上面的数据统计问题。 4.阶乘累加问题。编写程序,求1+2!+3!+…+n!的值。 三、实验指导 1.用while循环实现数据统计问题。 ?编程分析 由于输入数据个数是不确定的,因此每次执行程序时,循环次数都是不确定的。在进行程序设计时,确定循环控制的方法是本实验的一个关键问题。循环控制条件可以有多种确定方法: (1).使用一个负数作为数据输入结束标志。 (2).输入一个数据后通过进行询问的方式决定是否继续输入下一个数 据。 ?参考程序 参考程序一 /* 使用负数作为数据输入结束标志的程序 */ #include "stdio.h" void main()

{ int m,counter=0; while(1) { printf("请输入一个整数:"); scanf("%d",&m); if(m<0) break; if(m<=100) counter++; printf("\n"); } printf("符合要求的整数个数为: %d\n",counter); } 参考程序二 /* 通过进行询问的方式决定是否继续输入下一个数据的程序 */ #include int main() { int m,counter=0; char ask; while(1) { printf("请输入一个整数:"); scanf("%d",&m); getchar(); if(m>=0&&m<=100) counter++; printf("继续输入下一个数据?(Y/N)"); ask=getchar();

数据结构实验报告-答案.doc

数据结构实验报告-答案 数据结构(C语言版)实验报告专业班级学号姓名实验1实验题目:单链表的插入和删除实验目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求:建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤:1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序:(1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码:#include“stdio.h“#include“string.h“#include“stdlib.h“#include“ctype. h“typedefstructnode//定义结点{chardata[10];//结点的数据域为字符串structnode*next;//结点的指针域}ListNode;typedefListNode*LinkList;//自定义LinkList单链表类型LinkListCreatListR1();//函数,用尾插入法建立带头结点的单链表LinkListCreatList(void);//函数,用头插入法建立带头结点的单链表ListNode*LocateNode();//函数,按值查找结点voidDeleteList();//函数,删除指定值的结点voidprintlist();//函数,打印链表中的所有值voidDeleteAll();//函数,删除所有结点,释放内存

实验四 循环结构

实验报告 班级:电信13-1班学号:130******** 姓名:谢朗星成绩: 实验四循环结构 一、实验目的 1.掌握循环结构C程序的编写和调试方法。 2.掌握循环结构C程序中使用while语句和do while语句。 二、实验内容和步骤 1.调试下面三个程序,分析执行的结果。 1. #include int main( ) { int sum=0,i=1; while(i<=100) { sum=sum+i; i++; } printf(“%d\n”,sum); return 0; } 5050 在该程序中,先判断i是否<=100,如果是,在循环体先执行了sum=sum+i,接着再执行i++,然后再返回判断i是否<=100,接着再重复上步骤,直到i>100,然后输出最终结果,结束该程序。 2. #include int main( ) { int sum=0,i=1; while(i<=100) { sum=sum+i; i++; printf(“%d\n”,sum);} return 0;

} 在该程序中,先判断i是否<=100,如果是,在循环体先执行了sum=sum+i,接着再执行i++,然后输出当次运行的结果,然后再返回判断i是否<=100,接着再重复上步骤,直到i>100,结束该程序。 3.#include int main( ) { int sum=0,i=1; do { sum=sum+i; i++; printf(“%d\n”,sum); }while(i<=100); return 0; } 在该程序中,在循环体中先执行了sum=sum+i,接着再执行i++,然后输出当次运行的结果,接着再判断i是否<=100,如果是,返回执行循环体,接着再重复上步骤,直到i>100,结束该程序。 2.编写如下2道题目的程序,要求详细写出程序编写、编译、运行的过程,源程序关键执 行语句需要给出注释。 (a)统计全单位人员的平均工资。单位的人数不固定,工资数从键盘先后输入,当输入-1 时表示输入结束(前面输入的是有效数据) 分析:循环执行的条件while(i!=-1) , 循环结束条件是单位的人数n,循环体采用累加的方法。 (b)求∑= 20 1 n !n 分析:循环体采用累加和累乘。(a) #include int main() {

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

Python实验循环结构

实验五 循环结构(续) 【实验目的】 1.掌握range()函数的使用 2. 掌握For 语句的使用。 3.掌握循环嵌套的使用。 4.掌握一些常用的算法(求素数、穷举法、求和与乘积、递推法)。 【实验内容】 000000000 1、 填空 (1) 在命令行中显示1 到10的数字 range(1,11) 。 (2) 在命令行中显示 1到10的所有偶数 range(2,11,2) 。 (3) 显示所有的大写字符。 for i in range(65,91) : print chr(i) (4) 显示1--100能被3整除的数,并且每5个数打印一行。 i=0 ‘记录能被3整除的个数 for j in range(1,101): if j%3==0: print j, i+=1 if i%5==0: print 2、输出斐波那契级数1、1、2、 3、5、8、13……,此级数项的规律是:前两项的值各为1,从第3项起,每一项是前2项的和。(要求一行输出6项)。 (1) 当某项的数值大于或等于30000时结束。 (2) 求前100项之和。 (1)1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 (2 3、编写程序,输入一个数,判断该数是否为完数。例如6是一个完数,因为6=1+2+3。 x=input ("Enter an integer:") i=1 while True : x=x-i i+=1 if x==i: print "A perfect number." break if x==30000: break print c, if i%6==0: print (2) a=1 b=1 sum=2 i=2 #计数 while True: i+=1 #计数:第i 次 c=a+b a=b b=c sum+=c if i==100: #完成第100次求和后退出循环 break print sum

数据结构上机实验答案

《数据结构实验指导书》答案 实验一: 1、请编写函数int fun(int *a, int *b),函数的功能是判断两个指针a和b所指存储单元的值 的符号是否相同;若相同函数返回1,否则返回0。这两个存储单元中的值都不为0。在主函数中输入2个整数、调用函数fun、输出结果。 #include int fun(int *a, int *b) { if (*a*(*b)>0) return(1); else return(0); } main() { int x,y; scanf("%d%d",&x,&y); if (fun(&x,&y)) printf("yes\n"); else printf("no"); } 2、计算1+2+3+……+100,要求用指针进行设计。即设计函数int fun(int *n)实现求 1+2+3+……+*n,在主函数中输入、调用、输出结果。 #include int fun(int *n) { int i,sum=0; for (i=1;i<=*n;i++) sum+=i; return(sum); } main() { int x,sum; scanf("%d",&x); printf("the sum is %d\n",fun(&x)); } 3、函数的功能是求数组a中最大数的位置(位序号)。在主函数中输入10个整数、调用函

数fun、输出结果。 #define N 10 #include void input(int *a,int n) { int i; for (i=0;i*max) max=a+i; return(max-a); } main() {int a[N],maxi; input(a,N); maxi=fun(a,N); printf("\n the max position is %d\n",maxi); } 4、请编写函数fun(int *a,int n, int *odd, int *even),函数的功能是分别求出数组a中所有奇数之和和所有偶数之和。形参n给出数组中数据的个数;利用指针odd和even分别返回奇数之和和偶数之和。在主函数中输入10个整数、调用函数fun、输出结果。 #define N 10 #include void input(int *a,int n) { int i; for (i=0;i

实验5

实验五 第3章MATLAB程序设计 第二节程序控制结构 程序控制结构有三种:顺序结构、旋择结构、循环结构.任何复杂的程序都可以由这三种基本结构构成.Matlab提供了实现控制结构的语句,利用这些语句可以编写解决实际问题的程序. 一、顺序结构 顺序结构是指按照程序中语句的排列顺序从上到下依次执行,直到程序的最后一个语句如例1的qiu文件和例2的dd1文件.这是最简单的一种程序结构.一般涉及数据的输入、计算或处理、数据的输出等内容. 1. 数据的输入 通过input命令来接收从终端输入的内容,它也可以显示文本和提示. 命令集14 输入命令 input(out ,in)在屏幕上显示出字符串out的文本并等待终端的输入.如果变量in是's',则输入的内容以字符串的形式进行保存,通常MATL AB在保存前要尽可能地求出表达式的值.如果使用格式控制符号如'\n',字符串out可以是若干行. 2. 数据的输出 可以通过简单地输入变量的名字来显示数字矩阵或者字符串向量的内容,结果将显示出变量的名字和内容. 另一种显示变量的值就是使用命令disp.使用它只显示出变量的内容,这是有用的,特别是在字符串的应用中. 命令集15显示命令 disp(A)显示矩阵A的内容,如果A是字符串,则显示出它的文本. 二、循环结构 循环结构是按照给定的条件,重复执行指定的语句.Matlab用于实现循环结构的语句有for — end语句和while — end语句. 1.for —end语句 for-end语句的格式为: for 循环变量=表达式1 : 表达式2 : 表达式3 循环体语句 end

其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值.步长为1时,表达式2可以省略. 循环语句应用时应注意: ● 循环语句可以嵌套使用; ● 不能在 for — end 循环体内改变循环变量的值; ● 为了提高代码的运行效率,应尽可能提高代码的向量化程度,避免 for — end 循环的使用,如例8; ● 如果预先就知道循环的次数,则可以采用 for — end 循环;否则,如果预先无法确定循环的次数,则可以使用 while — end 循环. 2. while — end 循环 while-end 语句的一般格式为: while (条件) 循环体语句 end 其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环. ■例1 使用while-end 结构计算1+2+3+…+100 . 解: ■例2 计算 Matlab 中 eps 值 (exp1.m) 解: s=0; for i=1:100 s=s+i; end s s=0; i=1; while i<=100 s=s+i; i=i+1; end s num=0; EPS=1; while (1+EPS)>1 EPS=EPS/2; num=num+1; end EPS,num

数据结构实验报告

《用哈夫曼编码实现文件压缩》 实验报告 课程名称数据结构 实验学期2015至2016学年第一学期 学生所在系部计算机学院 年级2014专业班级物联B142班 学生姓名杨文铎学号201407054201 任课教师白磊 实验成绩

用哈夫曼编码实现文件压缩 1、了解文件的概念。 2、掌握线性表的插入、删除的算法。 3、掌握Huffman树的概念及构造方法。 4、掌握二叉树的存储结构及遍历算法。 5、利用Haffman树及Haffman编码,掌握实现文件压缩的一般原理。 微型计算机、Windows系列操作系统、Visual C++6.0软件 根据ascii码文件中各ascii字符出现的频率情况创建Haffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。 本次实验采用将字符用长度尽可能短的二进制数位表示的方法,即对于文件中出现的字符,无须全部都用S为的ascii码进行存储,根据他们在文件中出现的频率不同,我们利用Haffman算法使每个字符能以最短的二进制数字符进行存储,已达到节省存储空间,压缩文件的目的,解决了压缩需要采用的算法,程序的思路已然清晰: 1、统计需压缩文件中的每个字符出现的频率 2、将每个字符的出现频率作为叶子节点构建Haffman树,然后将树中结点引向 其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码 即为从根到每个叶子的路径上得到的0、1序列,这样便完成了Haffman 编码,将每个字符用最短的二进制字符表示。 3、打开需压缩文件,再将需压缩文件中的每个ascii码对应的haffman编码按bit 单位输出。 4、文件压缩结束。 (1)构造haffman树的方法一haffman算法 构造haffman树步骤: I.根据给定的n个权值{w1,w2,w3…….wn},构造n棵只有根结点的二叉 树,令起权值为wj。 II.在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和。 III.在森林中删除这两棵树,同时将得到的二叉树加入森林中。 IV.重复上述两步,知道只含一棵树为止,这棵树即哈夫曼树。 对于haffman的创建算法,有以下几点说明: a)这里的Haffman树采用的是基于数组的带左右儿子结点及父结点下标作为

相关文档
最新文档