第46套

1.程序填空题

给定程序的功能是调用函数fun建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile3.dat的二进制文件中。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include  #include  #define  N 5typedef  struct{     int  num;   char  name[10];   char  tel[10];}STYPE;void check();/**********found**********/int fun(___1___ *std){   /**********found**********/   ___2___  *fp;        int  i;   if((fp=fopen("myfile3.dat","wb"))==NULL)      return (0);   printf("\nOutput data to file !\n");   for(i=0; i<N; i++)   /**********found**********/      fwrite(&std[i], sizeof(STYPE), 1, _3_);   fclose(fp);   return (1);}int main(){     STYPE s[10]={{1,"aaa","1111"},{1,"bbb","2222"},        {1,"ccc","3333"}, {1,"ddd","4444"},        {1,"eee","5555"}};   int  k;   k=fun(s);   if (k==1)   {  printf("Succeed!");  check(); }   else      printf("Fail!");   return 0;}void check(){     FILE  *fp;        int  i;   STYPE  s[10];   if((fp=fopen("myfile3.dat","rb"))==NULL)   { printf("Fail !!\n"); exit(0); }   printf("\nRead file and output to screen :\n");   printf("\n   num    name      tel\n");   for(i=0; i<N; i++)   {        fread(&s[i],sizeof(STYPE),1, fp);      printf("%6d %s %s\n",s[i].num,s[i].name,s[i].tel);   }   fclose(fp);}

2.程序修改题

给定程序中,函数fun的功能是:从低位开始取出长整数s中奇数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。

例如,若s=7654321,则t=7531。

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

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

#include /************found************/void fun (long  s, long t){       long   sl=10;    *t = s % 10;    while ( s > 0)    {           s = s/100;        *t = s%10 * sl + *t;    /************found************/        sl = sl*100;    }}int main(){      long s, t;    printf("\nPlease enter s:");     scanf("%ld", &s);    fun(s, &t);    printf("The result is: %ld\n", t);    return 0;}

3.程序设计题

编写函数fun,它的功能是:将两个两位正整数a、b合并形成一个整数存放在c中,合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,将b数的十位和个位数依次放在c数的千位和十位上。

例如,当a=45,b=12时,调用该函数后,c=1524。

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

#include void NONO(void);void fun(int a, int b, long *c){}int main(){    int a,b; long c;    printf("Input a b:");    scanf("%d%d", &a, &b);    fun(a, b, &c);    printf("The result is: %d\n", c);    NONO();    return 0;}void NONO(void){/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */    FILE *rf, *wf ;    int i, a,b ;    long c ;    rf = fopen("in.dat", "r") ;    wf = fopen("out.dat","w") ;    for(i = 0 ; i < 10 ; i++)    {       fscanf(rf, "%d,%d", &a, &b) ;       fun(a, b, &c) ;       fprintf(wf, "a=%d,b=%d,c=%ld\n", a, b, c) ;    }    fclose(rf) ;    fclose(wf) ;}

1.(1)STYPE   (2)FILE   (3)fp2void fun (long  s, long *t)    sl = sl*10;3void fun(int a, int b, long *c)     {           *c=1000*(b/10)+100*(a%10)+10*(b%10)+a/10;      }

第46套参考答案第47套

1.程序填空题

给定程序中,人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回;若指定编号不存在,返回数据中的编号为空串。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include #include <string.h>#define  N  8typedef  struct{    char  num[10];  int  year,month,day ;}STU;/**********found**********/___1___ fun(STU  *std, char  *num){    int  i;         STU  a={"",9999,99,99};  for (i=0; i<N; i++)  /**********found**********/    if (strcmp(___2___,num)==0)  /**********found**********/       return (___3___);  return  a;}int main(){    STU std[N]={{"111",1984,2,15},{"222",1983,9,21},     {"333",1984,9,1},{"444",1983,7,15},     {"555",1984,9,28},{"666",1983,11,15},     {"777",1983,6,22},{"888",1984,8,19}};  STU  p;           char  n[10]="666";  p=fun(std,n);  if(p.num[0]==0)       printf("\nNot found !\n");  else  {       printf("\nSucceed !\n  ");    printf("%s %d-%d-%d\n",p.num,p.year,p.month,p.day);  }  return 0;}

2.程序修改题

给定程序中,函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。

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

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

#include #include <string.h>#define MAXLINE 20void fun(char *pstr[6]){       int  i, j ;    char *p ;    for (i = 0 ; i < 5 ; i++)     {    /**************found**************/      for (j=i+1, j<6, j++)      {        if(strcmp(*(pstr+i), *(pstr+j))>0)        {            p = *(pstr + i) ;    /**************found**************/            *(pstr + i) = pstr + j ;            *(pstr + j) = p ;        }      }    }}int main(){       int i ;    char *pstr[6], str[6][MAXLINE] ;    for(i = 0; i < 6 ; i++) pstr[i] = str[i] ;    printf("\nEnter 6 string(1 string at each line):\n");    for(i=0 ; i<6; i++) scanf("%s", pstr[i]);    fun(pstr) ;    printf("The strings after sorting:\n") ;    for (i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]);    return 0;}

