就业数据资源平台
当前位置:首页 > C语言程序设计
2011年计算机二级考试C语言十套上机题(9)

  1.填空题
  请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。
  例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。
  注意:部分源程序给出如下。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
  试题程序:
  #include <stdio.h>
  #include<conio.h>
  #define LEN 80
  main()
  {
  char str1[LEN],str2[LEN];
  int n,i;
  clrscr();
  printf("Enter the string:\n");
  gets(str1);
  printf("Enter the position of the string
  deleted:");
  scanf(【1】);
  for(i=0;i<n;i++)
  【2】
  str2[i]=’\0’;
  printf("The new string is:%s\n",【3】);
  }
  答案及评析:【1】″%d″,&n 【2】str2[i]=str1[i]; 【3】str2
  【解析】填空1:本题考查对标准输入函数scanf()的调用格式,由后面的程序可以知道,变量n保存了要截取的字符数,注意在n前面不要忘了取址符‘ &’。填空2:截取前n个字符,就是将字符串str1的前n个字符依次赋给字符串str2的前n个字符。填空3:本题考查对标准输出函数printf()的调用格式,根据题意,应输出截取后的字符串,即字符串str2。


  2. 改错题
  下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。
  请改正程序中的错误,使它能得到正确结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
  试题程序:
  #include <stdio.h>
  #include <conio.h>
  void fun(char *s)
  {int i,j;
  for(i=0,j=0; s[i]!= ’\0’; i++)
  /**********************found***********************/
  if((s[i]>= ’A’&&s[i]<= ’Z’)&&(s[i]>= ’a’&&s[i]<= ’z’))
  s[j++]=s[i];
  /**********************found***********************/
  s[j]= "\0";
  }
  main()
  {
  char item[80];
  clrscr();
  printf("\nEnter a string: ");
  gets(item);
  printf("\n\nThe string is:\%s\n",item);
  fun(item);
  printf("\n\nThe string of changing is :\%s\n",item);
  }
  答案及评析:(1)错误:if((s[i]>= ’A’&&s[i]<= ’Z’)&&(s[i]>= ’a’&&s[i]<= ’z’))
  正确:if((s[i]>= ’A’&&s[i]<= ’Z’)||(s[i]>= ’a’&&s[i]<= ’z’))(2)错误:s[j]= "\0";正确:s[j]=’\0’;
  【解析】错误1:字母包括小写字母和大写字母,这里是"或"的关系,所以用"||"运算符。
  错误2:字符串的结束标志符为字符,而不是字符串。


  3. 编程题
  下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:使数组右上半三角元素中的值全部置成0。例如a数组中的值为
  a=4 5 6
  1 7 9
  3 2 6,
  则返回主程序后a数组中的值应为
  0 0 0
  1 0 0
  3 2 0
  注意:部分源程序给出如下。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
  试题程序:
  #include <conio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #define N 5
  int fun (int a[][N])
  {
  }
  main()
  {
  int a[N][N],i,j;
  clrscr();
  printf("*****The array*****\n");
  for(i=0;i<N;i++) /*产生一个随机的5*5矩阵*/
  { for(j=0;j<N;j++)
  {a[i][j]=rand()%10;
  printf("%4d", a[i][j]);
  }
  printf("\n");
  }
  fun(a);
  printf("THE RESULT\n");
  for(i=0;i<N;i++)
  { for(j=0;j<N;j++)
  printf("%4d",a[i][j]);
  printf("\n");
  }
  }
  答案及评析:
  int fun (int a[][N])
  {
  int i,j;
  for(i=0;i<N;i++)
  for(j=i;j<N;j++)
  a[i][j]=0; /*将数组右上半三角元素中的值全部置成0*/
  }
  【解析】本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

就业数据资源平台