西安电子科技大学软件学院算法导论上机题practice 1
算法导论15-16-答案.pdf

j
j
w(i, j) = ∑ pl + ∑ ql
l =i
l =i −1
(5-5)
OPTIMAL-BST(p, q, n)
1 for i ← 1 to n + 1
2
do e[i, i-1] ←qi-1
3
w[i, i-1] ←qi-1
4 for l ← 1 to n
5
do for i ← 1 to n – l + 1
15-4 (5-19) Planning a company party. Professor Stewart is consulting for the president of a corporation that is planning a company party. The company has a hierarchical structure; that is, the supervisor relation forms tree rooted at the president. The personal office has ranked each employee with a conviviality rating, which is a real number. In order to make the party fun for all attendees, the president does not want both an employee and his or her immediate supervisor to attend.
To print out all the stations, call PRINT-STATIONS (l, l*, n)
西安电子科技大学出版社计算方法上机答案

西安电子科技大学出版社《计算方法》任传祥等编著第九章计算方法上机参考答案实验一,算法一#include <stdio.h>#include <math.h>double I0=log(6)/log(5),I1;int n=1;main (){while(1){I1=1.0/(n)-I0*5.0;printf("%d %lf\n", n,I1);if(n>=20)break;elseI0=I1;n++;}}实验一,算法二#include <stdio.h>#include <math.h>double I0=(1/105.0+1/126.0)/2,I1;int n=20;main (){printf("%d %lf\n", n,I0);while(1){I1=1.0/(5.0*n)-I0/5.0;printf("%d %lf\n", n-1,I1);if(n<2)break;elseI0=I1;n--;}}实验二,二分法#include <stdio.h>#include <math.h>#define esp 1e-3double f(double x);main (){double a=1,b=2,x;while(fabs(b-a)>esp){x=(a+b)/2;printf("x=%lf\n",x);if(f(x)==0)break;elseif(f(x)*f(a)<0)b=x;elsea=x;}}double f(double x){return pow(x,3)-x-1;}实验二,牛顿迭代法#include<stdio.h>#include<math.h>double f(double x);double f1(double x);#define esp 1e-3void main(){double x0 = 1.5, x1;x1 = x0 - f(x0) / f1(x0);printf("x=%lf\n", x1);x0 = x1;x1 = x0 - f(x0) / f1(x0);printf("x=%lf\n", x1);while (fabs(x1 - x0)>esp){x0 = x1;x1 = x0 - f(x0) / f1(x0);printf("x=%lf\n", x1);} }double f(double x){return pow(x, 3) - x - 1;} double f1(double x){return 3 * x*x - 1;}弦割法#include<stdio.h>#include<math.h>double f(double x);#define esp 1e-3void main(){double x0 = 1.5, x1=2.0,x2;do{ x2=x1 - (x1-x0)*f(x1) /(f(x1)-f(x0));x0=x1;x1=x2;printf("x=%lf\n", x1);}while (fabs(x1 - x0)>esp);{printf("x=%lf\n", x1);}}double f(double x){return pow(x, 3) - x - 1;}实验3#include <stdio.h>/*列主元高斯消去法*/#include <math.h>float x[3],temp,max;float A[3][4]={10,-2,-1,3,-2,10,-1,15,-1,-2,5,10},c[3][4]={10,-2,-1,3,-2,10,-1,15,-1,-2,5,10}; int n=3,i,k,j,m;void main(){for(i=0;i<n;i++){max=A[i][i];k=i;for(j=j+1;j<n;j++){{max=fabs(A[j][i]);k=j;}}if(k!=i){for(j=i+1;j<=n;j++){temp=A[i][j];A[i][j]=A[k][j];A[k][j]=temp;}}for(j=i+1;j<n;j++)for(m=i+1;m<=n;m++){c[j][m]=c[j][m]+(-c[j][i]/c[i][i])*c[i][m];}}for(i=n-1;i>=0;i--){temp=0.0;for(j=n-1;j>=i+1;j--)temp=temp+c[i][j]*x[j];x[i]=(c[i][n]-temp)/c[i][i];}printf("x[1]=%f\nx[2]=%f\nx[3]=%f\n",x[0],x[1],x[2]);实验四,拉格朗日插值#include<stdio.h>int n=5,i,j;double l,L=0,X=0.5;main(){double x[5]={0.4,0.55,0.65,0.8,0.9};doubley[5]={0.41075,0.57815,0.69675,0.88811,1.02652}; for(i=0;i<n;i++){l=y[i];for(j=0;j<n;j++){if(j!=i)l=l*(X-x[j])/(x[i]-x[j]); } L=L+l;}printf("%lf\n",L);return 0;} X=0.5 X=0.7 X=0.85牛顿插值法#include<stdio.h>#include<math.h>main(){double x[5]={0.4,0.55,0.65,0.8,0.9};doubley[5]={0.41075,0.57815,0.69675,0.88811,1.02652};int n=5,i,j;double z;printf("input z\n");scanf("%lf",&z);double a[5][5];for(i=0;i<5;i++)a[i][0]=y[i];for(i=1;i<5;i++)for(j=i;j<5;j++)a[j][i]=(a[j][i-1]-a[j-1][i-1])/(x[j]-x[j-i]);double N=a[0][0],temp=1.0;for(i=1;i<n;i++){temp=temp*(z-x[i-1]);N=N+a[i][i]*temp;}printf("N=%lf\n",N);return 0;}实验五曲线拟合#include <stdio.h>#include <math.h>float x[5]={1,2,3,4,5};float y[5]={7,11,17,27,40};float A[2][3],c[2][3];float z[2],temp,max;int i,j,k,m;int n=2;void main(){for(i=0;i<5;i++){c[0][0]=A[0][0]+=1;c[0][1]=A[0][1]+=x[i];c[0][2]=A[0][2]+=y[i];c[1][0]=A[1][0]+=x[i];c[1][1]=A[1][1]+=x[i]*x[i];c[1][2]=A[1][2]+=x[i]*y[i];}/* for(i=0;i<2;i++){printf(" %lf %lf %lf\n",A[i][0],A[i][1],A[i ][2]);}*/for(i=0;i<n;i++){max=A[i][i];k=i;for(j=j+1;j<n;j++){if(fabs(A[j][i])>max){max=fabs(A[j][i]);k=j;}} if(k!=i){for(j=i+1;j<=n;j++){temp=A[i][j];A[i][j]=A[k][j];A[k][j]=temp;}}for(j=i+1;j<n;j++)for(m=i+1;m<=n;m++){c[j][m]=c[j][m]+(-c[j][i]/c[i][i])*c[i][m];}}for(i=n-1;i>=0;i--){temp=0.0;for(j=n-1;j>=i+1;j--)temp=temp+c[i][j]*z[j];z[i]=(c[i][n]-temp)/c[i][i];}printf("a=%f\nxb=%f\n",z[0],z[1]); }实验六数值积分/*梯形*/#include<stdio.h>#include<math.h> double f(double x); main(){double x[10],y[10];double h,b=1,a=0,I;int n,i;printf("n\n");scanf("%d",&n);h=(b-a)/n;for(i=0;i<=n;i++){x[i]=a+(i*h);y[i]=f(x[i]);}I=f(a)+f(b);for(i=1;i<=n-1;i++){I=I+2*y[i];}I=(h/2)*I;printf("%lf",I);}double f(double x){double f;f=1.0/(1.0+(x*x));return(f);}/*辛普森*/#include<stdio.h>#include<math.h>double f(double x);main(){double x[30],y[30];double h,b=1,a=0,I;int n,i;printf("n\n");scanf("%d",&n);//点乘2扩展h=(b-a)/n;x[10]=1;y[10]=f(x[10]);for(i=0;i<n;i++){x[2*i]=a+(i*h);y[2*i]=f(x[2*i]);x[2*i+1]=a+(i+(1.0/2.0))*h;y[(2*i)+1]=f(x[(2*i)+1]);}I=f(a)+f(b);for(i=0;i<n;i++){I=I+4*y[(2*i)+1];}for(i=1;i<n;i++){I=I+2*y[2*i];}I=(h/6)*I;printf("%lf\n",I);}double f(double x){double f;f=1.0/(1.0+(x*x));return(f);}/*梯形*//*辛普森*/。
西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)