3.程序设计题

编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。

例如,若输入字符串:123412132,输入字符1,则输出3。

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

#include #include <string.h>#define  M 81void NONO(void);int fun(char *ss, char c){}int main(){   char  a[M], ch;   printf("\nPlease enter a string:");   gets(a);   printf("\nPlease enter a char:");   ch = getchar();   printf("\nThe number of the char is: %d\n",fun(a,ch));   NONO();   return 0;}void NONO(void){/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/   int i ;   FILE *rf, *wf ;   char a[M], b[M], ch ;   rf = fopen("in.dat","r") ;   wf = fopen("out.dat","w") ;   for(i = 0 ; i < 10 ; i++)   {     fscanf(rf, "%s", a) ;     fscanf(rf, "%s", b) ;     ch = *b ;     fprintf(wf, "%c=%d\n", ch, fun(a, ch)) ;   }   fclose(rf) ;   fclose(wf) ;}

1.(1)STU   (2)std[i].num   (3)std[i]2for (j=i+1; j<6 ; j++)    *(pstr + i) = *(pstr + j) ;3int fun(char *ss, char c)     {         int i,n=0;         for (i=0;ss[i]!='\0';i++)             if (ss[i]==c) n++;         return n;      }

第47套参考答案第48套

1.程序填空题

给定程序中,函数fun的功能是:计算出带头结点的单向链表中各结点数据域之和作为函数值返回。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include #include #define  N  8typedef  struct list{      int  data;    struct list  *next;} SLIST;SLIST *creatlist(int  *);void outlist(SLIST  *);int fun(SLIST  *h){      SLIST  *p;             int  s=0;    p=h->next;    while(p)    {    /**********found**********/       s+= p->___1___;    /**********found**********/       p=p->___2___;    }    return s;}int main(){      SLIST  *head;    int  a[N]={12,87,45,32,91,16,20,48};    head=creatlist(a);        outlist(head);    /**********found**********/    printf("\nsum=%d\n", fun(___3___));    return 0;}SLIST *creatlist(int  a[]){      SLIST  *h,*p,*q;            int  i;    h=p=(SLIST *)malloc(sizeof(SLIST));    for(i=0; i<N; i++)    {         q=(SLIST *)malloc(sizeof(SLIST));       q->data=a[i];  p->next=q;  p=q;    }    p->next=0;    return  h;}void outlist(SLIST  *h){      SLIST  *p;    p=h->next;    if (p==NULL)  printf("The list is NULL!\n");    else    {          printf("\nHead  ");        do {               printf("->%d", p->data);             p=p->next;          } while(p!=NULL);        printf("->End\n");    }}

2.程序修改题

给定程序中,函数fun的功能是:根据形参m,计算

S=1+1/2+1/3+…+1/m

例如,若输入5,则应输出2.283333。

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

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

#include double fun(int m){    double t = 1.0;    int i;    for( i = 2; i <= m; i++ )    /**********found**********/       t +=  1/i;    /**********found**********/    return t}int main(){    int m;    printf( "\nPlease enter 1 integer number:" );    scanf(  "%d", &m );    printf( "\nThe result is %lf\n", fun( m ) );    return 0;}

3.程序设计题

编写函数fun,它的功能是:统计一个长度为2的字符串substr在另一个字符串sub中出现的次数。

例如,假定输入的字符串为:asd asasdfg asd as zx67 asd mklo,子字符串为as,则应输出6。

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

#include #include <string.h>int fun(char *str,char *substr){}int main(){  char str[81],substr[3];  int n;  printf("输入主字符串: ");  gets(str);  printf("输入子字符串: ");  gets(substr);  puts(str);  puts(substr);  n=fun(str,substr);  printf("n=%d\n",n);  NONO();  return 0;}void NONO(void){/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */  char str[81],substr[3], ch;  int n,len, i = 0;  FILE *rf, *wf ;  rf = fopen("in.dat","r") ;  wf = fopen("out.dat","w") ;  while(i < 5)  {    fgets(str, 80, rf) ;    fgets(substr, 10, rf) ;    len = strlen(substr) - 1 ;    ch = substr[len] ;    if(ch == '\n' || ch == 0x1a) substr[len] = 0 ;    n=fun(str,substr);    fprintf(wf, "%d\n", n) ;    i++ ;  }  fclose(rf) ;  fclose(wf) ;}

1.(1)data   (2)next   (3)head2. t +=  1.0/i;    return t;3int fun(char *str,char *substr)     {          int i,n=0;          for (i=0;str[i]!='\0' && str[i+1]!='\0';i++)             if (str[i]==substr[0] && str[i+1]==substr[1])          n++;          return n;      }

第48套参考答案第49套

1.程序填空题

给定程序中,函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。

