网站首页 语言 会计 电脑 医学 资格证 职场 文艺体育 范文
当前位置:书香门第 > 计算机 > C语言

2017年计算机等级二级C语言上机考前预测题

栏目: C语言 / 发布于: / 人气:1.76W
2017年计算机等级二级C语言上机考前预测题
  学习是要持之以恒的一件事,坚持就是胜利!下面是小编整理的2017年计算机等级二级C语言上机考前预测题,希望对大家有用,更多消息请关注应届毕业生网。  一、程序填空题  请补充函数proc(),该函数的功能是建立一个带头结点的单向链表并输出到文件“"和屏幕上,各结点的值为对应的下标,链表的结点数及输出的文件名作为参数传人。  注意:部分源程序给出如下。  请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。  试题程序:  #include  #include  #include  typedef struct ss  {  int data;  struct SS*next;  }NODE;  void proc(int n,char*filename)  {  NODE*h,*p,*S;  FILE*pf;  int i:  h=p=(NODE*)malloc(sizeof(N()DE));  h->data=0;  for(i=1;i   {  s=(N()DE*)malloc(sizeof(N()DE));  s>data= 【1】 ;  【2】 ;  p= 【3】 ;  }  P->newt=NULL;  if((pf=fopen(filename,"W"))==NULL)  {  printf("Can not open !");  exit(0);  }  P=h;  {printf(pf,"n***THE LIST***n");  printf("n***THE LIST***n");  while(p)  {  fprintf(pf,"%3d",P->data):  printf("%3d",p->data);  if(p>next!=NULL)  {  fprintf(pf,"->"):  printf(" >"):  }  p=p->next;  }  fprintf(pf,"n"):  printf("n"):  fclose(pf);  p=h;  while(p)  {  s=p:  p=p- >next;  free(s):  }  }  void main()  {  char*filename- "out dat":  int n;  system("CLS"):  printf("nlnput n:");  scanf("%d",&n);  proc(n,filename);}  二、程序改错题  下列给定程序中,proe()函数的功能是:根据形参n,计算下列公式的`值:  t=1-1/2+1/3-1/4+…+(-1)(n+1)/n  例如,若输入6,则应输出0.616667。  请修改程序中的错误,使它能得到正确结果。  注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。  试题程序:  #include  #include  #include  //****found****  int proc(int n)  {  double t=1.0,j=1.0;  int i;  //****found****  for(i=1:i   {j=-1*j;t十=j/i;}  return t;  }  void main()  {  int n;  system("CLS"):  printf("nPlease enter 1 integer number:");scanf("%d",&n);printf("nThe result is%1fn",proc(n));}  三、程序设计题  请编写函数proc(),其功能是:计算并输出F列多项式的值。  S=1+1/(1+2)十1/(1+2+3)+…+1/(1+2+3+…m)  例如,若主函数从键盘给m输入20后,则输出为S=1.904762。  注意:部分源程序给出如下。  请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。  试题程序:  #include  double proc(int m)  {  }  void main()  {  int m;  double s;  printf("nInput m:");  scanf("%d",&m);  s=proc(m):  printf("nns=%fnn",s);  }  上机考试试题答案与解析  一、程序填空题  【1】i【2】p->next=S【3】p->next  【解析】s->data指向节点S的值,其下标为i,题目中要求各节点的值为对应的下标,因此,【1】处填“i”。函数的功能是建立一个带头节点的单向链表,因此每生成一个节点上一个节点的next指针指向该结点。由程序可知,指针p一直都指向上一个结点,因此,【2】处填“p->next=S”。每生成一个节点,P指向下一个节点,因此,【3】处填“p-> next”。  二、程序改错题  (1)错误:int proc(int n)  正确:double proc(int n)  (2)错误:for(i=1;i  正确:for(i=2;i<=n;i++)【解析】由主函数中的函数调用以及函数proc()中返回值的类型,可知函数proc()的返回值类型为double型数据。因此,“int proc(int n)”应改为“double proc(int n)”。由题目中给出的表达式可知,循环的最大值应该取到n,因此,“for (i=1;i  三、程序设计题double proc(int m){  int i;  double s=0.0,s1=0.0; //s表示分数的和,sl为分数for(i=1;i<=m;i++) //通过循环求S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)  { s1=s1+i;  s=s+1.0/s1;  }  return s;//最后把和s返回到主函数中  }  【解析】由题目中所给公式可知,多项式的值为rrl项的和。多项式每一项的分子均为1,第i项的分母为1~i所有整数的和。根据这个特点,通过m次循环求出多项式的每一项并求和。最后将多项式的和返回到主函数中。