當前位置:才華齋>計算機>C語言>

2017年計算機等級二級C語言上機考前預測題

C語言 閱讀(1.69W)
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次迴圈求出多項式的每一項並求和。最後將多項式的和返回到主函式中。