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 次,
要循环, 找循环语句
相似回答