永发信息网

return sum 在流程图里怎么表示

答案:1  悬赏:40  手机版
解决时间 2021-03-05 14:43
  • 提问者网友:沉默的哀伤
  • 2021-03-04 14:41
return sum 在流程图里怎么表示
最佳答案
  • 五星知识达人网友:毛毛
  • 2020-09-25 10:26
第一个:

#include
#include
using namespace std;
const double PI=3.141592654;
const int SZ=1000;
int MKAC=0;
double STP=1;

template
class STACK{
private:
Type base[SZ];
int Size;
public:

STACK(){Size=0;};
void push(Type a) //入栈
{
base[Size]=a;
Size++;
}
Type pop() //出栈
{
return base[--Size];
}
int size()
{return Size;}
};

bool IsData(char ch)
{
return ((ch>='0'&&ch<='9')||ch=='.')?true:false;
}

bool IsSym(char ch)
{
return (ch=='+'||ch=='-'||ch=='*'||ch=='/')?true:false;
}

int IsPar(char ch)
{
return ch=='\x28'?1:ch=='\x29'?-1:0;
}

int Priority(char ch) //符号的优先极别
{
switch(ch)
{
case '+':
return 0;
case '-':
return 0;
case '*':
return 1;
case '/':
return 1;
default:
return -1;
}
}
bool Check(char *ch)
{
int a=0;
for(int i=0;i if(ch[i]=='.')
a++;
if(a>1)
return false;
return true;
}

double ToArc(double alpha){return (PI*alpha/180.0);}

double ToDgr(double arc){return (180*arc/PI);}

double ToData(char* ch)
{
int i,j,sumn=0;
double sum=0.0;
if(!Check(ch)) return 0.0;
for(i=0;i {if(ch[i]!='.')
sumn=sumn*10+(ch[i]-'0');
else break;
}
if(i for(j=i+1;j sum=sum*10+(ch[j]-'0');
sum/=pow(10.0,(double)(strlen(ch)-1-i));
return (sum+sumn);
}

double Call(double sum,double data,char ch)//根据运算计算数据
{
double ans=0.0;
switch(ch)
{
case '+':
ans=sum+data;
break;
case '-':
ans=sum-data;
break;
case '*':
ans=sum*data;
break;
case '/':
ans=sum/data;
break;
default:ans=0.0;
break;
}
return ans;
}

int GetMatch(char* buffer,int pos)//找到匹配的括号
{
STACK Temp;
int i;
for(i=pos;i {if(IsPar(buffer[i])==1)
Temp.push('0');
if(IsPar(buffer[i])==-1)
{Temp.pop();
if(Temp.size()==0) return i;
}
}
return -1;
}

int NL(int n)
{
if(n==0)
return 1;
else return n*NL(n-1);
}

void Opr(STACK& symbol,STACK& data,int& mark)
{
double sum;
while(symbol.size()!=0)
{char tem=symbol.pop();
int temp=Priority(tem);
symbol.push(tem);
if(temp break;
else{
sum=Call(data.pop(),data.pop(),symbol.pop());
data.push(sum);
}
}
}

double Calculate(char* buffer,double& sum)//主运算部分
{
STACK data;
STACK symbol;
double ans;
char temp[SZ];
int ct=0,mark=0,tp=0;
data.push(sum);
while(ct<=strlen(buffer))
{
if(IsData(buffer[ct]))
{
while(ct temp[tp++]=buffer[ct++];
temp[tp]='\0';
tp=0;
ans=ToData(temp);
data.push(ans);
if(buffer[ct]=='!') {data.push(NL((int)data.pop()));ct++;}
if(ct==strlen(buffer))
{mark=0;
Opr(symbol,data,mark);
sum=data.pop();
return sum;
}
else{
int mark=Priority(buffer[ct]);
Opr(symbol,data,mark);
}
}
else if(IsSym(buffer[ct]))
symbol.push(buffer[ct++]);
else{
char BF[100];int k=0;
while(IsPar(buffer[ct])!=1&&ct<=strlen(buffer))
BF[k++]=buffer[ct++];
BF[k]='\0';
if(IsPar(buffer[ct])==1)
{int i,j;
char Temp[100];
for(i=ct+1,j=0;i Temp[j]=buffer[i];
Temp[j]='\0';
data.push(Calculate(Temp,sum));

ct+=(strlen(Temp)+1);
if(ct+1==strlen(buffer))
{mark=0;
Opr(symbol,data,mark);
sum=data.pop();
return sum;
}
else{
mark=Priority(buffer[ct+1]);
Opr(symbol,data,mark);
}
ct++;
}
}
}
return 0.;
}

int main()
{
char buffer[SZ];
double sum=0.0;
cout.precision(12);
while(cin>>(buffer)) //输入
{
cout< }
return 0;
}

//编译环境:Dev C++,VC++
//运行示例:
输入:1+2*3-4
输出:3

第二个:#include
#include
#include
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T){
//按先序次序输入二叉树中结点的值(字符型),空格字符表示空树
//构造二叉树表表示的二叉树T
char ch;
ch = getchar();
if(ch==' ') T=NULL;
else
{
T=(struct BiTNode*)malloc(sizeof(struct BiTNode));
T->data=ch; //生成根结点
CreateBiTree(T->lchild); //构造左子树
CreateBiTree(T->rchild); //构造右子树
}
}

void PreOrderTraverse(BiTree &T){//先序遍历二叉树
if(T){ //递归条件非空
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

void MidOrderTraverse(BiTree &T){//中序遍历二叉树
if(T){ //递归条件非空
MidOrderTraverse(T->lchild);
printf("%c",T->data);
MidOrderTraverse(T->rchild);
}
}

void AftOrderTraverse(BiTree &T){//后序遍历二叉树
if(T){ //递归条件非空
AftOrderTraverse(T->lchild);
AftOrderTraverse(T->rchild);
printf("%c",T->data);
}
}

void PrintBiTree(BiTree &T){//输出二叉树
if(T){
printf("%c",T->data);
if(T->lchild!=NULL||T->rchild!=NULL)
{printf("(");
PrintBiTree(T->lchild);
if(T->rchild!=NULL)
printf(",");
PrintBiTree(T->rchild);
printf(")");
}
}
}
int depth(BiTree &T){//求二叉树的深度
int d1,d2;
if(T==NULL) return(0);
else{
d1=depth(T->lchild);
d2=depth(T->rchild);
if (d1>d2)return(d1+1);
else return(d2+1);
}
}
int leafs(BiTree &b){//求二叉树的叶子结点数
int n1,n2;
if(b==NULL)return(0);
else if(b->lchild==NULL&&b->rchild==NULL)return(1);
else{n1=leafs(b->lchild);
n2=leafs(b->rchild);
return(n1+n2);
}
}

void copytree(BiTree &b,BiTree &t){//复制树
if(b) {t=(struct BiTNode*)malloc(sizeof(struct BiTNode));
t->data=b->data;
t->lchild=t->rchild=NULL;
copytree(b->lchild,t->lchild);
copytree(b->rchild,t->rchild);
}
}

void mirrtree(BiTree &b,BiTree &t){//造镜像树
if(b) {t=(struct BiTNode*)malloc(sizeof(struct BiTNode));
t->data=b->data;
t->lchild=t->rchild=NULL;
mirrtree(b->lchild,t->rchild);
mirrtree(b->rchild,t->lchild);
}
}
void main()
{
BiTree t,h,k;
CreateBiTree(t);
printf("先序遍历序列为:");
PreOrderTraverse(t);
printf("\n中序遍历序列为:");
MidOrderTraverse(t);
printf("\n后序遍历序列为:");
AftOrderTraverse(t);
printf("\n按先序打印二叉树t=:");
PrintBiTree(t);
printf("\n二叉树的深度为:");
printf("%d\n",depth(t));
printf("二叉树的叶子结点数为:");
printf("%d\n",leafs(t));
copytree(t,h);
printf("复制所得的二叉树h=:");
PrintBiTree(h);
mirrtree(t,k);
printf("\n镜像二叉树k=:");
PrintBiTree(k);

}
运行结果:
输入:abcd e f gh i j
abcd e f gh i j
先序遍历序列为:abcdefghij
中序遍历序列为:dcebfahigj
后序遍历序列为:decfbihjga
按先序打印二叉树t=:a(b(c(d,e),f),g(h(,i),j))
二叉树的深度为:4
二叉树的叶子结点数为:5
复制所得的二叉树h=:a(b(c(d,e),f),g(h(,i),j))
镜像二叉树k=:a(g(j,h(i)),b(f,c(e,d)))

第三个:#include
#include

typedef struct node{//定义节点类型
float coef;
int expn;
struct node * next;
}PLOY;

void start()//用户选择界面
{printf("************************************\n");
printf(" 两个一元多项式的相加\n");
printf(" 北京航空航天大学 机械设计系\n");
printf("************************************\n");
printf("请选择操作:\n");
printf("0.退出\n");
printf("1.两个一元多项式相加\n");
printf("2.帮助\n");
}

void notice()//用户帮助界面
{printf("********************帮助*********************\n");
printf("1.输入时只输入多项式的系数与指数,以0 0结束.\n");
printf("2.例如输入“1 1”然后回车,代表“1*X^1”\n");
}

void insert(PLOY *head,PLOY *inpt)//查找位置插入新链节程序
{PLOY *pre,*now;
int signal=0;
pre=head;//pre定义为现在的前一个链节
if(pre->next==NULL) {pre->next=inpt;}
else {now=pre->next;
while(signal==0)
{if(inpt->expnexpn)//当新链节小于现在的连接时向后移一个链节
{if(now->next==NULL) {now->next=inpt;signal=1;}
else {pre=now;now=pre->next;}}
else if(inpt->expn>now->expn)//如果发现比现在的链节大了就插入到这个连接的前面
{inpt->next=now;pre->next=inpt;signal=1;}
else {now->coef=now->coef+inpt->coef;signal=1;free(inpt);//与当前链节相等指数
if(now->coef==0) {pre->next=now->next;free(now);}}}}
}

PLOY * creat(char ch) //输入多项式
{PLOY *head, *inpt;
float x; int y;
head=(PLOY *)malloc(sizeof(PLOY));//创建链表头
head->next=NULL;
printf("请输入一元多项式%c:(格式:系数 指数,以0 0结束.)\n",ch);
scanf("%f %d",&x,&y);
while(x!=0)
{inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节
inpt->coef=x;
inpt->expn=y;
inpt->next=NULL;
insert(head,inpt);//不然就查找位置并且插入新链节
scanf("%f %d",&x,&y);
}
return head;
}

void addPLOY(PLOY *head,PLOY *pre)//多项式相加
{PLOY *inpt;
int flag=0;
while(flag==0)
{if(pre->next==NULL) flag=1;//当现在指向空时跳出循环
else {pre=pre->next;
inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节
inpt->coef=pre->coef;
inpt->expn=pre->expn;
inpt->next=NULL;
insert(head,inpt);}//否则把当前“g(x)”的链节插入到“y(x)”中
}
}

void print(PLOY *fun)//输出多项式
{PLOY *printing;
int flag=0;
printing=fun->next;//正在被打印的链节
if(fun->next==NULL)//如果函数为空打印0
{printf("0\n"); return;}
while(flag==0)
{if(printing->coef>0&&fun->next!=printing) printf("+");//为正数时打印“+”号
if(printing->coef==1);//如果为“1”就不用打印系数了
else if(printing->coef==-1) printf("-");//如果为“-1”就打印“-”号就行了
else printf("%f",printing->coef);//其余情况都得打印
if(printing->expn!=0) printf("x^%d",printing->expn);//如果指数为“0”不打印指数项
else if((printing->coef==1)||(printing->coef==-1)) printf("1");
if(printing->next==NULL) flag=1;//如果现在的链节没有下一个就结束
else printing=printing->next;
}
printf("\n");
}

void main()
{PLOY *f,*g;
int sign=-1;//设置标志
start();
while(sign!=0)
{scanf("%d",&sign);
switch(sign)
{case 0:break;//退出
case 1:{printf("你选择的操作是多项式相加:\n");
f=creat('f');//输入多项式f(x)
printf("f(x)=");
print(f);
g=creat('g');//输入多项式g(x)
printf("g(x)=");
print(g);
printf("F(x)=f(x)+g(x)=");
addPLOY(f,g);//两个多项式相加
print(f);
sign=-1;//复位标志
start();//回复用户选择界面
break;}
case 2:{notice();
sign=-1;//复位标志
start();//回复用户选择界面
break;}
default:{printf("输入有误!请重新选择操作!\n");//选择错误,返回选择界面
start();break;}}
}
printf("谢谢使用!\n");
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