| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 468 人关注过本帖
标题:新手请教两个问题!
只看楼主 加入收藏
jian3000
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2009-10-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
新手请教两个问题!
刚学C语言一个星期,碰到2个问题想不通,特来请教下前辈们,望能得到答复,谢谢!
问题1:
#include<stdio.h>
    int f(int a,int b)
{
    int c;
    if(a>b)
    c=1;
    else if(a==b)
    c=0;
    else c=-1;
    return c;
}
main()
    {
    int i=2,p;
    p=f(i,++i);
    printf("%d",p);
    getch();
}
为什么“p=f(i,++i)”这里i和++i比较的结果是3:3?
如果把p=f(i,++i)换成p=f(i,i++),比较的结果是多少?

问题2:输入一个字符串,求出这个字符串里有多少个单词?
#include "stdio.h"
main()
{
      int num=0,i=0;
      char str[100],c;
      printf("Please input a number:");
      gets(str);
do {while ((c=str[i])==' ')i++;
if (c!='\0')
num++;
while((c=str[i])!=' '&&c!='\0')i++;}
while (c!='\0');
printf("you %d ge dan ci!",num);

getch();
}
如果想把上面的语句不用“do while”形式,而只用while形式写,怎么写?我试了大半天都没成功~~

[ 本帖最后由 jian3000 于 2009-10-28 15:42 编辑 ]
搜索更多相关主题的帖子: 多少 include return 字符串 
2009-10-28 14:20
yilangcb
Rank: 2
等 级:论坛游民
帖 子:30
专家分:23
注 册:2009-10-15
收藏
得分:10 
对于第一个问题,首先楼主在定义函数f的时候,else if(a==b),而非a=b;
再一个,两者比较的结果应该是一个数(1,0,-1),不会是3:3这种形式的,至于你说的i++ 和++i的意思书上肯定有明确的说明,看懂了你自然就知道比值到底是多少了
2009-10-28 14:52
jian3000
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2009-10-27
收藏
得分:0 
首先谢谢楼上的指出我在书写问题时犯的错误,确实“else if(a==b)”这里是“a==b”,而非"a=b";(现在已经改正了~)
但是我又跑去看了几遍书,还是不能理解当p=f(i,++i)时,p的结果是:“0”,而不是“-1”。
我是这样理解的:i=2,++i=3(因为++放在前面,所以先自身加1),
然后p=f(i,++i)就代表p=f(2,3),代入上面的子函数,因为2<3,所以c=-1,返回结果是p=-1.

而当p=f(i,i++)时,我也理解不了为什么答案是1?
求求各位大哥,给我说下是哪个地方理解错误了,我真的是转不过这个弯来!!!
麻烦能写出正确理解过程吗?为了这个问题我考虑一个上午了~~
脑袋实在笨得跟猪一样!
2009-10-28 15:41
rengang2005
Rank: 2
等 级:论坛游民
帖 子:23
专家分:57
注 册:2006-10-20
收藏
得分:10 
你应该注意逗号运算是从右往左的,所以对于p=f(i,++i);是先算++i结果等于3,所以p=f(i,++i)=f(3,3)
而p=f(i,i++);先计算i++,结果仍是2,然后i才等于3,所以p=f(i,i++)=f(3,2),不知道说清楚了没有?
2009-10-28 15:52
rengang2005
Rank: 2
等 级:论坛游民
帖 子:23
专家分:57
注 册:2006-10-20
收藏
得分:0 
你应该注意逗号运算是从右往左的,所以对于p=f(i,++i);是先算++i结果等于3,所以p=f(i,++i)=f(3,3)
而p=f(i,i++);先计算i++,结果仍是2,然后i才等于3,所以p=f(i,i++)=f(3,2),不知道说清楚了没有?
2009-10-28 15:53
yilangcb
Rank: 2
等 级:论坛游民
帖 子:30
专家分:23
注 册:2009-10-15
收藏
得分:0 
4楼正解,从右往左
2009-10-28 15:54
Simple_Being
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-9-23
收藏
得分:0 
楼主不要着急,支持你,
坚持下去一定会成功的

你问的这些问题都很基础
一定要把基础打扎实才行
2009-10-28 16:10
jian3000
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2009-10-27
收藏
得分:0 
刚看了4楼大哥的回复,
第1遍,看了和没看没区别!
第2遍,头都觉得炸了!
第3遍的时候突然想到是不是这样理解的:
首先p=f(i,++i),“++”放在前面的,所以要先自身加1,++i=2+1=3=i(一个新的i的值);
这个时候i的值已经改变,不再是2,而是3,代入前面的i,所以f(i,++i)=f(3,3),


对于p=f(i,i++),因为“++”在后面,先把i=2带入上面的子函数计算,然后再赋值给i,i就等于3,
于是f(i,i++)=f(3,2)
这样理解就对了吧?
总结我犯的错误:就是没想到要重新给i赋值,而认为它是永远不变的!
用头撞墙10下, 以示惩戒!
最后谢谢楼上的几位好心大哥了!!!
2009-10-28 16:25
快速回复:新手请教两个问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018522 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved