分享

c语言练习题

 昵称1507678 2010-05-24

C语言习题集

 

习题一

一.填空题

1C程序是由(      )构成的,一个C程序中至少包含(      。因此,(        ) C程序的基本单位。

 

2C程序注释是由(    ) (     ) 所界定的文字信息组成的。

 

3.函数体一般包括(      ) (        )

 

二.判断题

1.一个C程序的执行总是从该程序的main函数开始,在main函数最后结束。  

2main函数必须写在一个C程序的最前面。

3.一个C程序可以包含若干的函数。【

4C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。但是可以增加程序的可读性。【

5C程序的注释只能是一行。【

6C程序的注释不能是中文文字信息。【

8.可以使用Turbo C来编译和连接一个C程序。【

9.可以使用Turbo C来运行一个C程序。【

10.可以使用Turbo C来实时调试(即动态调试)一个C程序。【

 

三.简答题

1 写出一个C程序的基本结构。

 

2 简要叙述使用Turbo C 2.0编译和运行一个程序的步骤。

 

四.编程题

1 提高题:参照课本例1.1,试编写一个C程序,输出如下信息。(提示:使用键盘上的一些符号)。

     

2 提高题:试编写一个C程序,输出如下信息。

      试试看,可以输出其他组合图案吗?

习题二

一.选择题

1、合法的字符常量是

A ‘\t’   B) “A”   C ‘a’     D’\x32’

 

2 合法的字符常量是

A ‘\084’   B) ‘\84’   C ‘ab’     D’\x43’

 

3、是C语言提供的合法的数据类型关键字。

A Float   B signed   C integer   DChar

 

4、在以下各组标识符中,合法的标识符是。

1AB01    Btable_1     C 0_t     D k%

2AFast_   B void      Cpbl      D<book>

3Axy_   Blongdouble   C*p       DCHAR

(4)  A) sj     B)Int           C)_xy       D)w_y23

 

5、属于合法的C语言长整型常量的是

A5876273   B0L   C2E10    D(long)5876273

 

6、下面选项中,不是合法整型常量的是

A160    B)-0xcdg   C)-01     D)-0x48a

 

7、判断int  x = 0xaffbcx的结果是

A)赋值非法  B)溢出   C)为affb   D)为ffbc

 

8、下面选项中,均是合法浮点数的是

A)+1e1    B)-.60    C123e    D)-e3

A)5e9.4     B)12e4     C)1.2e.4  D).8e4

A)03e2        B)8e5     C)2e1   D)5.e0

 

9、在C语言中,要求参加运算的数必须时整数的运算符是

A/     B*     C%      D) =

 

10、在C语言中,字符型数据在内存中以    形式存放。

A)原码    BBCD    C)反码     DASCII

 

11、下列语句中,符合语法的赋值语句是

Aa7bca+7      Ba7b++=a7

Ca=(7bb++,a7)  Da7bca7

 

12、是非法的C语言转义字符。

A‘\b’     B  ‘\0xf’   C‘\037’   D‘\’’

 

13、对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中, 是正确的。

A)语法错误   Bf5.0   C)f0.0   Df2.0

 

14、与代数式(x*y)/(u*v) 不等价的C语言表达式是。

Ax*y/u*v   Bx*y/u/v    Cx*y/(u*v)    Dx/(u*v)*y

 

15、在C语言中,数字029是一个。

A)八进制数 B)十六进制数 C)十进制数 D)非法数

 

16C语言中整数-8在内存中的存储形式为

A1111111111111000    B100000000001000

C000000000001000    D1111111111110111

 

17、对于char cx=’ \039’;语句,正确的是。

A)不合法               BcxASCII值是33

Ccx的值为四个字符     Dcx的值为三个字符

 

18、若int k=7,x=12;则能使值为3的表达式是

Ax%=(k%=5)      Bx%=(kk%5)

Cx%=kk%5     D(x%=k)(k%=5)

 

19、为了计算s=10!(即10的阶乘),则s变量应定义为

Aint    Bunsigned   Clong    D)以上三种类型均可

 

20、以下所列的C语言常量中,错误的是。

A0xFF    B1.2e0.5     C2L    D’\72’

 

21、假定xydouble型,则表达式x=2y=x+3/2的值是

A3.500000    B3    C2.000000    D3.000000

 

22、设变量nfloat型,mint类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是

An=(n*100+0.5)/100.0     Bm=n*100+0.5,n=m/100.0

Cn=n*100+0.5/100.0      Dn=(n/100+0.5)*100.0

 

23、以下合法的赋值语句是

Ax=y=100    Bd――    Cx+y     Dc=int(a+b)

 

24、下选项中不属于C语言的类型是

Asigned short int    Bunsigned long int

Bunsigned int       Dlong short

 

25、设以下变量均为int类型,则值不等于7的表达式是

A(x=y=6,x+y,x+1)        B(x=y=6,x+y,y+1)

C(x=6,x+1,y=6,x+y)      D(y=6,y+1,x=y,x+1)

 

26、在16C编译系统上,若定义long a;,则能给a40000的正确语句是

Aa=20000+20000   Ba=4000*10

C3000010000    Da=4000L*10L

 

 

 

二.填空题

1.C语言中(以16PC机为例),一个char数据在内存中所占字节数为     ,其数值范围为      ;一个int数据在内存中所占字节数为     ,其数值范围为     ;一个long数据在内存中所占字节数为    ,其数值范围为                 ;一个float数据在内存中所占字节数为      ,其数值范围为          

 

2.C语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符必须为                          

 

3.字符常量使用一对      界定单个字符,而字符串常量使用一对      来界定若干个字符的序列。

 

4.C语言中,不同运算符之间运算次序存在      的区别,同一运算符之间运算次序存在       的规则。

 

5.x,i,j,k都是int型变量,表达式x=(i=4,j=16,k=32)计算后,x的值为   

 

6.x=2.5,a=7,y=4.7, x+a%3*(int)(x+y)%2/4        

 

7.a=2,b=3,x=3.5,y=2.5,(float)(a+b)/2+(int)x%(int)y          

 

8.数学式子             C语言表达式为             

 

9.数学式子             C语言表达式为             

 

10.已知:char a=’a’,b=’b’,c=’c’,i;则表达式i=a+b+c的值为           

 

11.已知int a=12,n=5;则:表达式运算后a的值各为            

a+=a

a-=2

a*=2+3

a/=a+a

n%=(n%=2)

a+=a-=a*=a

 

12.int a;  float f;  double  i  ;则表达式10+’a’+i*f值的数据类型是    

 

13.aint型变量,则表达式 (a=4*5,a*2) , a+6的值为         

 

14.假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为      

 

15.已知a,b,c是一个十进制数的百位,十位,个位,则该数的表达式是     

 

16.定义:double x=3.5,y=3.2;则表达式(int)x*0.5的值是      ,表达式y+=x++的值是     

 

17.定义:int m=5, n=3;则表达式m/=n+4的值是     ,表达式m=(m=1,n=2,n-m)的值是    ,表达式m+=m-=(m=1)*(n=2)的值是      

 

18.表达式5%(-3)的值是      ,表达式-5%(-3)的值是     

 

19.aint变量,则执行表达式a=25/3%3后,a的值是        

 

20.数学式子      C语言表达式为:                

 

 

 

三.判断题

1.C程序中对用到的所有数据都必须指定其数据类型。【

2.一个变量在内存中占据一定的存储单元。【

3.一个实型变量的值肯定是精确的。【

4.对几个变量在定义时赋初值可以写成:int a=b=c=3;

5.自增运算符(++)或自减运算符(--)只能用于变量,不能用于常量或表达式。【

6.C程序的表达式中,为了明确表达式的运算次序,常使用括号()。【

7.%运算符要求运算数必须是整数。【

8.a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数。【

9.C程序中,逗号运算符的优先级最低。【

10.C语言不允许混合类型数据间进行运算。【

 

 

 

四.简答题

1.为什么C语言的字符型可以进行数值运算?

 

2.简述‘a’“a”的区别。

 

3.程序:int m=12; m=15;为什么整型变量m的值在运算后不是当初的12,而是15

 

4.将下面各数用八进制和十六进制数表示:

十进制   32   1   32768   2002   128   0

八进制

十六进制

 

6.华氏温度F与摄氏温度c的转换公式为:c=(F-32)*5/9 ,float c, F; c=5/9*(F-32)是其对应的C语言表达式吗?如果不是,为什么?

 

 

