求高手做几个程序设计....高分+追加

题目:
第一题:利用线性表进行算式计算
界面上出现一个文本框,输入一个算式,点击按钮,显示结果。
该算式内只含有数字、括号、+、-、*、/、%这几种字符,优先级为:括号--%--*,/--+,-。
如输入:2+3*5,结果为17,输入(2+3)*5结果为25。输入格式有误,需要给予提示。
注意,你的算法中,必须实现对输入的算式字符串的分析,而不仅仅是得到结果。

第二题:利用树进行哈夫曼编码
文件conf.txt中保存了若干字母及其出现的频度,要求所有频度加起来要为1,否则载入时报错。字母及其频度保存的格式为:
a:0.1
b:0.2
c:0.3
……
界面上,首先出现一个按钮,点击,载入conf.txt。然后输入一个字符串,由这些字母组成。点击按钮,显示哈夫曼编码的结果。同时,界面上如果输入哈夫曼编码,也能被翻译成相应的字母。如果输入格式错误,要求给予提示。

第三题:排课问题
文件conf.txt中保存了若干门课程,以及该课程需要哪些前续课程。要求一门课程需要一个学期才能学完。保存格式为:
大学物理
C语言
Java语言:C语言
微积分
高级物理学:微积分,大学物理
……
界面上,首先出现一个按钮,点击,载入conf.txt。点击另一个按钮,显示需要几个学期上完这些课程,每学期各学习哪些课程。

第四题:最小生成树问题
在文件conf.txt中保存一个带权的无向图邻接矩阵,格式如下:
0 1 6 2
1 0 3 5
6 3 0 7
2 5 7 0
界面上有一个按钮,点击,能够在界面上画出该图,以及各边的权值。然后显示最小生成树。

第五题:查找和排序
在文件conf.txt中保存若干个数字,用空格隔开。格式如:
45 78 85 45 63 21 47 86
点击界面上的按钮,要求能够在界面上画出相应的二叉排序树。
任选一种排序方法:插入排序、选择排序、冒泡排序、快速排序、堆排序,在图形界面上显示每一趟的结果。

要求要有良好的界面,每个系统组织到一个统一的界面中,且每个程序能够单独运行,输入合理的数据能够输出正确的结果,且操作可重复实现。
--------------
1L,为了个期末作业你会去威客发任务不?

我这有个最优二叉搜索树,可以参考:
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
int m[1000][1000],s[1000][1000],w[1000][1000];
void OptimalBinarySearchTree(int a[],int b[],int n,int m[][1000],int s[][1000],int w[][1000])
{
int i,r,j,k;

for(i=0;i<=n;i++)
{
w[i+1][i]=a[i];
m[i+1][i]=0;
}
for(r=0;r<n;r++)
for(i=1;i<=n-r;i++)
{
int j=i+r;
w[i][j]=w[i][j-1]+a[j]+b[j];
m[i][j]=m[i+1][j];
s[i][j]=i;
for(k=i+1;k<=j;k++)
{
int t=m[i][k-1]+m[k+1][j];
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;

}
}
m[i][j]+=w[i][j];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cout<<s[i][j]<<" ";
cout<<endl;

}

int main()
{

int a[100],b[100],n=0,i;

void OptimalBinarySearchTree(int a[],int b[],int n,int m[][1000],int s[][1000],int w[][1000]);
/*for(int i =1;i<=6;i++)
{
for(int j = 0;j<=5;j++)
{
cout << e[i][j] << " ";
}
cout << endl;
} */
cout<<"输入你要输入的子结构的个数:";
cin>>n;
cout<<endl<<"输入第一个子结构:";
for(i=0;i<n;i++)
cin>>a[i];
cout<<"输入第二个子结构:";
for(i=0;i<n;i++)
cin>>b[i];
cout<<endl;
OptimalBinarySearchTree(a,b,n,m,s,w);
system("pause");
return 0;

}
还有个公共子序列的:
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
int b[1000][1000],c[1000][1000];
void LCSLength(int m,int n,string x,string y,int c[][1000],int b[][1000])
{
int i,j;
for(i=1;i<=m;i++)
c[i][0]=0;
for(i=1;i<=n;i++)
c[0][i]=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(x[i-1]==y[j-1])
{
c[i][j]=c[i-1][j-1]+1;
b[i][j]=1;
}
else if(c[i-1][j]>=c[i][j-1])
{
c[i][j]=c[i-1][j];
b[i][j]=2;
}
else
{
c[i][j]=c[i][j-1];
b[i][j]=3;
}
}
cout<<"产生过程:"<<endl;
for(i=0;i<=m+1;i++)
{
if(i>1) cout<<x[i-2]<<" ";
else if(i%2==0) cout<<" ";
else cout<<"xi";
if(i==0){
cout<<" yj";
for(j=0;j<n;j++)
cout<<" "<<y[j];
cout<<endl;
}
if(i>0&&i<m+1)
{
for(j=0;j<=n;j++)
cout<<" "<<c[i-1][j];
cout<<endl;
cout<<" ";
for(j=1;j<=n;j++)
cout<<" "<<b[i][j];
cout<<endl;
}
else if(i==m+1)
{
for(j=0;j<=n;j++)
cout<<" "<<c[i-1][j];
cout<<endl;
}
}
}

