
C语言问题求助
C语言问题求助程序填空,该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6答案我知道是if(n<0)n=-n;和s=s+n%10就是想知道原...
C语言问题求助程序填空,该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6
答案我知道是 if(n<0)n=-n;和s=s+n%10 就是想知道原因和过程 展开
答案我知道是 if(n<0)n=-n;和s=s+n%10 就是想知道原因和过程 展开
2个回答
展开全部
#include <stdio.h>
/* 程序入口 */
int main (void )
{
int n, /* n中存放你输入的数 */
s; /* s中存放各位想加的和 */
/* 先从命令行读取一个整数,存入n */
scanf ("%d", &n);
/* 如果读取的整数是负数,负负得正,通过负号把它变成对应的相反数 */
/* 如果没有经过这一步处理,n仍然是负数,那么在取余数运算的时候余数是负数 */
/* 把负数加到和s里结果自然不正确 */
if (n < 0) n = -n;
/**
* 当n不等于0的时候,循环继续
* 因为n值会在循环体中被不停地改变,最终会变成0 */
*/
while (n != 0)
{
/* 通过取模运算,求得n除以10的余数,也就是n现在的个位数 */
/* 如 n = 327,那么n除以10的商是32,余数是个位数字7 */
s = s + n % 10;
/* 在C中,int整形变量除以int整形变量时,会把得到的结果的小数部分直接去掉,所以商是整数 */
/* 327除以10的准确结果是32.7,小数部分被去掉后,结果就是32 */
/* 再把这个商赋给n作为新的n值,这就使n去掉了原来的个位,百位和十位和向个位移动,变成了两位数 */
/* 327 / 10的结果是它原来的百位和十位上的数字组成的两位数32 */
n = n / 10;
/* 接着进行下一次循环,把n的个位数字拿出来加进总和s中 */
/* n又从两位数变成一位数 */
/* 下一次循环的时候,由于n % 10就是n自身 */
/* n / 10的结果是0,0作为n的新值,下一次n!=0判断的时候不成立,循环结束 */
}
printf ("%d\n", s);
return 0;
}
/* 如果有哪里不懂,欢迎追问。*/
/* 程序入口 */
int main (void )
{
int n, /* n中存放你输入的数 */
s; /* s中存放各位想加的和 */
/* 先从命令行读取一个整数,存入n */
scanf ("%d", &n);
/* 如果读取的整数是负数,负负得正,通过负号把它变成对应的相反数 */
/* 如果没有经过这一步处理,n仍然是负数,那么在取余数运算的时候余数是负数 */
/* 把负数加到和s里结果自然不正确 */
if (n < 0) n = -n;
/**
* 当n不等于0的时候,循环继续
* 因为n值会在循环体中被不停地改变,最终会变成0 */
*/
while (n != 0)
{
/* 通过取模运算,求得n除以10的余数,也就是n现在的个位数 */
/* 如 n = 327,那么n除以10的商是32,余数是个位数字7 */
s = s + n % 10;
/* 在C中,int整形变量除以int整形变量时,会把得到的结果的小数部分直接去掉,所以商是整数 */
/* 327除以10的准确结果是32.7,小数部分被去掉后,结果就是32 */
/* 再把这个商赋给n作为新的n值,这就使n去掉了原来的个位,百位和十位和向个位移动,变成了两位数 */
/* 327 / 10的结果是它原来的百位和十位上的数字组成的两位数32 */
n = n / 10;
/* 接着进行下一次循环,把n的个位数字拿出来加进总和s中 */
/* n又从两位数变成一位数 */
/* 下一次循环的时候,由于n % 10就是n自身 */
/* n / 10的结果是0,0作为n的新值,下一次n!=0判断的时候不成立,循环结束 */
}
printf ("%d\n", s);
return 0;
}
/* 如果有哪里不懂,欢迎追问。*/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询