A. 一个C语言程序,编译、链接都没问题,但一运行就出错,高手知道下~~
改好了:
#include <stdio.h>
#include <stdlib.h>
typedef struct dxs
{
int exp,coef;
struct dxs *next;
}oxs,*o_xs;
/*****输入函数*****/
void build(int i,o_xs pa)
{
int j,sum_oxs,exps=0,coefs=0;
oxs *p;
pa->coef=coefs;
pa->exp=exps;
pa->next=NULL;
p=pa;
printf("输入第%d个多项式的个数\n",i);
scanf("%d",&sum_oxs);
for(j=sum_oxs;j>0;j--)
{
printf("输入系数和指数");
scanf("%d%d",&coefs,&exps);
p->coef=coefs;
p->exp=exps;
p->next=pa;
pa=p;
p=(oxs*)malloc(sizeof(oxs));
}
free(p);
}
/*****输出函数*****/
void show(o_xs pa)
{
while(pa!=NULL)
{
printf("%d\t%d\t",pa->coef,pa->exp);
pa=pa->next;
}
printf("\n");
}
/*****排序函数(升序)*****/
void list_oxs(o_xs pa)
{
oxs tt,tt0;
oxs *p=pa,*q=pa;
tt.coef=p->coef;
tt.exp=p->exp;
while(p!=NULL)
{
while(q!=NULL)
{
if(q->exp<tt.exp)
{
tt0.exp=tt.exp;tt0.coef=tt.coef;
tt.exp=q->exp;tt.coef=q->coef;
q->exp=tt0.exp;q->coef=tt0.coef;
}
q=q->next;
}
tt0.exp=tt.exp;tt0.coef=tt.coef;
tt.exp=p->exp;tt.coef=p->coef;
p->exp=tt0.exp;p->coef=tt0.coef;
p=p->next;
q=p;
}
}
/*****多项式相加函数*****/
void add(o_xs pa,o_xs pb)
{
int sum_coef;
oxs *p,*q,*u,*pre;
pre=pa;
u=pb;
p=pa->next;
q=pb->next;
while((p!=NULL)&&(q!=NULL))
{
oxs *p,*q,*u,*pre;
if(p->exp>q->exp)
{
u=q;
pre->next=u;
u->next=p;
pre=u;
q=q->next;
}
else if(p->exp<q->exp)
{
pre=p;
p=p->next;
}
else
{
sum_coef=p->coef+q->coef;
if(sum_coef==0)
{
u=p;
p=p->next;
free(u);
u=q;
q=q->next;
free(u);
}
else
{
p->coef=sum_coef;
pre=p;
p=p->next;
u=q;
q=q->next;
free(u);
}
}
if(q!=NULL)
{
pre->next=q;
}
}
}
/*****main函数*****/
void main()
{
oxs a,b;
build(1,&a);
list_oxs(&a);
show(&a);
build(2,&b);
list_oxs(&b);
show(&a);
add(&a,&b);
show(&a);
}
B. 初学C语言,写个字符串排序的程序,编译链接都没有问题,一运行出错,各位高手看看能否帮下忙是输入的问题。
你好,运誉
char *pt_arr[5] = {"wang","cheng","zhang","li","xia"};
pt_arr内的指针指向的是字符串常量,字符串常量存储在只读内存区域,你使用gets输入当然有问题。
你旁帆段需要为数组中每个指轿察针分配内存,而不是简单的赋值。
比如pt_arr[0] = new char[70];
这样就不会有问题了。
C. C语言编程时编译没有错误,运行时却显示有一个错误。为什么
不没有写max函数的具体定义,在主函数中又要使用这个函数,系统找不到,自然就错了。你把max函数的定义写全了,就没事了。
D. C语言编译时都没有错误,可是最后输出时debug error,不能运行,为什么啊
都不明白首敏你的程序想干什么???#include<stdio.h>
int main()
{
int m,n,max,min;
scanf("%d%d",&m,&n);
if(m>n)
{
max=m;
min=n;
}
else
{
max=n;
min=m;
}
for(;max%min==0;min--)
printf("%d\n"数毁,min);
return 0;
}
这没者毕枝有错了,
E. c语言编译没有错误,连接有错误是怎么回事
1 编译阶段,执行的是对单个文件的转茄铅换,从源代码转换成二进制文件。
2 链接阶段,将每个源文件转成的二顷纳冲进制文件,及相关的系统库文件共同打包生成可执行文件。
3 从定义上可以看出,链接阶段,出雀歼现错误有两种可能:
1) 函数中引用了不存在的函数。
2) 编译环境有问题,导致ld出错。
F. 用C语言编程程序没有错误为什么结果不对
程序可以运行并不表示程序就是正确的
编译和连接都正确,只能说明编译器对他进行语法等检查
没发现他的错误而已,而既然运行结果是错误的,那就是说明一点
可能是你的算法设计的不当,不能正确的解决问题,这样发生的错误
是运行期错误,在编译连接的过程不会出错的,不过幸好,编译器也为我们
提供了一些解决类似运行期错误的一些调试工具,通过debug,进行单步调
试下,观察变量值,看看是不是你想要的等等解决此类问题,具体如何单步
调试见下面:
不过你先要设置断点,然后按下面操作
在VC++6.0中的单步调试:
调试重要的几个键:
F9在当前光标所在的行下断点,如果当前行已经有断点,则取消断点.
F5调试状态运行程序,程序执行到有断点的地方会停下来.
F10单步执行程序.
CTRL+F10运行到光标所在行.
F11和F10的区别是,如果当前执行语句是函数调用,则会进入函数里面.
SHIFT+F11跳出当前所在函数.
步骤:
1,保存为c或c++文件
2,根据断点调试找到错误处。
3,采用F10或F11单步调试找到精确的错误处。其中f10是跳过函数盗用,f11是进入函数体调试。一般是先用f10,确定函数输入输出是否正确(与自己想的一样),如不一样,则用f11进入函数体一步一步调试。
4,在调试过程中,肯定得监视程序中的变量。在vc6.0的右下角有一个watch窗口,专门用来设置监视变量。具体怎样设置自己体会吧。在调试过程中,鼠标轻轻放在变量上也会显示该变量的值
5,vc6.0专门为调试设置了工具箱以方便调试的进行,打开的方法如下。右键——〉在debug(或调试)选择项的勾勾上。ok
G. c语言程序编译时没错误,组建时为什么出现错误
你说的组建错误多半是link出错吧,这个很可能是你安装的路径不是默认那个路径,于是,可能需要你自己修改一下
编译器
设置,你可以到网上搜一下到底是在什么地方设置。我记不清楚具体位置了,就是设置
链接器
的路径。在对vc进行设置的那个菜单里面
找一找
,里面就有各种路径设置,包括
头文件
路径啊,可执行文件路径之类的,就在里面设置到vc下面的bin路径就可以了。
H. C语言程序在编译链接的时候都没有问题,在调试的时候出问题了
在 fscanf.c 的银樱第54行出错。
表锋肆丛达式:stream!=NULL
关于如何您的程序可能会导致断言失雹丛败的信息,请参阅Visual C + +文档
I. 为什么我写的C语言程序编译时没错,运行时有错误
楼主,你好!编译没有错误只能说明没有语法错误,并不能说明代码的逻辑没有错!因为编辑器主要是根据c语言的语法来检查你的代码有没有错!