c语言简单题?

问题是
小瑜还在读幼儿园呢,现在的小孩子正够可怜的......
这不,老师给孩子们布置了一道连很多大人都不会的数学题目。且看:
给你一组有规律序列的前面5个整数,请你给出它后面跟着的5个整数,如:1,2,3,4,5,___,___,___,__,___。这是个等差数列, 后面应该是6,7,8,9,10,这倒简单。但现在老师告诉孩子们这串序列有可能是等差数列,等比数列或者是斐波那契数列。亲爱的,你能帮小瑜完成这个题目吗?
输入
输入有多组数据,每组数据占一行,有5个数字组成,每个数字之间隔一个空格,当5个数字都为0时输入结束。
输出
每组测试数据对应一个输出为这串数列的后面5个数字,每个数字之间隔一个空格。当输入的5个数字都为0时不用输出结果。
样例输入
1 2 3 4 5
1 2 4 8 16
1 2 3 5 8
0 0 0 0 0
样例输出
6 7 8 9 10
32 64 128 256 512
13 21 34 55 89

提示
用int可以满足精度
我是这样做的

#include<stdio.h>
int main()
{char a[11];
int i,d,q,n;
while(scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]),a[0]!=0||a[1]!=0||a[2]!=0||a[3]!=0||a[4]!=0)
{
if((a[0]+a[4]==2*a[2])&&(a[1]+a[3]==2*a[2]))
{
d=a[1]-a[0];
for(i=5;i<10;i++)
{
if(i>5)printf(" ");
a[i]=a[i-1]+d;
printf("%d",a[i]);
}
printf("\n");
}
else if((a[0]*a[4]==a[2]*a[2])&&(a[1]*a[3]==a[2]*a[2]))
{
q=a[1]/a[0];
for(i=5;i<10;i++)
{
if(i>5)printf(" ");
a[i]=a[i-1]*q;
printf("%d",a[i]);
}
printf("\n");
}
else
{for(i=5;i<10;i++)
{
if(i>5)printf(" ");
a[i]=a[i-1]+a[i-2];
printf("%d",a[i]);
}
printf("\n");
}
}
return 0;
}

#include<stdio.h>
int main()
{char a[11];
int i,d,q,n;
while(scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]),a[0]!=0||a[1]!=0||a[2]!=0||a[3]!=0||a[4]!=0)
{
if((a[0]+a[4]==2*a[2])&&(a[1]+a[3]==2*a[2]))
{
d=a[1]-a[0];
for(i=5;i<10;i++)
{
if(i>5)printf(" ");
a[i]=a[i-1]+d;
printf("%d",a[i]);
}
printf("\n");
}
else if((a[0]*a[4]==a[2]*a[2])&&(a[1]*a[3]==a[2]*a[2]))
{
q=a[1]/a[0];
for(i=5;i<10;i++)
{
if(i>5)printf(" ");
a[i]=a[i-1]*q;
printf("%d",a[i]);
}
printf("\n");
}
else
{for(i=5;i<10;i++)
{
if(i>5)printf(" ");
a[i]=a[i-1]+a[i-2];
printf("%d",a[i]);
}
printf("\n");
}
}
return 0;
}
等差和斐波那契数列这两种测试数据正确,但等比就出现问题了,如下图

等比情况为什么后面会出现负的,急,在线等,回答正确,立刻采纳~

第1个回答  2012-11-17
因为你定义的数组a[11]是有符号字符型的,char a[11]
字符型变量范围-128到127,所以64乘以2等于128溢出
定义成 int a[11],就行了
第2个回答  2012-11-17
将主函数的前两句改成:
int a[10]; //加上开始输入的数字一共就10个数
int i,d,q; //变量n没有用
上面出错是因为开始声明的是char a[11],在执行的时候会进行类型转换所以错了。追问

哦哦,恩恩,您说的对,谢谢诶了,一开始没想到~

本回答被提问者采纳
相似回答