西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)必做题目:1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。
2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。
编程要求与提示:[1]两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。
[2]和以压缩十进制数的形式存入SUM以下单元。
[3]将和送到屏幕显示部分功能的实现采用子程序的形式。
汇编语言实现如下:STACKSTACKDATAADD1ADD2SUMDATACODESTART:MOVA某,DATAMOVDS,A某MOVA某,DATAMOVES,A某MOVA某,STACKMOVSS,A某LEASI,ADD1[3]LEAB某,ADD2[3]LEADI,SUM[3]MOVC 某,4CLCL1:MOVAL,[SI]ADCAL,[B某]DAAMOV[DI],ALDECSIDECB某DECDILOOPL1SEGMENTSTACKDB10HDUP(00)ENDSSEGMENTDB12H,67H,85H,32HDB21H,73H,65H,43HDB4HDUP()ENDSSEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK必做题目:1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。
2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
CALLDISPAL;-------------------------------------E某ITPROC:MOVAH,4CH;结束程序MOVAH,1INT21H;-------------------------------------DISPALPROCNEARPUSHA某PUSHB某PUSHC某PUSHD某PUSHDILEADI,SUMMOVC某,4 DISPAL2:MOVAL,[DI]SHRAL,1SHRAL,1SHRAL,1SHRAL,1MOVAH,2MOVDL,ALADDDL,3 0HINT21HMOVAL,[DI]ANDAL,0FHMOVAH,2MOVDL,ALADDDL,30HINT21HINCDILOOPDISPAL2POPDIPOPD某POPC某POPB某POPA某RETDISPALENDPCODEENDSENDSTART2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
西安电子科技大学《算法设计与分析》随课上机作业题