五.程序阅读题

1.写出以下程序运行的结果。

main ( )

{

  char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’116’;

  printf(“a%c b%c\tc%c\tabc\n”,c1,c2,c3);

  printf(“\t\b%c %c”,c4,c5);

}

 

 

 

2.写出以下程序运行的结果。

main ( )

{

  int i,j,m,n;

  i=8;

  j=10;

  m=++i;

  n=j++;

  printf(“%d,%d,%d,%d”,i,j,m,n);

}

 

 

 

六.编程题

1.假设m是一个三位数,则写出将m的个位,十位,百位反序而成的三位数(例如:123反序为321)的C语言表达式。

2.已知int x=10,y=12;写出将xy的值互相交换的表达式。

习题三

一.选择题

1.C语言的程序一行写不下时,可以。

A)用逗号换行                      B)用分号换行

C)在任意一空格处换行              D)用回车符换行

 

2.putchar ( )函数可以向终端输出一个。

A)整型变量表达式值      B)实型变量值

C)字符串                D)字符或字符型变量值

3.执行下列程序片段时输出结果是。

unsigned int a=65535;

printf(“%d”,a);

A65535     B)-1    C)-32767      D1

4.执行下列程序片段时输出结果是。

float x=-1023.012

printf(“\n%8.3f,”,x);

printf(“%10.3f”,x);

A1023.012, -1023.012          B-1023.012,-1023.012

C1023.012,-1023.012           D-1023.012, -1023.012

5.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为1020AB,当从第一列开始输入数据时,正确的数据输入方式是

int a1,a2; char c1,c2;

scanf(“%d%c%c”,&a1,&a2,&c1,&c2);

A10A 20B                 B10 A 20 B

C10A20B                 C10A20 B

 

6.对于下述语句,若将10赋给变量k1k3,将20赋给变量k2k4,则应按 方式输入数据。

        int k1,k2,k3,k4;

        scanf(“%d%d”,&k1,&k2);

        scanf(“%d,%d”,&k3,&k4);

A1020        B10 20           C10,20    

D10 20    1020   10 20    10,20    10,20

 

7.执行下列程序片段时输出结果是。

        int x=13,y=5;

        printf(“%d”,x%=(y/=2));

A3     B2     C1        D0

 

8.下列程序的输出结果是。

        main ( )

        { int x=023;

printf(“%d”,--x);

        }

A17      B18      C23     D24

 

9.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,AB,当从第一列开始输入数据时,正确的输入方式是。

        int a1,a2; char c1,c2;

        scanf(“%d%d”,&a1,&a2);

        scanf(“%c%c”,&c1,&c2);

A1020AB      B10 20

                                            AB

C10 20 AB     D10 20AB

 

10.执行下列程序片段时输出结果是。

        int x=5,y;

        y=2+(x+=x++,x+8,++x);

        printf(“%d”,y);

A13    B14     C15     D16

 

11.若定义xdouble型变量,则能正确输入x值的语句是。

Ascanf(“%f”,x);          Bscanf(“%f”,&x);

Cscanf(“%lf”,&x);        Dscanf(“%5.1f”,&x);

 

12.若运行时输入:12345678,则下列程序运行结果为。

main ( )

{ int a,b;

    scanf(“%2d%2d%3d”,&a,&b);

    printf(“%d\n”,a+b);

}

A46     B579         C5690        D)出错

13.已知i,j,kint型变量,若从键盘输入:1,2,3<回车>,使I的值为1j的值为2k的值为3,以下选项中正确的输入语句是。

Ascanf(“%2d%2d%2d”,&i,&j,&k);

Bscanf(“%d_%d_%d”,&i,&j,&k);

Cscanf(“%d,%d,%d”,&i,&j,&k);

Dscanf(“i=%d,j=%d,k=%d”,&i,&j,&k);

14.int x,y; double z;以下不合法的scanf函数调用语句是

Ascanf(“%d%lx,%le”,&x,&y,&z);

Bscanf(“%2d*%d%lf”,&x,&y,&z);

Cscanf(“%x%*d%o”,&x,&y);

Dscanf(“%x%o%6.2f”, &x,&y,&z);

 

15.有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量 a的值为1b的值为3c的值为2,则正确的数据输入方式是   

A132                  B1,3,2

Ca=1 b=3 c=2           Da=1,b=3,c=2

 

 

 

二.填空题

1.一个C程序由若干个     文件组成,而一个这样的文件可以由若干个                   以及       组成。

 

2.C语句可以分为                                   5种类型。

 

3.C控制语句有          种。

 

4.一个表达式要构成一个C语句,必须           

 

5.复合语句是用一对           界定的语句块。

 

6.printf函数和scanf函数的格式说明都使用        字符开始。

 

7.scanf处理输入数据时,遇到下列情况时该数据认为结束:(1     

2     ,(3     

 

8.已有int i,j; float x;为将-10赋给i12赋给j410.34赋给x;则对应以下scanf函数调用语句的数据输入形式是       

9.C语言本身不提供输入输出语句,其输入输出操作是由      来实现的。

 

10.一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令:                         

 

 

 

三.程序阅读题

1.用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’,问在键盘上如何输入?

          

main ( )

 { int a,b;

    float x,y;

     char c1,c2;

      scanf(“a=%d b=%d”,&a,&b);

      scanf(“ %f %e”,&x,&y);

       scanf(“ %c %c”,&c1,&c2);

}

 

 

 

2.写出以下程序的输出结果。

        main ( )

        { int y=3,x=3,z=1;

           printf(“%d %d\n”,(++x,y++),z+2);

        }

 

 

 

3.写出以下程序的输出结果。

        main ( )

        { int a=12345;

           float b=-198.345, c=6.5;

           printf(“a=%4d,b=%-10.2e,c=%6.2f\n”,a,b,c);

        }

 

 

4.写出以下程序的输出结果。

        main ( )

        { int x=-2345;

           float y=-12.3;

           printf(“%6D,%06.2F”,x,y);

        }

 

 

 

5. 写出以下程序的输出结果。

        main ( )

        { int a=252;

           printf(“a=%o a=%#o\n”,a,a);

           printf(“a=%x a=%#x\n”,a,a);

        }

 

 

 

6. 写出以下程序的输出结果。

        main ( )

        { int x=12; double a=3.1415926;

           printf(“%6d##,%-6d##\n”,x,x);

           printf(“%14.101f##\n”,a);

        }

 

 

 

四.程序填空题

1.下列程序的输出结果是16.00,请填(1)空使程序完整。

main ( )

{ int a=9,b=2;

   float x=[   1   ]  ,  y=1.1 , z;

   z=a/2+b*x/y+1/2;

   printf(“%5.2f\n”,z);

}

 

 

 

五.编程题

1.已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序来。

 

 

2.a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

  a= 3 b= 4 c= 5

  x=1.200000,y=2.400000,z=-3.600000

  x+y= 3.60  y+z=-1.20  z+x=-2.40

  u= 51274  n= 128765

  c1=’a’ or 97(ASCII)

  c2=’b’ or 98(ASCII)

 

 

3.设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。用scanf输入数据,输出计算结果;输出时要求有文字说明,取小数点后2位数字,请编写程序。

 

 

4.编程序:用getchar函数读入两个字符给c1,c2,然后分别用putcharprintf函数输出这两个字符。并思考以下问题:(1)变量c1,c2应定义为字符型或整型?或两者皆可?(2)要求输出C1C2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整型变量与字符型变量是否在任何情况下都可以互相替代?如:

char c1,c2 int c1,c2

是否无条件地等价?

 

 

 

 

 

 

 

 

 

 

 

 

习题四

一.选择题

1.逻辑运算符两侧运算对象的数据类型。

A)只能是01                 B)只能是0或非0正数

C)只能是整型或字符型数据      D)可以是任何类型的数据

 

2.下列表达式中, 不满足x的值为偶数时值为真,为奇数时值为假的要求。

  Ax%2==0    B!x%2!=0    C(x/2*2-x)==0    D!(x%2)

 

3.以下程序片段。

int x=2,y=3;

printf(  );

  A)什么都不输出         B)输出为:***x=2

  C)输出为:###y=2       D)输出为:###y=3

 

