一道c语言题,希望大神详细讲解。

 我来答
匿名用户
2014-02-22
展开全部

首先我想问LZ:为什么要伤害我的脖子?

然后我想说,出这个题目的老师可以拖出去揍一顿。代码写得这么丑,puts()还错写成put()。


接下来是代码的解释:

<代码>char * s, c[80];

<说明>声明一个char指针s,一个长80char单位的字符数组c


<代码>s = c;

<说明>把字符数组c的首地址赋给指针s,即s = &(c[0])


<代码>gets(s);

<说明>程序运行到gets(s);等待输入

<用户操作>用户输入apple

<说明>

c[0] = 'a'

c[1] = 'p'

c[2] = 'p'

c[3] = 'l'

c[4] = 'e'

c[5] = '\0'


<代码>while(*(++s) != '\0')

<说明>

因为++s : s = &(c[1])

所以*(++s) != '\0'

    *(&c[1]) != '\0'

    c[1] != '\0'

    'a' != '\0'

所以 (*(++s) != '\0') == 1

循环条件成立,执行循环


<代码>

if (*s == 'a')

{

    break;

}

    else

{

    s++;

    gets(s);

}

<说明>

如果*s == 'a'跳出while循环,否则s++,get(s)。

此处*s 等于c[1],即'p'。

条件不成立,执行s++,get(s),s = &(c[2])。


<用户操作>用户输入cat

c[2] = 'c'

c[3] = 'a'

c[4] = 't'

c[5] = '\0'


此时程序回到循环开头判断循环条件是否成立

(此处循环代码,重复的,就不写了)

循环里的++s使 s = &(c[3])

*s 等于c[3] 等于 'a',不等于'\0'

循环条件成立,继续循环。


*s等于c[3] 等于 'a'。

跳出循环。


puts(s)

从s(c[3])处开始输出字符,在'\0'(c[5])处停止

所以就是输出'a''t''\n'


写代码不要学这种写法,自己去网上查查规范,这个程序至少要写成这个样子:

#include <stdio.h>
int main()
{
    char * s;
    char c[80];
    s = c;
    gets(s);
    while ( *(++s) != '\0' )
    {
        if (*s == 'a' )
        {
            break;
        }
        else
        {
            s++;
            gets(s);
        }
    }
    puts(s);
    return 0;
}
更多追问追答
追问
很清晰,很详细,很感谢。不过我很愚钝,输入cat时为什么是c[2]='c'而不是c[0]='c'
追答
纠正一下,cat时是c[3]='c'

因为是gets(s),而不是gets(c),输入cat时,指针s的地址在循环中经过三次自加后,等于&(c[3]);
匿名用户
2014-02-22
展开全部
英语渣渣对C语言无力,C++和E语言就学过←_←
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
揭戈雅s2
2014-02-22 · TA获得超过514个赞
知道小有建树答主
回答量:8621
采纳率:0%
帮助的人:2329万
展开全部
在线讲解c语言
追问
大神讲解一下是如何得出答案的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式