计算机二级考试C语言练习题.docx

上传人:b****5 文档编号:5178261 上传时间:2022-12-13 格式:DOCX 页数:23 大小:21.75KB
下载 相关 举报
计算机二级考试C语言练习题.docx_第1页
第1页 / 共23页
计算机二级考试C语言练习题.docx_第2页
第2页 / 共23页
计算机二级考试C语言练习题.docx_第3页
第3页 / 共23页
计算机二级考试C语言练习题.docx_第4页
第4页 / 共23页
计算机二级考试C语言练习题.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

计算机二级考试C语言练习题.docx

《计算机二级考试C语言练习题.docx》由会员分享,可在线阅读,更多相关《计算机二级考试C语言练习题.docx(23页珍藏版)》请在冰豆网上搜索。

计算机二级考试C语言练习题.docx

计算机二级考试C语言练习题

 

一、填空题:

  程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。

所有学生数据均以二进制方式输出到文件中。

函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学生的数据不变。

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

  注意:

源程序存放在考生文件夹下BLANK1.C中。

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

  给定源程序:

  #include

  #defineN5

  typedefstructstudent{

  longsno;

  charname[10];

  floatscore[3];

  }STU;

  voidfun(char*filename,STUn)

  {FILE*fp;

  /**********found**********/

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

  /**********found**********/

  fseek(__2__,-(long)sizeof(STU),SEEK_END);

  /**********found**********/

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

  fclose(fp);

  }

  main()

  {STUt[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}};

  STUn={10006,"ZhaoSi",55,70,68},ss[N];

  inti,j;FILE*fp;

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

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

  fclose(fp);

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

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

  fclose(fp);

  printf("\nTheoriginaldata:

\n\n");

  for(j=0;j<>

  {printf("\nNo:

%ldName:

%-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",n);

  printf("\nThedataaftermodifing:

\n\n");

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

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

  fclose(fp);

  for(j=0;j<>

  {printf("\nNo:

%ldName:

%-8sScores:

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

  for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);

  printf("\n");

  }

  }

  解题答案:

  /**********第一空**********/

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

  /**********第二空**********/

  fseek(fp,-(long)sizeof(STU),SEEK_END);

  /**********第三空**********/

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

  ******************************************  

  二、改错题:

给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。

  请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。

  注意:

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

  给定源程序:

  #include

  #include

  typedefstructaa

  {intdata;

  structaa*next;

  }NODE;

  NODE*Creatlink(intn,intm)

  {NODE*h=NULL,*p,*s;

  inti;

  /**********found***********/

  p=(NODE)malloc(sizeof(NODE));

  h=p;

  p->next=NULL;

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

  {s=(NODE*)malloc(sizeof(NODE));

  s->data=rand()%m;s->next=p->next;

  p->next=s;p=p->next;

  }

  /**********found***********/

  returnp;

  }

  outlink(NODE*h)

  {NODE*p;

  p=h->next;

  printf("\n\nTHELIST:

\n\nHEAD");

  while(p)

  {printf("->%d",p->data);

  p=p->next;

  }

  printf("\n");

  }

  main()

  {NODE*head;

  head=Creatlink(8,22);

  outlink(head);

  }

  解题答案:

  /**********found***********/

  p=(NODE*)malloc(sizeof(NODE));

  /**********found***********/

  returnh;  

三、程序题:

请编写函数fun,函数的功能是:

统计一行字符串中单词的个数,作为函数值返回。

一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。

  注意:

部分源程序在文件PROG1.C中。

  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

  给定源程序:

  #include

  #include

  #defineN80

  intfun(char*s)

  {

  }

  main()

  {charline[N];intnum=0;voidNONO();

  printf("Enterastring:

\n");gets(line);

  num=fun(line);

  printf("Thenumberofwordis:

%d\n\n",num);

  NONO();

  }

  voidNONO()

  {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。

*/

  FILE*rf,*wf;inti,num;charline[N],*p;

  rf=fopen("in.dat","r");

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

  for(i=0;i<10;i++){

  fgets(line,N,rf);

  p=strchr(line,'\n');

  if(p!

=NULL)*p=0;

  num=fun(line);

  fprintf(wf,"%d\n",num);

  }

  fclose(rf);fclose(wf);

  }

  参考答案:

  intfun(char*s)

  {

  intk=1;

  while(*s){

  if(*s=='')k++;

  s++;

  }

returnk;

题库2 

 一、填空题:

给定程序的功能是:

从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。

然后将文件的内容读出显示在屏幕上。

文件的读写分别由自定义函数ReadText和WriteText实现。

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

  注意:

源程序存放在考生文件夹下BLANK1.C中。

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

  给定源程序:

  #include

  #include

  #include

  voidWriteText(FILE*);

  voidReadText(FILE*);

  main()

  {FILE*fp;

  if((fp=fopen("myfile4.txt","w"))==NULL)

  {printf("openfail!

!

\n");exit(0);}

  WriteText(fp);

  fclose(fp);

  if((fp=fopen("myfile4.txt","r"))==NULL)

  {printf("openfail!

!

\n");exit(0);}

  ReadText(fp);

  fclose(fp);

  }

  /**********found**********/

  voidWriteText(FILE___1___)

  {charstr[81];

  printf("\nEnterstringwith-1toend:

\n");

  gets(str);

  while(strcmp(str,"-1")!

=0){

  /**********found**********/

  fputs(___2___,fw);fputs("\n",fw);

  gets(str);

  }

  }

  voidReadText(FILE*fr)

  {charstr[81];

  printf("\nReadfileandoutputtoscreen:

\n");

  fgets(str,81,fr);

  while(!

feof(fr)){

  /**********found**********/

  printf("%s",___3___);

  fgets(str,81,fr);

  }

  }

  解题答案:

  /**********第一空**********/

  voidWriteText(FILE*fw)

  /**********第二空**********/

  fputs(str,fw);fputs("\n",fw);

  /**********第三空**********/

  printf("%s",str);

******************************************

  二、改错题:

给定程序MODI1.C中函数fun的功能是:

从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。

高位仍在高位,低位仍在低位。

  例如,当s中的数为:

7654321时,t中的数为:

7531。

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

  注意:

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

  给定源程序:

  #include

  /************found************/

  voidfun(longs,longt)

  {longsl=10;

  *t=s%10;

  while(s>0)

  {s=s/100;

  *t=s%10*sl+*t;

  /************found************/

  sl=sl*100;

  }

  }

  main()

  {longs,t;

  printf("\nPleaseenters:

");scanf("%ld",&s);

  fun(s,&t);

  printf("Theresultis:

%ld\n",t);

  }

  解题答案:

  /************found************/

  voidfun(longs,long*t)

  /************found************/

  sl=sl*10;

  ******************************************

   三、程序题:

函数fun的功能是:

将两个两位数的正整数a、b合并形成一个整数放在c中。

合并的方式是:

将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。

  例如,当a=45,b=12时,调用该函数后,c=1524。

  注意:

部分源程序存在文件PROG1.C中。

数据文件IN.DAT中的数据不得修改。

  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

  给定源程序:

  #include

  voidfun(inta,intb,long*c)

  {

  }

  main()

  {inta,b;longc;

  voidNONO();

  printf("Inputa,b:

");

  scanf("%d,%d",&a,&b);

  fun(a,b,&c);

  printf("Theresultis:

%ld\n",c);

  NONO();

  }

  voidNONO()

  {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/

  FILE*rf,*wf;

  inti,a,b;longc;

  rf=fopen("in.dat","r");

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

  for(i=0;i<10;i++){

  fscanf(rf,"%d,%d",&a,&b);

  fun(a,b,&c);

  fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);

  }

  fclose(rf);

  fclose(wf);

  }

  解题答案:

  {

  *c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);

  }

题库3

一、填空题:

给定程序中,函数fun的功能是:

将自然数1~10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。

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

  注意:

源程序存放在考生文件夹下的BLANK1.C中。

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

  给定源程序:

  #include

  #include

  intfun(char*fname)

  {FILE*fp;inti,n;floatx;

  if((fp=fopen(fname,"w"))==NULL)return0;

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

  /**********found**********/

  fprintf(___1___,"%d%f\n",i,sqrt((double)i));

  printf("\nSucceed!

!

\n");

  /**********found**********/

  ___2___;

  printf("\nThedatainfile:

\n");

  /**********found**********/

  if((fp=fopen(___3___,"r"))==NULL)

  return0;

  fscanf(fp,"%d%f",&n,&x);

  while(!

feof(fp))

  {printf("%d%f\n",n,x);fscanf(fp,"%d%f",&n,&x);}

  fclose(fp);

  return1;

  }

  main()

  {charfname[]="myfile3.txt";

  fun(fname);

  }

  解题答案:

  /**********第一空*********/

  fprintf(fp,"%d%f\n",i,sqrt((double)i));

  printf("\nSucceed!

!

\n");

  /**********第二空**********/

  fclose(fp);

  /**********第三空**********/

  if((fp=fopen(fname,"r"))==NULL)

  ******************************************

 二、改错题:

给定程序MODI1.C中fun函数的功能是:

将n个无序整数从小到大排序。

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

  注意:

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

  给定源程序:

  #include

  #include

  fun(intn,int*a)

  {inti,j,p,t;

  for(j=0;j<>

  {p=j;

  /************found************/

  for(i=j+1;i<>

  if(a[p]>a[i])

  /************found************/

  t=i;

  if(p!

=j)

  {t=a[j];a[j]=a[p];a[p]=t;}

  }

  }

  putarr(intn,int*z)

  {inti;

  for(i=1;i<=n;i++,z++)

  {printf("%4d",*z);

  if(!

(i%10))printf("\n");

  }printf("\n");

  }

  main()

  {intaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;

  printf("\n\nBeforesorting%dnumbers:

\n",n);putarr(n,aa);

  fun(n,aa);

  printf("\nAftersorting%dnumbers:

\n",n);putarr(n,aa);

  }

  解题答案:

  #include

  #include

  fun(intn,int*a)

  {inti,j,p,t;

  for(j=0;j<>

  {p=j;

  /************found************/

  for(i=j+1;i  /************found************/

  p=i;

  ******************************************

  三、程序题:

函数fun的功能是:

将两个两位数的正整数a、b合并形成一个整数放在c中。

  合并的方式是:

将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。

  例如,当a=45,b=12时,调用该函数后,c=2514。

  注意:

部分源程序存在文件PROG1.C中。

数据文件IN.DAT中的数据不得修改。

  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

  给定源程序:

  #include

  voidfun(inta,intb,long*c)

  {

  }

  main()

  {inta,b;longc;

  voidNONO();

  printf("Inputa,b:

");

  scanf("%d,%d",&a,&b);

  fun(a,b,&c);

  printf("Theresultis:

%ld\n",c);

  NONO();

  }

  voidNONO()

  {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/

  FILE*rf,*wf;

  inti,a,b;longc;

  rf=fopen("in.dat","r");

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

  for(i=0;i<10;i++){

  fscanf(rf,"%d,%d",&a,&b);

  fun(a,b,&c);

  fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);

  }

  fclose(rf);

  fclose(wf);

  }

  解题答案:

  {

  *c=(b%10)*1000+(a%10)*100+(b/10)*10+a/10;

  }

题库4一、填空题:

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。

所有学生数据均以二进制方式输出到文件中。

函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的

  学生数据输出到filename所指的文件中,覆盖原来的文件内容。

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

  注意:

源程序存放在考生文件夹下BLANK1.C中。

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

  给定源程序:

  #include

  #defineN5

  typedefstructstudent{

  longsno;

  charname[10];

  floatscore[3];

  }STU;

  voidfun(char*filename)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1