confidenceHigh()
= 0.5948351426485464
Example values after creating PercolationStats(2, 100000)
mean()
= 0.6669475
stddev()
= 0.11775205263262094
confidenceLow()
// does the system percolate?
public static void main(String[] args) // test client, optional
}
约定行 i 列 j 下标在 1 和 N 之间,其中(1, 1)为左上格点位置:如果 open(), isOpen(), or isFull()不在这个规定
-2-
问题。 在一个著名的科学问题中,研究人员对以下问题感兴趣:如果将格点以概率 p 独立地设置为 open 格点(因此以概率 1-p 被设置为 blocked 格点),系统渗透的概率是多少? 当 p = 0 时,系统不会渗出; 当 p=1 时,系统渗透。 下图显示了 20×20 随机网格(左)和 100×100 随机网格(右)的格点空置概率 p 与 渗滤概率。
西电_Java_上机作业2

上机作业(一)
文本统计器
1.创建一个类,实现统计文本文件中各类字符和字符串的个数的功能,要求实现:
(1)按字符统计,输出各个字符的数量
(2)按单词统计,输出各个单词的数量
2.在1(2)的基础上,实现一个类KeywordIdentifier,读入一个java程序源文件,输出各个关键字的个数(注意,注释中出现的关键字不计入关键字个数)
1、
解:创建的类名为Calculate。
在这个类中,要统计字符与单词的数量,需要开辟空间来存放各种字符与各个单词的数量。
在本类中,用两个哈希表来分别存放字符与单词的数量。
其中,用哈希表map来存放字符的数量,用哈希表hash来存放单词的数量。
在源程序中,以只读的方式打开文本文件“1.txt”,方法CountChar()统计字符的数量,方法CountWord()统计单词的数量。
具体源程序代码见Calculate.java文件。
2、
解:需要实现的类名为KeywordIdentifier。
在这个类中,要统计一个java程序源文件中关键字的数量,需要开辟空间来存放各种关键
字的数量。
与题目1中一样,用一个哈希表来存放关键字的数量,且此哈希表的名字为key。
在源程序中,以只读的方式打开一个java程序源文件“1.java”,方法CountKeyword()统计文件中关键字的数量。
具体源程序代码见KeywordIdentifier.java文件。
12级-程序设计基础实训题目

2. 实验前的准备工作
回顾并复习实验中涉及的相关内容,上机实验前熟悉实验设计的知识,完成程序结构的设计工作, 准备好调试和运行时所需的测试数据,包括各类输入数据及正确的输出数据。
3. 关于实验报告的说明
(1)按照附录中的模板书写实验报告; (2)报告主体只有程序清单的实验报告以不及格报告评分并登记成绩; (3)认定为内容雷同的实验报告(包括内容完全相同、个别句子作少量修改等情况) ,以不及格报告 评分并登记成绩。
第 4页 共 21页
程序设计基础实训 单元实验
单元实验一 实验目的:熟悉 C 语言的文件操作
【问题描述】
需要长期保存的数据可以文件方式存储在外存上,C 语言提供了一组文件操作函数:fopen、fclose、 fgets、fputs、fgetc、fputc、fscanf、fprintf、fread、fwrite、rewind、fseek、feof 等,应了解这些函数的用 法并加以应用。
第 5页 共 21页 "a" "rb" "wb" "ab" Append to a text file Open a binary file for reading Create a binary file for writing Append to a binary file "a+" "rb+" "wb+" "ab+" Open a text file for read/write Open a binary file for read/write Create a binary file for read/write Open a binary file for read/write
西电软件工程大作业——二叉排序树