例如,若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a所指数组中的数据为:4、2、6、8,函数返回值为4。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include #define  N  9int fun(int a[], int n){      int  i,j;    j = 0;    for (i=0; i<n; i++)    /**********found**********/      if (___1___== 0)       {    /**********found**********/        ___2___ = a[i]; j++;      }    /**********found**********/    return ___3___;}int  main(){      int  b[N]={9,1,4,2,3,6,5,8,7}, i, n;    printf("\nThe original data  :\n");    for (i=0; i<N; i++)  printf("%4d ", b[i]);    printf("\n");    n = fun(b, N);    printf("\nThe number of even  :%d\n", n);    printf("\nThe even  :\n");    for (i=0; i<n; i++)  printf("%4d ", b[i]);    printf("\n");    return 0;}

2.程序修改题

给定程序中,函数fun的功能是:根据形参m,计算

t=1-1/2-1/3-…-1/m

例如,若主函数中输入5,则应输出-0.283333。

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

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

#include double fun(int m){    /**********found**********/    double t;    int i;    for( i = 2; i <= m; i++ )    /**********found**********/       t = 1.0-1 /i;    return t;}int main(){    int m ;    printf( "\nPlease enter 1 integer numbers:\n" );    scanf(  "%d", &m);    printf( "\nThe result is %f\n", fun(m));    return 0;}

3.程序设计题

编写函数fun,它的功能是:删除字符串中的所有空格。

例如,主函数中输入“asd af aa z 67”,则输出为“asdafaaz67”。

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

#include void NONO(void);void fun(char *str){}int main(){    char str[81];    printf("Input a string:") ;    gets(str);    puts(str);    fun(str);    printf("*** str: %s\n",str);    NONO();    return 0;}void NONO(void){/* 请在此函数内打开文件,输入调试数据,调用 fun 函数,   输出数据,关闭文件。 */    char str[81];    int n = 0;    FILE *rf, *wf ;    rf = fopen("in.dat","r") ;    wf = fopen("out.dat","w") ;    while(n < 10)    {       fgets(str, 80, rf);       fun(str);       fprintf(wf, "%s", str) ;       n++ ;    }    fclose(rf) ;    fclose(wf) ;}

1.(1)a[i]%22)a[j]   (3)j2double t=1.0;   t = t-1.0/i;3void fun(char *str)     {         int i,j;         for (i=0,j=0; str[i]!='\0';i++)             if (str[i]!=' ') str[j++]=str[i];         str[j]='\0';     }

第49套参考答案第50套

1.程序填空题

给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中。

例如,若输入字符串“abcdef35adgh3kjsdf7”,则输出结果为4。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include void fun(char  *s, int  *t){      int i, n;    n=0;    /**********found**********/    for(i=0; ___1___; i++)    /**********found**********/      if(s[i]>='0'&&s[i]<= ___2___ ) n++;    /**********found**********/    ___3___ ;}int main(){      char  s[80]="abcdef35adgh3kjsdf7";    int t;    printf("\nThe original string is :  %s\n",s);    fun(s,&t);    printf("\nThe result is :  %d\n",t);    return 0;}

2.程序修改题

给定程序中,函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。

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

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

#include #include void  fun(int  a,int  *b,int  *c){    int  i,j,d,y;    for(i=3;i<=a/2;i=i+2)    {    /**************found**************/       Y=1;       for(j=2;j<=sqrt((double)i);j++)         if (i%j==0)  y=0;       if (y==1)       {    /**************found**************/          d==a-i;          for(j=2;j<=sqrt((double)d);j++)             if (d%j==0)  y=0;          if (y==1)          {  *b=i;  *c=d; break; }       }    }}int main(){    int  a,b,c;    do    {        printf("\nInput a:  ");        scanf("%d",&a);    } while(a%2 || a==2);    fun(a,&b,&c);    printf("\n\n%d = %d + %d\n",a,b,c);    return 0;}

3.程序编写题

编写函数fun,它的功能是:计算n(包括n)以内能被5或9整除的所有自然数的倒数之和。

例如,在主函数中输入n为20,则输出为:s=0.583333。

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

#include void NONO(void);double fun(int  n){}int main(){    int  n;    double  s;    printf("\nInput n:  ");    scanf("%d",&n);    s=fun(n);    printf("\n\ns=%f\n",s);    NONO();    return 0;}void NONO(void){/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */    FILE *rf, *wf ;    int n, i ;    double s ;    rf = fopen("in.dat","r") ;    wf = fopen("out.dat","w") ;    for(i = 0 ; i < 10 ; i++)    {      fscanf(rf, "%d", &n) ;      s = fun(n) ;      fprintf(wf, "%f\n", s) ;    }    fclose(rf) ;    fclose(wf) ;}

1.(1)s[i]!='\0'2'9'3)*t=n2. y=1;    d=a-i;3double fun(int  n)     {          double s=0.0;          int i;          for (i=1;i<=n;i++)              if (i%5==0 || i%9==0)                  s+=1.0/i;          return s;      }

第50套参考答案