c语言中求前N项和

功能:计算机对输入的一个数据n进行前n项计算,然后计算机进行询问是继续输入数据进行一次计算还是停止计算。
程序:

#include <stdio.h>
int sum(int a);
int again_sum(char *w);
int main ()
{
 int a=0 ;
 char b[2];
 printf("请输入一个数n:\n"); 
 scanf("%d",&a);
 sum (a);               //输出前n项和采用了两中办法,一是再子程序中输出,二是下面的printf输出; 
 //printf ("前n项和为:%d\n",sum (a));//第一次计算完成。 
  fflush(stdin); 
 printf ("是否愿意再试一次:(Y/N)\n"); //我想继续算第二次。 
 scanf ("%c",b);                      //输入 Y或者N,存入b中 
 again_sum (&b[0]);                        //调用 下面的函数 
 return 0;
  
}
int sum(int a)
{
 int b=0;
 for (int i=0;i<=a;i++)
 {
  b+=i;
 }
// return b;
 printf ("前n项和为:%d\n",b);
}
int again_sum(char *w)
{
 if (*w=='Y')
 {
  int c,v=0;
  printf("请输入一个数n:\n"); 
  scanf("%d",&c);
  v=sum (c);
  //printf ("前n项和为:%d",v); 
 }
 else
 {
  printf("欢迎下次使用:");
  
 }

}

在这里是把第二个scanf输入内容输入到一个数组,在这里需要注意格式的使用,scanf中不可以用到寻址符号,如果是单个输入,则需要使用取址符号,如下程序:

#include <stdio.h>
int sum(int a);
int again_sum(char w);
int main ()
{
 int a=0 ;
 char b;
 printf("请输入一个数n:\n"); 
 scanf("%d",&a);
 sum (a);                     //输出前n项和采用了两中办法,一是再子程序中输出,二是下面的printf输出; 
 //printf ("前n项和为:%d\n",sum (a));//第一次计算完成。 
 fflush(stdin); 
 printf ("是否愿意再试一次:(Y/N)\n"); //我想继续算第二次。 
 scanf ("%c",&b);                       //输入 Y或者N,存入b中 
 again_sum (b);                        //调用 下面的函数 
 return 0;
  
}
int sum(int a)
{
 int b=0;
 int i;
 for ( i=0;i<=a;i++)
 {
  b+=i;
 }
// return b;
 printf ("前n项和为:%d\n",b);
}
int again_sum(char w)
{
 if (w=='Y')
 {
  int c,v=0;
  printf("请输入一个数n:\n"); 
  scanf("%d",&c);
  v=sum (c);
  //printf ("前n项和为:%d",v); 
 }
 else
 {
  printf("欢迎下次使用:");
  
 }

}

这里的程序还是好理解的,在编写程序时候出现了一个问题,就是在没有增添 fflush(stdin)语句时候运算结果如下图在没有 fflush(stdin); 时候运算结果
你会发现程序只进行了第一次的scanf输入,而没有进行第二次的输入,我在查阅相关资料后得知,如果在主程序中有两个scanf函数(这里可以引申为有多个输入函数时),在完成第一次的取数据时候,我们计算机只取走了一个数据,而没有取走我们输入的回车符,因此在后面的取值操作时,我们取的是数据缓冲区上次遗留的回车符,因此没有办法进行再次输入操作。因此我们在第一次输入数据结束后需要清空缓冲区的数据,才能进行新数据的输入。
fflush(stdin); //清空输入缓冲区改正之后的运行结果

猜你喜欢

转载自blog.csdn.net/qq_38324605/article/details/106484040