这个程序哪里错?
#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10#include<stdio.h>typedefstruct{int*ba...
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#include <stdio.h>
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
SqStack *S;
void InitStack(SqStack *S)
{
S->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S->base)
exit(0);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
}
void Push(SqStack *S,int e)
{
if((S->top-S->base)>=(S->stacksize))
{
S->base=(int
*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if(!S->base)
exit(0);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
* S->top++=e;
}
int Pop(SqStack *S)
{
int e;
if(S->top==S->base)
return 0;
e=* --S->top;
return e;
}
int StackEmpty(SqStack *S)
{
if((S->top)==(S->base))
return 1;
else
return 0;
}
void conversion()
{
int N,e;
InitStack(S);
printf("please input:");
scanf("%d",&N);
while(N)
{
Push(S,N%8);
N/=8;
}
printf("the number is:\n");
while(!StackEmpty(S))
{
e=Pop(S);
printf("%d",e);
}
printf("\n");
}
void main()
{
conversion();
}
最后答案可以输出,但是在正确答案后面总有一个NULL pointer assigment
这是什么意思?谢谢啦!!! 展开
#define STACKINCREMENT 10
#include <stdio.h>
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
SqStack *S;
void InitStack(SqStack *S)
{
S->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S->base)
exit(0);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
}
void Push(SqStack *S,int e)
{
if((S->top-S->base)>=(S->stacksize))
{
S->base=(int
*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if(!S->base)
exit(0);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
* S->top++=e;
}
int Pop(SqStack *S)
{
int e;
if(S->top==S->base)
return 0;
e=* --S->top;
return e;
}
int StackEmpty(SqStack *S)
{
if((S->top)==(S->base))
return 1;
else
return 0;
}
void conversion()
{
int N,e;
InitStack(S);
printf("please input:");
scanf("%d",&N);
while(N)
{
Push(S,N%8);
N/=8;
}
printf("the number is:\n");
while(!StackEmpty(S))
{
e=Pop(S);
printf("%d",e);
}
printf("\n");
}
void main()
{
conversion();
}
最后答案可以输出,但是在正确答案后面总有一个NULL pointer assigment
这是什么意思?谢谢啦!!! 展开
展开全部
你这里是一个10-8进制转换程序
这是你的程序:
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#include <stdio.h>
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
SqStack *S; /* 1. 问题在此,你只是申明了一个指针变量, */
/* 不是结构体变量,没有结构体变量分配空间 */
void InitStack(SqStack *S)
{
S->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
/* 在这里却直接向指针所指向的结构体的base域存放数据,所以有问题 */
if(!S->base)
exit(0);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
}
void Push(SqStack *S,int e)
{
if((S->top-S->base)>=(S->stacksize))
{
S->base=(int *)
realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if(!S->base)
exit(0);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
* S->top++=e;
}
int Pop(SqStack *S)
{
int e;
if(S->top==S->base)
return 0;
e=* --S->top;
return e;
}
int StackEmpty(SqStack *S)
{
if((S->top)==(S->base))
return 1;
else
return 0;
}
void conversion()
{
int N,e;
InitStack(S);
printf("please input:");
scanf("%d",&N);
while(N)
{
Push(S,N%8);
N/=8;
}
printf("the number is:\n");
while(!StackEmpty(S))
{
e=Pop(S);
printf("%d",e);
}
printf("\n");
}
void main()
{ /* 2.
conversion();
}
解决方法可以象下面这样做:
1. 在1.处 修改成
SqStack *S,head;
2. 在2.处添加
S = & head;
这是你的程序:
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#include <stdio.h>
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
SqStack *S; /* 1. 问题在此,你只是申明了一个指针变量, */
/* 不是结构体变量,没有结构体变量分配空间 */
void InitStack(SqStack *S)
{
S->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
/* 在这里却直接向指针所指向的结构体的base域存放数据,所以有问题 */
if(!S->base)
exit(0);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
}
void Push(SqStack *S,int e)
{
if((S->top-S->base)>=(S->stacksize))
{
S->base=(int *)
realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if(!S->base)
exit(0);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
* S->top++=e;
}
int Pop(SqStack *S)
{
int e;
if(S->top==S->base)
return 0;
e=* --S->top;
return e;
}
int StackEmpty(SqStack *S)
{
if((S->top)==(S->base))
return 1;
else
return 0;
}
void conversion()
{
int N,e;
InitStack(S);
printf("please input:");
scanf("%d",&N);
while(N)
{
Push(S,N%8);
N/=8;
}
printf("the number is:\n");
while(!StackEmpty(S))
{
e=Pop(S);
printf("%d",e);
}
printf("\n");
}
void main()
{ /* 2.
conversion();
}
解决方法可以象下面这样做:
1. 在1.处 修改成
SqStack *S,head;
2. 在2.处添加
S = & head;
展开全部
1.BUG实在太多,没法一一标注,对照着看吧
2.从代码上看,指针操作非常混乱!希望写程序是头脑清醒,知道各个指针的指向
3.建议使用DEBUG工具,程序都是一步步调出来的。
仅供参考:
#include<stdio.h>#include<malloc.h>
structstu{
intnum;
charname[16];
charsex;
intage;
floatgrade;
structstu*next;}a[5]={{101,"zhang",'m',19,95.5},{102,"wang",'f',18,92.0},{103,"zhao",'f',19,85.5},
{104,"li",'m',20,96.0},{105,"gao",'f',17,91.0}};
structstu*createlist()//建立链表{
stu*head,*p1;
inti;
head=(stu*)malloc(sizeof(stu));
head->next=NULL;
if(head!=NULL)
{
stu*end=head;
for(i=0;i<5;i
)
{
p1=(stu*)malloc(sizeof(stu));
*p1=a[i];
p1->next=end->next;
end->next=p1;
end=p1;
}
}
else
printf("outofspace");
returnhead;}
intdeletenode(stu*head,intage)//删除年龄为age的结点{
stu*t,*p;
p=head;
t=head->next;
while(t!=NULL
2.从代码上看,指针操作非常混乱!希望写程序是头脑清醒,知道各个指针的指向
3.建议使用DEBUG工具,程序都是一步步调出来的。
仅供参考:
#include<stdio.h>#include<malloc.h>
structstu{
intnum;
charname[16];
charsex;
intage;
floatgrade;
structstu*next;}a[5]={{101,"zhang",'m',19,95.5},{102,"wang",'f',18,92.0},{103,"zhao",'f',19,85.5},
{104,"li",'m',20,96.0},{105,"gao",'f',17,91.0}};
structstu*createlist()//建立链表{
stu*head,*p1;
inti;
head=(stu*)malloc(sizeof(stu));
head->next=NULL;
if(head!=NULL)
{
stu*end=head;
for(i=0;i<5;i
)
{
p1=(stu*)malloc(sizeof(stu));
*p1=a[i];
p1->next=end->next;
end->next=p1;
end=p1;
}
}
else
printf("outofspace");
returnhead;}
intdeletenode(stu*head,intage)//删除年龄为age的结点{
stu*t,*p;
p=head;
t=head->next;
while(t!=NULL
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
包含头的文件没加扩展明.h
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(i=0;i<year;i++)
{
if(s.Compare(i)==1)
{
for(j=1;j<=12;j++)
//整年的所有天数
{
sum=sum+a[0][j];
//是闰年
}
}
else
{
for(j=1;j<=12;j++)
{
sum=sum+a[1][j];
//不是闰年
}
}
}
if(s.Compare(i)==1)
{
for(j=1;j<month;j++)
{
sum=sum+a[0][j];
//是闰年
}
}
else
{
for(j=1;j<month;j++)
{
sum=sum+a[1][j];
//不是闰年
}
}
sum=sum+day;
先求整年的所有天数,再求月份的天数
{
if(s.Compare(i)==1)
{
for(j=1;j<=12;j++)
//整年的所有天数
{
sum=sum+a[0][j];
//是闰年
}
}
else
{
for(j=1;j<=12;j++)
{
sum=sum+a[1][j];
//不是闰年
}
}
}
if(s.Compare(i)==1)
{
for(j=1;j<month;j++)
{
sum=sum+a[0][j];
//是闰年
}
}
else
{
for(j=1;j<month;j++)
{
sum=sum+a[1][j];
//不是闰年
}
}
sum=sum+day;
先求整年的所有天数,再求月份的天数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询