最新信息学奥林匹克练习题.docx

上传人:b****8 文档编号:10732165 上传时间:2023-02-22 格式:DOCX 页数:26 大小:23.83KB
下载 相关 举报
最新信息学奥林匹克练习题.docx_第1页
第1页 / 共26页
最新信息学奥林匹克练习题.docx_第2页
第2页 / 共26页
最新信息学奥林匹克练习题.docx_第3页
第3页 / 共26页
最新信息学奥林匹克练习题.docx_第4页
第4页 / 共26页
最新信息学奥林匹克练习题.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

最新信息学奥林匹克练习题.docx

《最新信息学奥林匹克练习题.docx》由会员分享,可在线阅读,更多相关《最新信息学奥林匹克练习题.docx(26页珍藏版)》请在冰豆网上搜索。

最新信息学奥林匹克练习题.docx

最新信息学奥林匹克练习题

 第4章练习题

一、选择题

51、以下正确的if语句是____A

A、if (n>0) printf("%f",n);

   printf("%f",-n);

B、if (n>0)

      {n=n+m; printf("%f",n); }

  else printf("%f",-n);

C、if (n>0)

      {n=n+m; printf("%f",n); };

   else printf("%f",-n);

D、if (n>0)

      {n=n+m; printf("%f",n) };

   else printf("%f",-n);

52、以下程序__B__

    main( )printf("####"); }

A、输出:

****   B、输出:

####

C、存在语法错误   D、无输出结果

53、为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:

else子句总是与_B_

A、缩排位置相同的if配对     B、其之前最近且不带else的if配对

C、其之前最近的if配对       D、第一个if配对

