24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2157  |  回复: 11

时飞

银虫 (小有名气)

[求助] c语言

1、main()
{int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d%d\n",i,j,k,);
}


2、mian()
{int y=10;
while(y--);printf("y=%d\n",y);
}


3、main()
{int k=5,n=0;
while(k>0)
{switch(k)
{default:break;
case 1: n+=k;
case 2:
case 3:n+=k;
}k--;
}printf("%d\n",n);
}

哪位大侠把这三个程序如何运行详细说明一下?????谢谢!!!
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

暖雪儿

木虫 (小有名气)

时飞: 回帖置顶 2012-03-24 08:08:29
1.#inculd
main()
{int x=8;
for(;x>0;x--)
{if(x%3) {printf("%d,',x--);continue;}
printf("%d,",--x);
}
}
该程序如何运行?每一个怎么出来的?   答案8,5,4,2
先x=8,判断x%3=2,为真,输出8,然后x值减1为7,然后做for循环的判断再减1,x=6;
判断x%3=0,为假,然后做for循环的判断再减1,x=5;
判断x%3=2,为真,输出5,然后x值减1为4,然后做for循环的判断再减1,x=3;
判断x%3=0,为假,然后做for循环的判断再减1,x=2;
判断x%3=2,为真,输出2,然后x值减1为1,然后做for循环的判断再减0,x=3;
for判断x>0不成立,退出for循环,执行完毕。


2.mian()
{int y=10;
while(y--);printf("y=%d\n",y);
}
循环结构但是循环什么都不做,循环结束后输出y的值,但因为是后--所以可不可以这样理解y==1,y--.当y==1时,依旧成立,y=0,0==1不成立,但是y--还要进行,y=-1

3.for(i=0;i<4;i++)
for(k=1;k<3;k++);
printf("*";
我认为该输出8个*     答案只有一个*  为什么???

这个的原因是你在第二个for玄幻的后面加了“;”,循环结构但是循环什么都不做,所以只输出一个 *。

4.#inculd
main()
{char s[]={"012xy"};int i, n=0;
for(i=0;s!=0;i++)    \*我认为i=0时就该结束了*\
if(s>'a'&&s<='z')n++;
printf("%d\n",n);
}
答案:2    为啥????
字符串的结束符是“\0”,计算机存储是按ASCII码存的,0的ASCII码是30h,不是0的,要想按你说的,你可将其改为
#include
void main()
{
        char s[]="012xy";
        int i,n=0;
        for(i=0;s!='\0';i++) //我认为i=0时就该结束了
                if((s>'a')&&(s<='z'))
                        n++;

        printf("%d\n",n);
}

» 本帖已获得的红花(最新10朵)

11楼2012-03-23 11:04:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

qqhegg

荣誉版主 (文坛精英)

珊瑚小美-----小元家的九妹

优秀版主优秀版主

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+2, 感谢参与 2012-03-21 01:42:22
时飞: 金币+3, ★★★★★最佳答案, 谢谢啊 2012-03-21 12:38:59
1、main()
{int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d%d\n",i,j,k,);
}
解释:i++后加所以先运算在相加即i==1成立返回1,i+1=2
++j前加,先加为3,3==3返回1,因为或有1则为1所以后面不用运算即K=3
所以结果2,3,3
2.2、mian()
{int y=10;
while(y--);printf("y=%d\n",y);
}
循环结构但是循环什么都不做,循环结束后输出y的值,但因为是后--所以可不可以这样理解y==1,y--.当y==1时,依旧成立,y=0,0==1不成立,但是y--还要进行,y=-1
3.main()
{int k=5,n=0;
while(k>0)
{switch(k)
{default:break;
case 1: n+=k;
case 2:
case 3:n+=k;
}k--;
}printf("%d\n",n);
}

这个是多条case通用相同的语句相当于下面的:
main()
{int k=5,n=0;
while(k>0)
{switch(k)
{default:break;
case 1: n+=k;
case 2:n+=k;
case 3:n+=k;
}k--;
}printf("%d\n",n);
}
所以最后3+2+1=7n=7
每天都是新的一天,每天上帝都会给你不同的惊喜
2楼2012-03-20 22:21:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lgdji

新虫 (初入文坛)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
时飞: 金币+2, ★★★很有帮助, 谢谢 2012-03-21 12:39:44
1.&&和||运算符都是短路判断:&&左边的表达式为假的情况下不会判断右边的表达式,||左边的表达式为真的情况下不会判断右边的表达式。i++==1:后缀运算符使得i先进行判断再加1,此时为真;然后进行判断(++j==3||k++==3):前缀表达式使j先加1再使用它的值进行判断,此时++j==3为真,那么表达式(++j==3||k++==3)一定为真,无需判断k++==3,所以结果为2 3 3。
2.while语句后面的是空语句,什么也不做;循环停止的点是(y--)等于0的时候,在后面打印的时候,此时y的值已经减1了,所以最终打印的值为-1。
3.楼主应该能明白循环过程中只有当k等于3、2和1的时候会改变n的值:当k=3的时候,n=0+3=3;k=2时,n=3+2=5;注意当k=1时,此时n改变两次,在case 1:处,n=5+1=6,但是由于语句没有break语句,后面的语句还会继续执行,所以,在case 3:下的语句执行为n=6+1=7。所以最终的结果为7.
3楼2012-03-21 10:37:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zxliu

银虫 (小有名气)

感谢参与,应助指数 +1
zzy870720z: 应助指数-1, 鼓励交流,希望下次不要选择应助回帖 2012-03-21 16:25:20
哇塞在这程序得输入多长时间啊 哈哈 得有耐心啊
4楼2012-03-21 10:55:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hp2012

铜虫 (初入文坛)

【答案】应助回帖


感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2012-03-22 00:31:47
第一个程序:首先定义了三个有符号的整型变量分别为-i-j-k并进行了初始化如i=1等,下一句是判断语句,其中++j==3表示j先是加上1在与3进行比较,若相等则此语句为真,k++==3则表示先将k与3进行比较,若k等于3则此语句为真,而||是逻辑或运算符号,只要符号两边的语句有一句是真则整条语句(++j==3||k++==3)为真,&&是逻辑与运算符号,只要符号两边有一个是假则整个语句为假,很显然i++==1为真,而++j==3为真。即(++j==3||k++==3)为真,所以i++==1&&(++j==3||k++==3)为真,if语句是括号里面的语句为真的话,就执行最近的下面语句(包括复合语句)
执行printf();语句,此语句是用于输出的功能,printf("%d%d\n",i,j,k,);表示输出当前i,j的值因为只有两个%d,因而无法输出此时i==1;j==3;
5楼2012-03-21 18:23:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖


感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2012-03-22 00:32:03
感觉楼主问的都是C语言最基础的东西,这个,感觉从学习效率上来说,还是认真看一遍书,琢磨一遍,更加实在。楼主在上C语言课程的么?
很女子很弓虽大
6楼2012-03-21 19:16:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

时飞

银虫 (小有名气)

引用回帖:
6楼: Originally posted by lurencyj at 2012-03-21 19:16:36:
感觉楼主问的都是C语言最基础的东西,这个,感觉从学习效率上来说,还是认真看一遍书,琢磨一遍,更加实在。楼主在上C语言课程的么?

课是上了,但是有些程序自己还推不过去
7楼2012-03-21 21:33:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖


jjdg: 金币+1, 感谢参与 2012-03-22 00:32:11

慢慢来,没有问题的。要记清楚书上的重点内容。
很女子很弓虽大
8楼2012-03-21 21:53:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

时飞

银虫 (小有名气)

时飞: 回帖置顶 2012-03-23 08:16:53
引用回帖:
8楼: Originally posted by lurencyj at 2012-03-21 21:53:52:

慢慢来,没有问题的。要记清楚书上的重点内容。

1.#inculd
main()
{int x=8;
for(;x>0;x--)
{if(x%3) {printf("%d,',x--);continue;}
printf("%d,",--x);
}
}
该程序如何运行?每一个怎么出来的?   答案8,5,4,2

2.n=10;while(n);{n--;}
这个能构成无限循环吗?该在N=0时结束啊。。答案却不是
。。为什么

3.for(i=0;i<4;i++)
for(k=1;k<3;k++);
printf("*";
我认为该输出8个*     答案只有一个*  为什么???

4.#inculd
main()
{char s[]={"012xy"};int i, n=0;
for(i=0;s!=0;i++)    \*我认为i=0时就该结束了*\
if(s>'a'&&s<='z')n++;
printf("%d\n",n);
}
答案:2    为啥????
请帮忙解决一下,当然越详细越好!!!!

谢谢!!!
9楼2012-03-22 14:03:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖


余泽成: 金币+1, 鼓励交流! 2012-03-23 16:59:42
引用回帖:
9楼: Originally posted by 时飞 at 2012-03-22 14:03:36:
1.#inculd<stdio.h>
main()
{int x=8;
for(;x>0;x--)
{if(x%3) {printf("%d,',x--);continue;}
printf("%d,",--x);
}
}
该程序如何运行?每一个怎么出来的?   答案8,5 ...

对于第一道题,楼主是怎么想的呢? 你分析一遍试试,我帮你查错。
CODE:
#include
int main()
{
    int x = 8;
    for( ; x>0; x--)
    {
        if(x%3)
        {
            printf("%d,", x--);
            continue;
        }
        
        printf("%d,", --x);
    }
    return 0;
}
该程序如何运行?每一个怎么出来的?   答案8,5,4,2

很女子很弓虽大
10楼2012-03-22 17:48:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 时飞 的主题更新
信息提示
请填处理意见