C语言程序设计实例教程第三版练习题答案2.docx

上传人:b****6 文档编号:13704690 上传时间:2023-06-16 格式:DOCX 页数:32 大小:36.27KB
下载 相关 举报
C语言程序设计实例教程第三版练习题答案2.docx_第1页
第1页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第2页
第2页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第3页
第3页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第4页
第4页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第5页
第5页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第6页
第6页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第7页
第7页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第8页
第8页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第9页
第9页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第10页
第10页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第11页
第11页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第12页
第12页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第13页
第13页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第14页
第14页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第15页
第15页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第16页
第16页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第17页
第17页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第18页
第18页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第19页
第19页 / 共32页
C语言程序设计实例教程第三版练习题答案2.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言程序设计实例教程第三版练习题答案2.docx

《C语言程序设计实例教程第三版练习题答案2.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实例教程第三版练习题答案2.docx(32页珍藏版)》请在冰点文库上搜索。

C语言程序设计实例教程第三版练习题答案2.docx

C语言程序设计实例教程第三版练习题答案2

练习2

一、选择题

1.下面关于语句的说法中,正确的是(ABD)。

A、对程序中使用的变量、数组、函数等进行定义、声明的语句属于说明性语句

B、表达式后面加;号构成表达式语句

C、复合语句中不允许包含另一条复合语句

D、对程序执行流程起控制作用的语句属于控制语句

解析:

复合语句是可以嵌套的,所以C选项是错误的;

2.下面语句中,错误的是(B)。

A、m=x>y>z;B、floatx=y=z;C、m=x,m>y;D、{k=m>n;k?

:

x,y;}

解析:

C语言中,在变量声明语句中不能使用连续赋值初始化变量,故B选项是错误的。

3.下面不正确的if语句形式是(A)。

A、if(x=y;)m++;B、if(x<=y)m++;C、if(x-y)m++;D、if(x)m++;

解析:

if选择结构中圆括号内是表达式,而不能是语句,故A选项是错误的。

4.下面不正确的if语句形式是(C)。

  A、if(x=y);B、if(x==y)m=0,n=1;C、if(x>=y)m=0elsen=1;D、if(x!

=y)m=n;

解析:

C选项中if结构中条件成立时执行的m=0后没有分号,缺少语句标识,故结构错误;

5.下面程序的运行结果是(A)。

intmain()

{

intx=7,y=8,z=9;

if(x>y)

x=y,y=z;z=x;

printf("x=%dy=%dz=%d\n",x,y,z);

return0 ;

}

A、x=7y=8z=7B、x=7y=9z=7D、x=8y=9z=7D、x=8y=9z=8

解析:

这里主要是考察if选择结构条件下所能执行的语句只有x=y,y=z;而后边的z=x;并受选择结构条件所限制,所以根据题目要求当x>y(7>8)不成立,x=y,y=z;语句不能被执行,而只执行z=x;语句,将变量x的值赋值给z变量,而x与y的值不变化,所以x=7y=8z=7,故答案选A;

6.下面程序的运行结果是(B)。

intmain()