4.能正确表示x的取值在[1,10][200,210]范围内为真,否则为假的表达式是。

  A(x>=1) && (x<=10) && (x>=200) && (x<=210)

  B(x>=1) | | (x<=10) | | (x>=200) | | (x<=210)

  C(x>=1) && (x<=10) | | (x>=200) && (x<=210)

  D(x>=1) | | (x<=10) && (x>=200) | | (x<=210)

 

5.C语言对嵌套if语句的规定是:else总是与

  A)其之前最近的if配对      B)第一个if配对

  C)缩进位置相同的if配对    D)其之前最近的且尚未配对的if配对

 

6.设:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b) && (n=c>d)n的值为

A1   B2   C3    D4

 

7.下面      是错误的if语句(设int x,a,b;

  Aif (a=b) x++;        Bif (a=<b) x++;

  Cif (a-b) x++;        Dif ( x ) x++;

 

8.以下程序片段

        main ( )

        { int x=0,y=0,z=0;

if (x=y+z)

        printf(“***”);

else

        printf(“###”);

        }

  A)有语法错误,不能通过编译      B)输出:***

  C)可以编译,但不能通过连接,所以不能运行    D)输出:###

 

9.对下述程序, 是正确的判断。

        main ( )

        { int x,y;

scanf(“%d,%d”,&x,&y);

if (x>y)

          x=y;y=x;

else

           x++;y++;

printf(“%d,%d”,x,y);

        }

  A)有语法错误,不能通过编译    B)若输入34,则输出45

  C)若输入43,则输出34   D)若输入43,则输出45

 

10.w=1,x=2,y=3,z=4,则条件表达式w<x ? w : y<z ? y : z的值是。

   A4    B3     C2      D1

 

11.下述表达式中,   可以正确表示x≤0x≥1的关系。

  A(x>=1) | | (x<=0)    Bx>=1 | x<=0

  Cx>=1 && x<=0     D(x>=1) && (x<=0)

 

12.下述程序的输出结果是。

main ( )

{ int a=0,b=0,c=0;

   if (++a>0 | | ++b>0)

     ++c;

   printf(“%d,%d,%d”,a,b,c);

}

  A0,0,0    B1,1,1    C1,0,1     D0,1,1

 

13.下述程序的输出结果是

main ( )

{ int x=-1,y=4,k;

   k=x++<=0 && !(y--<=0);

   printf(“%d,%d,%d”,k,x,y);

}

  A0,0,3    B0,1,2    C1,0,3    D1,1,2

 

14.以下程序输出结果是       

main ( )

{ int x=1,y=0,a=0,b=0;

   switch(x) {

      case 1:switch (y) {

              case 0 : a++ ; break ;

              case 1 : b++ ; break ;

              }

      case 2:a++; b++; break;

      case 3:a++; b++;

}

  printf(“a=%d,b=%d”,a,b);

}

  Aa=1,b=0    Ba=2,b=1    Ca=1,b=1    Da=2,b=2

 

15.下述程序的输出结果是

main ( )

{ int a,b,c;

    int x=5,y=10;

    a=(--y=x++) ? –y : ++x ;

    b=y++ ; c=x ;

    printf(“%d,%d,%d”,a,b,c);

}

  A6,9,7    B6,9,6    C7,9,6    D )7,9,7

 

16.a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是

if (a<b)

if (c<d) x=1;

else

   if (a<c)

     if (b<d) x=2;

     else x=3;

   else x=6;

else x=7;

  A1    B2    C3    D4

 

17.在下面的条件语句中(其中S1S2表示C语言语句),只有 一个在功能上与其他三个语句不等价。

  Aif (a) S1; else S2;       Bif (a==0) S2; else S1;

  Cif (a!=0) S1; else S2;    Dif (a==0) S1; else S2;

 

18.int i=0;执行下列程序后,变量i的正确结果是

switch (i) {

    case 9: i+=1 ;

    case 10: i+=1 ;

    case 11: i+=1 ;

    default : i+=1 ;

}

  A10    B11     C12     D13

 

19.若有说明语句int i=5,j=4,k=6;float f;则执行f=(i<j&&i<k)?i:(j<k)?j:k;语句后,f的值为         

  A4.0    B5.0     C6.0      D7.0

 

20.若有定义:int a=3,b=2,c=1;并有表达式:a%b,a>b>c,b&&c+1,c+=1,则表达式值相等的是         

  A    B    C     D

 

 

 

二.填空题

1.C语言提供6种关系运算符,按优先级高低它们分别是                                                等。

 

2.C语言提供三种逻辑运算符,按优先级高低它们分别是                        

 

3.a=3,b=4,c=5,写出下面各逻辑表达式的值。

表达式                  表达式运算后的值

a+b>c && b==c

!(a>b) && !c || 1

!(a+b) + c –1 && b + c/2

 

4.写出数学式子        C语言表达式         

 

5.将条件“y能被4整除但不能被100整除,或y能被400整除写成逻辑表达式                     

 

6.x,y,z均为int型变量;写出描述“x,yz中有两个为负数C语言表达式:                                                                      

 

7.已知A=7.5,B=2,C=3.6,表达式A>B && C>A || A<B && !C>B的值是           

 

8.int x=3,y=-4,z=5;则表达式(x&&y)==(x||z)的值为              

 

9.若有x=1,y=2,z=3,则表达式(x<y?x:y)==z++的值是               

 

10.执行以下程序段后,a=     ,b=    ,c=     

int x=10,y=9 ;

int a,b,c ;

a = (x--=y++) ? x-- : y++ ;

b = x++ ;

c = y ;

 

 

 

三.判断题

1.if语句中的表达式不限于逻辑表达式,可以是任意的数值类型。【

2.switch语句可以用if语句完全代替。【

3.switch语句的case表达式必须是常量表达式。【

4.if语句,switch语句可以嵌套,而且嵌套的层数没有限制。【

5.条件表达式可以取代if语句,或者用if语句取代条件表达式。【

6.switch语句的各个casedefault的出现次序不影响执行结果。【

7.多个case可以执行相同的程序段。【

8.内层break语句可以终止嵌套的switch,使最外层的switch结束。【

9.switch语句的case分支可以使用{ }复合语句,多个语句序列。【

10.switch语句的表达式与case表达式的类型必须一致。【

 

 

 

四.简答题

1.C语言中如何表示?系统如何判断一个量的

 

 

2.请将以下语句改成switch语句。

if ((s>0) && (s<=10))

  if ((s>=3) && (s<=6)) x=2;

  else if ((s>1) && (s>8)) x=3;

      else x=1;

else x=0;

 

 

 

五.程序阅读题

1.若运行时输入100,写出以下程序的运行结果。

main ( )

{ int a ;

    scanf(“%d”,&a);

    printf(“%s”,(a%2!=0)?”No”:”Yes”);

}

 

 

2.写出以下程序的运行结果。

main ( )

{ int a=2,b=7,c=5;

    switch (a>0) {

       case 1: switch (b<0) {

              case 1: printf(“@”); break ;

              case 2: printf(“!”); break ;

             }

       case 0: switch (c==5) {

              case 1: pritnf(“*”) ; break ;

              case 2: printf(“#”) ; break ;

              default : printf(“#”) ; break ;

             }

       default : printf(“&”);

    }

    printf(“\n”);

}

 

 

 

六.程序判断题

1.下面程序将输入的大写字母改写成小写字母输出,其他字符不变;请判断下面程序的正误,如果错误请改正过来。

main ( )

{ char c;

    c = getchar ( ) ;

    c = (c>=’A’ | | c<=’Z’) ? c-32 : c+32 ;

    printf(“%c”,c);

}

 

 

 

 2.下面程序输入两个运算数x,y和一个运算符号op,然后输出该运算结果的值,例如输入3+5得到结果8;请判断下面程序的正误,如果错误请改正过来。

    main ( )

    {

         float x,y,r;

         char op ;

         scanf(“%f%c%f”,&x,&op,&y);

         switch (op) {

            case ‘+’ : r=x+y ;

            case ‘-’ : r=x+y ;

            case ‘*’ : r=x+y ;

            case ‘/’ : r=x+y ;

        }

        printf(“%f”,r);

    }

 

 

七.程序填空题

1.根据以下函数关系,对输入的每个x值,计算出相应的y值,请填(3)空使程序完整。

    main ( )

    {

       int x,c,m;

       float y;

       scanf(“%d”,&x);

       if (1 ) c=-1;

       else c=2 ;

       switch (c) {

          case –1 : y=0 ; break ;

          case 0 : y=x ; break ;

          case 1 : y=10 ; break ;

          case 2 :

          case 3 : y=-0.5*x+20 ; break ;

          default : y=-2 ;

       }

       if (3 )

          printf (“y=%f”,y);

       else

          printf(“error!”);

}

 

 

 

2.以下程序输出x,y,z三个数中的最小值,请填(2)空使程序完整。

main ( )

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

   int u,v;

   u = x<y ? 1 ;

   v = u<z ? 2 ;

   printf (“%d”,v);

}

 

 

 

 

八.编程题

1.有三个整数a,b,c,由键盘输入,输出其中最大的数。

 

 

2.编程输入整数ab,若 大于100,则输出 百位以上的数字,否则输出两数之和。

 

 

4.给出一百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’90分以上为’A’8089分为’B’7079分为’C’6069分为’D’60分以下为’E’

 

 

5.提高题:给一个不多于5位的正整数,要求:求出它是几位数;分别打印出每一位数字;按逆序打印出各位数字,例如原数是321,应输出123

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

习题五

一.选择题

1.下面程序段

int k=2;

while (k=0) {printf(“%d”,k);k--;}

则下面描述中正确的是        

  Awhile循环执行10         B)循环是无限循环

  C)循环题语句一次也不执行     D)循环体语句执行一次

 

