数据结构杨辉三角实验报告

数据结构杨辉三角实验报告
数据结构杨辉三角实验报告

杨辉三角

问题描述

编写程序,根据输入的行数,屏幕显示杨辉三角。

基本要求

(1)行数不大于20行。

(2)基于队列的操作来实现杨辉三角的不断生成过程。(注:不要用其它的公式计算的

方法或者二维数组来实现)

(3)基于数组实现队列的物理数据结构。

输入输出

输入n= 6

输出

1 n=0

1 1 n=1

1 2 1 n=2

1 3 3 1 n=3

1 4 6 4 1 n=4

1 5 10 10 5 1 n=5

1 6 15 20 15 6 1 n=6

概要设计:

基本操作:

SeqQueue()

操作结果:构造一个空队列Q

makeEmpty()

初始条件:队列Q已存在

操作结果:将Q清为空队列

IsEmpty()

初始条件:队列Q已存在

操作结果:若Q为空队列,则返回TRUE,否则FALSE getSize()

初始条件:队列Q已存在

操作结果:返回Q的元素个数,即队列长度

EnQueue(const T& x)

初始条件:队列Q已存在

操作结果:若队列不满,则将x进队,否则一处处理

DeQueue(T& x);

初始条件:Q为非空队列

操作结果:删除Q的队头元素,并用x返回其值

具体程序

//SeqQueue.h

//-------------------------------------------循环队列的类定义

#include

template

class SeqQueue

