c语言 求和1+1/2+1/3+...+1/n,但如果n是负数的话,需要重新输入

题目要求:
输入一个n,求1+1/2+...+1/n的和
如果n是负数,则输出“请输入一个正数:” 然后重新开始
最后输出为 “总和为...”

我主要不会第二部分。
我是这样写的,但总有error

#include <stdio.h>
int main()
{
float n, sum=0;
printf ("输入一个数字计算:\n");
scanf ("%f",&n);
if (n < 0)
{ printf(“请输入一个正数: ");
scanf("%f",&n);

for (int i=1; i<=n; i++){
sum = sum + 1/i;}
printf("最后的和是: %f",sum);

}}

第1个回答  推荐于2016-10-25
知道你的意思了,你的错误,要我指出来的话,再追问
给出我的代码
#include <stdio.h>
int main()
{
int i,n; //n要改为int型,因为在循环里面,有i<n的表达式,保持类型一致
float sum=0;
printf ("输入一个数字计算:\n");
scanf ("%f",&n);

while (n < 0)
{ printf("请输入一个正数: ");
scanf("%f",&n);
}

for ( i=1; i<=n; i++)
{
sum = sum + (float)1/i; //这里要强制类型转换,不然1/i 的结果为0
}
printf("最后的和是: %f",sum);
return 0; //要给出返回值,因为你的main函数是int型

}本回答被提问者采纳
第2个回答  2014-09-13
#include <stdio.h>
int main()
{
  float sum=0;
  int n;//严格要求自己,你该是整型
  printf ("输入一个数字计算:\n");
  scanf ("%d",&n);//对应修改为%d
  while(n < 0)//用while的意思是只要是负数就重输,if只能判断一次。
    { 
      printf(“请输入一个正数: ");
      scanf("%d",&n);
    }//while在这里结束
    
  for (int i=1; i<=n; i++){
    sum = sum + 1.0/i;}//之所以结果错误是因为1是整型,i也是整型,所以1/i是整数,导致结果不多,所以用1.0除才对。
    
   printf("最后的和是: %f",sum);

}

希望可以帮到你。

第3个回答  2014-09-13
bool flag = true;
while (flag)
{
printf("输入一个数字计算:\n");

scanf("%f", &n);

if (n<0)

{ printf("请输入一个正数:");}

else

flag = false;

//如需考虑n=0的情况你自己酌情处理

}

... //其余部分
第4个回答  2014-09-13
1+1/(n+1)
循环n-1 次,
要循环, 找循环语句

...1+1\/2+1\/3+……+1\/n,期中n由用户输入,如果n是负数,则sum为0,结果保...
不过计算总和时要注意不能使用int i; double sum=0; for(i=1;i<=n;i++)sum+=1\/i;这样的话因为C语言中两个int的商,仍是一个int。所以要使用sum+=1.0\/i;这样系统在计算时会自动进行类型转换为两个double再计算商的。#include<stdio.h>int main(){ int i,n; double sum=0; scan...

c语言编程出现输出-nan(ind),哪里错了,本来计算1-1\/2+1\/3...+1\/9...
结论是,当使用C语言编程计算1-1\/2+1\/3...+1\/9-1\/10时,可能会出现输出结果为-nan(ind)的情况。下面我们将分析代码并找出可能的问题。在C语言的程序中,函数suanfa(int n)用于计算一系列分数的和,然后在main函数中调用它并输出结果。问题可能出在while循环部分,特别是处理奇数项和偶数项时...

...输入错误了如何提示输入错误并实现要求重新输入
所以可以使用while()来执行里面的消除字符,但如果直接这样while(getchar())就会进入无限循环,所以可以让其接收一个终止条件,每次输入完都会按回车,那就让其接收'\\n'换行符终止自己的循环。

C语言编程:求1到1000的奇数和
使用for循环,定义一个变量n从1开始递增2,每次将n累加到sum变量中,直到n大于1000为止。使用递归函数,定义一个函数odd_sum(n),返回1到n之间的奇数和。如果n为偶数,则返回odd_sum(n-1);如果n为奇数,则返回odd_sum(n-1)+n;如果n为0或负数,则返回0。以下是使用while循环的示例代码:inclu...

c语言中怎么把一个数各位取出来相加
在主函数中,我们提示用户输入一个整数,并将其存储在num变量中。然后,我们调用sum_digits函数计算num的所有数字之和,并将结果输出到屏幕。需要注意的是,这个程序只能处理非负整数。如果你需要处理负数,你需要先将其转换为非负整数。♡♡ 有帮助到的话,麻烦采纳哦!♡♡...

C语言编程问题:求 1!+2!+3!+...+n!
把sum=sum+x;移到}后、x=1;前。int main(void){ int sum,n,x,t;scanf("%d",&n);for(sum=0,x=t=1;t<=n;sum+=x*=t++);printf("%d\\n",sum);return 0;}

C语言 用函数调用方法求1!+2!+3!+…+n!的和
{ int n;while(cin>>n){ long long sum=0,num=1;for(int i=1;i<=n;i++){ num*=i;sum+=num;} printf("%lld\\n",sum);} return 0;} printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另...

C语言循环题!编写一个程序,求s=1+(1+2)+(1+2+3)+...+(1+2+3+...+n...
int main(void){ int i,j,n;int item,s; \/\/此处数据类型定义错误;scanf("%d",&n);s=0; n=5;for(i=1;i<=n;i++){ item=0; \/\/item应该是从0开始;for(j=1;j<=i;j++) \/\/第二层循环应该小于等于i;item=item+j;s=s+item;} printf("%d\\n",s);return 0;} 图为原...

用c语言编程:计算s=1-1\/2+1\/3-1\/4+1\/5……+1\/m,其中m由输入决定_百度知 ...
Enter m(m>0)...\\nm="); scanf("%d",&m); if(m>0) break; printf("Error, redo: "); } for(s=0,i=1;i<=m;i++) s += i&1 ? 1.0\/i : -1.0\/i; printf("The result is %f\\n",s); return 0;} ...

关于C语言重新输入的问题
这个是因为getchar函数的问题。getchar会读入字符以及后面的回车,所以相当于一次性输入的两个字符,可以改为如下代码:include<stdio.h>int main(){char ch;ch = getchar();getchar();while (ch != 'a'&&ch != 'b'&&ch != 'c'&&ch != 'd'){printf("请重新输入:");ch = getchar(...

相似回答