{

intx=6,y=6;

if(++x

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

else

printf("%d\n",y++);

return0;

}

A、6B、7C、8D、9

解析:

这里考察自增运算符++,if(++x

7.下面程序的运行结果是(D)。

intmain()

{

intx=1,y=2,z=3,m=1

if(!

x)m--;

elseif(!

y)m=2;

elseif(!

z);

elsem=3;

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

return0;

}

A、m=0B、m=1C、m=2D、m=3

解析:

这里考察if…elseif多分支结构的执行,第1个条件!

x为假,执行第2个条件!

y也为假,执行第3个条件!

也为假,执行最后一个else语句m=3;然后执行printf语句输出m=3;故答案选D;

8.在下面的if语句中,功能上具有等价关系的两条if语句是(B)。

①if(flag)x+y;elsex-y;

②if(flag==1)x+y;elsex-y;

③if(flag!

=0)x+y;elsex-y;

④if(flag==0)x+y;elsex-y;

A、①和②B、①和③C、③和④D、②和③

解析:

①结构中的条件是flag变量,该结构执行是flag值不等于0执行x+y,反之执行x-y,与③结构执行一致;而②选择结构中是判断flag等于1和不等于1两种情况,而④结构执行与①和③刚好相反;故答案选B;

9.在if语句多层嵌套的情况下,为了正确区分多个if和else之间的匹配关系,C语言规定:

如果没有使用花括号,那么从最内层的else开始,else总是与其(D)。

 A、前面最近的if配对B、缩进位置相同的if配对

C、后面最近的if配对D、前面最近的且尚未与其它else配对的if配对

解析:

在程序,对于if与else的配对是,程序由上而下从第1个else开始找寻其配对的if,else找寻配对if是从else位置开始向上找寻配对的if,这个if是离else最近的if,但是注意这个if要是没有被配过对的,如果最近的if已经被之前else配对过了,那么需要继续向上找if,故答案选D;

10.下面程序的运行结果是(A)。

intmain()

{

inta=3,b=5,c=2,d=3,m=0;

if(a>b)

if(a>c)

if(a>d)m=1;

elsem=2;

elsem=3;

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

return0;

}

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

解析:

这里考察if的嵌套,进一步考察else与if的配对,根据上一题描述,在程序中由上而下从第1个elsem=2;查找离他最近的if(a>d)m=1;与其配对,下面第2个elsem=3;与离它最近且没有配对的if是if(a>c),程序只有两个else,那么第1个if(a>b)没有与之配对的else;当进行if(a>b)判断时其条件为假,没有执行的else,整个if结构执行结束,执行printf语句输出m的值,而m的初值为0,故答案选A;

11.对下面程序运行结果的分析中,正确的是(D)。

  intmain()

   {

intx,y;

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

if(x>y)

   x=y;y=x;

else

   x++;y++;

printf("%d,%d\n",x,y);

return0;

 }

 A、若输入4和3,则输出4和5B、若输入3和4,则输出4和5

C、若输入4和3,则输出4和5D、有语法错误,不能通过编译

解析:

本题考核重点是if选择结构中语句层次的划分,对于if语句后只能有一条语句,如果多条需要用一对花括号{}将多条语句括起来,故本题的if语句后面有两条语句,所以这是一个单条件的if语句,后面的else不能与这个if匹配,所以就语法错误,故答案选D

12.以下关于switch语句的叙述中,不正确的是(C)。

 A、switch语句中各case子句后面的表达式必须是整型或字符型常量表达式。

 B、同一switch语句中各case子句后面表达式的值必须互不相同。

 C、switch语句中必须有default部分。

 D、switch语句必须与break语句结合才能实现真正的选择结构。

解析:

再switch结构语句中defaule部分是可有可无的,他的作用是当所有case后的常量都不满足表达式的值时,default位置作为switch语句结构的入口点;而break语句再switch语句中的作用是中断switch语句的执行,以实现分支效果,本题答案选C;

13.假定已定义变量intx,y;则下面正确的switch语句是(BD)。

A、switch(x)

{

case1.1:

y++;

case2.1:

y--;

default:

y*=y;

}

C、switch(x)

{

case2:

y++;

case1+1:

y--;

default:

y*=y;

}

B、switch(x)

{

case'a':

y++;

case'b':

y--;

default:

y*=y;

}

D、switch(x)

{

default:

y*=y;

case1:

y++;

case1+1:

y--;

}

解析:

这里考察switch语句结构的语法:

case后面是整型或字符型常量表达式,且每个case后的值需要互不相同,故答案A和C都是错误的,答案选B和D;

14.以下程序输出结果是(B)。

intmain()

{

intx=1,y=2,m=0,n=0;

switch(x)

{

case1:

switch(y)

{

case2:

m++;break;

    case4:

n++;break;

 }

case3:

m++;n++;break;

case5:

m++;n++;

}

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

return0;

}

A、m=1,n=0B、m=2,n=1C、m=1,n=1D、m=2,n=2

解析:

这里考察switch语句的执行流程,因为x=1,所以外层的switch语句执行从case1入口开始,而内层switch在case2入口执行使得m由0变为1,然后执行break语句跳出内层switch结构,顺序执行外层的case3使得m由1变为2,n由0变为1,故答案选B;

15.下面的循环语句执行完毕后,循环变量k的值是(B)。

intk=1;

while(k++<10);

A、10B、11C、9D、无限循环,值不确定

解析:

本题考查自增运算符的使用,以及空语句在作为循环体执行,当k为9时,k++是先将k的值参与表达式k<10运算,9<10成立,然后k的值自增变为10,继续执行k++<10,即10<10不成立,跳出循环,但是在跳出循环时k由10自增变为11,故答案选择B;

16.对下面程序段中while循环执行情况分析正确的是(C)。

intk=2;

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

A、该循环只执行1次B、循环是无限循环

C、循环体中的语句1次也不执行D、存在语法错误

解析:

这里考察阅读者是否仔细阅读while循环结构的表达式,这里表达式并不是关系表达式,而是一个赋值表达式,是将0赋值给k,表达式的结果为0,即终止循环,循环体育局一次也不执行,故答案选C;

17.以下程序段(C)。

x=-1;

do

    {x=x*x;}

while(!

x);

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

解析:

do…while结构语句是先执行循环体语句x=x*x,即(-1)*(-1)=1,将1赋值给x,然后进行循环条件表达式!

x的运算,结果为!

1,即为0,所以终止循环,故答案选C;

18.对下面程序段中do-while循环执行情况分析正确的是(C)。

intm=1,n=5;

do

{

m++;

n--;

}while(m

A、该循环可能1次也不执行B、该循环执行1次

C、该循环执行2次D、该循环执行3次

解析:

本题考查do…while结构语句的执行流程,第一次循环体执行后,循环条件为2<4成立,继续执行第二次循环体后,循环条件为3<3不成立,终止循环体语句结构的执行,故答案选C;

19.下面程序的功能是从键盘输入一组字符,统计这些字符中大写字母和小写字母的个数,程序中while语句的循环条件是(A)。

intmain()

{

intc1=0,c2=0;

   charch;

   while(()!

=’\n’)

{

if(ch>='A'&&ch<='Z')c1++;

      if(ch>='a'&&ch<='z')c2++;

   }

return0;

}

A、ch=getchar()B、getchar()C、ch==getchar()D、scanf("%c",&ch)

解析:

C语言从键盘获取字符数据,使用函数getchar()获取单个字符,这里使用循环结构设计逐个获取字符,直到获取到回车终止,因为下面是对变量进行判断,所以使用函数getchar()获取的字符需要赋给变量ch,故答案选A;

20.下面有关for循环的正确描述是(D)。

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

B、for循环的执行流程是先执行循环体语句,后判断表达式。

C、在for循环中,表达式1和3可以省略,但表达式2是不能省略。

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

解析:

本题考查for循环结构语句的语法,对于A的说法是不正确的,不能用只能;对于B答案显然不符合for循环的执行流程描述,for循环是先判断循环条件,后执行循环体语句;对于C答案,for循环结构中三个表达式都可以省略,当表达式2省略,默认循环条件为真;故答案选择D;

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

A、3B、4C、5D、不定

解析:

这里考察自增运算以什么值参与表达式运算,i++是先用i的值参与表达式运算再自增,而++i是先自增,然后以自增结果参与表达式运算;故而i=1开始,第1次循环条件判断1<4,然后i自增变为2,进入第2次循环条件判断2<4,然后i自增变为3,进入第3次循环条件判断3<4,然后i自增变为4,进入第4次循环条件判断4<4,然后i自增变为5,这时循环条件判断为假跳出循环,这时变量i的值为5,故答案选C;

22.以下程序段的循环次数是(B)。

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

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

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

解析:

考察识别for结构中各表达式的作用,表达式1为i=2,即为i变量赋值,表达式2为循环条件判断,i==0,表达式即2==0,显然为假,即终止循环,这里表达式3省略;故而循环次数为0,故答案选B;

23.下面的双重循环中的内循环体将一共会被执行(C)次。

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

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

printf("a");

A、12B、15C、16D、20

解析:

外层循环for中i从0到3循环了4次,内循环for中j从4到1也是循环了4此,对于内循环体的次数为内外循环次数的乘积,即4*4=16,故答案选C;

24.如果下面程序在运行时输入1,-1,0,2,-2↙,则程序输出结果是(C)。

intmain()

{

intx,i,sum;

for(i=0,sum=0;i<5;i++)

{

scanf("%d",&x);

if(x<0)continue;

sum+=x;

}

printf("%d",sum);

return0;

}

  A、-3B、0C、3D、1

解析:

本题考察循环结构中continue语句的作用;根据程序的执行流程中可以看到这里使用了for循环结构,而佛如循环体中并没有改变循环变量i的值,故for循环的次数为5此,即i从0到4;这里sum初值为0,循环体中有键盘获取数据,将执行5次,获取5个数据,且体中使用sum变量对键盘送入的数据进行累加,但是在累加之前有一个判断语句if(x<0)continue;代表键盘获取的数据为负数将结束本次循环,不执行后续的累加语句,故题目是累加键盘送入数据中大于0的数据的和,所以答案选C;

25.如果下面程序在运行时输入1,2,0,-1,-2↙,则程序输出结果是(C)。

intmain()

{

intx,i,sum;

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

{

scanf("%d",&x);

if(x<0)break;

sum+=x;

}

printf("%d",sum);

return0;

}

  A、-3B、0C、3D、1

解析:

本题考察循环结构中break语句的作用;与上题类似,只是本体的循环次数本来是10此,只是在循环体中进行累加之前有一个判断语句if(x<0)break;即在键盘键入负数后终止循环;故只能累加键盘键入的负数之前的数据;故答案选C;

二、填空题

1.在一个循环语句的循环体中又包含了另一个循环语句,则这种循环形式称为循环的嵌套。

2.for语句中的三个表达式可以全部或部分省略,但应保留其分隔符;。

3._switch_通常适用于条件表达式的取值为多个离散而不连续的整型值(或字符型值)时实现多分支选择结构。

4.C语言提供的选择控制语句可以对给定的条件进行判断,并根据判断结果选择执行分支程序。

5.语句可以分为说明性语句,表达式语句,复合语句   和控制结构语句4种类型,if语句属于其中的控制结构语句。

6.C语言中语句的结束标志是分号。

7.复合语句是用一对{}界定的语句块。

8.将“y能被4整除但不能被100整除,或者y能被400整除”这一条件描述写成逻辑表达式y%4==0&&y%100!

=0||y%400==0  。

9.能够表示“4040&&x<=60||x<120。

10.下面程序的功能是求3个整数中的最小数,,将程序补充完整。

intmain()

{

intx,y,z,min;

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

if(x

elsemin=y;

if(z

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

return0;

}

11.switch语句中case关键字后面的表达式必须是整型常量表达式。

12.switch语句只有与case语句结合使用,才能实现程序的选择结构。

13.C语言实现循环结构的三种语句分别是for语句、while语句和do-while语句。

14.除for语句外,可能一次循环体也不执行的循环语句是while,至少执行一次循环体的循环语句是do-while。

15.若键盘输入字符ABCDE↙(↙表示按下回车键,则下面for语句执行后k的值是5。

for(k=0;(c=getchar())!

=’\n’;k++);

16.下述程序段的运行结果是2,1,2。

inta=1,b=2,c=3,t;

while(a

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

17.执行下面的程序段后,m的值是30。

intm=1,n=325;

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

18.下面程序的功能是求1~100之间能同时被3和5整除的数,以8个数为一行的形式输出,将程序补充完整。

intmain()

{intn,j=0;

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

{if(n%3!

=0&&n%5!

=0)

continue;

printf("%6d",n);

j++;

if(j%8==0)

printf("\n");

}

printf("\nj=%d\n",j);

return0;

}

三、程序阅读,写出程序运行结果。

1.intmain()

{

inta=1,b=3,c=5,d=4,x;

if(a

if(c

else

  if(a

  if(b

  elsex=3;

elsex=6;

elsex=7;

printf("x=%d",x);

return0;

}

输出:

x=2

2.intmain()

{

inta=2,b=7,c=5;

switch(a>0)

{

       case1:

switch(b>0)

{

         case1:

printf("@");break;

              case2:

printf("!

");break;

             }

       case0:

switch(c==5)

{

              case1:

printf("*");break;

              case2:

printf("#");break;

              default:

printf("#");break;

             }

       default:

printf("&");

   }

printf("\n");

return0;

}

输出:

@*&↙

3.intmain()

{

intx,y;

for(x=1,y=1;x<=10;x++)

{

      if(y>10)break;

    if(y%3==1)

{

y+=3;continue;

}

      y-=5;

}

printf("%d,%d\n",y,x);

return0;

}

输出:

13,5

4.找寻两个数的最小公倍数。

intmain()

{

intx,y,z,t;

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

if(x>y)

{

t=x;x=y;y=t;

}

z=x;

do

{

if(z%x==0&&z%y==0)break;

elsez++;

}while

(1);

printf("gbs=%d\n",z);

return0;

}

键盘输入数据:

5,8↙

输出:

gbs=40

5.intmain()

{

inti,j;

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

{

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

printf("");

for(j=1;j<=7-2*i;j++)

printf("*");

printf("\n");

}

return0;

}

输出:

*****

***

*

四、编程题

1.编程实现,键盘输入4个整数a,b,c,d,输出其中的最小数。

解:

#include

intmain()

{

inta,b,c,d,s;

printf("请输入个数字");

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

if(a>b)s=b;

elses=a;

if(s>c)s=c;

if(s>d)s=d;

printf("最小是:

%d",s);

return0;

}

2.编程实现,键盘输入3个整数a,b,c,按照由小到大的顺序输出这三个整数。

解:

#include

intmain()

{

inta,b,c,s;

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

if(a>b)

{

s=

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2