打印

看看你的C语言水平如何-- <测试1>

[复制链接]
3740|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mindshare|  楼主 | 2012-5-29 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mindshare 于 2012-5-29 11:08 编辑

不上机你能知道答案吗? :)

void main(void)
{
unsigned int i = 1;
unsigned int j = 9;
if(i>j)
{
i++;
}
else
{
j++;
}

if((i-j)>=0)
{
i++;
}
else
{
j++;
}
}

相关帖子

沙发
李进| | 2012-5-29 11:09 | 只看该作者
i=1; j=11

使用特权

评论回复
板凳
mindshare|  楼主 | 2012-5-29 11:09 | 只看该作者
void main(void)
{
        unsigned int i = 1;
        unsigned int j = 9;

        if(i>j)
        {
                i++;
        }
        else
        {
                j++;
        }

        if((i-j)>=0)
        {
                i++;
        }
        else
        {
                j++;
        }       
}

使用特权

评论回复
地板
mindshare|  楼主 | 2012-5-29 11:12 | 只看该作者
void main(void)
{
        unsigned int i = 1;
        unsigned int j = 1;

        if(i=j)
        {
                i = 0;
                j = 0;
        }

        if(i=j)
        {
                i = 2;
                j = 2;
        }
}

使用特权

评论回复
5
mindshare|  楼主 | 2012-5-29 11:26 | 只看该作者
看看下面会有什么效果?
void main(void)
{
        char message1[] = {'H','e','l','l','o',0};
        char message2[] = "Hello";
        char *message3  = "Hello";

        message1[0] = 'h';
        printf("%s \n",message1);
        message2[0] = 'h';
        printf("%s \n",message2);
        message3[0] = 'h';
        printf("%s \n",message3);
}

使用特权

评论回复
6
mindshare|  楼主 | 2012-5-29 11:37 | 只看该作者
看看哪些定义是非法的 :)
typedef struct TEST_S
{
        int a;
        int b;
        struct TEST_S *test;
}TEST_D;

typedef struct TEST_S
{
        int a;
        int b;
        struct TEST_S test;
}TEST_D;

typedef struct TEST_S
{
        int a;
        int b;
        TEST_D *test;
}TEST_D;

typedef struct TEST_S
{
        int a;
        int b;
        TEST_D test;
}TEST_D;

使用特权

评论回复
7
mindshare|  楼主 | 2012-5-29 13:17 | 只看该作者
i=1; j=11
李进 发表于 2012-5-29 11:09

嘿嘿,不对,再猜

使用特权

评论回复
8
SLEET1986| | 2012-5-29 13:53 | 只看该作者
i=2;j=10;无符号问题

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
mindshare + 1
9
rockli| | 2012-5-29 14:13 | 只看该作者
不上机你能知道答案吗? :)

void main(void)
{
unsigned int i = 1;
unsigned int j = 9;
if(i>j)
{
i++;
}
else
{
j++;
}

if((i-j)>=0)
{
i++;
}
else
{
j++;
}
}
mindshare 发表于 2012-5-29 11:06


如果是单片机的c语言编译器,结果不可预料。两个变量未对寄存器做任何操作,一般是被优化没了。

使用特权

评论回复
10
mindshare|  楼主 | 2012-5-29 14:56 | 只看该作者
本帖最后由 mindshare 于 2012-5-29 14:58 编辑

看看 n是什么结果
int main(void)
{
        int n = 2;

        if(n>=3)
             return
        n++;
        n++;
        n++;
        printf("%d \n",n);
        return 0;
}

使用特权

评论回复
11
ohnoyes| | 2012-5-29 15:45 | 只看该作者
本帖最后由 ohnoyes 于 2012-5-29 15:50 编辑

10# mindshare
n=4,
renturn n++;条件不满足,无效,此时n=2。
第二个n++;后n=3;
第三个n++;后n=4;

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
mindshare + 1
12
O狂且O| | 2012-5-29 17:50 | 只看该作者
unsigned 型, i - j >= 0 恒成立. 所以 i = 2; j = 10;
// 应该不考虑编译器优化, 加 volatile 就是
:lol
那个 n 明显是 4.

使用特权

评论回复
13
nongfuxu| | 2012-5-29 18:09 | 只看该作者
编程最需要的是整体思维,程序构架思维。

使用特权

评论回复
14
ytfdhb| | 2012-5-29 18:18 | 只看该作者
1、第一题是无符号的问题
2、第二题是赋值号(“=”)与恒等符号(“==”)的细节问题
3、第三题应该是指针相关的东东吧
。。。

使用特权

评论回复
15
mpuhome| | 2012-5-29 19:49 | 只看该作者
还在关注细节问题的阶段啊

使用特权

评论回复
16
linbei1988| | 2012-5-29 21:26 | 只看该作者
首先LZ自己就不合格了。。明明定义的无符号数却这样去判断

使用特权

评论回复
17
李冬发| | 2012-5-30 01:45 | 只看该作者
第3题,要是换在早些年的PC上,运行的是DOS3.2里的编译器编译出代码,运行的很给力的。

使用特权

评论回复
18
Periodic| | 2012-5-30 08:44 | 只看该作者
第3题,要是换在早些年的PC上,运行的是DOS3.2里的编译器编译出代码,运行的很给力的。
李冬发 发表于 2012-5-30 01:45


????????????

使用特权

评论回复
19
silong1123| | 2012-5-30 09:56 | 只看该作者
typedef struct TEST_S
{
        int a;
        int b;
        struct TEST_S *test;
}TEST_D;

typedef struct TEST_S
{
        int a;
        int b;
        struct TEST_S test;
}TEST_D;

typedef struct TEST_S
{
        int a;
        int b;
        TEST_D *test;
}TEST_D;

typedef struct TEST_S
{
        int a;
        int b;
        TEST_D test;
}TEST_D;


哪些是非法的?我对这些不太了解。

使用特权

评论回复
20
cxincye| | 2012-5-30 11:20 | 只看该作者
第三题也没看明白

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

114

帖子

0

粉丝