{

public:

SeqQueue(){ maxSize=20; element=new T[maxSize]; front=0; rear=0; }

~SeqQueue(){delete[] element;} //析构函数

bool EnQueue(const T& x); // 进队//若队列不满,则将x进队,否则一处处理

bool DeQueue(T& x); //出队//若队列不空,则退出队头元素x

bool getFront(); //若队列不空,则返回队首元素的值

bool IsEmpty(){return(front==rear)?true:false;} //当对头指针跟队尾指针相同时,既队列为空//判断队列空否bool IsFull() //判断队列满否

{return ((rear+1)%maxSize==front)?true:false;}

void makeEmpty() //清空队列

{front=rear=0;cout<<"队列已清空!"<

void

getSize()const{

//返回队列的长度

cout<<"队列的长度为:"<<(rear - front + maxSize)%maxSize<

void Y angHui(int n); //杨辉三角

private:

int rear, front; //队尾与队首指针

T * element; //存放队列元素的数组

int maxSize; //队列最大可容纳元素个数

};

//---------------------------------------进队

template

bool SeqQueue::EnQueue (const T& x)

{ //若队列不满,则将元素x插入到该队列的队尾,否则出错处理if(IsFull()==true)return false; //若队列满则插入失败,返回

element[rear]=x; //按照队尾指针指示的位置插入

rear=(rear+1)%maxSize; //队尾指针加

return true; //插入成功,返回

}

//-------------------------------------退队

template

bool SeqQueue::DeQueue (T& x)

{ //若队列不空则函数退掉队头元素if(IsEmpty()){cout<<"队列为空!退队操作失败!"<

x=element[front];

front=(front+1)%maxSize; //队头指针加

return true;

}

//------------------------------------取对头元素

template

bool SeqQueue::getFront () //若队列不空则退掉队头元素

{

if (IsEmpty()){cout<<"队列为空!不能返回队首元素的值!"<

cout<<"队首元素为:"<

return true;

}

//---------------------------------------杨辉三角

template

void SeqQueue::Y angHui(int n)

{

SeqQueue q; //建立队列对象

int i=1,j,s=0,k=0,l=0,t,u; //计算下一行系数时用到的工作单元

cout<

q.EnQueue(i);q.EnQueue(i); //预先放入第一行的两个系数

for(i=1;i<=n;i++) //逐行处理

{

cout<

q.EnQueue(k); //各行间插入一个

for(j=1;j<=i+2;j++) //处理第i行的i+2个系数(包括一个)

{

q.DeQueue(t); //读取一个系数

u=s+t;q.EnQueue(u); //计算下一行系数,并进队列

s=t;

if(j!=i+2) cout<

}

l=l+1;

cout<<"n="<

}

}

//Y angHui.cpp

#include

#include"SeqQueue.h"

int main() //主函数

{

SeqQueue s;

int n;

cout<<"输入n=";

cin>>n;

cout<<"输出:";

s.Y angHui (n);

return 0;

}

运行结果:

算法的时空分析

时间复杂度为O(N)

输入输出格式

输入:

直接输入想要行数n

输出:如果输入小于条件给予的20,则显示如题所要求的杨辉三角

逆波兰表达式求值

一、需求分析

1.本程序要求读入一个后缀表达式,利用堆栈来计算该表达式的值,同时要效验后缀表达式是否正确。

2.从键盘中输入一个后缀表达式,该表示包括加减乘除等操作符,以及正整数作为操作

数等。

3.在Dos界面输出表达式的值或报错。

4.测试数据

输入:2 3 * 1 –#

输出:5

二、概要设计

抽象数据类型

为实现上述程序的功能,应以字符串存储用户的输入。

算法的基本思想

操作数入栈;遇到操作符时,操作数出栈,求值,将结果入栈;当一遍后,栈顶就是表达式的值。

程序的流程

程序由三个模块组成:

(1)输入模块:完成表达式输入存放于字符串中。

(2)转化模块:将字符串转化成数字。

(3)计算模块:通过表达式信息计算值。

(4)输出模块:表达式的值,同时要效验后缀表达式是否正确。

三、详细设计

物理数据类型

输入用string类输出为double类

算法的具体步骤

#include

#include

#include

#include

using namespace std;

typedef struct stack //栈结构体

{

double num;

stack *pre;

}stack;

stack* top; //定义全局变量栈顶

void initial(stack *& l) //初始化链表

{

l=(stack*)malloc(sizeof(stack));

top=l;

l->pre=NULL;

}

bool pop(stack*& l , double &n)//出栈

{

if(top->pre==NULL)

return false;

n=top->num;

top=top->pre;

return true;

}

void push(stack*& l , double n)//入栈

{

stack* temp;

temp=(stack*)malloc(sizeof(stack));

temp->num=n;

temp->pre=top;

top=temp;

}

double caculater(double a , double b , char ch)//计算

{

switch(ch)

{

case '+':return a+b;

case '-':return a-b;

case '*':return a*b;

case '/':return a/b;

default:printf("FALSE!!!\n");

}

}

double stringtodouble(char * input , int i) //将字符串转化为数字{

double index=1;

double sum=0;

while(*(input+i)!='\0')

{

if(*(input+i)=='.') //实现小数输入

{

i++; //跳过'.'字符

index=0.1;

while(*(input+i)!='\0')

{

sum=sum+(*(input+i)-48)*index;

index=index/10;

i++;

}

return sum;

}

sum=sum*10+(*(input+i)-48);

i++;

}

return sum;

}

int main()

{

string in;

char *input;

stack* l;

initial(l);

while(cin>>in)

{

input=(char *)malloc((in.length()+1)*(sizeof(char))); //实现任意长度字符串输入

in.copy(input,in.length());

input[in.length()]='\0';

if(*input=='-'&&(*(input+1)>='0')&&(*(input+1)<='9'))//输入为负数

{

push(l,-1*stringtodouble(input,1));

}

else if((*(input)>='0')&&(*(input)<='9')) //输入为非负数

{

push(l,stringtodouble(input,0));

}

else //输入为运算符

{

double a,b;

if(!pop(l,b))

printf("FALSE!!!\n");

if(!pop(l,a))

printf("FALSE!!!\n");

push(l,caculater(a,b,*input));

}

if(*(input+1)=='#') //实现输入为#时跳出

break;

}

printf("%.2lf\n",top->num); //打印结果

return 0;

}

算法的时空分析

时间复杂度为O(N)

输入输出格式

输入:

在字符界面上输入一个后缀表达式,其中两相邻操作数之间利用空格隔开。以“#”表示结束。

输出:如果该后缀表达式正确,那么在字符界面上输出其结果,计算结果小数点后面保留两位有效数字,如果不正确,请在字符界面上输出表达式错误提示。

四、测试结果

输入 2 3 * 1 –#输出 5

输入 2.4 2.5 + 4.9 *# 输出24.01

杨辉三角的规律以及推导公式

杨辉三角的规律以及定理 李博洋 摘要杨辉三角中的一些规律 关键词杨辉三角幂二项式 引言 杨辉是我国南宋末年的一位杰出的数学家。在他所着的《详解九章算法》一书 中,画了一张表示二项式展开后的系数构成的三角图形,称做“开方做法本源”,现 在简称为“杨辉三角”,它是世界的一大重要研究成果。我们则来对“杨辉三角”的 规律进行探讨和研究。 内容 1二项式定理与杨辉三角 与杨辉三角联系最紧密的是二项式乘方展开式的系数规律,即。 杨辉三角我们首先从一个二次多项式(a+b)2的展开式来探讨。 由上式得出:(a+b)2=a2+2ab+b2此代数式的系数为:121 则(a+b)3的展开式是什么呢?答案为:a3+3a2b+3ab2+b3由此可发现,此代数式的系数 为:1331但似乎没有什么规律,所以让我们再来看看(a+b)4的展开式。 展开式为:a4+4a3b+6a2b2+4ab3+b4由此又可发现,代数式的系数为: 14641似乎发现了一些规律,就可以发现以下呈三角形的数列: 1(110) 11(111) 121(112) 1331(113)

14641(114) 15101051(115) 1615201561(116) 因此可得出二项式定理的公式为: (a+b)n=C(n,0)a^n*b^0+C(n,1)a^(n-1)*b^1+...+C(n,r)a^(n-r)*b^r...+C(n,n)a^0*b^n 因此,二项式定理与杨辉三角形是一对天然的数形趣遇,它把带进了。求二项式展开式系数的问题,实际上是一种组合数的计算问题。用系数来计算,称为“式算”;用杨辉三角形来计算,称作“图算”。 2杨辉三角的幂的关系 首先我们把杨辉三角的每一行分别相加,如下: 1(1) 11(1+1=2) 121(1+2+1=4) 1331(1+3+3+1=8) 14641(1+4+6+4+1=16) 15101051(1+5+10+10+5+1=32) 1615201561(1+6+15+20+15+6+1=64) …… 相加得到的数是1,2,4,8,16,32,64,…刚好是2的0,1,2,3,4,5,6,…次幂,即杨辉三角第n行中n个数之和等于2的n-1次幂 3杨辉三角中斜行和水平行之间的关系 (1) 1(2)n=1 11(3)n=2 121(4)n=3 1331(5)n=4

显示杨辉三角实验报告

显示杨辉三角实验报告 姓名:许严班级:计122 学号:1213023050 1.问题描述 杨辉三角如图2.4.3所示,其特点是两个腰上数值是1,其他位置上的每一个整数都是它的上一行相邻两个整数之和。问题是:对于指定的最大行数rmax,要求从第一行到第rmax逐行显示杨辉三角形的所有元素。 2.基本要求 ⑴设计输出形式,尽量反映杨辉三角的特点。 ⑵设计计算杨辉三角形各行数值的方法。 ⑶输入:rmax从键盘输入。 ⑷输出:屏幕输出杨辉三角形. 3.实现提示 ⑴存储设计 计算杨辉三角形第i行时,如果在第i-1行两侧各添加一个0,则第i行的第j个元素等于第i-1行的第j-1个元素与第j个元素的和。计算如图2.4.4所示。第i行计算完,第i-1行的数据就没有用了,依据第i行数据可计算第i+1行的数据。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 … 图2.4.3 杨辉三角形 从上述计算中不难看出,第i行的元素从左往右依次可被求得,求解过程中也是从左往右依次使用地i-1行的数据,显然,具有先入先出的特点。所以,可借助一个队列存放计算过程中所需的数据,如图2.4.5所示。 但随着航数的增加,队列会很长。所以,可以设置一循环队列,队长不少于rmax+2,边计算边出队。 (2)算法设计 计算各行元素的算法步骤如下。 Step1:队列初始化,0、1入队。队头ftont指向0处,队尾指向1后。 Step2:i从1到rmax,循环执行下列操作,求第i行数据。 2.1 0入队。 2.2 从队首起直到队尾,每出队两元素,求和后入队。 输出时注意0不输出。

C++实验报告 (1)

2013-2014年度C++实验报告 学院:机械学院 专业:机械设计制造及其自动化学号:1240202414 姓名:陆响明

第三章: 习题1.编写程序,求从键盘输入的3个数中的最大数。#include void main() { float a,b,c,d; cout<<"请输入3个整数:"<<'\n'; cin>>a>>b>>c; if(a>b)d=a; else d=b; if(d>c)cout<<"最大数为:"< void main() { cout<<"请输入10个数:"<<'\n'; float a=0,b; for(int i=0;i<10;i++){ cin>>b; a+=b; } a/=10; cout<<"它们的平均值为:"<

习题6.计算s=1+2+3+......+i,累加到s大于1000,并输出s和i的值。 #include void main() { int s=0; for(int i=0;s<=1000;i++) s+=i; i--; cout<<"s="< void main() { int a[10]={3,5,2,7,6,1,7,4,7,5}; int *p,i,k,max=0; for(i=0;i<10;i++){ p=&a[i]; if (max<*p){ max=a[i]; k=i; } } cout<<"最大元素为:"<

数据结构实验指导书

《数据结构》实验指导书 实验一顺序表 实验目的: 熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。 实验要求: 了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。 实验内容: 1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求: (1)设数据元素为整数,实现线性表的顺序存储表示。 (2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。 (3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。 2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求: (1)数据元素为学生成绩(含姓名、成绩等字段)。 (2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。(这里用于比较的字段为分数) 实验二链表 实验目的: 熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。 实验要求: 了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容: 1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下: (1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。 (2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表 并带有头结点。(用于比较的字段为分数)。 (3)输入关键字值x,打印出表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (4)输入关键字值x,删除表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。(用于比较的字段为分数)。 实验三栈的应用 实验目的: 熟悉栈的逻辑特性、存储表示方法和栈的基本操作。 实验要求: 了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。 实验内容: (1)判断一个表达式中的括号(仅有一种括号,小、中或大括号) 是否配对。编写并实现它的算法。 (2)用不同的存储方法,求解上面的问题。 (3)* 若表达式中既有小括号,又有大括号(或中括号),且允许 互相嵌套,但不能交叉,写出判断这样的表达式是否合法的算 法。如 2+3*(4-{5+2}*3)为合法;2+3*(4-{5+2 * 3} 、 2+3*(4-[5+2 * 3)为不合法。

程序设计基础C实验报告201303

《程序设计基础C》 实 验 报 告 教学班级:_______ 学号:__________ 姓名:___________ 课程教师:______________ 实验辅导教师:_____________ 重庆理工大学计算机学院 2012年2月

实验5 循环程序设计 教学班级:_______ 学号:__________ 姓名:___________ 实验日期:___________ 实验地点:_________(机房) 实验成绩:___________ 一、实验目的 (1) 了解C语言循环结构的使用范围。 (2) 学会正确使用逻辑运算符和逻辑表达式。 (3) 熟练掌握C语言的三种循环结构:whilc语句、do……whilc语句、for语句的特点和使用方法。 (4) 能够编写一些有实际应用意义的循环结构程序。 二、实验内容 1.基本内容 题目1:计算1-3+5-7+......-99+101的值。(提示:注意符号的变化)#include void main() { int i,t=1,s=0; /* t标识正负符号*/ for (i=1;i<101; i+=2) /*error*/ { s+=i*t; t= -t; } printf("s=%d\n",s); } ①请改错,并运行程序。 ②分别用do……while语句和while语句改写以上程序。 题目2:分析程序,运行时输入:24579(注:表示回车换行)。 #include

void main() { int c; while((c=getchar())!='\n') { switch(c-'2') { case 0: case 1: putchar(c+4); case 2: putchar(c+4);break; case 3: putchar(c+3); case 4: putchar(c+2);break; default:putchar(c); } } printf("\n"); } 题目3:下面程序的功能是打印100以内个位数为3且能被3整除的所有数,选择合适的语句填入该空格中。 #include void main() { int i,j; for(i=0;__________________ ;i++) { j=i*10+3; if(__________________) continue; printf("%4d",j); } } 题目4:编程输出:用0~4任意组成无重复数字的三位数?都是多少?每行输出10个数。 #include

《C语言程序设计》实验报告(实验1-11) 2013.3

《C语言程序设计》 实验报告 2012~2013学年第二学期 班级 姓名 学号 指导教师

实验一 实验项目名称:C程序的运行环境和运行C程序的方法 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序; 2.通过运行简单的C程序,初步了解C源程序的特点。 二、预习内容: 教材《C语言程序设计教程》第1章。 三、实验内容: 1. 在Visual C++ 6.0环境下输入并运行下面的程序: #include int main( ) { printf("This is a C program.\n"); return 0; } 2. 在Visual C++ 6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序 无语法错误,然后运行程序,并观察分析运行结果。 #include int main( ) { int a,b,sum a=3; b=4; sun=a+b; print(“%d+%d=%d\n”,a,b,sum); return 0; } 四、实验结果: 1. 运行结果(或截图):

2. (1) 改正后的源程序: (2) 运行结果(或截图): 五、思考题: 1. 一个C程序上机的步骤有哪些? 答: 2. 组成C程序的基本单位是函数,一个函数包括哪几个部分? 答: 成绩指导教师签名

实验二 实验项目名称:数据类型、运算符和表达式 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1.掌握整型、实型与字符型这三种基本类型的概念; 2.掌握常量及变量的使用方法; 3. 掌握基本算术运算符及其表达式的使用方法; 4. 掌握++、--运算符、赋值运算符及其表达式的使用方法。 二、预习内容: 教材《C语言程序设计教程》第2章。 三、实验内容: 1. 在Visual C++ 6.0环境下输入下面的程序,编译、连接、调试该程序。 main( ) { char m,n; m=280; n=320; printf(“%d\t%d\n”,m,n); printf(“%c\t%c\n”,m,n); } 2. 在Visual C++ 6.0环境下输入并运行下面的程序,观察分析运行结果。 #include int main( ) { int a=3,b=4,c=8; float d,e; d=a+b/c; e=a+(float)b/c; printf("d=%f,e=%f\n",d,e); } 3. 在Visual C++ 6.0环境下输入并运行下面的程序,观察分析运行结果。 #include main( ) { int a,b,c,d,i,j,m,n; a=b=c=d=3; i=a++; j=++b;

杨辉三角队列实现

网上看了许多杨辉三角队列实现的代码,结果运行时都或多或少有点小问题,为此我提供一份自己运行正确的。 程序无误,细心做一下 注意,这是做成三个文件运行的 第一个文件命名 stdafx.h #include #include #define Max 50 struct queue { int *base; int front; int rear; }; typedef struct queue *SqQueue; SqQueue InitQueue();//队列的初始化 int EnQueue(SqQueue Q,int e);//数据进队(从队尾传值) int DeQueue(SqQueue Q);//数据出队(返回队头) void YHPrint(SqQueue Q,int n);//打印杨辉三角 void jiemian();//界面函数,方便调用(个人习惯) 第二个文件命名为 stdafx.c #include "stdafx.h"

int GetQueueFirstData(SqQueue Q) { return Q->base[Q->front]; } int isEmptyQueue(SqQueue Q) { if(Q->front=Q->rear) return 1; else return 0; } SqQueue InitQueue() { SqQueue Q; Q=(SqQueue)malloc(sizeof(struct queue)); if (Q==NULL) return NULL; Q->base=(int *)malloc(Max*sizeof(int)); if(Q->base==NULL) return NULL; Q->front=Q->rear=0; return Q; } int EnQueue(SqQueue Q,int e) { if((Q->rear+1)%Max==Q->front) return 0; Q->base[Q->rear]=e; Q->rear=(Q->rear+1)%Max; return 1; } int DeQueue(SqQueue Q) { int e; if(Q->front==Q->rear) return 0; e=Q->base[Q->front]; Q->front=(Q->front+1)%Max; return e; }

计算机实验报告

实验指导 实验一 Visual C++开发环境使用 大气科学专业实验日期 4月 18日姓名:学号 1.实验目的 (1)熟悉Visual C++集成开发环境。 (2)掌握C语言程序的书写格式和C语言程序的结构。 (3)掌握C语言上机步骤,了解C程序的运行方法。 (4)能够熟练地掌握C语言程序的调试方法和步骤 2. 实验内容 输入如下程序,实现两个数的乘积。 #include ; int main() { x=10,y=20 p=prodct(x,t) printf("The product is : ",p) int prodct(int a ,int b ) int c c=a*b return c } (1)在编辑状态下照原样键入上述程序。 (2)编译并运行上述程序,记下所给出的出错信息。 (3)再编译执行纠错后的程序。如还有错误,再编辑改正,直到不出现语法错误为止。 3.分析与讨论 (1)记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论成功或失败的原因。(2)总结C程序的结构和书写规则。 实验心得: 通过本次实验,我了解到C语言的特点,初步认识程序设计方法和程序设计一般步骤,掌握C语言程序编译、链接和运行过程,为我进一步学好C语言打下了基础。

实验二数据类型、运算符和表达式 大气科学专业实验日期4 月 25日姓名:刘园园学号327 1.实验目的 (1)理解常用运行符的功能、优先级和结合性。 (2)熟练掌握算术表达式的求值规则。 (3)熟练使用赋值表达式。 (4)理解自加、自减运算符和逗号运算符 (5)掌握关系表达式和逻辑表达式的求值 2.实验内容 (1)整数相除 #include<> int main() { int a=5,b=7,c=100,d,e,f; d=a/b*c; e=a*c/b; f=c/b*a; printf("d=%d , e=%d ,f=%d\n",d,e,f); return 0; } (2)自加、自减运算 #include<> int main() { int a=5,b=8; printf("a++=%d\n",a++);

计10--数据结构专题实验rev2

上机实验要求及规范 《数据结构》课程具有比较强的理论性,同时也具有较强的可应用性和实践性,因此上机实验是一个重要的教学环节。一般情况下学生能够重视实验环节,对于编写程序上机练习具有一定的积极性,但是容易忽略实验的总结,忽略实验报告的撰写。对于一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。拿到一个题目,一般不要急于编程,而是应该按照面向过程的程序设计思路(关于面向对象的训练将在其它后继课程中进行),首先理解问题,明确给定的条件和要求解决的问题,然后按照自顶向下,逐步求精,分而治之的策略,逐一地解决子问题。具体步骤如下: 1.问题分析与系统结构设计 充分地分析和理解问题本身,弄清要求做什么(而不是怎么做),限制条件是什么。按照以数据结构为中心的原则划分模块,搞清数据的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?),然后设计有关操作的函数。在每个函数模块中,要综合考虑系统功能,使系统结构清晰、合理、简单和易于调试。最后写出每个模块的算法头和规格说明,列出模块之间的调用关系(可以用图表示),便完成了系统结构设计。 2.详细设计和编码 详细设计是对函数(模块)的进一步求精,用伪高级语言(如类C语言)或自然语言写出算法框架,这时不必确定很多结构和变量。 编码,即程序设计,是对详细设计结果的进一步求精,即用某种高级语言(如C/C++语言)表达出来。尽量多设一些注释语句,清晰易懂。尽量临时增加一些输出语句,便于差错矫正,在程序成功后再删去它们。 3.上机准备 熟悉高级语言用法,如C语言。熟悉机器(即操作系统),基本的常用命令。静态检查主要有两条路径,一是用一组测试数据手工执行程序(或分模块进行);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注释和断言。如果程序中逻辑概念清楚,后者将比前者有效。 4.上机调试程序 调试最好分块进行,自底向上,即先调试底层函数,必要时可以另写一个调用驱动程序,表面上的麻烦工作可以大大降低调试时所面临的复杂性,提高工作效率。 5.整理实验报告 在上机实验开始之前要充分准备实验数据,在上机实践过程中要及时记录实验数据,在上机实践完成之后必须及时总结分析,写出实验报告。

实验报告1

南京工程学院 实验报告 程序设计语言-JA V A 开课院系:经济管理学院 实验:() 班级:K信管101 学生姓名:顾永晨 学号:240103824

JAVA语言课程实验报告

一、实验目的及要求 熟悉JDK环境,掌握Jcreator的使用方法,理解Java 应用程序的运行原理和方法。 二、实验设备(环境)及要求 JDK;Jcreator;Windows 操作系统 三、实验内容与步骤 1、编辑、编译、运行以下程序,说出程序的功能。改变变量n的初值,观察运行结果有何变化。 public class Sum10_for { public static void main(String args[]) { int i=1,n=10,s=0; System.out.print("Sum("+n+") = "); for (i=1;i

数据结构实验题目

实验一:顺序表的基本操作。 编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。 (1)建立一个顺序表,含有n个数据元素。 (2)输出顺序表及顺序表的长度。 (3)在顺序表中删除值为x的结点或者删除给定位置i的结点。 (4)将顺序表就地逆置,即利用原表的存储空间将线性表(a1,a2,...,a n)逆置为(a n,a n-1,...,a1)。 (5)将顺序表按升序排序。 (6)设顺序表中的数据元素递增有序,将x插入到顺序表的适当位置上,以保持该表的有序性。 (7)将两个顺序有序表A和B合并为一个有序表C。 (8)在主函数中设计一个简单的菜单,分别测试上述算法。 实验二:单链表的基本操作 编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作。 (1)建立一个带头结点的单链表。 (2)计算单链表的长度,然后输出单链表。 (3)查找值为x的直接前驱结点q。 (4)删除值为x的结点。 (5)把单向链表中元素逆置(不允许申请新的结点空间)。 (6)已知单链表中元素递增有序,请写出一个高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,他们的值可以和表中的元素相同,也可以不同)。 (7)同(6)的条件,试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法时间复杂度。(8)利用(1)建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。 (9)在主函数中设计一个简单的菜单,分别测试上述算法。 实验三:双向链表的基本操作 1.利用尾插法建立一个双向链表。 2.遍历双向链表。 3.实现双向链表中删除一个指定元素。 4.在非递减有序双向链表中实现插入元素e仍有序算法。 5.判断双向链表中元素是否对称若对称返回1否则返回0。 6.设元素为正整型,实现算法把所有奇数排列在偶数之前。 7.在主函数中设计一个简单的菜单调试上述算法。 实验四:栈和队列的基本操作 (1)采用链式存储实现栈的初始化、入栈、出栈操作。

计算机实验报告

实验指导 实验一 Visual C++6.0开发环境使用 大气科学专业实验日期 4月 18日姓名:学号1.实验目的 (1)熟悉Visual C++6.0集成开发环境。 (2)掌握C语言程序的书写格式和C语言程序的结构。 (3)掌握C语言上机步骤,了解C程序的运行方法。 (4)能够熟练地掌握C语言程序的调试方法和步骤 2. 实验内容 输入如下程序,实现两个数的乘积。 #include (stdio.h); int main() { x=10,y=20 p=prodct(x,t) printf("The product is : ",p) int prodct(int a ,int b ) int c c=a*b return c } (1)在编辑状态下照原样键入上述程序。

(2)编译并运行上述程序,记下所给出的出错信息。 (3)再编译执行纠错后的程序。如还有错误,再编辑改正,直到不出现语法错误为止。

3.分析与讨论 (1)记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论成功或失败的原因。(2)总结C程序的结构和书写规则。 实验心得: 通过本次实验,我了解到C语言的特点,初步认识程序设计方法和程序设计一般步骤,掌握C语言程序编译、链接和运行过程,为我进一步学好C语言打下了基础。

实验二数据类型、运算符和表达式 大气科学专业实验日期4 月 25日姓名:刘园园学号20151301327 1.实验目的 (1)理解常用运行符的功能、优先级和结合性。 (2)熟练掌握算术表达式的求值规则。 (3)熟练使用赋值表达式。 (4)理解自加、自减运算符和逗号运算符 (5)掌握关系表达式和逻辑表达式的求值 2.实验内容 (1)整数相除 #include int main() { int a=5,b=7,c=100,d,e,f; d=a/b*c; e=a*c/b; f=c/b*a; printf("d=%d , e=%d ,f=%d\n",d,e,f); return 0; } (2)自加、自减运算 #include int main() { int a=5,b=8; printf("a++=%d\n",a++); printf("a=%d\n",a); printf("++b=%d\n",++b); printf("b=%d\n",b); return 0; }

杨辉三角

杨辉三角 教学设计思想: 这节课是高三数学(选修II )的研究性课题,是在高二学过的“二项式定理”的基础上,进一步探讨和研究杨辉三角的性质,实质上就是二项展开式的二项式系数即组合数的性质。 (1)让学生在教师设计的问题情境中,自己根据已经学过的知识去发现问题→提出问题→解决问题,即观察、猜想、归纳杨辉三角横行、竖向、斜向的数字各数之间的大小关系、组合关系及各数字之间的联系等规律。 (2)在学生自主探究知识的发生发展过程中从中体会到数学世界的神奇和有趣,激发他们对数学的热爱之情。培养他们的交流与协作的能力。 (3)通过向他们介绍杨辉三角的有关历史,让他们了解中国古代数学的伟大成就,增强他们的民族自豪感。 教学 目标: 1 使学生了解杨辉及杨辉三角的有关历史,掌握杨辉三角的基本性质,并能认识到中国古代的数学的辉煌成就。 2 让学生在老师的启发下自己去探讨杨辉三角中行、列的数字的特点, 发现杨辉三角的有关的性质,培养学生由特殊到一般的归纳猜想能力。 3通过讨论,培养学生发现问题、提出问题、解决问题的能力。在交流中培养学生的协作能力,形成探究知识、建构知识的研究型学习习惯及合作化学习的团队精神,为进一步学习作好准备。 教学过程: 一 引入 今天我们在高二学过的杨辉三角的基础上,进一步探索杨辉三角数字中横 向、竖向、斜向…中蕴含的有趣的数量关系。(幻灯片:出示杨辉三角的前3行,余下的让学生补充完整) 二 杨辉简介 杨辉,中国南宋时期杰出的数学家 和数学教育家。在13世纪中叶活动于 苏杭一带,其著作甚多。其中《详解九章算术》 中的“开方作法本源图”,曾被称为“杨辉三角”, 杨辉指明次系贾宪(约11世纪)所用. 三 探讨杨辉三角的性质 ? ??++++++=++++++=+++++=++++=+++=++=+=+6 43223245665 432234554 3223443 22332 221061520156)(510105)(464)(33)(2)()(1)(b ab b a b a b a b a a b a b ab b a b a b a a b a b ab b a b a a b a b ab b a a b a b ab a b a b a b a b a

c语言实验报告

C程序设计课程 实验报告册 所在学院________________ 班级________________ 学号________________ 姓名________________ 教师________________ 2016 年6 月

《C语言程序设计》实验报告(1 )学号:姓名:班级:成绩:

2. 编写一个函数prim,要求判定正整数n是否为素数,调用上述函数,按每行8个输出2到200 之间所有素数。 (源程序上传文件名为:您自己的学号+实验报告1-2.c,例如:10151234实验报告1-2.c)代码: 程序运行结果截图(要体现出您的学号和姓名): 四、实验收获

《C语言程序设计》实验报告(2 )学号:姓名:班级:成绩:

#20. 出错行号原因正确代码 2、请在函数fun的横线上填写若干表达式,使从键盘上输入一个整数n,输出斐波纳契数列。斐波纳契数列是一种整数数列,其中每数等于前面两数之和,如:0 1 1 2 3 5 8 13……,请上机调试该程序验证自己的填充。 (源程序上传文件名为:您自己的学号+实验报告2-1.c,例如:10151234实验报告2-1.c) #include int fun(int n); main() { int i, n = 0; scanf("%d", &n); for (i=0; i

数据结构实(00003)

数据结构实验指导书

目录 实验一线性表 (1) 实验二数组的基本操作 (4) 实验三队列的基本操作 (8) 实验四栈的基本操作 (12) 实验五二叉树操作树 (17) 实验六图的基本操作 (20)

《数据结构实验指导书》 实验一线性表 一、实验目的: 1、掌握使用Turbo C2.0上机调试线性表的基本方法; 2、掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上。 二、实验环境: PC机、Turbo C 或Visual C++ 三、实验描述: 一元多项式的相加 四、实验要求: (1)建立两个一元多项式A、B,按指数降序排列。(2)实现A+B,输出其运算结果。 五、实验步骤: (1)用带头结点的单链表存储多项式A、B,多项式的类型定义如下: typedef struct { //项的表示,多项式的项作为LinkList的数据元素 float coef ;//系数

int expn;//指数 }term,ElemType; typedef struct Lnode{ ElemType data; Struct Lnode *next; } *LinkList; typedef LinkList polynomial ;//用带头结点的有序(按指数递增)单链表表示多项式 (2)基本操作: int cmp(term a,term b) //比较a于b的指数,分别返回-1,0,1 void CreatPolyn(polynomial &p,int m) //输入m项的系数和指数,建立表示一元多 项式的有序单链表p void PrintPolyn(polynomal p) //输出多项式的各项 void AddPolyn(polynomial &pa, polynomial &pb) //多项式相加:pa=pa+pb,利用两个多项式 的结点构成“和多项式” (3)程序流程

杨辉三角形实验报告

题目:编写程序,根据输入的行数,屏幕显示杨辉三角形(Pascal’s triangle) 班级:自动化05 姓名:刘丽丽 学号:10054107 完成日期:2011.12.20 一.需求分析 1、本演示程序中,利用顺序队列打印杨辉三角。杨辉三角的特 点是两个腰上的数字都为1,其它位置上的数字是其上一行 中与之相邻的两个整数之和,故在打印过程中,第i行上的 元素要由第i-1行中的元素来生成。这是一个基于队列的操 作来实现杨辉三角不断生成的过程。 2、此次输出的杨辉三角不需要只有一个1的第一行,但只需对 输出实际杨辉三角的程序稍作修改即可; 3、在计算机终端上显示"提示信息"之后,由用户在键盘上输入 演示程序中需要输入的数据,以“回车符”为结束标志。相 应的输入数据和运算结果显示在其后。 4、程序执行的命令包括: 1)构造顺序队列; 2)分析第 i 行元素与第 i+1行元素的关系

目的是从前一行的数据可以计算下一行的数据 从第i 行数据计算并存放第i+1行数据 5、 测试数据 输入行数 n=3; 输出结果为: 1 1 1 2 1 1 3 3 1 二. 概要设计 链队列的抽象数据类型定义为: ADT Queue{ 数据对象 :D={ai| ai ∈Elemset ,i=1,2,3,···n ,n >=0} 1 1 i = 1 1 2 1 2 1 3 3 1 3 1 4 6 4 1 4 1 5 10 10 5 1 5 1 6 15 20 15 6 1 6

数据关系:R={<ai-1 ,ai>| ai-1 ,ai∈D,i=1,2,···n} (约定其中ai端为队列头,an端为队列尾) 基本操作: InitQueue(&Q) 操作结果:构造一个空队列 DestroyQueue(&Q) 初始条件:队列已存在 操作结果:队列被销毁 ClearQueue(&Q) 初始条件:队列已存在 操作结果:将Q清空 QueueEmpty(Q) 若队为空,则返回为TRUE,否则返回为FALSE。Queuelength(Q) 初始条件:队列已存在 操作结果:返回Q的元素个数 Gethead(Q,&e) 初始条件:队列非空 操作结果:用e返回Q的队首元素 Enqueue(&Q,&e) 初始条件:队列已存在 操作结果:插入的元素e为Q的新队首元素

杨辉三角形

有趣的杨辉三角形 【教学目的】 1.初步探索杨辉三角的基本性质及数字排列规律; 2.培养学生发现问题、提出问题、解决问题的能力,重点培养创新能力; 3.了解我国古今数学的伟大成就,增强爱国情感. 【教学手段】 课堂教学,以学生自学为主,教师引导探索。 【教学思路】 →学生自学教材,然后思考几个问题。 →分组探讨杨辉三角的性质。 →展示学生探究成果 →教学小结 【自学教材】; 1.什么是杨辉三角? 二项式(a+b)n展开式的二项式系数,当n依次取1,2,3...时,列出的一张表,叫做二项式系数表,因它形如三角形,南宋的杨辉对其有过深入研究,所以我们又称它为杨辉三角.(表1) 例如,它的兩項的係數是1和1; ,它的三項係數依次是1、2、1; ,它的四項係數依次1、3、3、1。 2.杨辉——古代数学家的杰出代表 杨辉,杭州钱塘人。中国南宋末年数学家,数学教育家.著作甚多,他编著的数学书共五种二十一卷,著有《详解九章算法》十二卷(1261年)、《日用算法》二卷、《乘除通变本末》三卷、《田亩比类乘除算法》二卷、《续古摘奇算法》二卷.其中后三种合称《杨辉算法》,朝鲜、日本等国均有译本出版,流传世界。 “杨辉三角”出现在杨辉编著的《详解九章算法》一书中,此书还说明表内除“一”以外的每一个数都等于它肩上两个数的和.杨辉指出这个方法出于《释锁》 算书,且我国北宋数学家贾宪(约公元11世纪)已经用过它,这表明 我国发现这个表不晚于11世纪. 在欧洲,这个表被认为是法国数学家物理学家帕斯卡首先发现的 (Blaise Pascal,1623年~1662年),他们把这个表叫做帕斯卡三角.这就

数据结构实验一

实验一算法设计与分析 1、实验目的 了解数据结构课程的目的、性质和主要内容,理解数据结构和算法的基本概念,熟悉算法的描述方法、算法时间复杂度和算法空间复杂度的分析及计算方法。 掌握在JDK环境中编译和运行Java Application应用程序的操作;熟练使用MyEclipse等集成开发环境对Java程序进行编辑、编译、运行和调试等操作,程序必须运行通过并获得正确结果。 2、实验内容 1、用java的类实现复数的抽象数据类型 2、螺旋方阵 3、杨辉三角 4、输出数字方阵 5、幻方 3、实验代码及结果 1)复数类 public class Complex { private double real,imag; //实部,虚部 public Complex(double real, double imag) //构造方法 { this.real = real; this.imag = imag; } public Complex(double real) //构造方法重载 { this(real,0); } public Complex() { this(0,0); } public Complex(Complex c) //拷贝构造方法,复制对象 { this(c.real,c.imag); //c==null时,抛出空对象异常,下同 } public double getReal() { return this.real; } public void setReal(double real)

this.real = real; } public double getImag() { return this.imag; } public void setImag(double imag) { this.imag = imag; } public String toString() //对象的字符串描述, { //覆盖Object 类的toString()方法 return "("+this.real+"+"+this.imag+"i)"; } public void add(Complex c) //两个对象相加,改变当前对象 { this.real += c.real; this.imag += c.imag; } public static Complex add(Complex c1, Complex c2) //返回两个对象相加后的对象,重载,静态方法 { return new Complex(c1.real+c2.real, c1.imag+c2.imag); } public void subtract(Complex c) //两个对象相减,改变当前对象 { this.real -= c.real; this.imag -= c.imag; } public static Complex subtract(Complex c1, Complex c2) //返回两个对象相减后的对象,重载,静态方法 { return new Complex(c1.real-c2.real, c1.imag-c2.imag); }

相关文档
最新文档