c语言一百行指针循环,求一百行以上的c语言编程代码 在vc6.0下运行,基础的(要求使用指针,数组等基本用法)内容是计算器的功能...

匿名用户

1级

2011-01-04 回答

你可以考虑PM我详细商讨

//用栈结构实现辗转相除法计算两数最大公约数

#include

#include

#define MAXLEN 100

#define NEWLEN 10

//栈的结构相当于一个手枪子弹匣,每次只能拿到最上面一颗子弹

struct stack{ //栈结构体

int * base; //栈底

int top; //栈顶

int length; //栈高

};

typedef struct stack * p_stack, i_stack; //定义栈类型的结构体

p_stack stack_init(p_stack pstack)//初始化一个栈

{

pstack = NULL; //栈指针为空

pstack = (p_stack)malloc(sizeof(stack)); //为栈分配结构

if(pstack == NULL) //如果未分配成功(指针仍为空)则返回假

return false;

pstack->top = 0; //栈顶位置为0

pstack->base = (int *)malloc(sizeof(int) * MAXLEN); //为栈分配元素空间

pstack->length = MAXLEN; //栈高(容量)初始化

if(pstack->base == NULL) //如果空间未分配成功则释放栈结构,并返回假

{

free(pstack);

pstack = NULL;

return false;

}

return pstack; //返回栈指针

}

p_stack stack_exp(p_stack pstack)//给栈扩容

{

pstack->base = (int *)realloc(pstack->base, sizeof(int) * (pstack->length += NEWLEN)); //给栈重新分配空间,大小为(栈高+NEWLEN)

if(pstack->base == NULL) //如果分配不成功则释放并返回空

{

free(pstack);

pstack = NULL;

}

return pstack; //返回重新分配的空间指针

}

bool stack_release(p_stack pstack)//释放一个栈

{

free(pstack->base); //释放栈空间

free(pstack); //释放栈结构

pstack = NULL; //栈指针指向空

return true; //返回真

}

bool stack_push(p_stack pstack, int value)//压栈

{

if(pstack->top == pstack->length -1) //如果栈满了(栈顶下标=栈高-1),则为栈重新分配空间

stack_exp(pstack);

pstack->base[pstack->top ++] = value; //把值压入栈顶,栈顶指针向上移

return true;

}

int stack_top(p_stack pstack)//栈顶数据

{

return pstack->base[pstack->top - 1]; //返回栈顶数据

}

int stack_pop(p_stack pstack)//弹出

{

if(!pstack->top) //如果栈为空(栈顶下标为0)则返回-1

return -1;

return pstack->base[--(pstack->top)]; //返回栈顶内容,并将栈顶下调1

}

int func(p_stack pstack,int a,int b)//辗转相除法

{

int y,z;

stack_push(pstack,a); //把输入的第一个数压入栈顶

stack_push(pstack,b); //把输入的第二个数压入栈顶

while(1) //循环进行以下步骤

{

y = stack_top(pstack); //取得第一个栈顶数字

stack_pop(pstack); //栈顶数字出栈

z = stack_top(pstack); //取得第二个栈顶数字

if(0==z%y) //如果y能整除z,则y为两数最大公约数

return y;

stack_push(pstack,y); //否则将y压入栈顶

stack_push(pstack,z%y); //然后将z除以y的余数压入栈顶

}

}

int main()

{

p_stack pstack = NULL;

int a, b;

pstack = stack_init(pstack); //对栈初始化

printf("请输入两个整数,以空格分开\n"); //提示输入

scanf("%d %d", &a, &b); //从键盘输入两个整数

printf("最大公约数为:%d\n",func(pstack,a,b)); //调用辗转相除函数

stack_release(pstack); //调用结束,释放栈

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值