C语言(计算机二级C) 习题求解释

要解释...答案我有....谢谢了...我打上来也不容易...能让我弄懂么 ╭(╯3╰)╮

#include<stdio.h>
#define S(x) 3<(x)<5
int n,a;
Void f1(int n)
{ for f1(int n)
if(n%2!=0) continue;
printf("%d",n);
}
printf("\n");
}
double f2(double x,int n)
{ if(n==1) return x;
else return x*f2(x,n-1);
}
main( )
{ int a=9;
printf("%d%d\n",a,S(a));
f(1);
printf("%.1f\n",f2(2.0,3));
printf("%d%d\n",n,S(n));
}

问题:
第一行输出:
第二行输出:
第三行输出:
第四行输出:
for f1(int n),这句话错了。
是 { for(; n>=0;n--) {
倒数第四行是 f1(4);
另外 答案
91
420
8.0
01

原题你没有输入对 都有语法错误 怎么帮你解答呀追问

我已经改过了,帮我再看看 %>_<%感激不尽

追答

还是没输入对,倒数第4行: f(1);
这个你再看看!

追问

改了 另外附上了答案~~%>_<% 还有错的没?

追答

恩 这次对了 我给你解释一下这段程序
首先是这个宏的含义:#define S(x) 3<(x)<5 展开后变成"3<x<5",这粗看起来是"3<x && x<5",但实际上是"(3<x) ? 1 < 5 : 0 < 5",也就是说这不是一个逻辑与的关系.这么写是出题人故意迷惑你,考你是否了解C语言的语法.
然后是f1()这个函数,对输入的参数每次判断是否能被2整除,如果能就打印出来,不能就减1继续判断,直到减到0为止.
最后是f2()函数.这个好理解,就是求x的n次幂,程序中使用的是递归处理乘法.
下面是4行输出:
printf("%d%d\n",a,S(a)); 这个是打印出a的值和s(a)的值,a是9,s(a)通过上面的解释你也很容易明白为啥是1了.
f1(4); 打印出4~0中的所有偶数,显然是4 2 0
printf("%.1f\n",f2(2.0,3));打印出2的3次幂,结果是8.0
printf("%d%d\n",n,S(n)); 打印出n的值和s(n),判断和第一个printf一样,注意这里n是全局变量,因为在C语言中全局变量是默认被初始化为0的,知道这个就好理解了.

追问

(3<x) ? 1 < 5 : 0 < 5
这句话还不是很明白 其他的都懂了 是说 X大于3就输出1 那和5没什么关系么 第一题输入9为什么输出的是1?

追答

3<x<5 其实在这里程序是做了两次判断 首先计算3<x的值 计算的结果再与5比较看是否小于5
比如x=9 因为3<9的值为1(真) 然后再计算 1<5的值为1(真)
再比如x=0 因为3<0的值为0(假) 然后再计算0<5的值为1(真)
明白了嘛?

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-10
第一行输出:91
第二行输出:不知道 f(1)是什么东西 没看到f这个函数
第三行输出:8.0
第四行输出:31追问

那个是f1(4) 我打错了
还有答案第四个错了其他的都对,你可以帮我稍微解答系么

第2个回答  2011-11-10
for f1(int n),这句话有问题啊!追问

我已经改过了,帮我再看看 %>_<%感激不尽

计算机二级C语言程序的一个题目,不知道答案怎么来的。求解析
初值就是你在定义变量的同时就可以给他赋一个初始值 比如 int i=0;就是定义一个变量,并赋予初值0 一般是为了防止程序中误操作导致直接使用未赋值的变量进行计算 变量变量,之所以叫变量就是他的值是可以改变的,所以即使有初值也可以用赋值的手段来改变变量的值 这道题的话,因为scanf中要求的格式...

计算机二级C语言程序的一个题目,不知道答案怎么来的。求解析
最后,int 类型的变量,是整数型,12.3是带小数点的,如果把12.3赋值的任何int类型的变量,那么编译器会自动四舍五入,变成12了,scanf()是个C语言自带的输入函数,这个函数的参数有两个比如上面的,scanf("%d",&k),这个%d是指明接收的数是int类型,如果是小数,那就是%f,&k的意思是将输入的...

国家计算机二级C语言,这题怎么回事啊?
s中\\0是字符串结束符,在数值上就是0 所以,循环中遇到\\0就结束了,\\0前面只有0 1 2是数字,所以统计结果为3

计算机二级c语言考试,有代码不明白,请帮忙解析下
第一处--是让t指向最后一个字符,因为之前的循环让t指向字符串结束标记了 第二处是当字符串不结束,同时n个*,这个程序你把n想成2,可以画出执行过程,就容易理解了

计算机二级C语言题目,回答并解释!谢谢
int main(void){ int k=0,number=0;char str[MAXLEN];while((str[k]=getchar())!='#')k++;str[k]='\\0';for(k=0;str[k];k++)if(str[k]>='0'&&str[k]<='9'||str[k]=='A'||str[k]=='B')if(str[k]>='0'&&str[k]<='9')number=number*12+str[k]-'0';el...

计算机二级C语言,,77题,看不懂
8的2进制是1000,然后想右移三位,就是二进制1,所以是十进制的1

计算机二级C语言题目,求余。
取模运算在编程中运用不是很多,但是用的好可以收到意想不到的作用。很简洁,很高效,取模用于处理的两个数都应该是整形变量。经常用到的判断一个数是不是偶数 if(a%2==0)(用了你的运算符,在不同的编程语言中有所不同,例如VB中是Mod,2 Mod 5 =2。C语言中是 \\, 21 \\ 5 =1. ...

两道题:计算机二级C语言?
而C括号内有两种运算符,双等于号==是个逻辑运算符,是个判定运算,然后是赋值运算,没有问题。A中b=1改成b==1后还是错误,因为在括号右边还有个赋值运算,(b==1)=1,那么右边这个赋值运算也变成了给常量赋值,属于又多了一个错误。S的定义前有个static关键字,表明是个静态变量,静态变量在内存...

计算机二级C语言,,33题,B和C,为什么,
因为刚才说了,队列可以循环,所以还能再进入一个元素,就会填充到1这个位置上,队尾指针指向了1。此时队头指针指向2,队尾指针指向1。所以队尾指针小于了队头指针。所以题目中命题是正确的。33题。区分投影与选择,记住就行了。投影是行数不变选取若干列,选择是列不变选若干行。

2010年9月计算机二级c语言 笔试第40题 c=c<<1 是什么意思?
意思就是说把"c"所代表的存储单元内的二进制数左移一位,左移后在最后边补0。注:数据在计算机内的存储为二进制方式;例:若a=25 则a所代表的存储单元应该是 "…000011001”那么a<<1 就是 "…000110010" 即a<<1的值为50 同理short c=124 那么c=c<<1后c的值已变为248 ...

相似回答
大家正在搜