一、
函数fun的功能是:不断从终端读入整数k,用变量a统计大于0的个数,用变量b来统计小于0的个数,当输入0时结束输入,并通过形参px和py把统计的数据传回主函数进行输出。
注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在fun()函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
void fun(int *px,int *py)
{
    int  ________;        // 【1】
    scanf("%d",&k);
    while (________)      // 【2】
    {
      if (k>0) a++;
      else b++;
      ________;        // 【3】
    }
    *px=a;  *py=b;
}
int main()
{
    int x,y;
    fun(&x,&y);
    printf("x=%d,y=%d\n",x,y);
    return 0;
}
参考答案:
    【1】a=0,b=0,k  【2】k!=0 (或k)  【3】scanf("%d",&k)
    解析:函数中有3个局部变量,且a和b需要赋初值0,因此,【1】处填写“a=0,b=0,k”。循环输入数据的结束条件为K==0,故【2】处填写“k!=0”。循环中处理了输入的数据后,需要再输入下一个数据,故【3】处填写“scanf("%d",&k)”。
二.
  请补充main()函数,该函数的功能是:输入两个正整数num1和num2,求这两个数的最大公约和最小公倍数。
  例如,若输入的两个正整数为12,24,则它们的最大公约数为12,最小公倍数为4。
  注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在main()函数的横线上填入所编写的若干表达式或语句。
  试题程序:
#include <stdio.h>
int main()
{
    int a,b,num1,num2,t;
    printf("\nInput two numbers\n");
    scanf("%d %d",&num1,&num2);
    a=num1;
    b=num2;
    while (________)        //1
    {
        t=________;        //2
        a=b;
        b=t;
    }
    printf("Greatest common divisor%d\n",a);
    printf("Least common multiple%d\n",________);    // 3
    return 0;
}
参考答案:
  【1】b!=0  【2】 a%b  【3】num1*num2/a
    解析:采用辗转相除法求两个整数a和b的最大公约数。显然t=a%b,因此【2】处填写“a%b”,由于程序中a=b,b=t,且最大公约数保存在a中,则结束条件为b==0,因此【1】处填写“b!=0”。【3】处填写求最小公倍数的式子“num1*num2/a”。
三、
请补充main()函数,该函数的功能是:如果数组arr的前一个元素比后一个元素小,则把它保存在数组bb中并输出。
例如,若数组中的元素为:“40,68,62,33,35,52,48,95,66,73”,则输出:“40,33,35,48,66”。
注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在main()函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
#define M 10
int main()
{
    int i,n=0;
    int arr[M]={40,68,62,33,35,52,48,95,66,73};
    int bb[M];
    for (i=0; i<________;i++)              //  1
      if (arr[i]<arr[i+1])
          ________;                     // 2
    printf("\n***displaybb***\n");
    for (i=0;i<n;i++)
        printf("bb[%d]=%2d ",________);    //3
    return 0;
}
参考答案:
    【1】M-1  【2】bb[n++]=arr[i]    【3】i,bb[i]
解析:由整个for循环可知,变量i为数组arr的下标,题目中要求取出前一个元素比后一个元素小的元素,所以只需要判断前M-1个元素即可。因此,【1】处填“M-1”;如果第i个元素比第i+1个元素小,将第i个元素放入数组bb中,因此,【2】处填“bb[n++]=arr[i]”。循环执行完后,要输出数组bb中的每一个元素的下标及元素值。因此,【3】处填“i,bb[i]”。
四、
函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。
例如,若输入:2019 10 1,则程序输出:2019年10月1日是该年的第274天。
注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在fun()函数的横线上填入所编写的若干表达式或语句。
#include <stdio.h>
int fun(int year,int month,int day)
{
    int table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int s=0,i;
    for (i=1;i<________; i++)                // 1
        s=s+________;                    // 2
    s=s+day;
    if ((________________) && month>2)    // 3
      s=s+1;
    return s;
}
int main()
{
    int year,month,day,days;
scanf("%d%d%d",&year,&month,&day);
days=fun(year,month,day);
    printf("%d%d%d日是该年第%d天。\n",year,month,day,days);
    return 0;
}
参考答案:
【1】month  【2】table[i]  【3】year%4==0 && year%100!=0 || year%400==0
解析:为计算当前日期是该年的第几天,需要先累计前month-1个月的总天数,故【1】处填写“month”,【2】处填写第i月的天数“table[i]”。如果是闰年,需要加1天,故【3】处填写闰年的判断条件“year%4==0 && year%100!=0 || year%400==0”。
五、
函数fun()的功能是:计算并输出给定10个数的方差。n个数的方差的计算公式为:
(其中,x为n个数据的平均值)
例如,给定的10个数为12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0,输出为S=8.877500。
注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在fun()函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
#include <math.h>
double fun(double x[],int n)
{
    int i;
    double fc,avg=0.0,sum=0.0,abs=0.0;
    for (i=0;i<n;i++)
        sum+=________;      // 1
    avg=sum/n;
    for (i=0;i<n;i++)
        abs+=________;      // 2
    fc=________;            // 3
    return fc;
}
int main()
{
    double x[10]={12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0};
    printf("s=%lf\n",fun(x,10));
    return 0;
}
参考答案:
1x[i]  2(x[i]-avg)*(x[i]-avg)  3c语言用递归函数求n的阶乘sqrt(abs/n)
    解析:由函数fun()可知,变量sum中存放n个数的和,因此,【1】处填“x[i]”;然后求其平方差,因此,【2】处填“ (x[i]-avg)*(x[i]-avg)”;后求n个数的方差,因此,【3】处填"sqrt(abs/n)”。
六、
  函数fun()的功能是求n的阶乘。
注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在fun()函数的横线上填入所编写的若干表达式或语句。
  试题程序:
#include <stdio.h>
long fun(int n)
{
    if (________n>1)                  // 【1】
        return n*fun(________n-1);    // 【2】
    else if (________n==1)            // 【3】
        return 1;
}
int main()
{
    int n=10;
    printf("%d!=%ld\n",n,fun(n));
    return 0;
}
  【1】n>1  【2】n-1  【3】n==1
  解析:本题求阶乘是由函数递归调用来实现的。阶乘公式为N!=N*(N-1)!,因此【1】处填“n>1”;由递归的性质可知【2】处填“n-1”;直到N=1时结束递归调用,因此【3】处填“n==l”。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。