问答题请根据以下各小题的要求设计C应用程序(包括界面和代码)。 下列给定程序中,函数fun()的功能是:将n个无序整数从小到大排序。请改正程序指定部位的错误,使它能得到正确结果。注意:不要改动函数main(),不得增行或删行,也不得更改程序的结构。 /**********code.c**********/ #include void fun(int n, int *a) {int i,j,p,t;for(j=0;ja[i])/**********found**********/t=i;if(p!=j){

题目
问答题
请根据以下各小题的要求设计C应用程序(包括界面和代码)。 下列给定程序中,函数fun()的功能是:将n个无序整数从小到大排序。请改正程序指定部位的错误,使它能得到正确结果。   注意:   不要改动函数main(),不得增行或删行,也不得更改程序的结构。 /**********code.c**********/ #include  void fun(int n, int *a) {  int i,j,p,t;  for(j=0;ja[i])     /**********found**********/     t=i;   if(p!=j)   {    t=a[j];    a[j]=a[p];    a[p]=t;   }  } } void putarr(int n, int *z) {  int i;  for(i=1;i<=n;i++,z++)  {   printf(%4d,*z);   if(!(i%10))    printf();  }  printf(); } void main() {  int aa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;  printf(Before sorting %d numbers:,n);  putarr(n,aa);  fun(n,aa);  printf(After sorting %d numbers:,n);  putarr(n,aa); } /**********-code.c**********/

