问答题请根据以下各小题的要求设计C应用程序(包括界面和代码)。  下列给定的程序中,函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中。例如,输入的数为55 12 34,输出结果应当是:a=55.0,b=34.0,c=12.0。  请改正程序中的错误,使它能得到正确结果。  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。  试题程序如下:#include #include void fun(float *p,float *q,float *s){ float *

题目
问答题
请根据以下各小题的要求设计C应用程序(包括界面和代码)。  下列给定的程序中,函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中。例如,输入的数为55 12 34,输出结果应当是:a=55.0,b=34.0,c=12.0。  请改正程序中的错误,使它能得到正确结果。  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。  试题程序如下:#include #include void fun(float *p,float *q,float *s){ float *k; k = (float *)malloc(sizeof(float)); if(*p<*q) {  /**********found**********/  k=*p;*p=*q;*q=k; } /**********found**********/ if(*s<*p) {  /**********found**********/  k=*s; *s=*p; *p=k; } if(*q<*s) {  /**********found**********/  k=*q; *q=*s; *s=k; } free(k);}main(){ float a,b,c; printf(Input a b c: ); scanf(%f%f%f,&a,&b,&c); printf(a = %4.1f, b = %4.1f, c = %4.1f,a,b,c); fun(&a,&b,&c); printf(a = %4.1f, b = %4.1f, c = %4.1f,a,b,c);}  

相似考题
参考答案和解析
正确答案:

(1)错误:{k=*p;*p=*q;*q=k;}
正确:{*k=*p;* p=*q;*q=*k;}
(2)错误:if(*s<*p)
正确:if(*s>*p)
(3)错误:{k=*s;*s=*p;*p=k;}
正确:{*k=*8;*s=*p;*p=*k;}
(4)错误:{k=*q;*q=*s;*s=k;}
正确:{*k=*q;*q=*s;*s=*k;}
解析:

  错误1、3、4:函数定义了一个int型指针变量k作为交换的辅助变量,此时不能直接用k,应该用指针指向的变量*k。所以第1、3、4处错误都应把k改成*k。
  错误2:*p存储最大值,*s存储最小值,所以应该把q和s所指向的值与*p进行比较,如果比*p大则与*p交换,所以if(*s<*p)应改为if(*s>*p)。
