早教吧 育儿知识 作业答案 考试题库 百科 知识分享

C语言两任意长整数相加,不能运行//系统功能:两个任意长度的整数相加#include#include#include#defineSTACKINITSIZE100//栈的初始分配#defineSTACKINCREMENT10//存储空间分配增量typedefcharSElemTy

题目详情
C语言两任意长整数相加,不能运行//系统功能:两个任意长度的整数相加 #include #include #include #define STACK_INIT_SIZE 100 //栈的初始分配 #define STACKINCREMENT 10 //存储空间分配增量 typedef char SElemType; /*顺序表示的栈*/ typedef struct { SElemType *base; SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间,以元素为单位 }SqStack; //栈的操作函数 //构造一个空栈操作 int InitStack(SqStack S) { S.base = (SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if(!S.base) exit(0); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return 1; } //栈的插入操作 push int Push(SqStack S,SElemType e) { if((S.top - S.base)>=S.stacksize) //栈满,追加存储空间 { S.base = (SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType)); if(!S.base) exit(0); S.top = S.base +S.stacksize; S.stacksize += STACKINCREMENT; } *S.top ++ = e; return 1; } //取栈顶元素 pop函数 int Pop(SqStack S,SElemType e) { if(S.top == S.base) return 0; e = * --S.top; return 1; } //判断栈是否为空栈 int IsEmpty(SqStack S) { if(S.base == S.top) { return 1; }else{ return 0; } } //栈的遍历 int StackTraverse(SqStack S) { int i; for(i = 0; i= 1 && select
▼优质解答
答案和解析
#include #include #include #define STACK_INIT_SIZE 10 //栈的初始分配 #define STACKINCREMENT 5 //存储空间分配增量 typedef char SElemType; /*顺序表示的栈*/ typedef struct { SElemType *base; SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间,以元素为单位 }SqStack; //栈的操作函数 //构造一个空栈操作 int InitStack(SqStack& S) { S.base = (SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if(!S.base) exit(0); S.top = S.base; S.stacksize = STACK_INIT_SIZE; memset(S.base,0x0,STACK_INIT_SIZE *sizeof(SElemType)); return 1; } //栈的插入操作 push int Push(SqStack& S,SElemType e) { if((S.top - S.base)>=S.stacksize) //栈满,追加存储空间 { S.base = (SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType)); if(!S.base) exit(0); S.top = S.base +S.stacksize; S.stacksize += STACKINCREMENT; memset(S.top+1,0x0,STACKINCREMENT*sizeof(SElemType)); } *S.top= e; S.top ++; return 1; } //弹出栈顶元素 pop函数 SElemType Pop(SqStack& S) { SElemType e='\0'; if(S.top == S.base) return e; S.top--; e = * S.top; return e; } //删除栈中所有数据 //Empty()或则 void DeleteAll(SqStack& S) { S.top=S.base; } //判断栈是否为空栈 int IsEmpty(SqStack& S) { if(S.base == S.top) { return 1; }else{ return 0; } } //栈的遍历 int StackTraverse(SqStack& S) { int i; for(i = 0; iS.base) { return S.top-S.base; } else return S.base-S.top; } //显示主菜单 int ShowMainMenu() { int select; printf("---------------------------------------\n"); printf("\t1.【输入】第 1 个整数\n"); printf("\t2.【输入】第 2 个整数\n"); printf("\t3.【显示】第 1 个整数\n"); printf("\t4.【显示】第 2 个整数\n"); printf("\t5.【输出】两个整数的和\n"); printf("\t6.【结束】程序\n"); printf("请输入您的选择:"); scanf("%d",&select); for(;;){ if(select >= 1 && select =10) { CarryVal=1; s=s-10; } itoa(s,&c3,10); Push(tmp,c3); } if (CarryVal) { itoa(CarryVal,&c3,10); Push(tmp,c3); } k=StackSize(tmp); for (i=0;i=0) { SumFun(Sum,S1,S2); } else { SumFun(Sum,S2,S1); } return 1; } void DestroyStack(SqStack& S) { if (S.base) { free(S.base); S.top=NULL; S.stacksize=0; } } //主函数 void main() { int select; SqStack SqNum_1; SqStack SqNum_2; SqStack SqSum; //int temp; printf("\t两个任意长度整数计算器\n"); //初始化三个栈 InitStack(SqNum_1); InitStack(SqNum_2); InitStack(SqSum); while(1) { select = ShowMainMenu(); switch(select) { case 1: DeleteAll(SqNum_1); InputNum(SqNum_1); break; case 2: DeleteAll(SqNum_2); InputNum(SqNum_2); break; case 3: printf("\n第一个数:"); ShowNum(SqNum_1); printf("\n"); break; case 4: printf("\n第二个数:"); ShowNum(SqNum_2); printf("\n"); break; case 5: OutPutResult(SqSum,SqNum_1,SqNum_2); printf("\n和:"); ShowNum(SqSum); printf("\n"); break; case 6: exit(0); break; } system("pause"); } }