2017idea大奖:C语言数组简单问题!

来源:百度文库 编辑:高考问答 时间:2024/04/27 11:59:31
数组可以定义成长整型的吗?

谭浩强《C程序设计》第七章数组,一维数组举例一节,133页,用数组来处理求Fibonacci数列问题,程序只输出了前20个数,如果要输出数列的前40个数,我把程序中的20改成40,并把数组定义成长整型,程序如下:

#include<stdio.h>
void main()
{ int i;
long int f[40]={1,1};
for(i=2;i<40;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<40;i++)
{ if(i%4==0) printf("\n");
printf("%12d",f[i]);
}
printf("\n");
}

为什么结果不对呢?后20项的结果中有负数。
而该书第六章用循环求Fibonacci数列的前40项时,也是把变量定义成长整型。

你的输出语句有错误“printf("%12d",f[i]);”
你把原来程序里的int型改为long int ,忽略了printf语句的语法了。
“%d”和“%md"(m代表数字个数)是输出整形的数据的,输出的数值限制为:-32767---+32768,和整形int是统一。而输出长整形long int 要用“%ld”和“%mld”(m代表数字个数)的。
本程序只用把第九行的“printf("%12d",f[i]);”
改为“printf("%12ld",f[i]);”就可以了

最后的错误总结就是你用输出整形变量的语句格式输出长整形的数据了。因此才会有负数的结果。如果你的输出数值没有超过限制,也不会有负数显示的

输出格式不对
printf("%12d",f[i]);
改成
printf("%ld",f[i]);