一道NCRE2级C语言的题

已定义了以下函数:
fff (float x)
{printf("%d\n",x*x);}
该函数的类型是:
A.与参数x的类型相同;
B.void类型;
C.int类型;
D.无法确定;

书上的答案是C,理由是书上定义:“若在函数的首部省略了函数返回值的类型名,则默认函数返回值的类型为int型。”

但是我认为该题应选择D,因为书上还说“若函数没有函数值返回,则必须把函数定义成void类型。”这么看的话,这道题的代码不完整,前后矛盾啊。

求高人解答!
但是我认为这段代码是一个完整的函数,其中并没有返回确切的值的表达式出现。所以理应定义函数为void型

书上的说明很清楚了
"若在函数的首部省略了函数返回值的类型名,则默认函数返回值的类型为int型。"
这与
"若函数没有函数值返回,则必须把函数定义成void类型。"
并不矛盾。

后者要求写代码的时候,如果没有返回值,则要定义为void类型。
但是如果你没有定义类型,则前一条件起作用,默认返回int型。

同时这样的函数中编译的时候应该会提示你,需要返回值。

你可以这么理解:
如果有void类型限制,则是void型,否则一定是int型,而不管函数有没有return语句。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-31
main()
{
int i,j,k;
for(i=0,j=5;i<=j;i++,j--);
printf(〃k=%d〃,k=i+j);
}
答案是对的,应该注意到for语句后面有个分号的:
for(i=0,j=5;i<=j;i++,j--);
如果没有分号,那就是连续三个k=3了。但是有了分号,for就成了一条独立的语句将 ,只执行一次,所以只输出一个k=3
第2个回答  2011-01-30
答案是c 如果函数显式定义为void类型,则函数没有返回值,如果缺省,则系统默认函数返回int类型,题目中没有定义为void 所以系统认为是返回int