1.题目二叉排序树2.功能描述1.构造二叉查找树(1)从文本文件中读入文本内容,能够分离出单词,过滤掉阿拉伯数字和标点符号,并将英文字母的大写形式全部转换成小写形式。
(2)按照英文字母表的顺序构造英文单词的二叉查找树。
当两个英文单词的首字母相同时,按第二个字母进行排序,依次类推。
(3)当待插入的单词已在二叉查找树中,则将该单词的出现次数增1。
2.遍历二叉查找树(1)搜索:输入一个待检索单词,在二叉查找树中进行查找,如果能找到该单词,则输出该单词及其出现次数;(2)实现二叉查找树的中序遍历,并将遍历结果输出到屏幕上,包括单词和单词出现的位置。
3.删除结点:给定一个停用词列表(停用词是指对搜索没有作用的词,如:of,and,a,an,the等等),将二叉查找树中的属于停用词表中的单词依次删除。
4.可以显示菜单,在菜单中可以进行如下四项操作(但并不局限这些操作):(1)读入文本内容,包含若干英文单词、标点符号以及阿拉伯数字,用于构建二叉查找树。
(2)输入停用词,每个停用词占一行。
对于每个停用词,都需要删除二叉查找树中的相应结点,即:每输入一个停用词,执行一次删除结点的操作。
(3)中序遍历二叉查找树,遍历结果中的每个单词占一行,先输出该单词,然后输出一个空格,再输出该单词出现的次数。
(4)输入查询词。
对每个查询词,都需要在二叉查找树中的搜索相应结点,如果找到,则输出该单词及其出现次数;如果未找到,则输出相应的信息。
每个查询词的查询结果占一行,先输出该单词,然后输出一个空格,再输出该单词出现的次数。
3.流程图4.程序源代码和注释#include<stdio.h> //头文件#include<stdlib.h>#include<string.h>typedef char keytype;typedef struct node //定义结构体类型{keytype *key; //数据域int weight; //权重struct node *lchild,*rchild; //左右孩子指针}bstnode;bstnode*INSERTBST(bstnode*t,bstnode*s)//二叉排序树的(非递归)插入返回根节点已知(根节点,插入节点){bstnode*f,*p;p=t; //p指向根节点while(p!=NULL) //遍历树,直至找到相同单词或p为NULL {f=p; //f指向p的双亲(当未找到相同单词)if(strcmp(s->key,p->key)==0) //单词相同频次加1{p->weight=p->weight+1;return t;}if(strcmp(s->key,p->key)<0) p=p->lchild; //查找左子树else p=p->rchild; //查找右子树}if(t==NULL) return s; //原树为空,返回s为根节点if(strcmp(s->key,f->key)<0) f->lchild=s; //s插入为f的左孩子else f->rchild=s; //s插入为f的右孩子return t;}bstnode*CREATEBST() //读取文件并建立二叉排序树返回根节点{bstnode *t,*s;long int i,j=0;char ch,string[2000000]; //声明总单词字符串长度FILE*fp;fp=fopen("D:/工具/创建的文件/0.txt","r"); //读取文件do //去除非字母字符并将大写字母转换为小写字母{i=20*j; //使每个单词首字母间隔20while(1){ch=fgetc(fp); //逐个读取字符if(ch>='a'&&ch<='z') //小写字母直接插入{string[i]=ch;i++;}else if(ch>='A'&&ch<='Z') //大写字母转化为小写字母后插入{string[i]=ch+32;i++;}else break; //如果读入非字母字符,单词输入结束跳出循环}string[i]='\0'; //在每个单词后加'\0'if(string[j*20]!='\0') j++; //没有单词输入保留原位不变}while(ch!=EOF); //读取结束跳出循环keytype *key=string; //key指向string[0]t=NULL; //令t为NULLwhile(*key!='\0') //建立二叉树插入所有单词{s=(bstnode*)malloc(sizeof(bstnode)); //建立新节点s->lchild=s->rchild=NULL; //另新节点左右孩子为空s->key=key; //新节点赋值s->weight=1; //初始权重为1t=INSERTBST(t,s); //把新节点插入到树中key=key+20; //令key指向下一个单词首字母}return t; //返回根节点}bstnode*Search(bstnode*t,char*word)//二叉排序树的查找返回所查找单词节点已知(根节点,单词数组){bstnode*p;p=t; //令p指向根节点while(p!=NULL) //遍历整个树{if(strcmp(word,p->key)==0) break; //查找正确,跳出循环else if(strcmp(word,p->key)<0) p=p->lchild;//小于根节点令P指向其左孩子else p=p->rchild; //大于根节点令P指向其右孩子}return p; //返回查找到的地址}void PutSearch(bstnode*t,char*word)//输出查找的单词和频次已知(根节点,单词数组){bstnode*p;p=Search(t,word); //查找所需单词节点if(p!=NULL) printf("%s %d\n",p->key,p->weight);//查找成功输出单词和频次else printf("There is not the word.\n"); //查找不成功输出未查到}void inorder(bstnode*t) //中序遍历输出已知(根节点){if(t!=NULL) //根节点不为NULL进行操作{inorder(t->lchild); //中序遍历左子树printf("%s %d %p\n",t->key,t->weight,t->key);//输出节点的单词频次和地址inorder(t->rchild); //中序遍历右子树}}bstnode*FindP(bstnode*t,bstnode*s) //遍历查找任意节点的双亲节点返回这个节点的双亲节点已知(根节点,查找节点){bstnode*m,*temp=NULL; //temp为标识符(判断是否查找成功)m=t; //m指向根节点if(t==NULL) return NULL; //根节点位NULL 返回NULLif(t==s) return NULL; //查找节点为根节点返回NULLif(m->lchild==s||m->rchild==s) return m; //子节点为查找值返回地址else{if(temp=FindP(m->lchild,s)) return temp;//遍历左子树,未找到返回NULLif(temp=FindP(m->rchild,s)) return temp;//遍历右子树未找到返回NULL}}int LorR(bstnode*p,bstnode*s) //判断子节点为左孩子还是右孩子{if(p->lchild==s) return 1; //左返回1else return 2; //右返回2}bstnode*Max(bstnode*t)//查找二叉排序树中的最大节点(递归)返回最大节点已知(根节点){if(t->rchild!=NULL) Max(t->rchild); //右子树不为NULL,遍历右子树else return t; //返回最大节点}bstnode*Deletenode(bstnode*t,bstnode*s)//删除停用词节点(遍历)返回根节点已知(根节点,删除节点){int d;bstnode*p,*m;if(s==NULL); //删除节点在二叉排序树中不存在,直接返回根节点else{p=FindP(t,s); //查找停用词节点的双亲节点if(s->lchild==NULL&&s->rchild==NULL) //s为叶子节点{if(p==NULL) free(s); //s为根节点,直接释放else{d=LorR(p,s); //判断S为P的左孩子还是右孩子if(d==1) //左孩子{p->lchild=NULL; //将其双亲节点左孩子指针置空free(s); //释放S节点}if(d==2) //右孩子{p->rchild=NULL; //将其双亲节点孩子指针置空free(s); //释放S节点}}}else if(s->lchild!=NULL&&s->rchild==NULL) //s仅有左子树{if(p==NULL) //s为根结点{free(s);return s->lchild; //返回s的左孩子节点}else{d=LorR(p,s); //判断S为P的左孩子还是右孩子if(d==1) //左孩子{p->lchild=s->lchild; //将S的左孩子成为p的左孩子free(s); //释放S节点}if(d==2) //右孩子{p->rchild=s->lchild; //将S的左孩子成为p的右孩子free(s); //释放S节点}}}else if(s->lchild==NULL&&s->rchild!=NULL) //s仅有右子树{if(p==NULL) //s为根结点{free(s);return s->rchild; //返回s的右孩子节点}else{d=LorR(p,s); //判断S为P的左孩子还是右孩子if(d==1) //左孩子{p->lchild=s->rchild; //将S的右孩子成为p的左孩子free(s); //释放S节点}if(d==2) //右孩子{p->rchild=s->rchild; //将S的右孩子成为p的右孩子free(s); //释放S节点}}}else if(s->lchild!=NULL&&s->rchild!=NULL) //s既有左子树又有子树{m=Max(s->lchild); //中序遍历查找s左子树最大节点s->key=m->key; //以最大节点代替删除节点s->weight=m->weight;Deletenode(s,m); //删除最大节点}}return t;}int main(){char e[]={"end"},word[20]; //end作为中止符char x; //x为操作符bstnode*t,*s;printf("-------------操作选项-----------\n"); //建立菜单printf("1:读入文本建立二叉排序树\n");printf("2:输入停用词删除节点\n");printf("3:二叉树中序遍历输出\n");printf("4:查询单词并输出频次\n");printf("5:退出程序\n");printf("--------------------------------\n");while(1) //不断执行菜单内容直至退出程序{printf("输入数字选择执行操作:");scanf("%c",&x); //输入操作种类fflush(stdin); //清除输入缓冲流中的回车符(scanf所产生)if(x=='5') break; //程序退出switch(x) //判断操作类型{case '1':t=CREATEBST(); break;//读入文本建立二叉排序树case '2':while(1) //连续删除停用词,直到输入end{printf("输入停用词(end为终止符):");gets(word);if(strcmp(word,e)==0) break;//终止删除停用词,返回菜单else{s=Search(t,word); //查找停用词地址t=Deletenode(t,s); //删除停用词}} break;case '3':inorder(t); break; //中序遍历输出case '4':while(1) //连续查询,直至输入end{printf("输入查询单词(end为终止符):");gets(word);if(strcmp(word,e)==0) break; //终止查询,返回菜单else PutSearch(t,word); //查询单词并输出频次} break;default:printf("输入错误请重输\n"); break; //提示输入的是非法操作符}}return 0;}5.数据检测1.读入的文件2.检测步骤及结果读入文件---中序遍历输出---查找(for,the)---停用(for,the)---查找(for,the)---中序遍历输出---结束程序6.心得体会在编程过程,学会了由文本文件读取文本内容,并在其中删除非字母字符和转换大小写。
西安电子科技大学机电工程学院 软件技术大作业