2.下述程序段中,        与其他程序段的作用不同。

  A k=1;                 B k=1;

while (1) {                  Repeat :

     s+=k ;                      s+=k ;

     k=k+1 ;                     if (++k<=100)

     if (k>100) break ;             goto Repeat

}                          printf(“\n%d”,s) ;

printf(“\n%d”,s) ;

 

  Cint k,s=0;                 D k=1;

for (k=1;k<=100;s+=++k);        do

printf(“\n%d”,s) ;                s+=k;

while (++k<=100) ;

printf(“\n%d”,s) ;

 

3.以下程序段的循环次数是           

  for (i=2; i==0; )    printf(“%d” ,  i--) ;

  A)无限次        B0     C1       D2

 

4.下面程序的输出结果是           

        main ( )

        { char c=’A’;

int k=0;

do {

      switch (c++) {

          case ‘A’ : k++ ; break ;

          case ‘B’ : k-- ;

          case ‘C’ : k+=2 ; break ;

          case ‘D’ : k%=2 ; continue ;

          case ‘E’ : k*=10 ; break ;

          default : k/=3 ;

    }

    k++;

} while (c<’G’) ;

printf (“k=%d”,k) ;

}

  Ak=3     Bk=4       Ck=2         Dk=0

 

5.下面程序的输出结果是

        main ( )

        { int x=9;

           for (; x>0; x--) {

if (x%3==0) {

       printf(“%d”,--x);

       continue ;

}

           }

        }

  A741         B852          C963          D875421

 

6.以下不是死循环的程序段是

  A int i=100;                       Bfor ( ; ; ) ;

         while (1) {

i=i%100+1 ;

if (i>100) break ;

             }

  C int k=0;                       Dint s=36;

do { ++k; } while (k>=0);             while (s) ; --s ;

 

7.下述程序段的运行结果是         

int a=1,b=2, c=3, t;

while (a<b<c) {t=a; a=b; b=t; c--;}

printf(“%d,%d,%d”,a,b,c);

  A1,2,0        B2,1,0        C1,2,1        D2,1,1

 

8.下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择        填空。

main ( )

{ int m=0,n=0;

   char c;

   while (( ) ! ’\n’)

{

       if (c>=’A’ && c<=’Z’) m++;

       if (c>=’a’ && c<=’z’) n++;

   }

}

  Ac=getchar( )     Bgetchar( )    Cc==getchar( )    Dscanf(“%c”,&c)

 

9.下述语句执行后,变量k的值是

int k=1;

while (k++<10);

  A10        B11       C9           D)无限循环,值不定

 

10.下面程序的输出结果是

main ( )

{ int k=0,m=0,i,j;

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

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

        k++ ;

    k-=j ;

 }

 m = i+j ;

 printf(“k=%d,m=%d”,k,m) ;

}

  Ak=0,m=3   Bk=0,m=5   Ck=1,m=3   Dk=1,m=5

 

11.下面for循环语句

        int i,k;

        for (i=0, k=-1; k=1; i++, k++)

           printf(“***”);

  A)判断循环结束的条件非法    B)是无限循环

  C)只循环一次                D)一次也不循环

 

12.语句while (!E); 括号中的表达式!E等价于           

  AE==0    BE!=1    CE!=0    DE==1

 

13.以下是死循环的程序段是

  A for (i=1; ; ) {

          if (i++%2==0) continue ;

          if (i++%3==0) break ;

}

  B i=32767;

do { if (i<0) break ; } while (++i) ;

  C for (i=1 ; ;)  if (++I<10) continue ;

  D) i=1 ;  while (i--);

 

14.执行语句for (i=1;i++<4;) ; 后变量i的值是       

  A3     B4        C5          D)不定

 

15.以下程序段

x=-1;

do

    { x=x*x; }

while (!x);

  A)是死循环  B)循环执行2  C)循环执行1   D)有语法错误

 

16.下面程序的功能是在输入的一批正数中求最大者,输入0结束循环,选择           填空。

main ( )

{ int a,max=0;

   scanf(“%d”,&a);

   while ( ) {

      if (max<a) max=a ;

      scanf (“%d”,&a);

   }

   printf(“%d”,max);

}

  Aa==0     Ba        C!a==1         D!a

 

17.以下不是死循环的语句是

  Afor (y=9,x=1;x>++y;x=i++) i=x ;

  Bfor ( ; ; x++=i ) ;

  Cwhile (1) { x++ ; }

  Dfor (i=10 ; ; i--) sum+=i ;

 

18.下面程序段的运行结果是

x=y=0;

while (x<15) y++,x+=++y ;

printf(“%d,%d”,y,x);

  A20,7    B6,12        C20,8       D8,20

 

19.以下for循环的执行次数是         

for (x=0,y=0; (y=123) && (x<4) ; x++) ;

  A)无限循环  B)循环次数不定   C4   D3

 

20.若运行以下程序时,输入2473,则程序的运行结果是

main ( )

{ int c;

   while ((c=getchar( )) ! =’\n’)

      switch (c-‘2’) {

         case 0 :

         case 1 : putchar (c+4) ;

         case 2 : putchar (c+4) ; break ;

         case 3 : putchar (c+3) ;

         default : putchar (c+2) ; break ;

      }

   printf(“\n”);

}

  A668977   B668966   C66778777   D6688766

 

 

 

二.填空题

1.C语言三个循环语句分别是     语句,    语句和     语句。

 

2.至少执行一次循环体的循环语句是       

 

3.循环功能最强的循环语句是      

 

5.程序段

        for (a=1,i=-1; -1<i<1; i++)

          { a++ ; printf(“%2d”,a); } ;

          printf(“%2d”,i) ;

  的运行结果是          

 

 

 

三.判断题

1.while循环中允许使用嵌套循环,但只能是嵌套while循环。【

2.在实际编程中,do-while循环完全可以用for循环替换。【

3.continue语句只能用于三个循环语句中。【

4.在不得已的情况下(例如提高程序运行效率),才使用goto语句。【

5.语句标号与C语言标识符的语法规定是完全一样的。【

6.for循环的三个表达式可以任意省略,while,do-while也是如此。【

7.do-while允许从外部转到循环体内。【

8.while的循环控制条件比do-while的循环控制条件严格。【

9.do-while循环中,根据情况可以省略while。【

10.do-while循环的while后的分号可以省略。【

 

 

 

四.程序阅读题

1.写出下面程序运行的结果。

main ( )

{ int x,i ;

   for (i=1 ; i<=100 ; i++) {

      x=i;

      if (++x%2==0)

         if (++x%3==0)

            if(++x%7==0)

               printf(“%d ”,x) ;

   }

}

 

 

 

2.写出下面程序运行的结果。

main ( )

{ int i,b,k=0 ;

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

       b=i%2;

       while (b--=0) k++ ;

   }

   printf(“%d,%d”,k,b);

}

 

 

 

3.写出下面程序运行的结果。

main ( )

{ int a,b;

   for (a=1,b=1 ; a<=100 ; a++) {

      if (b>=20) break;

      if (b%3==1) { b+=3 ; continue ; }

      b-=5;

   }

   printf(“%d\n”,a);

}

 

 

 

