7道C语言题,求高手解答。

1.以下程序运行后的输出结果是?voidswap(intm,intn){inttemp;temp=m;m=n;m=temp;}main(){intx=5,y=9;swap... 1.以下程序运行后的输出结果是?
void swap(int m,int n)
{
int temp;
temp=m;m=n;m=temp;
}
main()
{
int x=5,y=9;
swap(x,y);
printf(“%d,%d”,x,y);
}
答案是5,9
我很纳闷为什么不交换两个数值,听同学说是变量作实参是单向值传递,但总是搞不懂,希望高手距离解释下。

2.若给定条件表达式(m)?(a++):a—则其中表达式m和_____等价。
A.m= =0 B.m= =1 C.m!=0 D.m!=1
答案是D

3.语句while(!w);中的表达式!w等价于_____。
A.w= =1 B.w= =0 C.w!=1 D.w!=0
答案是D
2,3两题感觉是一个类型的,但是就是搞不懂,不懂这里等价是什么意思,求高手解释~

4.格式说明符%%的输出结果是“打印一个百分号”,但是我在printf(“%”);中只打了一个%,在Turbo C中也显示了一个“%”,请问这打两个%和打一个%有区别么?

5.设变量x,y,z均为int类型,则以下程序段的输出结果是_____.
x=y=6;
z=x,++y;
printf(“%d”,z);
A.9 B.8 C.7 D.6
答案是D 看不懂,主要看第二行,那个x后面不是分号,是个逗号,难道是逗号表达式,是逗号表达式不是应该和后面的++y打个括号么?求解释~

6.以下关于typedef的叙述不正确的是_____.
A.typedef不能用来定义变量
B.用typedef可以增加新类型
C.用typedef只是将已存在的类型用一个新的名称来代表
D.使用typedef便于程序的通用和移植
不知道答案,只要说答案即可,不用说明。

7设有fp=fopen(“k:\\24000101\\result.txt”,”r”); 文本文件result.txt内容为”1234567890”,则定位文件指针至字符0的语句为:fseek(fp,______,0);。
请问这里填9还是—9?不用说明,只要答案。

题目有点多,需要解释的地方也不少,希望高手能够耐心给予解答,解答合理追加分数,小弟不胜感激!
展开
 我来答
zxpointer
2011-06-24 · TA获得超过4100个赞
知道大有可为答主
回答量:1868
采纳率:33%
帮助的人:1201万
展开全部
1 swap调用的时候实参传给形参,x给m,y给n 。而这里面有一个重大的问题就是x与m并不是同一个内存单元,y与n也不是同一个内存单元,这就暗示着你对m和n的改变并没有使得x和y有任何的效果,因为它们是不同的内存单元,所以你交换的只是m和n内存单元中的值,而对x y没有任何影响,此题关键分清楚它们是占据不同的内存单元的。这个主要就是对内存地址和内存中存放的值搞此就OK,所以指针要学好!
2 答案应该是C不是D 。 m成立 等价于m为真 等价于m非0 等价于m不是0 等价于m不等于0 即m!=0
3 答案应该是B不是D 。 由2题推导可知w等价于w!=0 而!w就是w!=0的否命题就是w==0
4 你再好好验证一下吧,在VC6中printf("%");是没有任何输出的,只有printf("%%");才会输出一个%
5 第二行是一个逗号表达式,但没有用,你依次执行一下先是给x和y赋值6,接着把x赋给z,z=6,然后++y,y变成了7整个表达式的值是++y的值也就是7. 但你搞清啊,最后printf("%d",z);这个输出的是啥? 是z的值啊!! 不是上边表达式的值,z的值是6呀! 如果第二行这样写:z=(x,++y);这样的话结果是7 注意看有没有括号。
6 选B
7 应该是8,fseek的第二个参数应该是偏移量,第三个参数0说明是从头开始,也就是数字1开始的,对于数字1它的偏移是0,数字2是1,数字3是2,依次数字9应该是8
追问
1,2,3,5,6都明白了。第四题我验证过了,在Turbo C中确实一个百分号也能打印出来,怎么回事?
第七题有人说答案是9啊,是移到0不是9诶?
tidecao2006
2011-06-24 · TA获得超过1228个赞
知道小有建树答主
回答量:842
采纳率:0%
帮助的人:784万
展开全部
1、很常见的问题了,这么跟你说吧,调用swap(x,y);的时候,把x和y复制了一份,成为形参,形参数据交换了,那么x,y实际值没变,不是吗?
2、表达式m和表达式m!=0是等价的,c语言中所有的逻辑表达式的真假都是由表达式的值来判断的,当值为非0数则为真,为0则为假。当m为非0时,m为真,m!=0也为真,但m为0时,m为假,m!=0也为假。
3、同2
4、%本来就有自己的含义,也即是说合法的情况是%后面必须有一个格式符,如果没有,编译器也会认为合法,默认的情况,那就是%,只是如果你想打印一个%和一个s的话就不能只写一个%了
5、优先级的问题,逗号优先级很低的,z=x,++y;等价于(z=x),(++y);
6、B
7、第三个参数0等价于宏SEEK_SET,即文件开始处,9
追问
第七题为什么不是负9,不是说,正数是向前移动,负数是向后移动么?
追答
正数是正向偏移,是正向第9位啊
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿咕噜
2011-06-24 · 从互联网慢慢上岸的程序员
阿咕噜
采纳数:107 获赞数:350

向TA提问 私信TA
展开全部
第一题,把temp=m;m=n;m=temp;改成temp=m;m=n;n=temp;这样结果就是9,5
第二题,m等于1的话就相当于m=a++,也就是说能等于它本身,当m不等于1时。m=a,它的值不变,这就好比是m!=0
第三题,while(!w)意思是如果!w非真就执行操作,自然!w也就表示w!=0
第四题,没有区别,版本问题!
第五题,不需要,加括号跟不加没区别!
第六题,C.用typedef只是将已存在的类型用一个新的名称来代表
第七题,不晓得
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式