更多“问答题请根据以下各小题的要求设计C应用程序(包括界面和代码)。  下列给定的程序中,函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中。例如,输入的数为55 12 34,输出结果应当是:a=55.0,b=34.0,c=12.0。  请改正程序中的错误,使它能得到正确结果。  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。  试题程序如下:#include #include void fun(float *p,float *q,float *s){ float *”相关问题
  • 第1题:

    下列给定程序中函数fun()的功能是:计算n!。例如,给 n输入5,则输出120.000000。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <stdio.h>

    include <conio.h>

    double fun (int n)

    { double result=l.0;

    /*************found**************/

    if n==0

    return 1.0;

    while (n>l&&n<170)

    /*************found**************/

    result *=n--

    return result;

    }

    main ( )

    { int n;

    printf ("Input N: ");

    scanf ( "%d" &n);

    printf ("\n\n%d!=%lf\n\n",n, fun(n));

    }


    正确答案:(1)错误:if n==0 正确:if(n==0) (2)错误:result*=n-- 正确:result*=n--;
    (1)错误:if n==0 正确:if(n==0) (2)错误:result*=n-- 正确:result*=n--; 解析:在做这道题之前,我们首先应该明白一个数学上的概念,一般判卷人员先要执行程序,如果结果正确,得满分,否则错一个扣分,再错再扣,本题考查5! 即5!=5×4×3×2×1=120,要求输出double型结果。

  • 第2题:

    下列给定程序中,函数fun()的功能是:根据整型形参n,计算如下公式的值。

    A1=1,A2=1/(1+A1),A3=1/(1+A2),…,An=(1/(1+A(n-1))

    例如,若p=10,则应输出0.617977。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动mah函数,不得增行或删行,也不得更改程序的蛄构.

    试题程序:

    include <conio.h>

    include <stdio.h>

    /**************found********************/

    iht fun(iht n)

    { float A=l;inti;

    /**************foudn********************/

    for(i=2;i<n;i++)

    A=1.0/(i+A);

    return A;

    }

    main ()

    { int n;

    clrscr ();

    printf("\nPlease enter n: ");

    $canf ("%d", &n);

    printf ("A%d=%lf\n", n, fun (n));

    }


    正确答案:(1)错误:int fun(int n) 正确:float fun(int n) (2)错误:for(i=2;in;i++) 正确:for(i=2;i=n;i++)
    (1)错误:int fun(int n) 正确:float fun(int n) (2)错误:for(i=2;in;i++) 正确:for(i=2;i=n;i++) 解析:该题中fun()函数的作用是计算数列前n项的和,而数列的组成方式是:第n项的分母是功口第n-1项的值,分子为 1,如果循环累加按for(i=2;in;i++)执行的话,当我们输入n=2的时候会是什么结果?循环会怎么执行呢?循环不能执行,但数学思路绝对正确,这就矛盾了,所以循环条件应该是for(i=2;in;i++)。

  • 第3题:

    给定程序MODll.C中fun函数的功能是:求出以下分数序列的前n项之和。

    和值通过函数值返回main函数。

    例如,若n=5,则应输出:8.391667。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)double fun(int n)(2)c=a;a+=b;b=c;
    (1)double fun(int n)(2)c=a;a+=b;b=c; 解析:本题中函数的功能是求出分数序列的前n项之和。首先根据题干中给出的公式推出每一项之间的关系,求出每一项的表达式,然后求得数列的和。每一项的分母是前一项的分子,分子是前一项分子和分母的和。

  • 第4题:

    下列给定程序中函数fun()的功能是计算1/n!的值。

    例如:给n输入5,则输出0.0083330

    请改正程序中的错误,使它能得到正确结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <stdio.h>

    include <conio.h>

    /******+****found*************/

    int fun(int n)

    {double result=1.0;

    if(n==0)

    return 1.0;

    while(n>1 && n<170)

    /**********found************/

    result *=n++;

    result=1/result;

    return result;

    }

    main()

    {

    int n;

    printf("Input N:");

    scanf("%d",&n);

    printf("\n1/%d!=%If\n",n,fun(n));

    }


    正确答案:(1)错误:int fun(int n) 正确:double fun(int n) (2)错误:result*=n++; 正确:result*=n--;
    (1)错误:int fun(int n) 正确:double fun(int n) (2)错误:result*=n++; 正确:result*=n--; 解析:错误1:函数的返回值为实型数据,所以函数的返回类型应为double。错误2:根据阶乘的概念,从n开始,每递减1的数相乘,直到1,因此此处n递减,而不是递增。

  • 第5题:

    给定程序MODll.C中函数fun的功能是:计算n!。

    例如,给n输入5,则输出120.000000。

    请改正程序中的错误,使程序能输出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)if (n==0) (2)result *=n--;
    (1)if (n==0) (2)result *=n--; 解析:本题中函数的功能是计算阶乘,其中,阶乘的计算公式分为参数n是1和大于1两种情况,例如,1的阶乘1!=1;5的阶乘5!=5×4×3×2×1。

  • 第6题:

    下列给定程序中,函数fun的功能是:从整数l0-55,查找能被3整除且有一位上的数值是5的数,把这些:故放在b所指的数组中,这些数的个数作为函数值返回。规定函数中al放位数,a2放十位数。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

    试题程序:


    正确答案:

  • 第7题:

    给定程序MODll.C中函数fun的功能是:找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。

    请改正函数fun中指定部位的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)k=i; (2)c=k%10;
    (1)k=i; (2)c=k%10; 解析:本题中函数的功能是找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中。分解三位数的正整数n的个位和十位数和百位,可用n%10求得个位数,n/10然后n%10求得十位数,百位数也可依此计算。

  • 第8题:

    给定程序MODll.C中函数fun的功能是:根据整型形参m的值,计算如下公式的值。

    例如,若m中的值为:5,则应输出:0.536389。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)for(i=2; i=m; i++)(2)y-=1.0/(i*i);
    (1)for(i=2; i=m; i++)(2)y-=1.0/(i*i); 解析:该程序功能是根据题目要求计算公式。从已给定源程序的main主函数开始入手,“printf("\nThe result is%lfin",fun(n));”语句中的fun(n)将参数n传给函数double fun(int m)中的m,实现公式的计算结果。

  • 第9题:

    给定程序MODll.C中函数fun的功能是:根据整型形参m,计算如下公式的值。

    例如,若m中的值为:5,则应输出:1.463611。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)for(i=2; i=m; i++)(2)y+=1.O/(i*i);
    (1)for(i=2; i=m; i++)(2)y+=1.O/(i*i); 解析:该题中函数功能是计算公式的值。其中,公式中涉及在循环中对各项的计算及累加求和。从已给定源程序的main主函数开始入手,“printf(〝\nThe result is%1f\n〞,fun(n));”语句中调用fun函数,计算公式的值。

  • 第10题:

    给定程序MODII.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。

    例如,输入的数为:55 12 34,输出结果应当是:a=55.0,b=34.0,c=12.0。

    请改正程序中的错误,使它能得出正确结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。


    正确答案:(1)f1oat k; (2)if(*a*c)
    (1)f1oat k; (2)if(*a*c) 解析:本题中函数的功能是把主函数中输入的3个数,最大的放在a中,最小的放在c中。对三个数进行两两比较,实现函数功能。

  • 第11题:

    下列给定程序中,函数proc()的功能是:根据整型形参n,计算如下公式的值。

    例如,若n=12,则应输出0.618026。

    请修改程序中的错误,使它能得出正确的结果。

    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

    试题程序:


    正确答案:

    (1)错误:intproc(intn)
    正确:floatproc(intn)
    (2)错误:for(i=2;i<n;i++)
    正确:for(i=2;i<=n;i++)
    【解析】由主函数中的调用以及函数proc()的返回值可知,函数proc()的返回值类型应为float型数据。因此,“intproc(intn)”应改为“floatproc(intn)”;由题目中所给公式可知,循环中应该包含n的值,因此,“for(i=2;i<n;i++)”应改为“for(i=2;i<=n;i++)”。

  • 第12题:

    下列给定程序中,函数fun的功能是:根据整形参m的值,计算如下公式的值。

    例如,若m中的值为5,则应输出0.536389。

    请改正程序中的错误,使它能得出正确的结果。

    注意:部分源程序在文件MODll.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

    试题程序:


    正确答案:
    【参考答案】(1)for(i=2;i<=m;i++)(2)Y一=1.0/(i*i);【解题思路】(1)使用for循环计算公式,必须计算到m,所以应改为foKi=2;i<=m;i++)。(2)在除法运算中,如果除数和被除数都是整数,那么所除结果也是整数,因此应改为Y一=1.0/(i*i)。

  • 第13题:

    下列给定程序中,函数fun()的功能是::求k!(k<13),所有阶乘的值作为函数值返回。例如:若k=10,则应输出3628800。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更

    改程序的结构。

    试题程序:

    include <conio.h>

    include <stdio.h>

    long fun(int k)

    {

    /*************found**************/

    if k>0

    return (k* fun (k-l));

    /*************found**************/

    else if (k=0)

    return 1;

    }

    main ( )

    {int k=10;

    clrscr ();

    print, ("%d!=%1d\n ", k, fun (k));

    }


    正确答案:(1)错误:if k>0 正确:if(k>0) (2)错误:else if(k=O) 正确:else if(k==O)
    (1)错误:if k>0 正确:if(k>0) (2)错误:else if(k=O) 正确:else if(k==O) 解析:由数学知识我们可以知道,0和1的阶乘都等于1,if k>O中是一个简单的语法错误,if后面没有“()”说明,在 else if(k=0)中,程序想说明的是“如果k值为0,则函数返回1”,转换成c语言语句就是“else if(k==0)return 1”。

  • 第14题:

    给定程序MODll.C中函数fun的功能是:根据整型形参n,计算如下公式的值。

    例如,若n=10,则应输出:0.617977。

    请改正程序中的语法错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)float fun(int n)(2)for(i=2;i<=n;i++)
    (1)float fun(int n)(2)for(i=2;i<=n;i++) 解析:本题中函数的功能是计算公式的值。其中,每一项的分母是前一项的值加1。

  • 第15题:

    下列给定程序中,函数fun()的功能是:给定n个实数,输出平均值,并统计平均值以上(含平均值)的实数个数。例如, n=8时,输入193.199,195.673,195.757,196.051,196.092, 196.596,196.579,196.763,所得平均值为195.838745,在平均值以上的实数个数应为5。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <conio.h>

    include <stdio.h>

    int fun(float x[], int n)

    /***************found*******************/

    iht j, c=0;float xa=0.0;

    for (j=0; j<n;.j++)

    xa+=x[j]/n;

    printf("ave=%f\n",xa);

    for (j=0; j<n;j++)

    if(x[j]>=xa)

    c++;

    returnc;

    }

    main()

    {float x[l00]={ 193.199,195.673,195.757,

    196.051,196.092,196.596,

    196.579,196.763};

    clrscr ();

    printf("%d\n",fun (x,8));

    }


    正确答案:错误:缺{ 正确:加{
    错误:缺{ 正确:加{ 解析:本题我们可以拆分成两个简单的c语言试题:
    (1)求出n个数的平均值。
    (2)将大于平均值的数字个数计算出来。可利用循环和条件选择语句,对x数组进行遍历,若某个值大于平均成绩,则将该元素累加计入c中。我们先来摘清楚一个简单的求10个整数平均值的例子。
    #include "stdio.h"
    void main()
    {
    int i,a[10],s=0;
    float aver=0.0;
    for (i=0;i<10;i++)
    {
    scanf("%d",&a[i]);
    s=s+i;
    }
    aver=s/10.0;
    printf ("这十整数中的平均值为:%f",aver);
    }
    其实,n个整数求和也就是10个整数的拓展,没什么难的!

  • 第16题:

    下列给定程序中,函数fun()的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止。

    π/4≈1-1/3+1/5-1/7+…

    例如,程序运行后,输入0.0001,则程序输出3.1414。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <math.h>

    include <stdio.h>

    float fun(float num)

    { int s;

    float n,t, pi;

    t=1 ;pi=0; n=1; s=1;

    /**************found***************/

    while (t>=num)

    {

    pi=pi+ t;

    n=n+2;

    s=-s;

    /**************found**************/

    t=s% n;

    }

    pi=pi*4;

    return pi;

    }

    main ()

    { float n1, n2;

    clrscr ();

    printf ("Enter a float number: ");

    scanf ("%f", &n1);

    n2=fun (n1);

    print f (" %6.4 f\n ", n2);

    }


    正确答案:(1)错误:while(t>=num) 正确:while (fabs(t)>=num) (2)错误;t=s %n; 正确:t=s/n;
    (1)错误:while(t>=num) 正确:while (fabs(t)>=num) (2)错误;t=s %n; 正确:t=s/n; 解析:函数fun()中while 语句的含义是,当新的一项大于给定参数时,循环累计,计算s的值。而题目要求是最后一项的绝对值小于给定参数,因此循环条件应当为while (fabs(t)>=num),而非while (t>=num)。

  • 第17题:

    给定程序中,函数fun()的功能是:使数组中的元素的值缩小5倍。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include<stdio.h>

    include<conio.h>

    float m[10];

    /*************found**************/

    int fun (void)

    {

    int j;

    printf("In subfunc after calling\n");

    for(j=O;j<lO;j++)

    {

    ;

    /*************found**************/

    print ("%f ",m[j]%5);

    }

    }

    main()

    {

    int i;

    printf ("In main before calling\n");

    for (i=0;i<10;i++)

    {

    m[i]=i+20;

    printf("%f ",m[i]);

    }

    fun();

    printf("\nIn main after calling\n");

    for(i=O; i<10;i++)

    printf("%f ",m[i]/5);

    }


    正确答案:(1)错误:int fun(void) 正确:void fun(void) (2) 错误:printf("%f"m[j]%5); 正确:printf("%f"m[j]/5);
    (1)错误:int fun(void) 正确:void fun(void) (2) 错误:printf("%f",m[j]%5); 正确:printf("%f",m[j]/5); 解析:错误1:函数fun()没有返回值,所以定义函数类型为void。错误2:此处考查的是除法运算符和取余运算符的区别。

  • 第18题:

    给定程序MODll.C中函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。

    例如,若输入2 |若输入4

    则输出: |则输出:

    1 2 |1 2 3 4

    2 4 |2 4 6 8

    |3 6 9 12

    |4 8 12 16

    请改正程序函数中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)void fun(int a[][M] int m)(2)a[j][k]=(k+1)*(j+1);
    (1)void fun(int a[][M], int m)(2)a[j][k]=(k+1)*(j+1); 解析:本题中函数的功能是根据形参m的值(2≤m≤9),在m行m列的二维数组中存放有规律的数据,规律就是,i和j代表二维数组的行和列,则a啪[k]=(k+1)*(j+1)。

  • 第19题:

    给定程序MODll.C中函数fun的功能是:求三个数的最小公倍数。

    例如,给主函数中的变量x1、x2、x3分别输入15 112,则输出结果应当是:330。

    请改正程序中的错误,使它能得出正确结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。


    正确答案:(1)int fun(int x int y int z)(2)return j;
    (1)int fun(int x, int y, int z)(2)return j; 解析:本题中函数的功能是求三个数的最小公倍数。fun函数辛接收的值能同时被x、y、z除尽的最小数就是它们的最小公倍数。

  • 第20题:

    给定程序MODll.C中函数fun的功能是:根据以下公式求π值,并作为函数值返回。

    例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.141480。

    请改正程序中的错误,使它能得出正确结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。


    正确答案:(1)t=1; (2)return(2*s);
    (1)t=1; (2)return(2*s); 解析:该题中函数功能是根据公式计算π值。从已给定源程序的main.主函数开始入手,通过键盘输入制定精度,然后通过“printf“\neps=%lf,Pi=%lf\n\n”,x,fun(x));”语句来调用fun函数。

  • 第21题:

    下列给定程序中,函数fun的功能是按以下递归公式求函数值。

    例如:当给n输入5时,函数值为240;当给n输入3时,函数值为60。

    请改正程序中的错误,使它能得到正确结果。

    注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <stdio.h>

    /*************found****+*******/

    fun(int n);

    {

    int c;

    /*************found********+*****/

    if(n=1)

    c=15;

    else

    c=fun(n-1)*2;

    return(c);

    }

    main()

    {

    int n;

    printf("Enter n:");

    scanf("%d",&n);

    printf("The result:%d\n\n",fun(n));

    }


    正确答案:(1)错误:fun(int n); 正确:fun(int n) (2)错误:if(n=1) 正确:if(n==1)
    (1)错误:fun(int n); 正确:fun(int n) (2)错误:if(n=1) 正确:if(n==1) 解析:错误1:该行是函数的首部,不是一条语句,因此不能以分号结束。错误2:if垢面应该紧跟一个条件判断表达式,若写成“if(n=1)”,则说明该表达式的值永远为真,也就是说这个条件永远成立,没有递归执行。

  • 第22题:

    给定程序MODll.C中函数fun的功能是:统计字符串中各元音字母(即:A、E、I、O、U)的个数。注意:字母不分大、小写。

    例如:若输入:THIs is aboot,则输出应该是:1、0、2、2、0。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)num[k]=0; (2)switch(*s)
    (1)num[k]=0; (2)switch(*s) 解析:本题中函数的功能是统计字符串中各元音字母(即A、E、I、O、U)的个数。其中,本题在while循环中采用switch-case条件判断字符串中的每一个字符并进行统计。

  • 第23题:

    给定程序MODll.C中函数fun的功能是:求出以下分数序列的前n项之和。和值通过函数值返回到main函数。

    例如,若n=5,则应输出:8.391667。

    请改正程序中的错误,使它能计算出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)double fun(int n) (2)s=s+(double)a/b;
    (1)double fun(int n) (2)s=s+(double)a/b; 解析:本题中函数的功能是求出分数序列的前n项之和。首先根据题干中给出的公式推出每一项之间的关系,求出每一项的表达式,然后求得数列的和。每一项的分母是前一项的分子,分子是前一项分子和分母的和。