关于一个C语言写的代码无法运行出结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于一个C语言写的代码无法运行出结果相关的知识,希望对你有一定的参考价值。

不好意思变量命名弄得十分糟糕X﹏X,如果可以指点一下就万分感谢了·目前知道的是可以排除标点的问题(一直用英文输入),编译运行后结果如下:#include<stdio.h>#include<math.h>int main(void) double input, flo_num_1, flo_num_d, flo_num_2, flo_out_d, flo_out, term_2, term_4; double num_flo_1, num_flo_2, outputnum; const double lim_minu=0.00000001; int redix_1, redix_2; long long int int_num_1, int_num_d, int_num_2, quo_1, quo_2, rem_1, rem_2; long long int term_1, term_3, int_out_d, int_out, num_int_1, num_int_2; printf("Please input the number:"); scanf("%lf", &input); printf("\nPlease input the redix:"); scanf("%d", &redix_1); printf("\nPlease input the wanted redix:"); scanf("%d", &redix_2); int_num_1=input; flo_num_1=input-int_num_1; //转换十进制整数 int_out_d=0; term_1=redix_1; quo_1=int_num_1; do rem_1=quo_1%10; int_out_d+=rem_1*term_1; term_1*=redix_1; while((quo_1/=10)==0); //转换十进制小数 flo_out_d=0; term_2=1.0/redix_1; num_flo_1=flo_num_1; do num_flo_1*=10; num_int_1=num_flo_1; num_flo_1-=num_int_1; flo_out_d+=num_int_1*term_2; while(num_flo_1==0); //转换n进制整数 int_out=0; term_3=redix_2; quo_2=int_num_2; do rem_2=quo_2/redix_2; int_out+=rem_2*term_3; term_3*=redix_2; while((quo_2/=redix_2)==0); //转换n进制小数 flo_out=0; term_4=1.0/10; num_flo_2=flo_out_d; do num_flo_2*=redix_2; num_int_2=num_flo_2; num_flo_2-=num_int_2; flo_out+=num_int_2*term_4; while(fabs((term_4/=10)-lim_minu)<lim_minu); outputnum=int_out+flo_out; printf("\nOutput number is:%f\n", outputnum); return 0;
代码乱掉了······

初步看了一下问题行多,改如下并在后说明——

int main(int argc,char *argv[])
double input, flo_num_1, flo_num_d, flo_num_2, flo_out_d, flo_out, term_2, term_4;
double num_flo_1, num_flo_2, outputnum;
const double lim_minu=0.00000001;
int redix_1, redix_2;
long long int int_num_1, int_num_d, int_num_2, quo_1, quo_2, rem_1, rem_2;
long long int term_1, term_3, int_out_d, int_out, num_int_1, num_int_2,t;//增加一个变量t
printf("Please input the number:");
scanf("%lf", &input);
printf("\\nPlease input the redix:");
scanf("%d", &redix_1);
printf("\\nPlease input the wanted redix:");
scanf("%d", &redix_2);
int_num_1=input;
flo_num_1=input-int_num_1; //转换十进制整数
int_out_d=0;
//term_1=redix_1;
term_1=1;
quo_1=int_num_1;
do
rem_1=quo_1%10;
int_out_d+=rem_1*term_1;
term_1*=redix_1;
while((quo_1/=10)!=0); //转换十进制小数/////////////
flo_out_d=0;
term_2=1.0/redix_1;
//num_flo_1=flo_num_1;
num_int_1=flo_num_1*(t=1000000000);//假设取10位
((num_int_1+=5)/=10)*=10;
t/=10;
do//这里原来的算法是行不通的,浮点数不能用==0或!=0判断
//num_flo_1*=10;
//num_int_1=num_flo_1;
//num_flo_1-=num_int_1;
//flo_out_d+=num_int_1*term_2;
flo_out_d+=num_int_1/t%10*term_2;
term_2/=redix_1;//////////////
while(t/=10); //转换n进制整数///////////////while(num_flo_1!=0)
int_out=0;        
term_3=redix_2;
//quo_2=int_num_2;
quo_2=int_out_d;//////////////////   
do
rem_2=quo_2/redix_2;
int_out+=rem_2*term_3;
term_3*=redix_2;
while((quo_2/=redix_2)!=0); //转换n进制小数////////
flo_out=0;
term_4=1.0/10;
num_flo_2=flo_out_d;
do
num_flo_2*=redix_2;
num_int_2=num_flo_2;
num_flo_2-=num_int_2;
flo_out+=num_int_2*term_4;
while(fabs((term_4/=10)-lim_minu)>lim_minu);//////////
outputnum=int_out+flo_out;
printf("\\nOutput number is:%f\\n", outputnum);
return 0;

    28、38、47行do~while()的()中要用>0或!=0控制,用==0控制只做一次循环。

    57行do~while()的()中要用>控制,否则也只循环一次。

    整数的幂是从0次方开始的,所以22行term_1=redix_1;应改为term_1=1;。

    37行后少了一句term_2/=redix_1;。

    第42行quo_2=int_num_2;应当改为quo_2=int_out_d;。

    浮点数用==0或!=0判断通常是不成功的,所以要另想办法。现在增加一个变量t规定小数点后所取位数。具体代码见改后的30~39行。