void LCS(int i,int j,string x,int b[][1000])
{

if(i==0||j==0)
return;
if(b[i][j]==1)
{
LCS(i-1,j-1,x,b);
cout<<x[i-1];
}
else if(b[i][j]==2)
LCS(i-1,j,x,b);
else
LCS(i,j-1,x,b);

}

int main()
{

char str1[100],str2[100];
void LCSLength(int m,int n,string x,string y,int c[][1000],int b[][1000]);
void LCS(int i,int j,string x,int b[][1000]);
while(1){
cout<<"输入第一个序列:";
cin>>str1;
cout<<"输入第二个序列:";
cin>>str2;
LCSLength(strlen(str1),strlen(str2),str1,str2,c,b);
cout<<"最长公共子序为:";
LCS(strlen(str1),strlen(str2),str1,b);
cout<<endl;
cout<<endl;
}
system("pause");
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-07
LZ恕我直言...
200分就想要我做这些程序....
拿200RMB去威客去发布任务比较实际点吧....
坐等好心人
第2个回答  2010-07-07
我会把XP调的快快的。
第3个回答  2010-07-07
这个 LZ是OIer吧 我高一都会哎。。。。。。
第4个回答  推荐于2016-01-11
第一题
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

typedef struct
{
char *base;
char *top;
int stacksize;
}stack;

void Initstack(stack &s,stack &m)
{

s.base=(char*)malloc(1000*sizeof(char));
if(!s.base)
{
printf("memory error,please restart it.");
system("pause");
exit(0);
}
s.top=s.base;
s.stacksize=1000;
m.base=(char*)malloc(1000*sizeof(char));
if(!m.base)
{
printf("memory error,please restart it.");
system("pause");
exit(0);
}
m.top=m.base;
m.stacksize=1000;
}

void Push(int i,char e,stack &s,stack &m)
{
if(i) *s.top++=e;
else *m.top++=e;
}

char pop(int i,stack &s,stack &m)
{
if(i&&(s.top!=s.base))
return *--s.top;
if(!i&&m.top!=m.base)
return *--m.top;
else return 0;
}

double calculate(stack &s,stack &m)
{
double f=0,x=0,g[80]={0};
int i=1,k=2,t=1;
char e;
while(m.top!=m.base)
{
e=pop(0,s,m);
if(e>47&&e<58)
{
t=0;
f=e-'0'+f*10.0;
}
else if(e=='.')
{
while(e)
{
e=pop(0,s,m);
if(e>47&&e<58)
x=(e-'0')/pow(10,i++)+x;
else
{
i=1;
f+=x;
break;
}
}
}
if(e<48||e>57)
{
if(!t)
{
g[k++]=f;
t=1;
}
f=0;
x=0;
}
switch(e)
{
case '@':g[k-2]=pow(g[k-1],pow(g[k-2],-1));k--;break;
case '~':g[k-2]=pow(g[k-2],g[k-1]);k--;break;
case '+':g[k-2]+=g[k-1];k--;break;
case '-':g[k-2]=g[k-2]-g[k-1];k--;break;
case '*':g[k-2]*=g[k-1];k--;break;
case '/':g[k-2]=g[k-2]/g[k-1];k--;break;
default:continue;
}
}
return g[k-1];
}

void main()
{
char e;
double f;
int i=0,j=1;
stack s,m;
Initstack(s,m);
printf(" \n");
loop: printf(" 请输入算术表达式,并按回车键结束:");
while((e=getchar())!=10)
{
if(e=='e') exit(0);
if((e>47&&e<=57)||e=='.')
{
j=0;
if(e=='.')
{
if(s.top==s.base)
Push(1,'0',s,m);
else if(*(s.top-1)<48&&*(s.top-1)>57&&s.top!=s.base)
Push(1,'0',s,m);
}
Push(1,e,s,m);
}
if(e=='+'||e=='-'||e=='*'||e=='/'||e=='('||e==')'||e=='~'||e=='@')
{
if(s.top!=s.base&&*(s.top-1)!=32)
Push(1,' ',s,m);
if(e=='~'||e=='('||e=='@')
{
if(e=='(')
j=1;
Push(0,e,s,m);
}
else if(e=='+'||e=='-')
{
if(j)
{
Push(1,'0',s,m);
Push(1,' ',s,m);
}
if(*(m.top-1)!='(')
{
if(*(s.top-1)==32)
s.top--;
Push(1,pop(0,s,m),s,m);
Push(0,e,s,m);
}
else Push(0,e,s,m);
}
else if(e=='*'||e=='/')
{
if(j)
{
Push(1,'0',s,m);
Push(1,' ',s,m);
}
if(*(m.top-1)!='+'&&*(m.top-1)!='-'&&*(m.top-1)!='(')
{
if(*(s.top-1)==32)
s.top--;
Push(1,pop(0,s,m),s,m);
Push(0,e,s,m);
}
else Push(0,e,s,m);
}
else if(e==')')
while((e=pop(0,s,m))!='(')
{
if(*(s.top-1)==32)
s.top--;
Push(1,e,s,m);
}
else
{
printf("输入错误!\n");
system("pause");
exit(0);
}
}
}
while(m.top!=m.base)
Push(1,pop(0,s,m),s,m);
while(s.top!=s.base)
Push(0,pop(1,s,m),s,m);
f=calculate(s,m);
printf(" 计算结果:%f\n\n",f);
goto loop;
}//
需要别的加我好友本回答被提问者采纳

恳请C语言高手帮我看几个C程序设计的题目,谢谢
第四题的,我以前做的 include<iostream.h> void main(){ int m=0,n=0,i=0,j=0,flag=0;\/\/flag为进位 char a[1000],b[1000];\/\/如果要计算的值长度来定此数组大小 int c[100];cout<<"请输入两个整数\\n";cin>>a>>b;while(a[m]!='\\0')m++;while(b[n]!='\\0')n++;if(...

求高手帮忙设计VC++6.0程序:保龄球分数计算 高分奖励
花了不少时间!,为了程序好读,分了很多模块,多加点分啊,谢啦先 \/\/\/ 为了便于调试,把从键盘输的数据放到了文件里,到属性--》C\/C++ -》\/\/\/编译器命令行选项里加\/DF就可以使用文件了 \/\/\/文件格式,百度死活不让我帖出来,说里边有广告,我汗。\/\/\/注意student.txt里字符串后跟回车,整数后...

怎么制定一个详细有用的编程学习计划. 高手进.
1、可先看看《计算机基础原理》,至于《数据结构》可以用到数据库时在细究。如果本身已有一定基础,可直接看《c语言》2、那些东西对基础编程几乎没影响,只有在确实需要时再去了解足以;3、这个很难确切说,但我个人认为,至少得编了几个小软件(每个几万代码那种)才算略有小成吧,然后再考虑实际历...

速求大神帮我写几个Java程序设计题目,
累计完成 0 个任务 10任务 略略略略… 50任务 略略略略… 100任务 略略略略… 200任务 略略略略… 任务列表加载中...新手帮助 如何答题 获取采纳 使用财富值 玩法介绍 知道商城 知道团队 合伙人认证 高质量问答 投诉建议 意见反馈 账号申诉 非法信息举报 北互法律服务站 京ICP证030173号-1 京网文【2013...

多道程序设计有什么优点呢?
1.提高CPU的利用率。在多道程序设计环境中,要求多个程序共享计算机资源。当一个程序等待I/O操作时,CPU可以执行其他程序,从而极大地提高了CPU利用率。2.提高设备利用率。在多程序环境中,多个程序共享系统的设备,大大提高了系统设备的利用率。3.提高系统的吞吐量。在多程序环境下,减少了程序的...

有没有哪位高手可以按照下面的要求做一份课程设计啊?
少壮不努力,老大徒伤悲!也许你的专业计算机的,学不学好关系不大,但这是一种学习的态度!

求高手批八字 批的好的有高分送
处女座大概有是黄道十二个星座里最严格自制、最修养到家的星座,但他习惯性的“自我批评”常使人误会处女座的人有一自制,有点冷漠。而完美主义者的个性有常使他身边的人喘不过气来。处女座通常适合做会计、影评人、看护及医药界,而且往往会在同一工作岗位上待好几年,即使别人可能觉得无聊乏味,他们却能乐在其中。

求助!单片机c语言编程高手请进(全分加给)
那些叫关键字,是C语言本身的一部分,是固定的,二三十个,和一些伪指令,用多了就觉得不外乎就是几个字母的组合,根英文无关,并且单是靠关键字是掌握不了C的,好好学学C语言吧!C语言简单并非常有用.

c语言程序设计 求高手啊...
int x;int y;} point_t;const char maze[8][8] = { {0, 0, 0, 0, 0, 0, 0, 0},{0, 1, 1, 1, 1, 0, 1, 0},{0, 0, 0, 0, 1, 0, 1, 0},{0, 1, 0, 0, 0, 0, 1, 0},{0, 1, 0, 1, 1, 0, 1, 0},{0, 1, 0, 0, 0, 0, 1, 1},{...

求大神用c语言设计程序,要求输入n个数(n最多1000,最少3个)使得输出其...
include <stdio.h>int main() {int n,i,x,max=1<<30; char c;scanf("%d%c%d%c",&n,&c,&max,&c);for(i=2;i<n;i++){scanf("%d%c",&x,&c); if(x>max)max=x;}printf("\\n%d\\n",max);return 0;}

相似回答