4.写出下面程序运行的结果。

main ( )

{ int k=1,n=263 ;

   do { k*= n%10 ; n/=10 ; } while (n) ;

   printf(“%d\n”,k);

}

 

 

 

5.写出下面程序运行的结果。

main ( )

{ int i=5 ;

  do {

     switch (i%2) {

        case 4 : i-- ; break ;

        case 6 : i-- ; continue ;

     }

     i-- ; i-- ;

     printf(“%d”,i);

  }while (i>0) ;

}

 

 

 

6.写出下面程序运行的结果。

main ( )

{ int i,j;

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

      for (j=4 ; j>=0; j--) {

        if ((j+i)%2) {

           j-- ;

           printf(“%d,”,j);

           continue ;

        }

        --i ;

        j-- ;

        printf(“%d,”,j) ;

      }

   }

}

 

 

 

7.写出下面程序运行的结果。

main ( )

{ int a=10,y=0 ;

   do {

      a+=2 ; y+=a ;

      if (y>50) break ;

   } while (a=14) ;

   printf(“a=%d y=%d\n”,a,y) ;

}

 

8.写出下面程序运行的结果。

main ( )

{ int i,j,k=19;

   while (i=k-1) {

      k-=3 ;

      if (k%5==0) { i++ ; continue ; }

      else if (k<5) break ;

      i++;

   }

   printf(“i=%d,k=%d\n”,i,k);

}

 

 

 

9.写出下面程序运行的结果。

main ( )

{ int y=2,a=1;

   while (y--!=-1)

      do {

         a*=y ;

         a++ ;

      } while (y--) ;

   printf(“%d,%d\n”,a,y);

}

 

 

 

10.写出下面程序运行的结果。

main ( )

{ int i,k=0;

   for (i=1; ; i++) {

      k++ ;

      while (k<i*i) {

         k++ ;

         if (k%3==0) goto loop ;

      }

   }

loop:

   printf(“%d,%d\n”,i,k);

}

 

 

 

六.程序填空题

1.下述程序用碾转相除法计算两个整数mn的最大公约数。该方法的基本思想是计算mn相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。否则,将除数作为新的被除数,余数作为新的除数,继续计算mn相除的余数,判断是否为0,等等,请填(3)空使程序完整。

main ( )

{ int m,n,w;

   scanf(“%d,%d”,&m,&n);

   while (n) {

      w=1 】;

      m=2 】;

       n=3 】;

   }

   printf(“%d”,m);

}

 

 

 

2.下面程序的功能是输出1100之间每位数的乘积大于每位数的和的数,请填(3)空使程序完整。

main ( )

{ int n,k=1,s=0,m ;

  for (n=1 ; n<=100 ; n++) {

      k=1 ; s=0 ;

      1 】;

      while (2 ) {

          k*=m%10;

          s+=m%10;

          3 】;

      }

      if (k>s) printf(“%dd”,n);

  }

}

3.下面程序段的功能是计算1000!的末尾有多少个零,请填(1)空使程序完整。

main ( )

{

     int i,k;

     for (k=0,i=5; i<=1000; i+=5)

     { m = i ;

        while (1 ) { k++; m=m/5 ; }

     }

}

 

 

 

4.下面程序接受键盘上的输入,直到按键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格,请填(3)空使程序完整。

main ( )

{

    char cx , front=’\0’ ;

    while (1 !=’\n’) {

       if (cx!=’ ’) putchar(cx) ;

       if (cx==’ ’)

          if (2 )

             putchar(3 )

       front=cx ;

}

 

 

 

5.下面程序按公式 求和并输出结果,请填(3)空使程序完整。

main ( )

{

    1 ;

     int k ;

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

        s+=k ;

     for (k=1 ; k<=50 ; k++)

        s+=k*k ;

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

        s+=2 ;

     printf(“sum=3 ”,s);

}

 

 

 

七.编程题

1.       输入两个正整数mn,求其最大公约数和最小公倍数。

 

2.       输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。

 

 

3.       (即求1!+2!+3!+…+19!+20!)。

 

4.有一个分数数列: 求出这个数列前20项之和。

 

5.提高题:打印出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字立方之和等于该数本身。

 

 

 

 

 

 

 

 

 

习题六

一.选择题

1.C语言中,引用数组元素时,其数组下标的数据类型允许是     

A)整型常量    B)整型表达式

C)整形常量或整形表达式     C)任何类型的表达式

 

2.以下对一维整型数组a的正确说明是

Aint a(10) ;   Bint n=10,a[n];

Cint n;           D#define SIZE 10

    scanf(“%d”,&n);       int a[SIZE];

int a[n];

 

3.若有定义:int a[10],则对数组a元素的正确引用是       

Aa[10]    Ba[3.5]    Ca(5)     Da[10-10]

 

4.以下能对一维数组a进行正确初始化的语句是       

Aint a[10]={0,0,0,0,0};      Bint a[10]={} ;

Cint a[ ] = {0} ;            Dint a[10]={10*1} ;

 

5.若有定义:int a[3][4],则对数组a元素的正确引用是

Aa[2][4]         Ba[1,3]     Ca(5)     Da[10-10]

 

6.以下能对二维数组a进行正确初始化的语句是

Aint a[2][]={{1,0,1},{5,2,3}} ;

Bint a[][3]={{1,2,3},{4,5,6}} ;

Cint a[2][4]={{1,2,3},{4,5},{6}} ;

Dint a[][3]={{1,0,1},{},{1,1}} ;

 

7.以下不能对二维数组a进行正确初始化的语句是

Aint a[2][3]={0} ;

Bint a[][3]={{1,2},{0}} ;

Cint a[2][3]={{1,2},{3,4},{5,6}} ;

Dint a[][3]={1,2,3,4,5,6} ;

 

8.若有说明:int a[3][4]={0};则下面正确的叙述是

A)只有元素a[0][0]可得到初值0

B)此说明语句不正确

C)数组a中各元素都可得到初值,但其值不一定为0

D)数组a中每个元素均可得到初值0

 

9.若有说明:int a[][4]={0,0};则下面不正确的叙述是

A)数组a的每个元素都可得到初值0

B)二维数组a的第一维大小为1

C)因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1

D)只有元素a[0][0]a[0][1]可得到初值0,其余元素均得不到初值0

 

10.若二维数组am列,则计算任一元素a[i][j]在数组中位置的公式为 。(设a[0][0]位于数组的第一个位置上)

Ai*m+j    Bj*m+i    Ci*m+j-1    Di*m+j+1

 

11.若有说明:int a[][3]={1,2,3,4,5,6,7};则数组a第一维大小是

A2   B3   C4     D)无确定值

 

12.以下不正确的定义语句是

Adouble x[5]={2.0,4.0,6.0,8.0,10.0}

Bint y[5]={0,1,3,5,7,9} ;

Cchar c1[ ]={‘1’,’2’,’3’,’4’,’5’} ;

Dchar c2[ ]={‘\x10’,’\xa’,’\x8’} ;

 

13.下面程序段的输出结果是

int k,a[3][3]={1,2,3,4,5,6,7,8,9};

for (k=0;k<3;k++) printf(“%d”,a[k][2-k]);

A3 5 7    B3 6 9    C1 5 9    D1 4 7

 

14.下面是对s的初始化,其中不正确的是

Achar s[5]={“abc”};    Bchar s[5]={‘a’,’b’,’c’};

Cchar s[5]=” ”;         Dchar s[5]=”abcdef”;

 

15.下面程序段的输出结果是

char c[5]={‘a’,’b’,’\0’,’c’,’\0’}

printf(“%s”,c);

A’a’’b’     Bab     Cab c     Dabc

 

16.若有程序段:

int k,a[3][3]={1,2,3,4,5,6,7,8,9};

for (k=0;k<3;k++) printf(“%d”,a[k][2-k]);

   则以下叙述正确的是

Aab数组完全相同      Bab长度相同

Cab中都存放字符串    Da数组比b数组长度长

 

17.有两个字符数组a,b,则以下正确的输入语句是

Agets(a,b);                 Bscanf(“%s%s”,a,b);

Cscanf(“%s%s”,&a,&b);      Dgets(“a”),gets(“b”);

 

18.下面程序段的输出结果是

char a[7]=”abcdef”;

