欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c语言中求前N项和

程序员文章站 2022-05-22 12:38:20
...

功能:计算机对输入的一个数据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)语句时候运算结果如下图c语言中求前N项和
你会发现程序只进行了第一次的scanf输入,而没有进行第二次的输入,我在查阅相关资料后得知,如果在主程序中有两个scanf函数(这里可以引申为有多个输入函数时),在完成第一次的取数据时候,我们计算机只取走了一个数据,而没有取走我们输入的回车符,因此在后面的取值操作时,我们取的是数据缓冲区上次遗留的回车符,因此没有办法进行再次输入操作。因此我们在第一次输入数据结束后需要清空缓冲区的数据,才能进行新数据的输入。
fflush(stdin); //清空输入缓冲区c语言中求前N项和

相关标签: c程序 c语言