求C语言大神解释一下步奏!

如题所述

/* 第一部分 */
#include <stdio.h>

int main (void )
{
/* 声明三个整型变量: k, sign, m,并赋k值为0 */
int k = 0, sign, m;

/**
* 定义名为s的字符数组,
* 数组元素为:{'-', '1', '2', '3', '4', '5', '\0'}
*/
char s[] = "-12345";

/**
* 含义:如果字符数组s中的第k(0)号元素是 '+' 或 '-',就执行下一句
* 执行情况:因为字符数组s的第k(0)号元素是'-',所以这个if条件成立,会执行下一句
*/
if (s[k] == '+' || s[k] == '-')
/**
* 含义:首先判断字符数组的第0号元素是不是 '+'
* 如果是,就把值 1 赋给变量sign
* 否则,把值 -1 赋给变量 sign。
* 另外,在判断完字符以后,让k自增,
* k的值从0变成1
* 执行情况:因为字符数组s的第k(0)号元素不是 '+'
* 所以,sign被赋值-1
*/
sign = s[k++] == '+' ? 1: -1;追答

/* 第二部分 */
/**
* 注意,循环开始的时候,m = 0, k = 1
* for循环在每一次迭代开始时判断字符数组s中的第k号元素是不是数字字符'0'~'9',
* 如果符合条件,执行循环体,如果不符合,结束for循环
* 循环体中语句的含义:
* 每次迭代最后都会令k值加1
* ============
* 下面开始分析每一次迭代:
* 第一次:m = 0, k = 1, s[k]即s[1] = '1', m = 0 * 10 + '1' - '0' = 0 + 1 = 1, k = 2
* 第二次:m = 1, k = 2, s[k]即s[2] = '2', m = 1 * 10 + '2' - '0' = 10 + 2 = 12, k = 3
* 第三次:m = 12, k = 3, s[k]即s[3] = '3', m = 12 * 10 + '3' - '0' = 120 + 3 = 123, k = 4
* 第四次:m = 123, k = 4, s[k]即s[4] = '4', m = 123 * 10 + '4' - '0' = 1230 + 4 = 1234, k = 5
* 第五次:m = 1234, k = 5, s[k]即s[5] = '5', m = 1234 * 10 + '5' - '0' = 12340 + 5 = 12345, k = 6
* 第六次:m = 12345, k = 6, s[k]即s[6] = '\0', 因为'\0'不是数字字符,所以for循环在这里结束
*/
for (m = 0; s[k] >= '0' && s[k] <= '9'; k++)
m = m * 10 + s[k] - '0';

/**
* sign = -1, m = 12345
* 打印sign * m 的结果
* 最终输出:Result=-12345
*/
printf ("Result=%d\n", sign * m);

return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答