char b[4]=”ABC”;

strcpy(a,b);

printf(“%c”,a[5]);

A   B\0    Ce     Df

 

19.下面程序段的输出结果是

char c[ ]=”\t\v\\\0will\n”;

printf(“%d”,strlen(c));

A14     B3    C   9 D6

 

20.判断字符串ab是否相等,应当使用

Aif (a==b)          Bif (a=b)

Cif (strcpy(a,b))     D) if (strcmp(a,b))

 

21.判断字符串a是否大于b,应当使用

Aif (a>b)            Bif (strcmp(a,b))

Cif (strcmp(b,a)>0)    Dif (strcmp(a,b)>0)

 

22.下面叙述正确的是

A)两个字符串所包含的字符个数相同时,才能比较字符串

B)字符个数多的字符串比字符个数少的字符串大

C)字符串”STOP ””STOP”相等

D)字符串”That”小于字符串”The”

 

23.下面有关字符数组的描述中错误的是

A)字符数组可以存放字符串

B)字符串可以整体输入,输出

C)可以在赋值语句中通过赋值运算对字符数组整体赋值

D)不可以用关系运算符对字符数组中的字符串进行比较

 

24.下面程序的输出结果是

main ( )

{ char ch[7]=”12ab56”;

     int i,s=0;

     for (i=0;ch[i]>’0’&&ch[i]<=’9’;i+=2)

        s=10*s+ch[i]-‘0’;

     printf(“%d\n”,s);

}

A1        B1256      C12ab56     Dab

 

25.下面程序的输出结果是

main ( )

{

    char str[ ]=”SSWLIA” , C;

    int k;

    for (k=2;(c=str[k])!=’\0’;k++) {

       switch (c) {

          case ‘I’ : ++k; break ;

          case ‘L’: continue;

          default : putchar(c) ; continue ;

       }

       putchar(‘*’);

    }

}

ASSW     BSW*     CSW*A      DSW

 

 

 

二.填空题

1.C语言中,二维数组的元素在内存中的存放顺序是             

 

2.若有定义:double x[3][5],x数组中行下标的下限为 ,列下标的下限为  

 

3.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]的值为      a[2][1]得到的值为     

 

4.字符串”ab\n\\012\\”的长度是          

 

5.下面程序段的运行结果是          

      char x[ ]=”the teacher”;

      int i=0;

      while (x[++i]!=’\0’)

         if (x[i-1]==’t’) printf(“%c”,x[i]);

 

6.欲为字符串S1输入”Hello World!”,其语句是              

 

7.欲将字符串S1复制到字符串S2中,其语句是              

 

8.如果在程序中调用了strcat函数,则需要预处理命令 。如果调用了gets函数,则需要预处理命令                

 

9.C语言数组的下标总是从     开始,不可以为负数;构成数组各个元素具有相同的             

 

10.字符串是以 为结束标志的一维字符数组。有定义:char a[]=””;a数组的长度是          

 

 

 

三.程序阅读题

1.写出下面程序的运行结果。

      main ( )

      { int a[6][6],i,j ;

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

            for (j=1 ; j<6 ; j++)

                a[i][j]=(i/j)*(j/i) ;

         for (i=1;i<6 ; i++) {

            for (j=1 ; j<6 ; j++)

                printf(“%2d”,a[i][j]) ;

            printf(“\n”);

         }

      }

2.写出下面程序的运行结果。

      main ( )

      { int i=0;

         char a[ ]=”abm”, b[ ]=”aqid”, c[10];

         while (a[i]!=’\0’ && b[i]!=’\0’) {

            if (a[i]>=b[i]) c[i]=a[i]-32 ;

            else c[i]=b[i]-32 ;

            i++;

         }

         c[i]=’\0’;

         puts(c);

}

 

 

 

3.当运行下面程序时,从键盘上输入AabD,则写出下面程序的运行结果。

      main ( )

      { char s[80];

         int i=0;

         gets(s);

         while (s[i]!=’\0’) {

            if (s[i]<=’z’ && s[i]>=’a’)

               s[i]=’z’+’a’-s[i] ;

            i++;

         }

         puts(s);

}

 

 

 

4.写出下面程序的运行结果。

      main ( )

     { int i,c;

          char s[2][5]={“8980”,”9198”};

          for (i=3; i>=0 ; i--) {

              c=s[0][i]+s[1][i]-2*’0’;

              s[0][j] = c % 10 + ‘\0’ ;

          }

          for (i=0; i<=1; i++) puts(s[i]);

}

 

 

 

5.当运行下面程序时,从键盘上输入7 4 8 9 1 5,则写出下面程序的运行结果。

      main ( )

      { int a[6],i,j,k,m;

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

             scanf (“%d”,&a[i]);

          for (i=5 ; i>=0; i--) {

             k=a[5];

             for (j=4; j>=0; j--)

                a[j+1]=a[j] ;

             a[0]=k;

             for (m=0 ; m<6 ; m++)

                printf(“%d ”,a[m]);

             printf(“\n”);

          }

       }

 

 

 

 

四.程序判断题

1.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。

      main ( )

      { int a[3]={3*0} ;

         int i;

         for (i=0; i<4; i++) scanf(“%d”,&a[i]);

         for (i=0; i<4; i++) printf(“%d”,a[i]);

}

 

 

 

 

2.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。

      main ( )

      { int a[3]={1,2,3} , i;

         scanf(“%d%d%d”,&a);

         for (i=0; i<3; i++) printf(“%d”,a[i]);

}

 

 

 

3.下面程序的功能是:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。例如,当s中的字符串为:“ABCDE”时则t中的字符串应为:“EDCBAABCDE”;判断下面程序的正误,如果错误请改正过来。

      main ( )

      { char s[80],t[200]; int i,sl ;

         gets(s); sl = strlen(s);

         for (i=0; i<sl; i++) t[i] = s[sl-i];

         for (i=0; i<sl; i++) t[sl+i] = s[i];

         puts(t);

}

 

 

 

4.下面程序的功能是:将n各无序整数从小到大排序;判断下面程序的正误,如果错误请改正过来。

      main ( )

      { int a[100], i, j, p, t, n=20 ;

         for (j = 0; j<n ; j++) scanf(“%d”, &a[j]),

         for (j = 0;j<n-1 ; j++)

         { p = j;

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

                if (a[p]>a[i]) t=i;

            if (p!=j)

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

         }

         for ( j = 0; j<n ; j++ ) printf(“%d ”, &a[j]);

      }

5.下面程序的功能是:统计子字符串substr在字符串str中出现的次数。例如,若字符串为aaas lkaaas,子字符串为as,则应输出2;判断下面程序的正误,如果错误请改正过来。

      main ( )

      { char substr[80],str[80];

         int i,j,k,num=0;

         gets(substr); gets(str);

         for (i = 0, str[i], i++)

             for (j=i,k=0;substr[k]==str[j];k++,j++)

                if (substr[k+1]!=’\0’) {

                   num++;

                   break;

                }

         printf(“num=%d”, num);

}

 

 

 

五.程序填空题

1.下面程序可求出矩阵a的主对角线上的元素之和,请填(2)空使程序完整。

    main ( )

    { int a[3][3]={1,3,5,7,9,11,13,15,17} , sum=0, i, j ;

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

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

              if (1 )

                sum=sum+2 】;

       printf(“sum=%d”,sum);

}

 

 

 

2.下面程序将十进制整数base转换成n进制,请填(3)空使程序完整。

main ( )

{ int i,base,n,j,num[20] ;

   scanf(“%d”,&n);

   scanf(“%d”,base) ;

   do {

      i++;

      num[i]=1 ;

      n=2 ;

   } while (n!=0);

   for (3 ) ;

      printf(“%d”,num[j]) ;

}

 

 

 

3.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数,请填(3)空使程序完整。

main ( )

{ int a[10],max,min,i,j,k ;

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

     scanf(“%d”,&a[i]);

  max=min=a[0];

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

     if (a[i]<min) { min=a[i]; 1 ; }

     if (a[i]>max) {max=a[i]; 2 ; }

  }

  3 ;

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

     printf(“%d”,a[i]);

}

 

 

 

4.下面程序用插入法对数组a进行由小到大的排序,请填(3)空使程序完整。

经典算法提示:

