C语言的小问题

2025-02-27 11:49:39
推荐回答(5个)
回答1:

#include

#include

typedef
struct
aa
{

int
data;

struct
aa
*next;
}NODE;
int
fun(NODE
*h)
{
int

sum
=
0
;
NODE
*p;
/***********found**********/
p=h->next;
//因为不要求计算头结点,所以给P的值应该是链表的第一个值而不是头结点
while(p)
{

if(p->data%2==0)
sum
+=p->data;
/***********found**********/
p=p->next;
//这里计算和的任务是p在做而不是h,所以这里要用p
}
return
sum;
}
NODE
*creatlink(int
n)
{

NODE
*h,
*p,
*s;
int
i;
h=p=(NODE
*)malloc(sizeof(NODE));
for(i=1;
i<=n;
i++)
{
s=(NODE
*)malloc(sizeof(NODE));
s->data=rand()%16;
s->next=p->next;
p->next=s;
p=p->next;
}
p->next=NULL;
return
h;
}
void
outlink(NODE
*h,
FILE
*pf)
//
函数是要返回值的。
{

NODE
*p;
p
=
h->next;
fprintf(pf
,"\n\nTHE
LIST
:\n\n
HEAD
"
);
while(p)
{

fprintf(pf
,"->%d
",p->data
);
p=p->next;
}
fprintf
(pf,"\n");
}
void
outresult(int
s,
FILE
*pf)
//函数是要返回值的
{

fprintf(pf,"\nThe
sum
of
even
numbers
:
%d\n",s);
}
void
main()
//函数是要返回值的
{

NODE
*head;

int
even;
head=creatlink(12);
head->data=9000;
outlink(head
,
stdout);
even=fun(head);
printf("\nThe
result
:\n");
outresult(even,
stdout);
}
按照你要求改的,也不知道你用的是什么编译器,函数连返回值都没有。
但是我很郁闷,在我机器上执行结果一直是52

回答2:

错误的原因是scanf他接收enter键,所以你输入一个数后按enter键后,自动的就认为scanf("%c",&d); d就是enter键的值。
在scanf("%c",&d);前面添加getchar();即可
getchar();用来接收enter键的值。这样就可以输入d的值了

回答3:

一,
16进制
最大数为f
没有g
-0x48ef
二,
'3'表示字符3
在ASC表中对应10进制数为51
三,C语言规定
赋值表达式的左值要为变量

所以a*3=2是错误的

回答4:

-0x48eg
这是十六进制,里面只有abcdef
没有g。a=10,以此类推。
‘3’
这里只能用的是英文表示法'3'字符
a=a*3=2
这个不对的。
'='为赋值语句。a*3=2这里就不对。

回答5:

没看懂你的程序!

void
main()
{

int
a[4],i,min,temp;

int
k;

for(i=0;i<4;i++)

scanf("%d",&a[i]);

min=a[0];

index=0;

for(i=0;i<4;i++)

{

if(min>a[i])

{

index=i;

min=a[i];

}

}

a[index]=a[0];
从这里开始交换数

a[0]=min;

printf("\n");

for(i=0;i<4;i++)

printf("%d\n",a[i]);
}

//这是我对
从键盘输入10个整数保存到数组中,求值最小的元素,将这个值最小的元素与数组的第一个元素交换。最后输出整个数组。