国家二级C语言机试(操作题)模拟试卷221 (题后含答案及解析)
全部题型    2. 程序填空题 3. 程序修改题 4. 程序设计题
程序填空题
1. 给定程序中,函数fun的功能是:将形参S所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。    例如,形参s所指的字符串为:Abe@1x56*,程序执行后t所指字符数组中的字符串应为:A@156*。    注意:部分源程序在文件BLANK1.C中。    不得增行或删行,也不得更改程序的结构!    试题程序:1  #include<stdio.h>2  int fun(char*s,char*t)3  {int n=0;4    while(*s)5  {if(*s<97){6    /*********found*********/7    *(t+n)=【1】; n++;}8    /*********found*********/9  【2】;10    }11    *(t+n)=0;12    /********* found*********/13  return【3】;14  }15  main(  )16  {char s[81],t[81]; int n;17  printf(‘‘\nEnter a string:\n’’);18    gets(s);19  n=fun(s,t);20    printf(‘‘\nThere are%d letter which ASCII code is less than 97:%s\n’’, n,t);21  }
正确答案:(1)*s  (2)s++    (3)n
解析:填空1:判断s所指向的字符串中的字符符合条件时,将当前字符存放到t指向的字符串中,所以应填*s。填空2:判断完一个字符之后,将字符串的指针移到下一个位置,所以应填s++。填空3:题目要求函数要返回符合条件的字符个数n,所以应填n。 
程序修改题
2. 下列给定程序中,函数fun的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。要求t1和t2所指字符串的长度相同。    例如,当s所指字符串中的内容为“abcdab-fabc”,t1所指串中的内容为“ab”,t2所指子串中的内容为“99”时,结果在W所指的数组中的内容应为“abcdabf99c”。    请改正程序中的错误,使它能得出正确的结果。    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1  #include<conio.h>2  #include<stdio.h>3  #include<string.h>4  void fun(char * s,char t1,char t2,char w)5  {6    char* p,*r,*a;7    strcpy(w,s);8    /*********found*********/9    while(w)10    {11    p=w;12    r=t1;13    while(*r)14  /*********found*********/15    IF(*r==*p)16    {17    r++;18    p++;19    }20    else21    {22    break;23    }24    if(*r==\0)25    a=w;26    w++;27    }28    r=t2;29    whil
e(*r)30    {31    *a=*r;32    a++;33    r++;34    }35 }36  main(  )37  {38    char s[100],t1[100],t2[100],w[100];39    printf(‘‘\nPlease enter string s:’’);40    scanf(‘‘%s’’,s);41    printf(‘‘\nPlease enter substring tl:’’);42    scanf(‘‘%s’’,t1);43  print f(‘‘\nPlease enter substring t2:’’);44    scanf(‘‘%s’’,t2);45    if(strlen(t1)==strlen(t2))46    {47    fun(s,t1,t2,w);48    printf(‘‘\nThe result is:%s\n’’,w);49    }50    else51    {52    printf(‘‘\nError:strlen(t1)!=strlen(t2)\n’’);53    }54  }
正确答案:(1)while(*w)  (2)it(*r==*p)
解析:(1)此处要判断的是值的真假,而不是地址,所以改为while(*w)。(2)C语言中关键字区分大小写,只需运行程序,就可以根据错误提示到。 
程序设计题
3. 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,其功能是:把低于平均分的放入b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。    注意:部分源程序给出如下。    请勿改动主
函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。    试题程序:1  #include<stdio.h>2  #define N 83  typedef struct4  {5  char num[10];6  double s;7  } STREC;8  double fun(STREC*a, STREC*b,int * n)9  {1011  }12  void main(  )13  {14  STREC s[N]={{‘‘GA05’’,85}, {‘‘GA03’’,76},{‘‘GA02’’,69},{‘‘GA04’’,85},{‘‘GA01’’,91},{‘‘GA07’’,72},{‘‘GA08’’, 64},{‘‘GA06’’, 87}};15  STREC h[N];16    int i,n;17  double ave;18    ave=fun(s,h,&n);19  printf(‘‘The%d student data which is lower than %7.3f:\n’’, n , ave);20    for(i=0;i<n , i++)21    /*输出成绩低于平均值的学生记录*/22  printf(‘‘%s%4.1 f\n’’,h[i].num,h[i].s);23  printf(‘‘\n’’);24  }
正确答案:1  double fun(STREC  *a,STREC  *b,int *n)2  {3    int i,j=0;4    double av=0.0 ;5    for(i=0;i<N;i++)6    av=av+a[i].s;7    av=av/N;    /*求平均值*/8    for(i=0;i<N;i++)9    if(a[i].s<av)10    b[j++]=a[i];11  /*将低于平均值的学生记录存入结构体数组b中*/12    *n=j;/*指针传回低于平均值的学生人数*/13    return av;/*返回平均值*/14  }
解析:本题使用循环语句和条件判断语句来实现程序操作,第1个循环语句的作用是求出总分,然后求出平均分av。第2个循环的作用是将分数低于平均分的学生记录存人结构体数组b中。 
05网全部答案

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