试题 百文网手机站

计算机二级考试C语言模拟真题

时间:2021-03-29 11:16:49 试题 我要投稿

2015年计算机二级考试C语言模拟真题

  一、程序填空题

2015年计算机二级考试C语言模拟真题

  请补充fun()函数,该函数的功能是:把字符的ASCII 码为奇数的字符从字符串str中删除,结果仍然保存在字符串str中,字符串str从键盘输入,其长度作为参数传人fur ()函数。

  例如,输入“abcdef”,则输出“bdf”。

  注意:部分源程序给出如下。

  请勿改动main()函数和其他函数中的任何内容,仅在main()函数的横线上填入所编写的若干表达式或语句。

  试题程序:

  #include

  #define N 100

  void【1】

  {

  int 1,J;

  【2】 ;

  for(i=0;i   if(s[i]%2==0)

  s[j++]=s[i];

  【3】 ;

  }

  void main()

  {

  int i=0,len=0;

  char str[N];

  printf("please input a string:\n");

  gets(str);

  while(str[i]!=’\0’)

  {

  len++;

  i++;

  }

  fun(str,len);

  printf("The result strin9:\n");

  puts(str);

  }

  二、程序改错题

  下列给定程序中,函数fun()的功能是:计算函数F(x,y,z)=(x+v)/(x-y)+(z+y)/(z-y)的值。其中x和Y 的值不相等,2和Y的值不相等。例如,当X的值为1,y的值为2,z的值为3,函数值为2.00。

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

  试题程序:

  #include

  #include

  //****found****

  #define F(m,n)(m/n)

  float fun(float a,float b,float c)

  {

  float s;

  s=F((a+b),(a-b))+F((c+b),(c-b));

  //****found****

  Return(s);

  }

  void main()

  {

  float x,y,z,sum;

  printf("input x y z:");

  scanf("%f%f%f",&x,&y,&z);

  printf("x=%f,y=%f,z=%f\n”,x,y,z);

  if(x==Y||y==z)

  {

  printf("Data error!\n");

  exit(0);

  }

  sum=fun(x,y,z)

  printf("the result is:%5.2f\n",sum);

  }

  三、程序设计题

  编写一个函数,输入n个字符串,串与串之间以Enter 键分隔,找出最短字符串中第一个字符串,传回该串地址(用一个新串“*”作为结束输入的`标志)。

  注意:部分源程序给出如下。

  请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填人所编写的若干语句。

  试题程序:

  #include

  #include

  #include

  char*fun(char(*s)[100],int num)

  {

  }

  void main()

  {

  char strFl0][100],*min;

  int n,i=0;

  FILE*out:printf("input strings with’*’

  as end:");

  gets(str[i]);

  puts(str[i]);

  while(!strcmp(str[i],"*")==0)

  {

  i++:

  gets(str[i]):

  puts(str[i]);

  }

  n=1;

  min=fun(str,n);

  printf("\nmin=%s\n",min);

  out=fopen("outfile.dat","w");

  strcpy(str[O],"fust,");

  strcpy(str[1],"a");

  strcpy(str[2],"test");

  strcpy(str[3],"some");

  strcpy(str[4],"tool?!?");

  fprintf(out,"%s",fun(str,5));

  fclose(out);

  }

  【试题答案与解析 】

  一、程序填空题

  【1】fun(char s[],int n)【2】j=0【3】s[i]=’\0 ’

  【解析】先判断ASCIl码的奇偶。

  第一空:根据主函数“fun(str,len);”调用语句,其中1en 为字符串str的长度,用来控制循环。根据主函数中对应的调用语句,补全fun()函数定义,第一空填“fun(char s[],int n)”。

  第二空:“s[j++]=s[i];”语句中j的变量在使用前要对其取值进行初始化,因为数组下标是由0开始,初始化值为0,所以第二空填“j=0”。

  第三空:新生成的字符串要加尾符标志,所以第三空填“s[j]=’\0’”。

  二、程序改错题

  (1)错误:#defineF(m,n)(m/n)

  正确:#define F(m,n)(m)/(n)

  (2)错误:Return(s);

  正确:return(s)

  【解析】程序中函数的功能是计算题目中给出的公式值,第一个标识:fun()函数两次调用宏F来计算“s=F((a+b),(a- b))+F((c+b),(c-b));”。检查宏的定义是否正确,可以用实参代入宏进行展开:并非(a十b)/(a-b),而是(a+b/a-b),因为“/”的优先级高于“+”或“-”,所以要使用括号限定计算优先顺序。所以将“#define F(m,n)(m/n)”改为“#define F(m,n) (m)/(n)”。