简单插入排序算法的基本思想使将数组处理n-1次,第k次处理是将第k个元素插入到目前的位置。第k次的元素是这样插入的:在第k次处理时,前面的元素a[0],a[1],…,a[k-1]必定已排成了升序,将a[k]a[k-1],a[k-2],…a[0]逐个比较(由后向前),若有a[j]<a[k],a[k]插入到a[j]之后,否则a[k]维持原位不变。

main ( )

{ int a[10]={191,3,6,4,11,7,25,13,89,10} ;

   int i,j,k ;

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

      k = a[i] ;

      j = 1 ;

      while (j>=0 && k>a[j] ) {

         2 ;

          j--;

      }

      3 =k ;

   }

   for (i=0; i<10; i++) printf(“%d”,a[i]);

}

 

 

 

5.下面程序用两路合并法把两个已按升序(由小到大)排列的数组合并成一个新的升序数组,请填(3)空使程序完整。

main ( )

{ int a[3]={5,9,10} ;

   int b[5]={12,24,26,37,48} ;

   int c[10],i=0,j=0,k=0 ;

   while (i<3 && i<5)

      if (1 ) {

         c[k]=b[j] ; k++ ; j++ ;

      } else {

         c[k]=a[j] ; k++ ; i++ ;

      }

   while (2 ) {

      { c[k]=a[j] ; i++ ; k++ ; }

   while (3 ) {

      { c[k]=b[j] ; j++ ; k++ ; }

   for (i=0; i<k; i++) printf(“%d ”,c[i]);

}

 

 

 

6.下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的结果保存到b数组中,并按矩阵形式输出ab,请填(3)空使程序完整。

                数组a 数组

main ( )

{ int a[2][3]{{4,5,6},{1,2,3}}, b[2][3], i,j;

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

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

         printf(“%5d”,a[i][j]);

        1 ;

     }

     printf(“\n”);

   }

   for (2 ) b[i][0]=a[i][2];

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

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

          printf(“%5d”,b[i][j]);

          3 ;

      }

      printf(“\n”);

   }

}

 

 

 

7.下面程序的功能是在一个字符串中查找一个指定的字符,若字符串中包含该字符则输出该字符在字符串中第一次出现的位置(下标值),否则输出-1,请填(2)空使程序完整。

# include <string.h>

main ( )

{ char c=’a’ ; /* 需要查找的字符*/

   char t[50] ;

   int i,j,k;

   gets(t) ;

   i = 1 ;

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

      if (2 )

         { j = k ; break ;}

      else j=-1;

   printf(“%d”,j);

}

 

8.下面程序用顺序查找法查找数组a中是否存在某一关键字,请填(2)空使程序完整。

main ( )

{ int a[10]={25,57,48,371,123,291,18,22,44};

   int i=0,x ;

   scanf(“%d”,&x);

   1 ;

   while (a[i]!=x) i++ ;

   if (2 ) printf(“found=%d\n”,i);

   else printf(“can\’t found!\n”);

}

 

 

 

9.以下程序是求矩阵a,b的乘积,结果存放在矩阵C中并按矩阵形式输出,请填(3)空使程序完整。

main ( )

{ int a[2][3]={2,10,9,4,5,119}, b[2][2]={-1,-2,-3,-4};

   int i,j,k,s,c[3][2];

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

      for (j=0; j<2; j++) {

         1

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

          c[i][j]=s;

      }

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

      for (j=0; j<2; j++) {

         printf(“%6d”,c[i][j]);

         3 ;

      }

}

 

 

 

10.以下程序是将字符串b的内容连接字符数组a的内容后面,形成新字符串a,请填(2)空使程序完整。

main ( )

{ char a[40]=”Great ”, b[ ]=”Wall”;

   int i=0,j=0 ;

   while (a[i]!=’\0’) i++ ;

   while (1 ) {

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

   }

   2 ;

   printf(“%s\n”,a);

}

 

 

 

 

六.编程题

1.用选择法对10个整数排序。

 

 

2.有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。

 

 

3.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,中文字母,中文字符,数字,空格及其他字符的个数。(提示:中文字符是两个字节,且数值均大于128的字符)。

 

 

4.对三人的四门课程分别按人和科目求平均成绩,并输出包括平均成绩的二维成绩表。

 

 

5.提高题:将一个数组中的值按逆序重新存放。例如:原来顺序为86541。要求改为14568

 

 

6.提高题:打印出杨辉三角形(要求打印出10行,课本P1417.6

 

 

7.提高题:编写程序:

1)求一个字符串S1的长度;

2)将一个字符串S1的内容复制给另一个字符串S2

3)将两个字符串S1S2连接起来,结果保存在S1字符串中;

4)搜索一个字符在字符串中的位置(例如:’I’”CHINA”中的位置为3)。如果没有搜索到,则位置为-1

5)比较两个字符串S1S2,如果S1>S2,输出一个正数;如果S1=S2,输出0;如果S1<S2,输出一个负数;输出的正,负数值为两个字符串相应位置字符ASCII码值的差值,当两个字符串完全一样时,则认为S1=S2

以上程序均使用getsputs函数输入,输出字符串。不能使用string.h中的系统函数。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

习题七

一.选择题

1.以下正确的说法是。

A)用户若需要调用标准库函数,调用前必须重新定义

B)用户可以重新定义标准库函数,如若此,该函数将失去原有定义

C)系统不允许用户重新定义标准库函数

D)用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。

 

2.以下正确的函数定义是。

Adouble fun(int x, int y)      Bdouble fun(int x,y)

   { z=x+y ; return z ; }             { int z ; return z ;}

Cfun (x,y)                Ddouble fun (int x, int y)

   { int x, y ; double z ;            { double z ;

z=x+y ; return z ; }              return z ; }

 

3.以下正确的说法是。

A)实参和与其对应的形参各占用独立的存储单元

B)实参和与其对应的形参共占用一个存储单元

C)只有当实参和与其对应的形参同名时才共占用相同的存储单元

D)形参时虚拟的,不占用存储单元

 

4.以下正确的函数定义是

Adouble fun(int x , int y)       Bdouble fun(int x ; int y)

Cdouble fun(int x , int y) ;      Ddouble fun(int x,y)

 

5.若调用一个函数,且此函数中没有return语句,则正确的说法是

A)该函数没有返回值

B)该函数返回若干个系统默认值

C)能返回一个用户所希望的函数值

D)返回一个不确定的值

 

6.以下不正确的说法是。

A)实参可以是常量,变量或表达式

B)形参可以是常量,变量或表达式

C)实参可以为任意类型

D)如果形参和实参的类型不一致,以形参类型为准

7.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是。

A)地址传递

B)值传递

C)有实参传给形参,再由形参传给实参

D)由用户指定传递方式

 

8.以下程序由语法错误,有关错误原因的正确说法是。

A)语句void prt_char( );有错,它是函数调用语句,不能用void说明

B)变量名不能使用大写字母

C)函数说明和函数调用语句之间有矛盾

D)函数名不能使用下划线

 

9.C语言规定,函数返回值的类型是由 决定的。

Areturn语句中的表达式类型   B)调用该函数时的主调函数类型

C)调用该函数时由系统临时   D)在定义函数时所指定的函数类型

 

10.以下正确的描述是。

A)函数的定义可以嵌套,但函数的调用不可以嵌套

B)函数的定义不可以嵌套,但函数的调用可以嵌套

C)函数的定义和函数的调用均不可以嵌套

D)函数的定义和函数的调用均可以嵌套

 

11.若用数组名作为函数调用的实参,传递给形参的是。

A)数组的首地址      B)数组中第一个元素的值

C)数组中的全部元素的值     D)数组元素的个数

 

12.假设调用函数有以下定义和函数f调用,则函数f中对形参数组错误定义的是。

     char c[5]={‘a’,’b’,’\0’,’c’,’\0’};

     printf(“%s”,c);

Af(int array[][6])    Bf(int array[3][])

Cf(itn array[][4])    Df(int array[2][5])

 

13.如果在一个函数中的复合语句中定义了一个变量,则该变量。

A)只在该复合语句中有定义    B)在该函数中有定义

C)在本程序范围内有定义      D)为非法变量

 

14.以下不正确的说法是。

A)在不同函数中可以使用相同名字的变量

B)形式参数是局部变量

C)在函数内定义的变量只在本函数范围内有定义

D)在函数内的复合语句中定义的变量在本函数范围内有定义

 

15.以下不正确的说法是。

A)形参的存储单元是动态分配的