54、若w、x、y、z、k均为int类型变量,则执行下面语句后的k的值是__A__

    w=1; x=2; y=3; z=4;

    k=(w

w:

x;

    k=(k

k:

y;

    k=(k

k:

z;

A、1   B、2   C、3   D、4

55、下面程序段所表示的数学函数关系是____

    x=-1;

    if (a!

=0)

if (a>0) x=1;

else x=0;1  (a>0)             0 (a>0)

C、0 (a<0)               D、-1 (a<0)

x=   -1 (a=0)   x=    1 (a=0)

1 (a>0)               0 (a>0)

 56、以下关于switch语句和break语句的描述中正确的是__D__

A、在switch语句中必须使用break语句

B、break语句只能用于switch语句体中

C、break语句只能用于循环语句中

D、在switch语句中使用break语句或continue语句的作用相同

 57、设有说明:

inta=1,b=0;则执行以下语句后的输出结果是__C__

  switch(a)

   {case1:

       switch(b)

        {case0:

printf("**0**\n");break;

         case1:

printf("**1**\n");break;

        }

case2:

printf("**2**\n");break;

   }C、**0**       D、switch语句中存在语法错误

  **1**        

  **2**

58、设有程序段__C__

    intx=10;

    while(x=0)

        x=x-1;

A、while循环执行10次     B、循环是无限循环

C、循环体语句一次也不执行   D、循环体语句只执行一次

59、语句while(!

y)中的表达式!

y等价于_C_

  A、y==0  B、y!

=1 C、y!

=0 D、y==1

60、以下关于do-while循环不正确的描述是_C_

A、d0-while的循环体至少执行一次

B、do-while循环由do开始,用while结束,在while(表达式)后面不能写分号

C、在do-while循环体中,一定要有能使while后面表达式的值变为零("假")的操作

D、do-while的循环体可以是复合语句

61、设x、y均是int类型变量,x值为100,则关于以下for循环的正确判断是_C_

    for (y=100;x!

=y;++x,y++)

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

  A、循环体只执行一次  B、是无限循环

  C、循环体一次都不执行D、for语句中存在语法错误

62、以下程序段中的do-while循环_C_

    m=-1;

    do

     {m=m*m;

     }while(!

m);

  A、是死循环 B、执行二次 C、执行一次  D、有语法错误

63、以下关于for循环的正确描述是_D_

  A、for循环只能用于循环次数已经确定的情况

  B、for循环是先执行循环体语句,后判断表达  for (k=2;k==0; )

C、在for循环中,不能用break语句跳出循环体

 D、for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来

     

66、以下程序段的执行结果是_A_

    int x=-3;

    do

     {printf("%d\n",x++);

     }while(!

x);

  A、-3                D、-3

  B、-2                   -2

  C、陷入死循环           -1

67、执行以下程序段后,y的值是_E_,x的值是_E_

    int x=1,y=10;

    do

     { y-=x;for(b=1,a=1;b<=50;b++)

   {if(a>=10)  break;

    if(a%2==1)

     {a+=5;

       continue;

     }

    a-=3;  x++; 

     }while(y--<0);

  A、10  B、6  C、7  D、8  E、4

69、以下程序段的执行结果是_A_

  int a,b;

  for(a=1;a<5;a+=2)

   {for(b=1;b<5;b++)

     printf("%2d",a*b);

    if(b==5)

     printf("\n");

   }

  A、1  2  3  4   B、1  2  3  4D、2  3  4

3  6  9  12       6  9  12 156  9  12

  C、2  3  4  6  9  1210 15 20

70、以下程序段中是死循环的是__

      x++;

     }while(y--<0);

  A、9  B、8  C、-2  D、2 E、4 F、3

68、执行以下程序段后a的值是__,b的值是__

  int a,b;

  

64、语句for(表达式1; ;表达式3)等价于_B_

  A、for(表达式1;0;表达式3)

  B、for(表达式1;1;表达式3)

  C、for(表达式1;表达式1;表达式3)

  D、for(表达式1;表达式3;表达式3)

65、若k为整型变量,则以下for循环的执行次数是_B_

for (k=2;k==0; )

     printf("%d",k--);

  A、无限次 B、0次  C、1次  D、2次

66、以下程序段的执行结果是_A_

    int x=-3;

    do

     {printf("%d\n",x++);

     }while(!

x);

  A、-3                D、-3

  B、-2                   -2

  C、陷入死循环           -1

67、执行以下程序段后,y的值是__,x的值是____

    int x=1,y=10;

    do

     { y-=x;

      x++;

     }while(y--<0);

  A、9  B、8  C、-2  D、2 E、4 F、3

68、执行以下程序段后a的值是_B_,b的值是_A_

  int a,b;for(b=1,a=1;b<=50;b++)

   {if(a>=10)  break;

    if(a%2==1)

     {a+=5;

       continue;

     }

    a-=3;   }

  A、10  B、6  C、7  D、8  E、4

69、以下程序段的执行结果是_A_

  int a,b;

  for(a=1;a<5;a+=2)

   {for(b=1;b<5;b++)

     printf("%2d",a*b);

    if(b==5)

     printf("\n");

   }

  A、1  2  3  4   B、1  2  3  4C、2  3  4

3  6  9  12       6  9  12 156  9  12

  D、2  3  4  6  9  1210 15 20

70、以下程序段中是死循环的是_C_

  A、int n=1;     B、int n=1;

    while(!

n)            do{n--;

     n++;                 }while(n);

  C、int n=1;          D、for(n=5;n<1; );

   do{n++;

     }while(n);

71、下面程序的运行结果是_C_

  main( )

  { int m=0;

    while(m<=2)

    {m++;

      printf("%d\n",m);

    }

  }

  A、1         B、1

                           2

  C、1                  D、1

2                     2

    3                     3

                           4

 

72、以下能正确计算1×2×3×…×10的程序段是_C_

   A、do                   B、do

      {k=1;n=1;            {k=1;n=0;

        n=n*k;                n=n*k;

     k++;                  k++;

      }while(k<=10);         }while(k<=10);

  C、k=1;n=1;          D、k=1;n=0;

     do                   do

      {n=n*k;             {n=n*k;

           k++;                  k++;

         }while(k<=10);        }while(k<=10);

73、下面程序的功能是计算1至10之间的奇数之和以及偶数之和。

请选择填空。

  main( )

  { intx,y,z,k;

    x=z=0;

    for(k=0;k<=10;k+=2)

      {x+=k;

        _D_;

        z+=y;

      }

    printf("偶数之和=%d\n",x);

    printf("奇数之和=%d\n",_B_);

  }

  ①、A、y=k-- B、y=k+1 C、y=k++ D、y=k-1

  ②、A、z-10 B、z     C、z-11  D、z-y

74、下面程序段的功能是计算1000!

的末尾含有多少个零。

请选择填空。

(提示:

只要算出1000!

中含有因数5的个数即可。

  for(m=0,n=5;n<=1000;n+=5)

    {t=n;

      while(_C_)

     { m++; t=t/5; }

   }

  A、t%5 B、t=t%5==0 C、t%5==0 D、t%5!

=0

75、若有以下程序段:

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

   {scanf("%d",&y);

{scanf("%d",&y);

     if(y<0)

       continue;

     printf("%3d",m); }

正确的描述是_C_

  A、当y<0时整个循环结束  B、y>=0时什么也不输出

  C、printf函数永远也不执行  D、最多允许输出100个非负整数

76、以下程序段等价于_C_

  for(k=100;k<=200;k++)

   { if(k%3==0)

     continue;

      printf("%4d",k);

   }

  A、for(k=100;(k%3)&&k<=200;k++)

        printf("%4d",k);

  B、for(k=100;(k%3)||k<=200;k++)

        printf("%4d",k);

  C、for(k=100;k<=200;k++)

        if(k%3!

=0) printf("%4d",k);

  D、for(k=100;k<=200;k++)

{if(k%3)

           printf("%4d",k);

         else

           continue;

         break;

        }

 二、填空题

20、以下程序的功能是:

输入三个整数n1、n2、n3,按从大到小的顺序进行输出。

请填空。

  main( )

  {int n1,n2,n3,temp;

   scanf("%d%d%d",&n1,&n2,&n3);

   if (___n2

     {temp=n2; n2=n3; n3=temp; }

   if (___n1

     {temp=n1; n1=n2; n2=temp; }

   printf("%d,%d,%d\n",n1,n2,n3);

}

21、以下程序的功能是:

输入一个小写字母,按字母排列顺序后移5个位置后输出(如把'a'变为'f','w'变成'b')。

请填空。

  #include "stdio.h"

  main( )

  {char c1;

   c1=getchar( );

   if(c1>='a'&&c1<='u')

    _c1=c1+5_;

   elseif(c1>='v'&&c1<='z')

       _c1=c1-21_;

   putchar(c1);

  }

22、输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其它字符不变。

请填空。

  main( )

  {char ch1;

   scanf("%c",ch1);

   if(_(ch1>=’A’&&ch1<=’Z’_)

     ch1=ch1+32;

   else if(ch1>='a'&&ch1<='z')

       _ch1=ch1-32_;

printf("%c",ch1);

  }

23、阅读下面的程序并回答问题。

  main( )

  {int m,n,x,y;

   scanf("%d,%d",&x,&y);

   m=1;

   n=1;

   if(x>0)

 m=m+1;

   if(x>y)

 n=m+n;

   else if(x==y)

           n=5;

        else

       n=2*m;

   printf("m=%d,n=%d",m,n);  }

问题:

为了使输出n=4,x的输入值应当为_一个大于零的数_,y的输入值应当为_一个小于x的数_。

24、以下程序的功能是:

根据输入的三条边的值判断是否能组成三角形,若能组成则输出三角形的面积和三角形的类型。

请填空。

#include"math.h"

  main( )

  {float a1,a2,a3;

   float s,area;

   scanf("%f%f%f",&a1,&a2,&a3);

   if(_a1+a2>a3&&a2+a3>a1&&a3+a1>a2_)

     {s=(a1+a2+a3)/2;

       area=sqrt(s*(s-a1)*(s-a2)*(s-a3));

       printf("%f",area);

       if(_a1==a2&&a2==a3&&a3==a1_)

          printf("等边三角形");

       elseif(_a1==a2||a2==a3||a3==a1_)

              printf("等腰三角形");

           elseif((a1*a1+a2*a2==a3*a3)

||(a1*a1+a3*a3==a2*a2)

||(a2*a2+a3*a3==a1*a1))

                 printf("直角三角形");

               else

                  printf("一般三角形");

     }

else

      printf("不能组成三角形");

  }

25、以下程序的功能是判断输入的年份是否是闰年。

请填空。

  main( )

  {int year,yes;

   scanf("%d",&year);

   if(year%400==0)

      yes=1;

   elseif(_year%4==0_)

          yes=1;

       else

      _yes=0_;

   if(yes)

     printf("%dis",year);

   else

    printf("%disnot",year);

   printf(" aleapyear.\n");

  }

26、以下程序段根据输入的截止日期(年:

yend,月:

mend,日:

dend)和出生日期(byear,bmonth,bday),计算出实际年龄。

请填空。

int yend,mend,dend,byear,bmonth,bday,age;

  age=yend-byear;

  if(mend_<_bmonth)

    age--;

  elseif(mend_==_bmonth&&dend_<_bday)

    age--;

     ……

27、如果运行以下程序段时输入字符“t”,则程序段的运行结果是_T_

  main( )

  {char c1;

   scanf("%c",&c1);

   c1=(c1>='A'&&c1<='Z')?

(c1+32):

c1;

   c1=(c1>='a'&&c1<='z')?

(c1-32):

c1;

   printf("%c",c1);

  }

28、以下程序的功能是找出x、y、z三个数中的最小值。

请填空。

  main( )

  {int x=4,y=5,z=8;

   int u,v;

u=x

_x:

y_;

   v=u

_u:

z_;

   printf("%d",v);

}

29、若运行以下程序时,输入下面指定数据,则运行结果为_4455675_

  #include

  main( )

  {int ch;

   while((ch=getchar( ))!

='\n')

    {switch(ch-'1')

     {case 0:

      case 1:

putchar(ch+3);

case 2:

putchar(ch+3);break;

          case 3:

putchar(ch+3);

          default:

 putchar(ch+1);break;

       }

     }

   printf("\n");

  }

  输入数据(从第一列开始):

     1234<回车>

30、将以下嵌套的if语句改写成对应的switch语句,使其完成相同的功能。

请填空。

(假设mark的取值在1至100之间。

  if语句:

     if(mark<60) k=1;

     elseif(mark<70) k=2;

        elseif(mark<80) k=3;

           elseif(mark<90) k=4;

           elseif(mark<=100) k=5;

  switch语句:

      switch(_mark_)

      {_case:

5_  k=1;break;

       case 6:

     k=2;break;

          case 7:

     k=3;break;

            case 8:

     k=4;break;

          _default_   k=5;

}

 

 

 

 

 

31、将以下含有switch语句的程序段改写成对应的含有非嵌套if语句的程序段,请填空。

  含有switch语句的程序段:

  int s,t,m;

  t=(int)(s/10);

  switch(t)

   {case 10:

m=5;break;

   case 9:

 m=4;break;

   case 8

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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