• 50.00 KB
  • 2022-04-22 11:48:27 发布

《C语言》期末考试模拟复习题一(含答案).doc

  • 15页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《C语言》期末考试模拟复习题一一、单项选择题(在本题的每一小题的备选答案中只有一个答案是正确的,请把正确选项的序号,填入题中的括号内。多选不给分。每题1分,共20分)1.以下不是c语言规定保留字的是(B)。(A)float    (B)integer    (C)signed    (D)unsigned2.设int型变量x有初始值3,则表达式x++*5/10的值是(B)(A)0    (B)1      (C)2      (D)33.下述程序执行后的输出结果是(A )  #include  main()  {  intx="f";  printf("%cn","a"+(x-"a"+1));  }(A)G    (B)H    (C)I    (D)J4.设有程序#includemain(){  inti,j;  for(i=0,j=1;i<=j+1;i+=2,j--)    printf("%dn",i);}在运行上述程序时,for语句中循环体的执行次数是(C)(A)3    (B)2    (3)1    (D)05.在下述选项时,没有构成死循环的程序是(C)(A)inti=100  while(1)  {    i=i%100+1;    if(i>100)      break;    }(B)for(;;);(C)intk=1000;  do  {    ++k;    }while(k>=10000);(D)int s=36;    while(s);--s;6.假定a和b为int型变量,则执行下述语句组后,b的值为(D)。  a=1;  b=10;  do  {  b-=a;  a++;  }while(b--<0);  (A)9  (B)-2  (C)-1  (D)87.设有变量说明语句  int  a=1,b=0;则执行以下程序段的输出结果为(B)。  switch  (a)  {      case1:        switch  (b)        {          case0:printf("**0**");break;          case1:printf("**1**");break;        }      case2:printf("**2**");break;    }  printf("n");  (A)**0**  (B)**0****2**  (C)**0****1****2**  (D)有语法错误8.以下合法的数组说明是(D)。  (A)chara[6]="string";    (B)inta[5]={0,1,2,3,4,5};  (C)chara="string";      (D)INTa[]={0,12,3,4,5};9.下述程序代码中有语法错误的行是(D)。  inti,ia[10],ib[10];    /*第一行*/  for(i=0;i<=9;i++)      /*第2行*/  ia[i]=0;            /*第3行*/  ib=ia;              /第4行*/  (A)第1行  (B)第2行  (C)第3行  (D)第4行10.若已定义  inta[9],*p=a;  并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是(C)。(A)p+1  (B)a+1  (C)a++  (D)++p 11.若有下述说明和语句  int**pp,*p,a=10,b=20;  pp=&p;  p=&a;  p=&b;  printf("%d,%dn",*p,**pp);  则输出结果是(D  )。  (A)10,10  (B)10,20  (C)20,10  (D)20,2012.执行下述程序后的输出结果是(D)。  #include  func(inta)  {    intb=0;    staticintc=3;    a=c++,b++;    return(a);  }  main()  {    inta=2,i,k;    for(i=0;i<2;i++)      k=func(a++);    printf("%dn",k);  }  (A)3  (B)0  (C)5  (D)413.执行下述程序的输出结果是(  A)。  #include  main()  {    intaa[3][3]={{2},{4},{6}};    inti,*p=&aa[0][0];    for(i=0;i<2;i++)    {      if(i==0)      aa[i][i+1]=*p+1;      else      ++p;      printf("%d",*p);    }    printf("n");    }  (A)23  (B)26  (C)33  (D)36 14.读下面的程序,正确的输出结果是(  D  )。  #include    staticinta=50;  f1(inta)  {    printf("%d,",a+=10);    }    f2(void)    {    printf("%d,",a+=3);    }    main()    }      inta=10;      f1(a);      f2();      printf("%dn",a);    }    (A)60,63,60  (B)20,23,23  (C)20,13,10(D)20,53,1015.执行下述程序的输出结果是(A)。  #include  intpower(intx,inty);  main()  {  floata=2.6,b=3.4;  intp;  p=power((int)a,(int)b);  printf("%dn",p);  }  intpower(intx,inty)  {    inti,p=1;    for(i=y;i>0;i--)    p=p*x;    return(p);  }  (A)8  (B)9  (C)27  (D)8116.已知函数scopy的定义如下  voidscopy(char*s,char*t)  {    while (*s++=*t++);  }  则该函数的功能是(  A)。  (A)串复制    (B)求串长度  (C)串比较    (D)串反向17.执行下述程序的输出是(B  )。    #include  main()  {    structcomplex    {    intre;    intim;    };    structcomplexcp[3]={2,5,4,7};    cp[2].re=cp[0].re+cp[1].re;    cp[2].im=im=cp[0].im+cp[1].im;    printf("%d%dn",cp[2].re,cp[2].im;    }  (A)711  (B)612  (C)99  (D)12618.执行下述程序的输出结果是(A  )。  #include  main()  {    union    {      intk;      chari[2];    }  *s,a;      s=&a;      s->i[0]=0x39;      s->i[1]=0x38;      printf("%xn",s->k);  }  (A)3839  (B)3938  (C)380039  (D)39003819.有以下程序  /*filename:file.c*/  #include  #include  main(intargc,char*argv[])  {    FILE*fp1,*fp2;    if (argc<3)  {    printf("Usage:filefilename1filename2n");    exit(0);  }  fp1=fopen(argv[1],"r");  fp2=fopen(argv[2],"w");  while(!feof(fp1))    fputc(fgetc(fp1),fp2);  fclose(fp1);  fclose(fp2);  }若在DOS提示符下输入如下的命令行  fileabc.filxyz.fil且程序正常执行完毕。那么,该程序所实现的功能是(  B  )。  (A)将文件xyz.fil的内容复制到文件abc.fil  (B)将文件abc.fil的内容复制到文件夹xyz.fil  (C)读取文件xyz.fil的内容并在屏幕上显示出来  (D)读取文件abc.fil的内容并在屏幕上显示出来20.以下程序for语句循环体中printf语句执行次数是(C  )。  #include  #defineN2  #defineMN+1  #defineNUM(M+1)*m/2  main()  {    inti;    for(i=1;i<=NUM;i++)    printf("%dn",i);  }  (A)5  (B)6  (C)8  (D)9二、填充题(每空2分,共30分)  1.设有变量说明语句    intx=1,y=2;  则执行下述printf语句的输出结果是______1.000000_______。    printf("%fn",1.0+x/y);  2.执行下述程序    #include    main()    {    int x,y;    scanf("%2d%*2s%1d",&s,&y);    printf("%dn",x+y);    }    若从键盘输入      12345671    则程序的输出结果是____17________。  3.以下程序的功能是:从键盘上输入若干名学生的成绩(百分制,可带小数,以输入负数或0为结束标志),统计并输出最高成绩和最低成绩。请填空。  #include  main()  {    floatx,amax,amin;    scanf("%f",&x);    amax=x;    amin=x;    while(____x>0.0(或x>0)________)    {      if(x>amax)        amax=x;      elseif(x  main()  {    inta[6],i;    for(i=0;i<6;i++)    {    a[i]=9*(i-2+4*(i>3))%5;    printf("%3d",a[i]);    }    printf("n");  }6.执行下述程序时的输出结果是__________6__________。  #include  main()  {    inta[]={2,4,6,},*ptr=&a[0],x=8,y,z;    for(y=0;y<3;y++)    z=(*(ptr+y)  main()  {  inta[][2]={10,20,30,40,50,60},(*p)[2];  p=a;  printf("%dn",*(*(p+2)+1));  }8.执行以下程序的输出结果是____10_______。  #include  main()  {  ints,i,sum();  for(i=1;i<=10;i++)    s=sum(i);  printf("s=%dn",s);  }  sum(intk)  {    intx=0;    return(x+=k);  } 9.下述函数定义用来求出两个整数之各,并通过函数的模拟传地址调用,传回两整数相加之和值,请填空。  voidadd(intx,inty,____int*z___)  {    *z=x+y;  }10.函数func的功能是将整型变量x的值转换成二进制数,并将该二进制数的每一位存入由整型指针b所指向的一维数组a,最低位存放于a[0]中,次低位存放于a[1]中,依此类推。请填空。  voidfunc(intx,int*b)  {    intr;    do    {    r=x%2;    _____*b++________=r;    x/=2;    }while(x);    }11.以下程序中函数invert实现将数组内所有数组元素的值逆置。比如,执行本程序将输出  10  9  8  7  6  5  4  3  2  1  请填空。    #include    main()    {    inta[10]={1,2,3,4,5,6,7,8,9,10},i,n=10;    invert(a,n-1);    for(i=0;i<10;i++)      printf("%3d",a[i]);    printf("n");    }    inver(int*s,intnum)    {      int*t,k;      t=s+num;      while(____s  structstr  {    floatx;    char*y;  }*m;  structstrgroup[3]={                  95.0,"Li",                  82.5,"Wang",                  73.5,"Sun"              };  main()  {    m=grogp;    printf("%.lf,%sn",m->x,m->y);    }14.下面的程序用来统计某文件文件中字符的个数。请填空。  #include  #include  main()  {    FILE*fp;    longnum=0;    if ((fp=fopen("fnam.dat","r"))==NULL)    {      printf("Can"topenthisfile!n");      exit(0);    }    while(____!feop(fp)  (或feop(fp)==0)______)    {      fgetc(fp);      num++;      }      printf("num=%dn",unm);      fclose(fp);    }15.执行下述程序后,输出结果为_____29_________。  #include  #defineFUN1(a,b)a+b  #defineFUN2(a,b)a-b  #defineCAL(a,b)a*b+a+3  main()  {    printf("%dn",CAL(FUN(3,5),FUN(4,5)));    }三、程序分析题(每题5分,共30分)1.阅读程序,写出执行该程序的输出结果。  #include  main()  {  chars[]="pressakey.";  inti;  charch;  for(i=0;(ch=s[i]!="";i++)  {    switch(ch)    {      case"p":      case"a":      case"k":putchar(ch-32);continue;      case"  ":putchar("*");break;      case".":putchar("!");break;      default:putchar(ch);continue;      }       putchar("n");    }    }答案:press*          A*          Key!2.阅读程序,写出执行该程序的输出结果。  #include  #defineN5  main()  {  inti,j;  inta[N][N];  for(i=0;i=j)|      a[i][j]=1;      else      a[i][j]=a[i][j-1]+1;    for(i=0;j  main()  {  intm[5],n[5],*px,*py,ki;  px=m;py=n;  for(k=1;k<4;k++,px++,py++)  {    *px=k;*py=2*k;     printf("%d,%d",m[k-1],n[k-1]);    }    printf("n");    px=&m[1];    py=&n[1];    for(k=1;k<3;k++)    {    *px+=k;*py*=k;    printf("%d,%d,",*px++,*py++);    }    printf("n");    }答案:1,2,2,4,3,6,3,4,5,12,4.阅读程序,写出执行该程序的输出结果。  #include  main()  {  intx;  for(x=1;x<+3;++x)    f(x);  }  f(inty)  {    staticinti=5;    intj=3;    j++;    printf("%d%d%d=%dn",i,j,y,i+j+y);    i*=2;  }答案:5+4+1=10  10+4+2=1620+4+3=275.阅读下列程序,写出程序运行的输出结果。  main()  {chara[20]={”1A2B3C”},b[20],*p1=a,*p2=b;    do{if(!((*p1>="O"&&*p1<="9"))        {*p2=*p1;          p2++;          *p2=*p1;        }      else         *p2=*p1;      p1++,p2++;      }    while(*p1="");    *p2=*p1;    printf(”%sn”,b);    }答案:1AA2BB3CC6.阅读下列程序,写出程序的主要功能。    #include”string.h”    main()    {chars[5][81],*pl[5],**p2,**p3;    inti;    for(i=0;i<5;i++)      {p1[i]=&s[i][0];        gets(p1[i]);      }    for(p3=p2=p1,i=0;i<5;i++,p2++)        if(strcmp(*p3,*p2)<0)p3=p2;    puts(*p3);    }答案:输入5个字符串,输出其中最大的字符串。四、程序设计题1、编一个程序,从键盘上输入一串符号(以回车换行键为结束),将其以字符率形式存入一维字符型数组,然后再输出该字符型数组中的字符串。本题要求用指向字符的指针来处理字符型数组中的字符。main()    {chars[100],*p=s,ch;      scanf("%c",&ch);      while(ch!="n")          {*p=ch;            p++;            scanf("%c",&ch);          }      *p="";      p=s;      printf("%sn”,p);    }2、编一个函数,计算并返回三角形的面积。其中三角形的三个边长作为函数的参数。#include"math.h"      floatf(a, b,c)      floata,b,c;      {floatl,s;      l=(a+b+c)/2.0;      s=sqrt(l*(l-a)*(l-b)*(l-c));      return(s);      }'