第一套
给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(:圆面积公式为:2,在程序中定义的变量名要与公式的变量相同)
例如,输入圆的半径值:19.527,输出为:s=598.949991
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
double fun( double r)
{
    return 3.14159*1/2.0;
}
void main()
{
    double x;
    printf("Enter x: ");
    scanf("%lf",2);
    printf("s=%lf\n",fun(3));
}
c编程必背100题【参考答案】 (1)r*r      (2)&x      (3)x
【考点分析】 本题考查:圆面积计算公式*r*r;scanf( )函数的形式,其一般形式为"scanf("格式控制字符串",地址表列);",注意地址是由地址运算符"&"后跟变量名组成的;printf( )函数的形式,其一般形式为"printf("格式控制字符串",输出表列);";函数实参调用,函数作为另一个函数调用的实际参数出现。
【解题思路】
填空1:计算圆的面积,公式为:*r
填空2:scanf( )函数一般形式为scanf(格式控制,地址表列),因此填入&x
填空3:函数的实际参数是圆的半径x 
下列给定程序中,函数fun的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…f(n)的值。
例如,n5,函数值应为10.407143f(x)函数定义如下:
f(x)=   
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include  <stdlib.h>
#include  <conio.h>
#include  <stdio.h>
#include  <math.h>
/*************found**************/
f(double x)
{
if(x==0.0||x==2.0)
    return 0.0;
else if(x<0.0)
    return(x-1)/(x-2);
else
    return(x+1)/(x-2);
}
double fun(int n)
{
  int i;  double s=0.0,y;
  for(i=-n; i<=n;i++)
    { y=f(1.0*i); s+=y;}
/*************found**************/
  return s
}
void main()
{ system("CLS");
  printf("%f\n", fun(5));
}
【参考答案】
(1)  错误:f(double x)      正确:double f(double x)
(2)  错误:return s          正确:return s;
【考点分析】 本题考查:函数的定义,其一般形式为"类型标识符 函数名(形式参数表列)",其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。
【解题思路】
该程序的流程是,fun( )程序对f(n)项循环累加,并且采用条件选择语句计算函数f(x)的值。本题的错误在于未定义函数f(double x)的返回值类型。C语言规定,在未显式声明的情况下,函数返回值默认为int型。
编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。
S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)
例如,n的值为11,函数的值为1.833333
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
float fun(int  n)
{
}
void main()
{
  FILE *wf;
  int n;
  float s;
  system("CLS");
  printf("\nPlease enter N: ");
  scanf("%d",&n);
  s=fun(n);
  printf("The result is:%f\n " , s);
/******************************/
  wf=fopen("out.dat","w");
  fprintf (wf,"%f",fun(11));
  fclose(wf);
/*****************************/
}
【参考答案】
float fun(int n)
{
    int i,s1=0;  /*定义整型变量s1,表示分母*/
    float s=0.0;  /*定义单精度变量s,表示每一项*/
    for(i=1;i<=n;i++)    {
        s1=s1+i;    /*求每一项的分母*/ 
        s=s+1.0/s1;    /*求多项式的值*/ 
    }
    return s;
}
【考点分析】
本题考查:计算给定表达式的值,根据题意判断表达式为1n累加倒数之和。变量数据类型及强制转换操作。for循环语句,一般情况需要确定循环变量的取值范围。使用return语句完成函数值的返回。
【解题思路】
本题可以通过for循环语句来实现第1项到第n项的变化,然后计算各项的累加和。方法是先根据题目要求定义变量(注意该变量的数据类型),然后对其进行初始化操作,因为该变量用作累加器,所以初始值应为0(0.0,根据变量数据类型来确定),再通过for循环语句来完成累加过程。
本题中s1用来表示式中每一项的分母,它可以由前一项的分母加项数得到。注意:由于s1定义
成一个整型,所以在s=s+1.0/s1中不能把1.0写成1
【解题宝典】
此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。
第二套
请补充main函数,该函数的功能是:计算两个自然数nm(m<10000)之间所有数的和(nm从键盘输入)
例如,n=1,m=100,sum=5050;n=100,m=1000,sum=495550
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
    试题程序:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
    int n,m;
    long sum;
    1;
    system("CLS");
    printf("\nInput n,m\n");
    scanf("%d,%d",&n,&m);
    while(n<=m)
    {
        2;
        n++;
    }
    printf("sum=%3\n",sum);
}
【参考答案】 (1) sum=0  (2) sum+=n  (3) ld
【考点分析】 本题考查:变量初始化,需要注意该变量是累加器还是累乘器:printf( )函数,其一般形式为"printf("格式控制符",输出表列)"。其中,格式控制符用于指定输出格式,可由格式字符串和非格式字符串两种组成,格式字符串是以%开头的字符串,%后面跟有各种格式字符,
说明输出数据的类型、形式、长度、小数位数等,"%ld"表示按十进制长整型输出,非格式字符串在输出时原样照印,在显示中起提示作用。
【解题思路】
填空1:变量sum进行了类型声明,但没有进行初始化,而后面的程序用sum来存放最后的结果,所以要在使用前将sum初始化为0
填空2:通过while循环将自然数nm之间的数进行累加,结果存于sum中。
填空3:由于sum为长整型,所以标准输出函数printf( )中的格式控制符为"%ld"
下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值:
t=1+1/2+1/3+1/4+…+1/m
例如,若输入5,则应输出2.283333
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
double fun(int m)
{
  double t=1.0;
  int I;
  for(I=2;I<=m;I++)
/*************found**************/
      t+=1.0/k;
/*************found**************/
  return I;
}
void main()
{int m;
system("CLS");
printf("\nPlease enter 1integer number: ");
scanf("%d",&m);
printf("\nThe result is %1f\n", fun(m));
}
【参考答案】
(1)错误:t+=1.0/k;      正确:t+=1.0/I;
(2)错误:return I;        正确:return t;
【考点分析】
本题考查:for循环语句的循环条件,这类题目的一般解法是根据题意确定循环变量的取值范围;函数返回值,其一般形式为"return 表达式;",该语句的功能是计算表达式的值,并返回给主调函数。
【解题思路】
(1)该题目考查分母成等差数列递增的一个数学公式,我们先看循环条件for(I=2;I<=m;I++),i2开始递增到m,所以t的值应该是由1.0/i的值逐步循环叠加后的结果,而不是t+=1.0/k;