题目:
算法思路
给定栈st,建立一个临时栈tmpst并初始化。由键盘输入数据入栈st,出栈st的所有元素x,当x不为1时将其进栈到tmpst中。将tmpst的所有元素出栈并进栈到st中。最后销毁临时栈tmpst。
程序代码
测试一,
#include <string.h>
#include "Sqstack1.cpp" //包含前面的顺序栈基本运算函数
int main()
{
int e=1,i,j;ElemType x;char A[j];//变量定义
SqStack st,tmpst; //定义顺序栈st,tmpst
InitStack(st);
InitStack(tmpst); //栈tempst初始化 //栈st初始化
printf("输入数据\n"); //实现由键盘输入
scanf("%d",A[j]);
int n=strlen(A);
for (i=0;i<n;i++) { //入栈 所有字符依次进栈st
Push(st,A[i]); }
while(!StackEmpty(st)){ //判断栈不空时,进行循环
Pop(st,x); //出栈,元素赋值给x
if (x!='1') //当x!=e时进栈
Push(tmpst,x); //tmpst=9020209
}
while(!StackEmpty(tmpst)){ //判断栈不空时,进行循环
Pop(tmpst,x); //tmp出栈
Push(st,x); //x的值进栈st
printf("%c",x); }
if (!Pop(st,x)) //若栈下溢出,则返回0{
DestroyStack(tmpst);//销毁临时栈tmpst
return 0;
}
第一个问题 程序无报错,运行无结果,
错误一:scanf函数调用格式错误
问题:scanf函数 %d,%c,%s使用方法不熟悉
修改scanf("%s",A[j])
#include <string.h>
#include "Sqstack1.cpp" //包含前面的顺序栈基本运算函数
int main()
{
int e=1,i,j;ElemType x;char A[j];//变量定义
SqStack st,tmpst; //定义顺序栈st,tmpst
InitStack(st);
InitStack(tmpst); //栈tempst初始化 //栈st初始化
printf("输入数据\n"); //实现由键盘输入
scanf("%s",A[j]);
int n=strlen(A);
for (i=0;i<n;i++) { //入栈 所有字符依次进栈st
Push(st,A[i]); }
while(!StackEmpty(st)){ //判断栈不空时,进行循环
Pop(st,x); //出栈,元素赋值给x
if (x!=e) //当x!=e时进栈
Push(tmpst,x); //tmpst=9020209
}
while(!StackEmpty(tmpst)){ //判断栈不空时,进行循环
Pop(tmpst,x); //tmp出栈
Push(st,x); //x的值进栈st
printf("%c",x); }
if (!Pop(st,x)) //若栈下溢出,则返回0{
DestroyStack(tmpst);//销毁临时栈tmpst
return 0;
}
程序任然错误
问题二:scanf函数输入字符串,遇到\0跳出
修改scanf为gets函数
#include <string.h>
#include "Sqstack1.cpp" //包含前面的顺序栈基本运算函数
int main()
{
int e=1,i,j;ElemType x;char A[j];//变量定义
SqStack st,tmpst; //定义顺序栈st,tmpst
InitStack(st);
InitStack(tmpst); //栈tempst初始化 //栈st初始化
printf("输入数据\n"); //实现由键盘输入
scanf("%d",A[j]);
int n=strlen(A);
for (i=0;i<n;i++) { //入栈 所有字符依次进栈st
Push(st,A[i]); }
while(!StackEmpty(st)){ //判断栈不空时,进行循环
Pop(st,x); //出栈,元素赋值给x
if (x!='1') //当x!=e时进栈
Push(tmpst,x); //tmpst=9020209
}
while(!StackEmpty(tmpst)){ //判断栈不空时,进行循环
Pop(tmpst,x); //tmp出栈
Push(st,x); //x的值进栈st
printf("%c",x); }
if (!Pop(st,x)) //若栈下溢出,则返回0{
DestroyStack(tmpst);//销毁临时栈tmpst
return 0;
}
输出满足要求
修改代码,加入自动判断尾数
思路:由键盘输入数据入栈st,判断栈st的尾数为奇数or偶数,并对e赋值
//添加下列代码
GetTop(st,h) ; //取栈顶数(尾数)值
printf("栈顶的值=%d\n",h); //打印栈顶元素h
if (h%2==0) //根据h奇偶,对e赋值
e='0';
else
e='1';
printf("e的值为%d\n",e); //打印e的值
输出
错误一:输出h和e的值,为ASCII码值
问题:对%d及%c的运用不熟悉
%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)
%c 字符
%d 有符号十进制整数
%f 浮点数(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数 e.g. 0123
%x(%X) 十六进制整数0f(0F) e.g. 0x1234
%p 指针
%s 字符串
%% "%"
————————————————
版权声明:本文为CSDN博主「zzb_max」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zzb2019/article/details/89447920
解决方法:修改printf函数中整型%d为%c,
//修改%d
for (i=0;i<n;i++) { //入栈 所有字符依次进栈st
Push(st,A[i]); }
GetTop(st,h) ;
printf("栈顶的值=%c\n",h); //打印栈顶元素h
if (h%2==0) //根据h奇偶,对e赋值
e='0';
else
e='1';
printf("e的值为%c\n",e); //打印e的值
输出结果
满足要求