#include <stdio.h> int main() { int a=2, n=1,sum=1; while (n<=50) { n=n 1; sum=sum*a; a=a 2; } printf("%d %d\n",n,a); printf("%d\n",sum); return 0; }
操作结果如下:n=51,a=102,sum=0
错误原因:计算结果sum过大,使得int爆了
解决方法:将sum初始值搞成double类型的
#include <stdio.h> int main() { double sum=1; int a=2, n=1; while (n<=50) { n=n 1; sum=sum*a; a=a 2; } printf("%d %d\n",n,a); printf("%lf\n",sum); return 0; }
值得注意的是改变数据类型(例:本文int变double类型时)也应改变相应的格式字符
以下是常用格式字符
1.%d格式符用于输出十进制整数
2.%c用于输出字符的格式符。
3.%s格式符,用来输出一个字符串。
4.%o格式符,以八进制整型输出整数。
5.%×格式符,以16进制数的形式输出整数。
6.%u用于输出的格式符unsigned型数据,即无符号数,以十进制输出。
7.%f用于输出实数(包括单双精度)和小数输出的格式符。
8.%e格式符,以指数形式输出实数。
9.%g格式符,用于输出实数,根据值的大小自动选择f格式或e格式(选择宽度小的输出),不输出无意义的零。
10.%p用于输出变量地址的格式符。
11.%d,输出整形数据的实际长度。
12.%md,m为指定输出字段的宽度。
13.%ld,输出长整形数据。ldld输出两个12位的长整数