B)函数中的局部变量都是动态存储

C)全局变量都是静态存储

D)动态分配的变量的存储空间在函数结束调用后就被释放了

 

16.下面程序的输出是。

    int i=2 ;

    printf(“%d%d%d”,i*=2,++i,i++) ;

A 842     B843      C445      D456

 

17.已知一个函数的定义如下:

   double fun(int x, double y)

   { …… }

则该函数正确的函数原型声明为:

Adouble fun (int x,double y)      Bfun (int x,double y)

Cdouble fun (int ,double );       Dfun(x,y) ;

 

18.关于函数声明,以下不正确的说法是。

A)如果函数定义出现在函数调用之前,可以不必加函数原型声明

B)如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型声明

C)函数再调用之前,一定要声明函数原型,保证编译系统进行全面的调用检查

D)标准库不需要函数原型声明

 

19.以下不正确的说法是

A)全局变量,静态变量的初值是在编译时指定的

B)静态变量如果没有指定初值,则其初值为0

C)局部变量如果没有指定初值,则其初值不确定

D)函数中的静态变量在函数每次调用时,都会重新设置初值

 

20.以下不正确的说法是。

Aregister变量可以提高变量使用的执行效率

Bregister变量由于使用的是CPU的寄存器,其数目是有限制的

Cextern变量定义的存储空间按变量类型分配

D)全局变量使得函数之间的耦合性更加紧密,不利于模块化的要求

 

 

 

二.填空题

1.C语言函数返回类型的默认定义类型是         

 

3.函数的实参传递到形参有两种方式:               

 

4.在一个函数内部调用另一个函数的调用方式称为       。在一个函数内部直接或间接调用该函数成为函数        的调用方式。

 

5.C语言变量按其作用域分为            。按其生存期分为            

 

6.已知函数定义:void dothat(int n,double x) { …… },其函数声明的两种写法为                  ,                   

 

7.C语言变量的存储类别有                   

 

8.凡在函数中未指定存储类别的局部变量,其默认的存储类别为       

 

9.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为          

 

10.变量被赋初值可以分为两个阶段:即                  

 

 

 

 

三.程序阅读题

1.写出下面程序的运行结果。

func (int a,int b)

{ static int m=0,i=2;

    i+=m+1;

    m=i+a+b;

    return (m);

}

main ( )

{ int k=4,m=1,p1,p2;

    p1=func(k,m) ; p2=func(k,m) ;

    printf(“%d,%d\n”,p1,p2) ;

}

 

 

 

2.写出下面程序的运行结果。

# define MAX 10

int a[MAX], i ;

sub1 ( )

{ for (i=0; i<MAX; i++) a[i]=i+i ;

}

sub2 ( )

{ int a[MAX], i ,max ;

   max=5;

   for (i=0; i<MAX; i++) a[i]=i ;

}

sub3 (int a[ ])

{ int i ;

  for (i=0; i<MAX; i++) printf(“%d ”,a[i]);

  printf(“\n”);

}

main ( )

{ sub1( ); sub3(a); sub2( ); sub3(a);

}

 

 

 

3.若输入的值是-125,写出下面程序的运行结果。

#include <math.h>

fun (int n)

{ int k,r ;

   for (k=2; k<=sqrt(n); k++) {

      r = n % k ;

      while (!r) {

          printf(“%d”,k); n=n/k;

          if (n>1) printf(“*”);

          r = n % k ;

      }

   }

   if (n!=1) printf(“%d\n”,n);

}

main ( )

{ int n ;

   scanf(“%d”,&n);

   printf(“%d=”,n);

   if (n<0) printf(“-”);

   n = fabs(n); fun(n);

}

 

 

 

4.写出下面程序的运行结果。

int i=0;

fun1 (int i)

{ i = (i%i)*(i*i)/(2*i)+4 ;

   printf(“i=%d\n”,i);

   return (i) ;

}

fun2(int i)

{ i = i<=2 ? 5 : 0 ;

   return (i) ;

}

main ( )

{ int i = 5 ;

   fun2(i/2) ; printf(“i=%d\n”,i) ;

   fun2(i=i/2) ; printf(“i=%d\n”,i) ;

   fun2(i/2) ; printf(“i=%d\n”,i) ;

   fun1(i/2) ; printf(“i=%d\n”,i) ;

}

 

5.写出下面程序的功能。

func (int n)

{ int i,j,k;

   i=n/100; j=n/10-i*10 ; k=n%10 ;

   if (i*100+j*10+k) == i*i*i+j*j*j+k*k*k) return n ;

   return 0;

}

main ( )

{ int n,k ;

   for (n=100; n<1000 ; n++)

      if (k=func(n)) printf(“%d”,k) ;

}

 

 

 

四.程序判断题

1.下面add函数求两个参数的和;判断下面程序的正误,如果错误请改正过来。

void add(int a,int b)

{ int c ;

   c = a + b;

   return (c) ;

}

 

 

 

2.下面函数fun的功能是:将长整型数中偶数位置上的数依次取出,构成一个新数返回,例如,当s中的数为:87653142时,则返回的数为:8642;判断下面程序的正误,如果错误请改正过来。

long fun(long s)

{ long t , sl=1;

   int d ;

   t = 0 ;

   while ( s > 0 ) {

      d = s%10;

      if (d%2=0) {

        t=d* sl+ t;

        sl *= 10;

      }

s \= 10;

         }

         return (t);

}

 

 

 

3.下面函数fun的功能是:统计字符串s中各元音字母(即A,E,I,O,U)的个数,注意:字母不分大,小写;判断下面程序的正误,如果错误请改正过来。

fun (char s[ ], int num[5])

{ int k; i=5;

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

      num[i]=0;

   for (k=0; s[k]; k++) {

      i = -1;

      switch ( s ) {

         case ‘a’: case ‘A’: i=0;

         case ‘e’: case ‘E’: i=1;

         case ‘i’ : case ‘I’ : i=2;

         case ‘o’: case ‘O’: i=3;

         case ‘u’: case ‘U’: i=4;

      }

      if (i >= 0)

        num[i]++;

   }

}

 

 

 

4.函数fun的功能是:根据整型形参m,计算如下公式的值: 

  判断下面程序的正误,如果错误请改正过来。

fun (int m)

{ double y = 0, d ;

    int i ;

    for ( i =100, i <= m, i += 100 ) {

       d = (double) i * (double) I ;

       y += 1.0 / d ;

    }

    return ( y ) ;

}

 

 

 

5.下面函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串;判断下面程序的正误,如果错误请改正过来。

void fun (char s[ ])

{ int i,j;

    for (i=0,j=0; s[i]!=’\0’; i++)

       if (s[i]>=’0’ && s[i]<=’9’)

          s[j]=s[i];

    s[j]=”\0”;

}

 

 

 

 

五.程序填空题

1.下面函数用折半查找法从有10个数的a数组中对关键字m查找,若找到,返回其下标值,否则返回-1,请填(2)空使程序完整。

经典算法提示:

折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。如果该待查元素的值大于中间点元素的值,则将范围重新定义为大于中间点元素的范围,反之亦反。

int search(int a[10],int m)

{ int x1=0,x2=0,mid ;

   while (x1<=x2) {

      mid = (x1+x2)/2;

      if (m<a[mid]) 1 ;

      else if (m>a[mid]) 2 ;

      else return (mid) ;

   }

   return (-1) ;

}

 

 

2.del函数的作用是删除有序数组a中的指定元素xn为数组a的元素个数,函数返回删除后的数组a元素个数,请填(2)空使程序完整。

int del (int a[10],int n,int x)

{ int p=0,i ;

   while (x>=a[p]&&p<n) 1 ;

   for (i=p-1; i<n; i++) 2 ;

   return (n-1) ;

}

 

 

 

3.以下程序的功能是计算函数 ,请填(3)空使程序完整。

# include <stdio.h>

1 ;

main ( )

{ float x,y,z,f ;

   scanf(“%f,%f,%f”,&x,&y,&z);

   f = fun (2 );

   f += fun (3 );

   printf(“f=%d”,f);

}

float fun(float a,float b)

{ return (a/b) ;

}

 

 

 

4.avg函数的作用是计算数组array的平均值返回,请填(3)空使程序完整。

float avg(float array[10])

{ int i ;

   float avgr , sum=0 ;

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

      sum+=2 ;

   avgr = sum / 10 ;

   3 ;

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多