入门计算题求求求助???急急急!!!
计算1-1/3+1/5-1/7...+1/101#include<stdio.h>
int main()
{
int a;
float sum=0.0;
for(a=1;a<=101;a+=2)
{
sum=sum+1/a;
a=-a;
}
printf("%f",sum);
return 0;
}
我这为什么运行没结果啊,要疯了,没人告诉我我可能觉都睡不着了。 #include<stdio.h>
int main(void)
{
int a , s ;
float sum ;
for(a = s = 1 , sum = 0.0 ; a <= 101 ; a +=2 , s = - s) sum += s * 1.0 / a ;
printf("%f\n" , sum) ;
}
编译、运行实况:
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
0.790300
D:\00.Excise\C> jackz007 发表于 2021-11-13 23:57
编译、运行实况:
请问我错在哪里了? 本帖最后由 jackz007 于 2021-11-14 00:14 编辑
宫宸 发表于 2021-11-14 00:02
请问我错在哪里了?
第一次循环 : a = 1,a = -a = -1,
第二次循环 : a = a + 2 = -1 + 2= 1 , a = -a = - 1
。。。。。。
每次循环 a 都是 -1 ,a <= 101 永远成立,程序陷入死循环。 宫宸 发表于 2021-11-14 00:02
请问我错在哪里了?
C/C++ 语言可以说是很直来直往的语言,你不声明,它就装傻,什么意思呢?
举例 1:
#include <stdio.h>
int main()
{
int a = 3; // 这里声明 a 是整数
for(int i = 1; i < 10; i++){ // i 也是整数
printf("%.1f\n", (float)(i/a)); // 这里声明 i 除 a 得浮点数(注:这里是结果变成浮点数,不是运行算法的之前就变成浮点数)
}
return 0;
}输出结果:0.0
0.0
1.0
1.0
1.0
2.0
2.0
2.0
3.0明显答案输出不对啊,这是因为你没有声明,所以 C/C++ "装傻"呗。
举例 2:#include <stdio.h>
int main()
{
int a = 3; // 这里声明 a 是整数
for(int i = 1; i < 10; i++){ // i 也是整数
printf("%.3f\n", ((float)i/a)); // 这里声明 i 是浮点数,然后除 a 得浮点数(注:这里是运行算法之前 i 就变成浮点数,结果变成浮点数)
}
return 0;
}输出结果:0.333
0.667
1.000
1.333
1.667
2.000
2.333
2.667
3.000这里你会发现,只要稍微改写一点点,输出结果大不相同(这里只是将 (float) 写在括号里面 i 的旁边) 本帖最后由 傻眼貓咪 于 2021-11-14 09:11 编辑
你的代码问题出现在无限循环,这是很多初学者都会犯的错。
只要你记住一点,就不再会犯这种错了,就是:只要有循环语句,不管是 while 或 for,一定要确保循环语句作用域里(循环语句里面)的代码必然能够在某个时候到达退出条件,如果一辈子到达不了退出条件,试问如何退出呢?
代码解法:#include <stdio.h>
int main()
{
int sign = 1; // 另外设 sign 变量用于存储正负值(为了不影响 a 值)
double sum;
for(int a = 1; a <= 101; a += 2){ // 这里自定退出循环条件: a > 101 便退出(所以以下代码必须确保一定会到达 a > 101 的情况,否则无限循环)
sum += 1.0/(sign*a); // 算法公式(注:这里的 1 改写成 1.0,浮点数除浮点数才能变成真正的浮点数)
sign = -sign; // 每次循环,改变 sign 正负值,不影响 a 值(a 值永远处于正整数)
}
printf("%lf", sum);
return 0;
}输出结果:0.790300
当 a = 102 时候
a = -a (a 变成 -102 负数)
这样 a 不会大于 101 #include<stdio.h>
int main()
{
int a,c;
c=1;
float sum;
for(a=1;a<=101;a+=2)
{
sum=sum+((float)c/a);
c=-c;
}
printf("%f",sum);
return 0;
}
页:
[1]