1447391641 发表于 2020-12-1 21:43:44

数组

#include<stdio.h>
int main()
{
        int i,c;
        char s={"8980","9198"};
        for(i=3;i>=0;i--)            
        {
                c=s+s-2*'0';请问这个'0'的值是0吧
                s=c%10+'\0';          这个第一次循环应该是s=8%10+'\0'这个'\0'是多少呢
        }
        for(i=0;i<=1;i++)
        puts(s);
        return 0;
}

jackz007 发表于 2020-12-1 21:54:44

    '0' 是字符 0,其 ASCII 码值为 48,所以,2 × '0' = 96
    '\0' 这个字符对应的 ASCII 码值为 0,所以,'\0' 所代表的数值就是 0。

rt3 发表于 2020-12-1 21:57:28

'0'的值不是0
'\0'的值才是0
用单引号括起来的都是字符。对字符进行纯数学运算会得到无价值的结果。

风过无痕1989 发表于 2020-12-1 22:22:53

教你一个方法,看图。从图中,你应该能得到你想要的答案

1447391641 发表于 2020-12-2 11:35:32

风过无痕1989 发表于 2020-12-1 22:22
教你一个方法,看图。从图中,你应该能得到你想要的答案

那请问,第二次循环'\0'是多少呢,s=17%10+ 什么呢{:5_100:}

1447391641 发表于 2020-12-2 11:37:57

风过无痕1989 发表于 2020-12-1 22:22
教你一个方法,看图。从图中,你应该能得到你想要的答案

还有就是为什么输出9198不输出8888呢{:5_99:}

风过无痕1989 发表于 2020-12-2 13:19:39

1447391641 发表于 2020-12-2 11:37
还有就是为什么输出9198不输出8888呢

你要输出的是 s[ i ],而不是 s[ i ],当然不会输出 8888 啦。至于程序中的 s[ i ] 这个数组,程序中既没有定义,更不可能赋初值,却能在循环中 i = 1 时成功地被赋值 9198 ,我步进运行了好几次,也没有看出个端倪来。

你结了此帖,另发求助帖子就问:为什么 s[ i ] 这个没有定义的数组,最后能输出 9198

我也帮你去其他的论坛发帖子询问,若我那边有了答案,我再回来告诉于你。你看如何?

1447391641 发表于 2020-12-2 14:17:02

风过无痕1989 发表于 2020-12-2 13:19
你要输出的是 s[ i ],而不是 s[ i ],当然不会输出 8888 啦。至于程序中的 s[ i ] 这个数组,程序 ...

那请问,第二次循环'\0'是多少呢,不应该是s=17%10+ 多少呢,我想了好久都没想出来'\0'是多少怎么就等于八了。{:5_94:}

风过无痕1989 发表于 2020-12-2 15:25:06

本帖最后由 风过无痕1989 于 2020-12-5 09:28 编辑

1447391641 发表于 2020-12-2 14:17
那请问,第二次循环'\0'是多少呢,不应该是s=17%10+ 多少呢,我想了好久都没想出来'\0'是多少怎么 ...
i = 3 时
    c = s + s - 2 * '0'
       = 0 + 8 - 2 * '0'
       = 0 - '0' + 8 -'0'
       = 8
               
    s = c % 10 + '\0'
               = 8 % 10 + '\0'
               = 8 + '\0'
               = 8

i = 2 时
    c = s + s - 2 * '0'
       = 8 + 9 - 2 * '0'
       = 8 - '0' + 9 -'0'
       = 17
               
    s = c % 10 + '\0'
               = 17 % 10 + '\0'
               = 7 + '\0'
               = 7

i = 1 时
    c = s + s - 2 * '0'
       = 9 - '0' + 1 -'0'
       = 9 + 1
       = 10
               
    s = c % 10 + '\0'
               = 10 % 10 + '\0'
               = 0 + '\0'
               = 0

i = 0 时
    c = s + s - 2 * '0'
       = 8-'0' + 9-'0'
       = 8 + 9
       = 17
               
    s = c % 10 + '\0'
               = 17 % 10 + '\0'
               = 7 + '\0'
               = 7

#include<stdio.h>
int main()
{
        int i, j, c;
        char s = { "8980","9198" };

        for (i = 3;i >= 0;i--)
        {
                c = s + s - 2 * '0';
                s = c % 10 + '\0';
        }
        for (i = 0;i <= 1;i++)
        {
                puts(s);
        }
        printf("\n");
       
        for (i = 0;i < 2;i++)             // 输出 s 数组
        {
                for (j = 0;j < 4;j++)
                {
                        printf("%.2d ", s);
                }
                printf("\n");
        }
        return 0;
}

*************************************************
9198

07 00 07 08
57 49 57 56          <- - - - - -   9 0 9 8 的 ASCII码
Press any key to continue . . .

风过无痕1989 发表于 2020-12-5 09:32:24

朋友,不好意思,这道题我当时没有考虑清楚,就给出了“字符数字不参与数字运算”的错误结论,现已经将错误改正,你看一下,以免我那个错误影响了你

i = 3 时
    c = s + s - 2 * '0'
       = 0 + 8 - 2 * '0'
       = 0 - '0' + 8 -'0'
       = 8
               
    s = c % 10 + '\0'
               = 8 % 10 + '\0'
               = 8 + '\0'
               = 8

1447391641 发表于 2020-12-5 14:05:50

风过无痕1989 发表于 2020-12-5 09:32
朋友,不好意思,这道题我当时没有考虑清楚,就给出了“字符数字不参与数字运算”的错误结论,现已经将错误 ...

没事
页: [1]
查看完整版本: 数组