以输入1010.101二进制变十进制为例,执行结果如下:

可能还会有问题,欢迎续问。

参考技术A variable 'int_num_2' is uninitialized when used here [-Wuninitialized] (40, 13) 参考技术B 代码 第42行 使用了未初始化的局部变量“int_num_2”

C语言链表按序号排序问题。结果一直出不来,是电脑反应太慢还是我写的哪里有问题

#include<stdio.h>
#include<stdlib.h>
struct studen

int num;
char name[20];
struct studen *next;
;

int main()

struct studen *head;
struct studen *creat();
struct studen *paixu(struct studen *head);
void prin(struct studen *);
head=creat();
head=paixu(head);
prin(head);
system("pause");

struct studen *creat()

struct studen *head,*p1,*p2;
int n=0;
p1=p2=(struct studen *)malloc(sizeof(struct studen));
head=NULL;
printf("请输入学号,学生名\n");
scanf("%d%s",&p1->num,p1->name);
while(p1->num!=0)

n++;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct studen *)malloc(sizeof(struct studen));
printf("请输入学号,学生名。输入0停止\n");
scanf("%d%s",&p1->num,p1->name);

p2->next=NULL;
return (head);

void prin(struct studen *head)

struct studen *p=head;
if(head==NULL)return ;
else while(p!=NULL)

printf("学号为%d\t学生名为%s\n",p->num,p->name);
p=p->next;

return;

struct studen *paixu(struct studen *head)

int i,l=0;
struct studen *p,*k,*kk=head,*pp,*chan,*ll;
p=head;
while(p!=NULL)
pp=p->next;l++;i=p->num;
for(k=pp;k!=NULL;k=k->next)
if((k->num)<(p->num))i=k->num;
if(i!=p->num)

for(k=pp;k->next->num!=i;k=k->next);
ll=k->next;
chan=k->next;
k->next=kk->next;
kk->next=chan;
k=ll;
chan=k->next;
k->next=p->next;
p->next=chan;


kk=p;
p=pp;
return (head);

排序函数好像有问题。
对于链表排序,采用插入法要好些。
给你写出来吧:
struct studen *paixu(struct studen *head)

int i,l=0;
struct studen *p,*q,*t,*pt;
if(head==NULL)
return head;
p=head->next;
head->next=NULL;
while(p!=NULL)
/* 摘下p结点 */
q=p;
p=p->next;
q->next=NULL;
/* q结点插到head链中 */
/* 寻找插入位置 */
for(pt=NULL,t=head; t!=NULL && t->num < q->num; pt=t,t=t->next);
if(pt==NULL)/* 在首部插入 */
q->next=head, head=q;
else if(t==NULL)/* 在尾部插入 */
pt->next=q;
else /* 在中间插入 */
q->next=pt->next, pt->next=q;

return (head);
追问

head ->next已经设为NULL
那后面
for(pt=NULL,t=head; t!=NULL && t->num num; pt=t,t=t->next);
t=t->next这是空的

追答

p=head->next;
head->next=NULL;
这是把待排序的链表首结点摘下来,作为插入到有序链表(还是用head指向)第一个结点

for(pt=NULL,t=head; t!=NULL && t->num num; pt=t,t=t->next);
这是 在head所指的有序链表中寻找q所指结点的插入位置

参考技术A 发现问题了:在下面的函数中传不出你输入的值, 因为
//p2 没有把值赋值给head返回出去
struct studen *creat()

struct studen *head,*p1,*p2;
int n=0;
p1=p2=(struct studen *)malloc(sizeof(struct studen));
head=NULL;
printf("请输入学号,学生名\n");
scanf("%d %s",&p1->num,&p1->name);
while(p1->num!=0)

n++;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct studen *)malloc(sizeof(struct studen));
printf("请输入学号,学生名。输入0停止\n");
scanf("%d%s",&p1->num,p1->name);

p2->next=NULL;

//p2 没有把值赋值给head返回出去
return (head);
参考技术B 不打断点调试么?追问

怎么弄

以上是关于关于一个C语言写的代码无法运行出结果的主要内容,如果未能解决你的问题,请参考以下文章

用C语言写的API运行的时候总是先弹出一个命令行窗口,如何让他不弹出来?

关于ruby.exe无法正常运行的问题

Linux VLC编译安装成功,不能运行

用vs2010写的asp.net的代码,想解决八皇后问题但是运行时总是出不来结果请问这是怎么回事,代码见图片

关于windows下编写的shell脚本在linux下无法运行报错问题

C语言程序无法运行,求解