相似考题
更多“请根据以下各小题的要求设计C应用程序(包括界面和代码)。 下列给定程序中,函数fun()的功能是:将n个无序整数从小到大”相关问题
  • 第1题:

    请编写函数void fun (int x,int pp[],int *n),它的功能是求出能整除x且不是奇数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。

    例如,若x中的值为24,则有6个数符合要求,它们是2, 4, 6, 8, 12, 24。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    void fun(int x,int PP[],int *n)

    {

    }

    main ()

    {

    int x,aa[1000],n,i;

    clrscr() ;

    printf("\nPlease enter an integer number:

    \n ") ;

    scanf("%d",&X);

    fun(x,aa,&n);

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

    printf("%d",aa[i]);

    printf("\n");

    }


    正确答案:void fun (int x int pp[] int *n) { int i j=0 for(i=2;i=x;i=i+2) /*i的初始值为2步长为2确保i为偶数*/ if(x%i==0) /*将能整除x的数存入数细pp中*/ pp[j++]=i *n=j /*传回满足条件的数的个数*/ }
    void fun (int x, int pp[], int *n) { int i, j=0 for(i=2;i=x;i=i+2) /*i的初始值为2,步长为2,确保i为偶数*/ if(x%i==0) /*将能整除x的数存入数细pp中*/ pp[j++]=i *n=j /*传回满足条件的数的个数*/ } 解析:本题题干信息是;能整除x且不是奇数的所有整数。循环语句中i从2开始且每次增2,所以i始终是偶数。

  • 第2题:

    下列给定程序中,函数fun()的功能是:计算整数n的阶乘。

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

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

    试题程序:

    include <stdio.h>

    double fun(int n)

    {

    double result=l.0;

    whil (n>l&&n<170)

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

    result*=--n;

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

    return;

    main()

    {int. n;

    clrscr();

    printf("Enter an integer: ");

    scanf("%d",&n);

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

    }


    正确答案:(1)错误:result*=--n; 正确:result*=n--; (2)错误:return; 正确:return result;
    (1)错误:result*=--n; 正确:result*=n--; (2)错误:return; 正确:return result; 解析:该题采用循环语句计算n的阶乘。当n大于1且小于170时,令result与n相乘,同时n自动减1,循环至n=2(n=1时无需相乘):注意:o和1的阶乘都等于1,可用条件语句和循环语句实现上述功能。

  • 第3题:

    下列给定程序中,函数fun()的功能是:判断一个整数m是否是素数,若是返回l,否则返回0。在main()函数中,若fun()返回1则输出YES,若fun()返回0则输出NO!

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

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

    试题程序:

    include <conio.h>

    include <stdio.h>

    int fun(int m)

    { int k=2;

    while (k<=m&&(m%k))

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

    k++

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

    if(m=k)

    return 1;

    else return O;

    }

    main ( )

    { iht n;

    clrscr ();

    printf("\nPlease enter n: ");

    scanf ("%d", &n);

    if (fun (n)) printf ("YES\n");

    else printf ("NO! \n");

    }


    正确答案:(1)错误:k++ 正确:k++ (2)错误:if(m=k) 正确:if(m==k)
    (1)错误:k++ 正确:k++ (2)错误:if(m=k) 正确:if(m==k) 解析:函数fun()的功能是判断m是否为素数:m从2开始作为除数,并对m取余,若不存在一个数使得余数为0,则m为素数,程序的错误在于if(m=k)语句中的逻辑表达式写成了赋值表达式。

  • 第4题:

    程序Cmody012.c中,函数fun(intn)的功能是:根据参数n,计算大于10的最小n个能被3整除的正整数的倒数之和。请改正错程序中的错误。例如:


    /**/if((i>10)&&(i%3==0))/**/
    /**/y+=1.0/i;/**/

  • 第5题:

    请编写一个函数fun(),它的功能是计算并输出给定整数n的所有因子(不包括1与自身)的平方和(规定n的值不大于100)。

    例如:主函数从键盘给输入n的值为56,则输出为 sum=1113。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <stdio.h>

    long fun(int n)

    {

    }

    main()

    {

    int n;

    long sum;

    printf("Input n:");

    scanf("%d",&n);

    sum=fun(n);

    printf("sum=%ld\n",sum);

    }


    正确答案:long fun(int n) { int i; long s=0; for(i=2;i=n-1;i++) /*从2~n-1中找n的所有因子*/ if(n%i==0) s+=i*i; /*将所有因子求平方加*/ return s; /将平方和返回*/ }
    long fun(int n) { int i; long s=0; for(i=2;i=n-1;i++) /*从2~n-1中找n的所有因子*/ if(n%i==0) s+=i*i; /*将所有因子求平方加*/ return s; /将平方和返回*/ } 解析:本题的解题思路是用n逐个去除以2到n-1之间的所有数,如果n能被除尽,则把所得到的一个因子的平方累加到s中去。

  • 第6题:

    下列给定程序中,函数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)”,则说明该表达式的值永远为真,也就是说这个条件永远成立,没有递归执行。

  • 第7题:

    请编写函数fun,参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。注意:部分源程序存在PROGl.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun鸽花括号中填入所缩写的若干语句。给定源程序:


    正确答案:
    【考点分析】主要考察考生对临时变量的初始化及使用,以及如何比较多个数的大小【解题思路】通过初始化指定最大值,最小值,再使用当前的最值与剩下的值比较,若比最大值大,修改最大值;若比最小值小,修改最小值。

  • 第8题:

    阅读以下问题说明、C 程序和函数,将解答填入答题纸的对应栏内。
    【问题 1】
    分析下面的C 程序,指出错误代码(或运行异常代码)所在的行号。
    【C 程序】

    【问题 2】
    函数inputArr(int a[], int n)的功能是输入一组整数(输入0或输入的整数个数达到n时结束)存入数组 a,并返回实际输入的整数个数。函数 inputArr 可以成功编译。但测试函数调用inputArr后,发现运行结果不正确。
    请指出错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行,使之符合上述设计意图。
    【C 函数】


    答案:
    解析:
    【问题1】
    5,或arrChar="test"
    7,或*P='0';
    【问题2】

    【解析】

    本题考查 C 程序编写和调试中常见错误的识别和改正。
    【问题1】在C语言中,指针表示内存单元的地址,指针变量可用于存储指针类 型的值,即内存单元的地址值。变量的值在程序运行过程中允许修改,而常量则不允许修改。可以令指针指向一个变量或常量,但若指针指向一个常量,则不允许通过指针修改该常量。
    第 5 行代码有错,即对数组名arrChar的赋值处理是错误的。在 C语言中,数组名是表示数组空间首地址的指针常量,程序中不允许对常量赋值。
    第 7行代码有错,在第 6行中,通过 p = "testing"使指针变量指向了一个字符串常量,此后可以再令指针 p指向其他字符或字符串,但不能通过指针修改字符串常量的内容。
    【问题2】该函数中出现的错误是编写 C程序时的常见错误。scanf 是 C标准库函数中的格式化输入函数,其原型如下:

    int scanf(char *format ,...);

    使用时,第一个实参是格式控制串,之后的实参是地址1,地址 2,…
    在本题中,要求以十进制整数格式输入一个整数并存入 a[k] ,数组元素a[k]实质上一个整型变量,必须用"&"求得 a[k]的地址作为实参调用 scanf 函数,因此,第 4行出错,正确代码应为"scanf("%d&a[k]);"。
    C程序中将相等运算符"="误用为赋值运算符"="也是常见的一个错误,由于"="也是合法的运算符并且 C语言中用 0 和非 0来表示逻辑假和逻辑真,因此在应产生逻辑值的地方产生了其他数值也可以,因此该错误通常只能用人工检查和排除。第 6 行的正确代码应为"if (k==n)break;"。
    在该程序中,结束循环的一个条件是k等于n,另一个条件是输入的整数为0。另 外,do-whi1e的循环条件为真(非0)时要继续循环,因此,循环条件应该是判断输入的值不等于 0。观察循环体中与数组元素有关的部分,如下所示:

    scanf("%d",&a[k]);

  • 第9题:

    问答题
    请根据以下各小题的要求设计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)。

  • 第10题:

    问答题
    请编写函数fun(),该函数的功能是:计算并输出给定整数n的所有因子(不包括1和自身)之和。规定n的值不大于1000。例如,在主函数中从键盘给n输入的值为856,则输出为:sum=763。  注意:部分源程序给出如下。  请勿改动主函数main()和其他函数中的任何内容,仅在fun()函数的花括号中填入所编写的若干语句。  试题程序如下:/**********code.c**********/#include int fun(int n){}void main(){ int n,sum; printf(Input n: ); scanf(%d,&n); sum=fun(n); printf(sum=%d,sum);}

    正确答案:

    int fun(int n)
    {
    int s=0,i;
    for(i=2;i<=n-1;i++)
    if(n%i==0)
    s+=i;
    return s;
    }
    解析:

      本题的设计思路是:①遍历从2到n-1的所有整数;②用条件语句找出能被n整除的整数i,并累加求和;③用return语句返回因子的和。

  • 第11题:

    问答题
    请根据以下各小题的要求设计C应用程序(包括界面和代码)。  请编写函数fun(),它的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依次类推,把100岁(含100岁)以上年龄的人数放在d[10]中。结果在主函数中输出。  注意:部分源程序给出如下。  请勿改动主函数main()和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。  试题程序如下:#include #define N 50#define M 11void fun(int *a, int *b){}double rnd(){ static int t=29,c=217,m=1024,r=0; r= (r*t+c)%m; return ((double) r/m);}main (){ int age[N],i,d[M]; for(i=0; i

    正确答案:

    void fun(int *a, int *b)
    {
    int i,j;
    for (j=0; j<N; j++)
    b[j]=0;
    for (i=0; i<N; i++)
    {
    switch (a[i]/10)
    {
    case 0:b[0]++; break;
    case 1:b[1]++; break;
    case 2:b[2]++; break;
    case 3:b[3]++; break;
    case 4:b[4]++; break;
    case 5:b[5]++; break;
    case 6:b[6]++; break;
    case 7:b[7]++; break;
    case 8:b[8]++; break;
    case 9:b[9]++; break;
    default:b[10]++; break;
    }
    }
    }
    解析: 本题的关键是使用条件语句和选择语句统计各年龄段的人数。设计思路是:①使用循环语句对存储人数的形参数组b赋初值0;②利用循环语句遍历所有人的年龄;③利用选择语句统计各年龄段的人数。

  • 第12题:

    问答题
    请编写一个函数fun,它的功能是:将一个表示正整数的数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“1234”,则函数把它转换为整数值1234。函数fun中给出的语句仅供参考。  注意:部分源程序存在文件PROG1.C文件中。  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。/**********code.c**********/#include #include long fun(char *p){ int i,len;/* len为串长*/ long x=0; len=strlen(p); /*以下完成数字字符串转换为数字,注意字符’0’不是数字0*/   return x;}void main()  { char s[6]; long n; printf(Enter a tring:); gets(s); n = fun(s); printf(%ld,n);}

    正确答案:

    int flag=1;
    i=0;
    if(*p=='-')/*p表示负数,置flag值为-1*/
    {
    p++;
    i++;
    flag= -1;
    }
    else if(*p=='+')/*p表示正数,置flag值为1*/
    {
    p++;
    i++;
    }
    for(;i<len;i++)
    {
    x=x*10+*p-'0';/*将字符串转换成相应的整数*/
    p++;
    }
    x = x*flag;
    解析:
    if()语句的作用是判断该字符串应当为正数还是负数。注意:*p是一个字符(如'9'、'4'),并不是一个数,要将其转成相应的数字需令其减去'0' (不是'\0'),即*p-'0'就得到*p这个字符的相应数字,如'0'-'0'=0、'8'-'0'=8等。

  • 第13题:

    下列给定程序中fun()函数的功能是:将n个无序整数从小到大排序。

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

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

    试题程序:

    include <conio.h>

    include <stdio.h>

    include <stdlib.h>

    fun(int n, int *a)

    { int i,j,p,t;

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

    { P=j;

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

    for(i=j+l;i<n-1;i++)

    if (a[p]>a[i])

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

    t=i;

    if (p!=j)

    {t=a[j];a[j]=a[p];a[p]=t;}

    }

    }

    putarr( iht n,int *z)

    {int i;

    for (i=l;i<=n;i++,z++)

    { printf("%4d",*z);

    if (!(i%10)) printf("\n");

    } printf ("\n");

    }

    main ()

    {int aa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;

    clrscr();

    printf("\n\nBefore sorting %d numbers:\n",n); putarr(n,aa);

    fun(n,aa);

    printf("\nAfter sorting %d numbers:\n",n);putarr(n,aa);

    }


    正确答案:(1)错误:for(i=j+1;in-1;i++) 正确:for(i=j+1;in;i++) (2)错误:t=i; 正确:p=i;
    (1)错误:for(i=j+1;in-1;i++) 正确:for(i=j+1;in;i++) (2)错误:t=i; 正确:p=i; 解析:该程序是对n个数实现从小到大的排序,该题中先是找小输入整数的最小项,置于指针第1个元素的位置:再找出第2个元素至尾元素的最小项,置于第2个元素的位置;之后顺次处理后读元素。

  • 第14题:

    给定程序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项之和。首先根据题干中给出的公式推出每一项之间的关系,求出每一项的表达式,然后求得数列的和。每一项的分母是前一项的分子,分子是前一项分子和分母的和。

  • 第15题:

    请编写一个函数fun(),它的功能是将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。

    例如,若输入字符串“-1234”,则函数把它转换为整数值 -1234。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <stdio.h>

    include <string.h>

    long fun(char *p)

    {

    }

    main ( )

    {

    char s[6];

    long n;

    printf("Enter a string:\n");

    gets(s);

    n=fun(s);

    printf("%ld\n",n);

    }


    正确答案:long fun (char *p) { long n=0; int flag=1; if(*p=='-') /*负数时置flag为-1*/ {p++;flag=-1;} else if(*p=='+') /*正数时置flag为1*/ p++; while(*p!='\0') {n=n*10+*p-'0'; /*将字符串转成相应的整数*/ p++; } return n*flag; }
    long fun (char *p) { long n=0; int flag=1; if(*p=='-') /*负数时置flag为-1*/ {p++;flag=-1;} else if(*p=='+') /*正数时置flag为1*/ p++; while(*p!='\0') {n=n*10+*p-'0'; /*将字符串转成相应的整数*/ p++; } return n*flag; } 解析:if()的作用是判断它是正数还是负数。while()循环的作用是将字符串转成相应的整数。注意*p是一个字符如'9', '4',并不是一个数,要将其转成相应的数字必须令其减去'0'(不是'\0'),即*p-'0'就得到*p这个字符的相应数字。如'0'-'0'=0, '8'-'0'=8等。必须在程序的前面加#includestdlib.h>,函数atol()的作用是将字符串p转成长整型数,它是一个库函数。

  • 第16题:

    请编写一个函数fun(),它的功能是求出一个正整数的所有因子。例如,若输入72, 则程序应该输出:72=2*2*2*3*3。

    注意:部分源程序已存在文件PROC14。CPP中。

    请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句。

    文件PROC14.cpp的内容如下:

    //PROC14. cpp

    include <iostream>

    using namespace std;

    void fun(int number);

    int main ( )

    {

    int n;

    cout<<"Please enter a number \n";

    cin>>n;

    cout<<n<<"=";

    fun (n);

    return 0;

    }

    void fun(int number)

    {

    //* * * * * * *

    }


    正确答案:

  • 第17题:

    给定程序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求得十位数,百位数也可依此计算。

  • 第18题:

    给定程序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项之和。首先根据题干中给出的公式推出每一项之间的关系,求出每一项的表达式,然后求得数列的和。每一项的分母是前一项的分子,分子是前一项分子和分母的和。

  • 第19题:

    下列给定程序是建立一个带头结点的单向链表,并用随 机函数为各结点赋值。函数fun的功能是将单向链表结点 (不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。

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

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

    试题程序:


    正确答案:
    【参考答案】(1)while(P)或while(P!=NULL)(2)P=P一>next;【解题思路】(1)判断当前指针P指向的结点是否存在,若存在则对该结点数据域进行判断操作,而不是判断P指针的指针域是否为空。(2)判断结束后指针指向下一个结点。

  • 第20题:

    问答题
    请根据以下各小题的要求设计C应用程序(包括界面和代码)。   请补充main函数,该函数的功能是:先以只写方式打开文件“out52.dat”,再把字符串str中的字符保存到这个磁盘文件中。   注意:部分源程序给出如下。   请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。   试题程序如下: #include  #define N 80 main() {  FILE*fp;  int i=0;  char ch;  char str[N]=I'm a student!;  if((fp=fopen(①______))==NULL)  {   printf(cannot open out52.dat);   exit(0);  }  while(str[i])  {   ch=str[i];   ②______;   putchar(ch);   i++;  }  ③______; }

    正确答案:

    ①out52.dat,w
    ②fputc(ch,fp)
    ③fclose(fp)
    解析:

      填空1:根据题目的要求需要将文件以“只写”的方式打开,注意文件名是一个字符串,必须加双引号,打开方式也要加双引号。
      填空2:while循环的功能是把字符串中的字符保存在磁盘文件中,把单个字符写入文件型指针变量fp所指的文件的表达式是fputc(ch,fp)。
      填空3:一定要注意对文件操作完后要关闭文件,所以此处应该填fclose(fp)。

  • 第21题:

    问答题
    请根据以下各小题的要求设计C应用程序(包括界面和代码)。  给定程序中函数fun()的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。  例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。  请改正程序中的错误,使它能得到正确结果。  注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。  试题程序如下:#include #define SIZE 20int fun(double *s, double *w){ int k,i; double sum; for(k=2,i=0;i

    正确答案:

    (1)错误:sun=0.0
    正确:sum=0.0
    (2)错误:if(i+1%5==0)
    正确:if((i+1)%5==0)
    解析:

      错误1:由题目程序的其他部分可以知道,此处变量名sun书写错误,应为sum。
      错误2:由C语言的运算符优先级的定义顺序可以知道:由于%的优先级比+高,所以必须加上括号,因此改为:if((i+1)%5==0)。

  • 第22题:

    问答题
    请根据以下各小题的要求设计C应用程序(包括界面和代码)。   请编写函数fun(),它的功能是:将3行4列矩阵x乘以4行3列矩阵y,结果放在3行3列矩阵xy中。矩阵相乘的基本方法是:矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘的和。   注意:部分源程序给出如下。   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。   试题程序如下: #include  #include  void fun(int a[3][4],int b[4][3],int ab[3][3]) { } main() {  int x[3][4] = {{1,0,1,1}, {2,1,0,1}, {1,2,0,3}};  int y[4][3] = {{1,1,1}, {0,0,0}, {2,1,1}, {1,1,3}};  int xy[3][3] = {0},i,j;  fun(x,y,xy);  printf(a × b = ab:(3,3):);  for(i=0;i<3;i++)  {   for(j=0;j<3;j++)    printf(%d,xy[i][j]);   printf();  } }

    正确答案:

    void fun(int a[3][4],int b[4][3],int ab[3][3])
    {
    int j,k,l;
    for(k=0;k<3;k++)
    for(l=0;l<3;l++)
    for(j=0;j<4;j++)
    ab[k][l]+=a[k][j]*b[j][l];
    }
    解析: 本题首先要明确矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘再相加的和。因此,每个元素的求解是循环控制来实现的,即ab[k][l]+=a[k][j]*b[j][l],矩阵ab的每个元素的表示可用一个二重循环,整个函数是一个三重循环的嵌套。

  • 第23题:

    问答题
    给定程序MODI1.C中函数fun的功能是计算“n!”。  例如,n为5,则输出120.000000。  请改正程序中的错误,使程序能输出正确的结果。  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!  给定源程序:#include double fun(int n){ double result=1.0; /*********found*********/ if n==0  return 1.0; while(n>1&&n<170)  /*********found*********/  result *=n-- return result;}main(){ int n; printf(Input N:); scanf(%d,&n); printf(%d!=%lf,n,fun(n));}

    正确答案:

    (1)错误:if n==0
    正确:if(n==0)
    (2)错误:result *=n—
    正确:result*=n--;或{result*=n;n--;}
    解析:

      错误1:这里是一个简单的格式错误,if条件应该加括号。
      错误2:格式错误,C语言中以分号表示一条语句的结束。故在result*=n—后添加分号。