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

 8.该程序运行的结果是【9】。

  #include<conio.h>


  #include<stdio.h>


  #define M 100


  void fun(int m,int *a,int *n)


  { int i,j=0;


  for(i=1;i<=m;i++)


  if(i%7==0||i%11==0)


  a[j++]=i;


  *n=j;


  }


  main()


  { int aa[M],n,k;


  clrscr();


  fun(10,aa,&n);


  for(k=0;k<n;k++)


  if((k+1)%20==0)printf(″\n″);


  else printf(″%4d″,aa[k]);


  printf(″\n″);


  }


  【参考答案】


  【9】 ###“7”(#表示空格)


 9.下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空。


  #include <stdio.h>


  FILE *fp;


  { char ch;


  if((fp=fopen(【10】))==NULL)exit(0);


  while((ch=getchar( ))!=′@′)fputc(ch,fp);


  fclose(fp);


  }


  【参考答案】


  【10】 “bi.dat”,“w”或“bi.dat”,“w+”


  10.以下程序将数组a的4个元素和数组b的6个元素写到名为lett.dat的二进制文件中,请填空。


  #include <stdio.h>


  main()


  { FILE *fp;


  char a[4]=″1234″,b[6]=″abcedf″;


  if((fp=fopen(″【11】″,″wb″))=NULL)exit(0);


  fwrite(a,sizeof(char),4,fp);


  fwrite(b,【12】,1,fp);


  fclose(fp);


  }


  【11】 lett.dat


  【12】 6*sizeof(char)


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

  main()


  { int a=5,b=4,c=3,d;


  d=(a>b>c);


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


  }


  【参考答案】


  【13】 0


 12.以下函数用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。请填空。


  #include <conio.h>


  #include <stdio.h>


  int fun(int *s,int t,int *k)


  { int i;


  *k=0;


  【14】


  if(s[*k]<s[i]*k=i;


  return【15】;


  }


  main()


  {


  int a[10]={876,675,896,101,301,401,980,431,451,777},k;


  clrscr();


  fun(a,10,&k);


  printf(″%d,%d\n″,k,a[k]);


  }


  【参考答案】


  【14】 for(i=0;i<t;i++)


  【15】 0


13.以下程序段中,错误的行号是【16】。


  ① #include <stdio.h>


  ② main()


  ③ { char str[14];str[ ]={″I love China″};


  ④  printf(″%s″,str);


  ⑤ }


  【参考答案】


  【16】 3行


  14.设x和y均为int型变量,且x=1,y=2,则表达式double(1+x/y)的值为【17】。


  【参考答案】


  【17】 1.000000


  15.设有以下定义和语句,则*(*(p+2)+1)的值为【18】。


  int a[3][2]={10,20,30,40,50,60},(*p)[2];


  p=a;


  【参考答案】


  【18】 60


  16.以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。


  例如,若一维数组中的数据是2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。删除后,数组中的内容应该是2 3 4 5 6 7 8 9 10。


  请填空。


  #include <stdio.h>


  #define N 80


  int fun(int a[ ],int n)


  { int i,j=1;


  for(i=1;i<n;i++)


  if(a[j-1]【19】a[i])


  a[j++]=a[i];


  【20】;


  }


  main()


  { int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=19;


  printf(″The original data :\n″);


  for(i=0;i<n;i++)printf(″%3d″,a[i]);


  n=fun(a,n);


  printf(″\nThe data after deleted :\n″);


  for(i=0;i<n;i++)printf(″%3d″,a[i]);printf(″\n\n″);


  }


  【参考答案】


  【19】 !=


  【20】 return j


 上机部分

  一、填空题


  程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖原数据,其他学生数据不变;若找不到,则什么都不做。


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


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


  #include  <stdio.h>


  #define    N    5


  typedef struct student


  {long sno;


  char name[10];


  float score[3];


  }STU;


  void fun(char *filename, long sno)


  {


  FILE *fp;


  STU n;  int i;


  fp=fopen(filename,"rb+");


  while(!   1   )


  {


  fread(&n,sizeof(STU),1,fp);


  if(n.sno   2   )  break;


  }


  if(!feof(fp))


  {


  for(i=0;i<3;i++)  n.score[i]+=3;


  fseek(fp,1L*   3   ,SEEK_CUR);


  fwrite(&n, sizeof(STU), 1, fp);


  }


  fclose(fp);


  }
  main()


  {


  STU t[N]={{10001,"MaChao",91,92,77},


  {10002,"CaoKai",75,60,88},


  {10003,"LiSi",85,70,78},


  {10004,"FangFang",90,82,87},


  {10005,"ZhangSan",95,80,88}},ss[N];


  int i,j;  FILE *fp;


  fp=fopen("student.dat","wb");


  fwrite(t, sizeof(STU), N, fp);


  fclose(fp);


  printf("\nThe original data :\n");


  fp=fopen("student.dat","rb");


  fread(ss, sizeof(STU), N, fp);


  fclose(fp);


  for(j=0; j<N; j++)


  {


  printf("\nNo:%ld  Name:%-8sScores: ",


  ss[j].sno,ss[j].name);


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


  printf("%6.2f ",ss[j].score[i]);


  printf("\n");


  }


  fun("student.dat",10003);


  fp=fopen("student.dat","rb");


  fread(ss,sizeof(STU),N,fp);


  fclose(fp);


  printf("\nThe data aftermodifying :\n");


  for(j=0;j<N;j++)


  {


  printf("\nNo:%ld  Name: %-8s Scores:",


  ss[j].sno,ss[j].name);


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


  printf("%6.2f",ss[j].score[i]);


  printf("\n");


  }


  }


  【答案及解析】


(1)fun函数中进行文件操作,fp是文件指针,指向打开的二进制读写文件filename,后面应该读入数据,由于空1是在while条件中,通常用是否读到文件尾作为读文件的循环终止条件,如果未到文件尾,函数feof(fp)的返回值为0,!feof(fp)为真,因此填入:feof(fp)。(2)空2由于题目要求从指定文件中找出指定学号sno的学生数据。因此应该填入:==sno。(3)空3是移动文件指针,将修改后的学生记录写回到文件的原来位置上,覆盖原来的数据,因此需要将文件指针从当前位置向前移动一个记录的字节数,也就是sizeof(STU),应填入:sizeof(STU)。

  二、改错题


  给定程序中,函数fun的功能是:计算正整数num的各位上的数字之积。


  例如,若输入252,则输出应该是20;若输入202,则输出应该是0。


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


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


 #include  <stdio.h>


  long  fun(long num)


  {


  long k;


  do


  {


  k*=num%10 ;


  num\=10;


  }while(num);


  return (k);


  }


  main()


  {


  long n;


  printf("\Please enter a number:");


  scanf("%ld",&n);


  printf("\n%ld\n",fun(n));


  }


  【答案及解析】


仔细阅读题目和程序后可以知道k是连乘的结果,但k未赋初值,应该给k赋值1。因此将long k;改为long k=1;或long k;k=1;第2处错误为/=被误写成\=,因此应该改为:num/=10。

  三、编程题


  程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N], int n),函数的功能是:使N×N的二维数组左下三角元素中的值乘以n。


  例如:若n的值为3,a数组中的值为:


  1   9   7


(1)本题主要考查二维数组的有关概念。题目要求是使N×N的二维数组左下三角元素中的值乘以n。即第1行1个,第2行2个,……,第N行N个元素乘n。这就需要用双重循环来进行判断,并设变量j、k,j从0到N-1,k从0到j,将a[j][k]乘n。


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


  int fun(int a[][N],int n)


  {


  int j,k;


  for(j=0;j<N;j++)


  for(k=0;k<j+1;k++)


  a[j][k]*=n;


  }


  2   3   8


  4   5   6


  则返回主程序后a数组中的值应为:


  3   9   7


  6   9   8


  12  15  18


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


  #include  <stdio.h>


  #include  <stdlib.h>


  #define    N    5


  int fun(int a[][N],int n)


  {


  }


  main()


  {


  int  a[N][N],n,i,j;


  printf("***The array***\n");


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


 {


  for(j=0;j<N;j++)


  {


  a[i][j]=rand()%10;


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


  printf("\n");


  }


  do n=rand()%10; while(n>=3);


  printf("n=%4d\n",n);


  fun(a,n);


  printf ("***THE RESULT***\n");


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


  {


  for(j=0;j<N;j++)


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


  printf("\n");


  }


  }


  【答案及解析】

就业数据资源平台