西安电子科技大学机电工程学院软件技术大作业任课老师李凯上机报告一、上机目的1.熟悉线性表,链表,队列,二叉树等数据结构2.学习利用C语言实现多种数据结构的建立和多种操作(插入,删除等)3.在编程过程中学习程序的调试方式二、上机内容假设称正读反读都相同的字符序列为回文。
例如,‘abba’,‘abcba’都是回文,‘ababab’不是回文,试编写程序判别从标准输入读入的以’@’为结束符的字符序列是否是回文。
三·设计说明5题1)用一维数组实现。
(当然可以参考用课件中的队列的方法,但就算法繁简来说,用数组实现更为简单高效)2)基本思想:设数组长度为n。
分别将a[0]与a[n-1],a[1]与a[n-2],a[2]与a[n-3]……比较,判断是否相等,相等则计数变量k加1,否则退出循环。
最后判断k值。
若是回文,则k应该等于[n/2],否则就不是回文。
3)输入说明:以$输入为结束标志三、调试分析1.调试所遇到问题1)编译时,头文件包含不全2)逻辑一般没有错误,而问题多出在实际实现过程与自己想法间的差距。
例如:2题,判断条件(s!=r)&&(r->next!=s)。
我想实现的是当结点数为偶数时,头尾两部分交换结束的条件是s=r;当为奇数时,结束的条件是s跑到r的后面。
因此在写程序初,逻辑运算用的是||(或),即二种情况中的一种,结果运行时怎么都不正确。
后来在老师帮助下才找到错误。
3)对于算法实际运行的方式理解不到位。
在做第6题时认为该题应该比较简单,因为二叉树的建立和遍历课本上都有现成的算法,自己只需添加相应的判断条件即可。
结果调试发现怎么做都不正确,后来仔细想递归算法的细节才注意到统计变量递归一次又从头开始统计,所以结果始终是结点数1,叶子数0。
改进作法是将统计量变为一个初值为0的参数,发现也是不行的。
最后只能改为全局变量。
4)输入方式不正确。
在输入时没有注意输入方式,随便加空格,使得运行结果错误。