当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
2015年计算机二级C语言上机操作题及答案(20)
发布时间:2011/7/8 11:31:41 来源:城市学习网 编辑:ziteng
  第20套
  填空题
  给定程序的功能是求出能整除X且不是偶数的各整数,并放在数组PP中,这些除数的个数由N返回。
  例如,若X的值为30,则有4个数符合要求,它们是1,3,5,15。
  注意:部分源程序给出如下
  请勿改动主函数main和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。
  试题程序:#include <stdio.h>
  void fun(int  x, int  pp[],  int *n)
  {
  int  i, j = 0;
  for (i=1; i<=x; i+=2)
  if ((x%i) == 0)
  pp[j++] = ___1___;
  *n = ___2___;
  }
  main()
  {
  int  x, aa[1000], n, i;
  printf("\nPlease enter an integer number:\n");
  scanf("%d", &x);
  fun(x, ___3___);
  for (i=0; i<n; i++)
  printf("%d ", aa[i]);
  printf("\n");
  }
  第1处填空:i
  第2处填空:j
  第3处填空:aa,&n [NextPage]   改错题
  N个有序整数数列已放在一维数组中,给定下列程序中,函数FUN的功能是:利用拆半查找算法查找整数M在数组中的位置。若找到,则返回其下标值:反之,则返回-1。
  拆半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把M与中间位置(mid)中元素的值进行比较。如果M的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。
  请改正程序中的错误,使它能得出正确结果。
  注意:不要改动MAIN函数,不得增行或删行,也不要更改程序的结构!
  试题程序:#include <stdio.h>
  #define  N 10
  /********found********/
  void fun(int  a[], int  m)
  {
  int  low = 0, high = N-1, mid;
  while (low <= high)
  {
  mid = (low+high)/2;
  if (m < a[mid])
  high = mid-1;
  /********found********/
  else
  if (m >= a[mid])
  low = mid+1;
  else
  return(mid);
  }
  return (-1);
  }
  main()
  {
  int  i, a[N] = {-3, 4, 7, 9, 13, 45, 67, 89, 100, 180}, k, m;
  printf("a êy×é?Dμ?êy?Yè???:");
  for (i=0; i<N; i++)
  printf("%d,", a[i]);
  printf("Enter m:");
  scanf("%d", &m);
  k = fun(a, m);
  if (k >= 0)
  printf("m=%d,index=%d\n", m, k);
  else
  printf("Not be found!\n");
  }
  第1处:void fun(int a[],int m)应改为int fun(int a[],int m)
  第2处:if (m>=a[mid])应改为if(m>a[mid])
 [NextPage]   编程题
  编写函数int fun(int lim,int aa[MAX]),该函数的功能的求出小于或等于lim的所有素数,并放在aa数组中,该函数返回所求出的素数的个数
  注意:部分源程序给出如下。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
  试题程序:
  #include <stdio.h>
  #include <conio.h>
  #define MAX 100
  int fun( int lim, int aa[MAX])
  {
  }
  main()
  {
  int limit,i,sum;
  int aa[MAX] ;
  FILE *out;
  printf("ê?è?ò?????êy");
  scanf(" %d", &limit);
  sum=fun(limit, aa);
  for(i=0 ; i < sum; i++)
  {
  if(i%10 == 0 && i !=0)
  printf("\n");
  printf("%5d", aa[i]);
  }
  sum=fun(28, aa);
  out = fopen("out.dat", "w");
  for(i=0 ; i < sum; i++)
  fprintf(out, "%d\n", aa[i]);
  fclose(out);
  }
  答案是:
  int fun (int lim,int aa[MAX])
  {
  int k=0,I,j;
  for(i=lim;i>1;i--)
  {
  for(j=2;j<I;j++)
  if(i%j==0)
  break;
  else
  continue;
  if(j>=i)
  {
  aa[k]=i;
  k++;
  }
  }
  return k++;
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved