c语言高手进!!追高分!

来源:百度知道 编辑:UC知道 时间:2024/05/16 21:09:49
1.有以分数序列 2/1,3/2,5/8,13/8,21/3,...求出这个数列前20项之和
程序如下: #include <stdio.h>
main()
{
int a1,a2,i,a3;
float s;
a1=2;
a2=1;
s=0;
for(i=1;i<20;i++)
{
s+=(float)(a1)/a2;
a3=a1;
a1=a1+a2;
a2=a3;

}
printf("sum=%f\n",s);
}
问:为什么在 s+=(float)(a1)/a2;这里强制定义(a1/a2)结果就是错的呢?

2.1.将一个数组中的值按逆序重新存放。例如8,6,5,4,1改为1,4,5,6,8
程序如下#include <stdio.h>
main()
{
int a[5];
int i;
for(i=1;i<6;i++)
scanf("%d",&a[i]);

for(i=5;i>=0;i--)
printf("%d ",a[i]);
}
错在哪里?
各位大侠,第一个问题谢谢你们的解答,可第二个问题我们老师讲过,为了程序便于理解,可以选择浪费空间,也就是所a[0]可以不用,所以我才(i=1,i<6),况且(i=1,i<6)的确只有五个数啊!!!我昨天因为断电了,所以第二歌问题没有问完,不知道大家有没有运行过我的程序,就是结果是出的来的,也就是把数字都倒着排列了,可是在结果后面会出现一串数字,我想知道的是为什么会这样,该怎么修改这个程序,谢谢各位了!回答满意追加100分

如果不强制转换 就是整数除整数 其结果也是整数 这是C语言中除法的 规则 强之后 就可以带小数了
============================
#include <stdio.h>
main()
{
int a[5];
int i;
for(i=1;i<6;i++) //首先这里 数组是从0开始的所以改为for(i=0;i<5;i++)
scanf("%d",&a[i]);

for(i=5;i>=0;i--)//其次 你一共才5个数 0~5有六个数 换句话说你最后一个是a[4]不是a[5] 改成for(i=4;i>=0;i--)
printf("%d ",a[i]);
}
==================================
哪个多出来的一串数字是机器随机的 因为你在赋值时a[0]是空的 但是打印时却把他打出来了所以机器会随机附一个值给他 如果你想从一开始的话就改成
for(i=1;i<6;i++)
scanf("%d",&a[i]);

for(i=5;i>=1;i--)
printf("%d ",a[i]); 就好了~~~~

a1/a2结果是整型数,已经忽略了小数点后面的部分了,在转换成浮点型只是在小数点后面加了几个“0”。小数点后面的部分都被省去了结果当然是错误的了。

c语言的数组是从0开始的,int a[5],a数组是a[0],a[1],a[2],a[3],a[4],没有a[5],所以应该
main()
{
int a[5];
int i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);

for(i=4;i<=0;i--)
printf("%d ",a[i]);
}