#include <stdio.h> #define T(c) ( c == c == c ) double f1() { int x; return x = 7%4 ; c语言undefined reference to `f1(...

作者&投稿:由德 (若有异议请与网页底部的电邮联系)
这个问题答案是:C
理由:
这个题目主要考程序阅读和表达式的计算的概念。
具体为:
程序第一行输出是:
printf("%d %d\n",T(5), T(1));

因:
#define T(c) (c == c == c )

故:
printf("%d %d\n",T(5), T(1));
就是:
printf("%d %d\n",5==5==5, 1==1==1);
其中,5==5==5和1==1==1是表达式,需要把两式计算出结果再传给printf函数输出。
5==5==5相当于:
(5==5)==5
先计算前边括号的5==5表达式的值,为1,
然后代入计算后边为1==5表达式的值,为0;
所以,第一个输出参数值是:0;
同理,1==1==1
相当于:
(1==1)==1
先计算前边括号的值,为1,
然后代入计算后边为1==1表达式的值,为1;
所以,第一个输出参数值是:1;
所以,答案是C,不是D。

能帮忙解释一下这段c语言什么意思吗?~

你好:
程序打印效果如下:
7 -1
12 //这里是1和2 ,不是12
2.0
0.600



程序解释:
#include //包含头文件
#define T(c)(((c)>='0')&&((c)<'9')?(c)-'0':-1) //宏定义
void f1(char ch) //f1功能函数
{
switch(ch)
{
case '0':printf("0"); //如果为字符0,则打印字符0,但不跳出
case '1':printf("1"); //如果为字符1,则打印字符1,但不跳出
case '2':printf("2"); break; //如果为字符2,则打印字符2,跳出
case '3':printf("3"); //如果为字符3,则打印字符3,但不跳出
default:printf("9"); //如果为字符9,则打印字符9,但不跳出
}
printf("
"); //换行
}
double f2() //f2功能函数
{
return (double)(5/2); //5除的2商,再转换为double类型
}
double f3(int n) //f3功能函数
{
if(n==1)return 1.0; //如果传递为1则返回1.0
else return 1.0+1.0/f3(n-1); //如果不为1,进行递归调用
}
main()
{
printf("%d %d
",T('7'),T('a')); //打印字符7减去字符0的值,和-1,并换行
f1('1'); //打印字符1后,不跳出,又打印出字符2,并换行
printf("%0.1f
",f2()); //返回2.0,固定值
printf("%.3f
",f3(4)); //递归调用后,传递4打印出0.600。计算过的。
}
有不懂的地方随时回复我。
希望我的回答能帮助到你。

函数f1和f2在本文件中均未定义,故出错。如它们在其他文件里定义,在此处的声明需要加上extern关键字