就业数据资源平台
当前位置:首页 > C语言程序设计
2010年9月计算机等级考试二级C语言模拟试题(二)-3

11.以下程序执行结果为【11】。

  main()


  {


  int i,j,k;


  for(i=0,j=5;i<=j;i++,j--);


  printf(″k=%d″,k=i+j);


  }


  【参考答案】:


  【11】 k=5


  12.以下程序的输出结果是【12】。


  main()


  {


  char s[ ]=″abcdef″;


  s[3]=′\0′;


14.下面的程序用来统计文件中字符的个数,请填空。


  #include


  main()


  {考试


  FILE *fp;


  long num=0;


  if((fp=fopen(″fname.dat″,″r″))==NULL)


  { printf(″Cant’t open file! \n″);exit(0);}


  while(【15】){fgetc(fp);num++;}


  printf(″num=%1d\n″,num);


  fclose(fp);


  }


  【参考答案】:


  【15】 !feof(fp)


  printf(″%s\n″,s);


  }


  【参考答案】:


  【12】 abc


  13.以下程序的功能是从键盘上输入若干个字符(以回车符作为结束)组成一个字符串存入一个字符数组,然后输出该字符数组中的字符串。请填空。


  #include


  #include


  main()


  {


  char str[81],*sptr;


  int i;


  for(i=0;i<80;i++)


  { str[i]=getchar();if(str[i]==′\n′)break;}


  str[i]=【13】;sptr=str;


  while(*sptr)putchar(* sptr【14】);


  }


  【参考答案】:


  【13】 ′\0′ 【14】 ++


15.在C语言中(以16位PC机为例),一个float型数据在内存中所占的字节数为4;一个double型数据在内存中所占的字节数为【16】。

  【参考答案】:


  【16】 8


  16.以下函数的功能是求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。


  例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。


  请按题意,完成填空。


  试题程序:


  #include


  #include


  void fun(int x,int pp[ ],int *n)


  { int i,j=0;


  【17】


  if(x%i==0)pp[j++]=i;


  【18】;


  }(www.Examw.com)


  main()


  { int x,aa[1000],n,i;


  clrscr();


  printf(″\nPlease enter an integer number :\n″);scanf(″%d″,&x);


  fun(x,aa,&n);


  for(i=0;i

  printf(″%d″,aa[i]);


  printf(″\n″);


  }


  【参考答案】:


  【17】 for(i=1;i


17.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。


  struct node


  { int info;


  【19】link;


  };


  【参考答案】:


  【19】 struct node *


  18.设有以下结构体类型:


  struct st


  { char name[8];


  int num;


  float s[4];


  } student[50];


  并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整:


  fwrite(student,【20】,1,fp);


  【参考答案】:


  【20】 sizeof(struct st)*50


 上机部分

  一、填空题


  给定程序中,函数fun的功能是:找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。


  请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。


  注意:不得增行或删行,也不得更改程序的结构!


  #include


  #define N 4


  void fun(int(*a)[N],int *b)


  {


  int i,j;


  for(i=0; i

  {


  b[i]= 1 ;


  for(j=1;j

  if(b[i] 2 a[j][i])


  b[i]= a[j][i];


  }


  }


  main()


  {


  int x[N][N]={{12,5,8,7},{6,1,9,3},


  {1,2,3,4},{2,8,4,3}},y[N],i,j;


  printf("\nThe matrix :\n");


  for(i=0;i

  {


  for(j=0; j

  printf("%4d",x[i][j]);


  printf("\n");


  }


  fun( 3 );


  printf("\nThe result is:");


  for(i=0; i

  printf("\n");


  }


  【答案及解析】


(1)b是一维数组,存放N×N矩阵中每列元素中的最大值,循环开始,第i列的b[i]应该首先赋值为每列的第一个元素a[0][i],再循环与本列其他元素比较,最后找出每列元素中的最大值。因此空1中应该填入:a[0][i]。(2)for(j=1;j

  二、改错题


  给定程序中,函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。


  例如,当字符串中的内容为“abcdabfabcdx”、t中的内容为“ab”时,输出结果应是abcdx。当字符串中的内容为“abcdabfabcdx”、t中的内容为“abd”时,则程序输出未找到信息not be found!。


  请改正程序中的错误,使其能得出正确的结果。


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


  #include


  #include


  char *fun(char *s,char *t)


  {


  char *p,*r,*a;


  a=Null;


  while(*s)


  {


  p=s;r=t;


  while(*r)


  if(r==p)


  {r++;p++;}


  else break;


  if(*r=='\0') a=s;


  s++;


  }


  return a ;


  }


  main()


  {


  char s[100],t[100],*p;


  printf("\nPlease enter string S :");


  scanf("%s",s);


  printf("\nPlease enter substring t :");


  scanf("%s",t);


  p=fun(s,t);


  if(p) printf("\nThe result is :%s\n",p);


  else printf("\nNot found !\n");


  }


  【答案及解析】


(1)二级C是区分大小写的,在仔细阅读程序后,发现Null是一个错误的标识符。给a指针赋空值,空值的宏定义符号是NULL,因此应该改为:a = NULL;(2)按照语义是判断r和p指针是否相等,显然是错误的。因为本题是判断子串t是否在串s中出现,应该判定r和p所指内存中字符是否相同,因此应该改为if(*r==*p)。

  三、编程题


  请编写函数fun,其功能是:比较两个字符串的长度,函数返回较长的字符串。若两个字符串长度相等,则返回第1个字符串(不得使用C语言提供的求字符串长度的函数)。


  例如,输入beijingshijiazhuang(为回车键),函数将返回shijiazhuang。


  注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。


  #include


  char *fun(char *s,char *t)


  { }


  main()


  {


  char a[20],b[10],*p,*q;


  int i;


  printf("Input 1th string: ");


  gets(a);中 华 考 试 网


  printf("Input 2th string: ");


  gets(b);


  printf("%s",fun(a,b));


  }


  【答案及解析】


(1)本题主要考查for循环语句的概念。根据题意知,需要使用两个循环来实现,即第1个for循环的作用是求字符串s中字符的个数;第2个for循环的作用是求字符串t中字符的个数。然后进行比较即可。由于任何for循环都要控制一条语句,因此在每个for循环条件后面必须要加一个分号。


  (2)按上述解析写出的函数是:


  char *fun(char *s,char *t)


  {


  int i,j;


  for(i=0;s[i]!='\0';i++);


  /*求字符串s的长度*/


  for(j=0;t[j]!='\0';j++);


  /*求字符串t的长度*/


  if(i>=j)


  return s;


  else


  return t;


  }

就业数据资源平台