第4章程序设计三种基本结构.docx
《第4章程序设计三种基本结构.docx》由会员分享,可在线阅读,更多相关《第4章程序设计三种基本结构.docx(20页珍藏版)》请在冰点文库上搜索。
第4章程序设计三种基本结构
第4章 程序设计三种基本结构
一、选择题:
【例1】(2002年4月)下面的程序的输出结果是( )。
#include
main()
{
inti=010,j=10;
printf("%d,%d",++i,j--);
}
A. 11,10 B.9,10
C. 010,9 D.10,9
【答案】B (i的值是以八进制定义的)
【例2】(2002年4月)以下的程序的输出结果是( )。
main()
{
inta=5,b=4,c=6,d;
printf(("d\n",d=a>b?
)(a>c?
a:
c):
(b));
}
A. 5 B.4
C. 6 D.不确定
【答案】C
【例3】(2002年4月)以下程序的输出结果是( )。
main()
{
inta=4,b=5,c=0,d;
d=!
a&&!
b||!
c;
printf("%d\n",d);
}
A.1 B. 0
C.非0的数 D. -1
【答案】A
【例4】(2002年4月)以下程序的输出结果是( )。
main()
{
charx=040;
printf("%o\n",x<<1);
}
A.100 B.80
C.64 D.32
【答案】A
【例5】(2002年9月)已知i,j,k为int型变量,若从键盘输入:
1,2,3<回车>,使i的值为1、j的值为2,k的值为3,以下选项中正确的输入语句是(C )。
A. scanf("---",&I,&j,&k);
B. scanf("%d %d %d",&I,&j,&k);
C. scanf("%d,%d,%d",&I,&j,&k);
D.scanf("i=%d,j=%d,k=%d",&I,&j,&k);
【答案】C
【例6】(2002年9月)若有以下程序
main()
{
intk=2,i=2,m;
m=(k+=i*=k);
printf(“%d,%d\n”,m,i);
}
执行后的结果是( )。
A.8,6 B.8,3
C.6,4 D.7,4
【答案】C
【考点解析】根据C语言中printf函数的用法可知,格式控制参数是d,即是输出是十进制的数,复合运算表达式是右结合性,先从右边开始计算i*=k得i=i*k=2*2=4,k+=i得k=k+i=2+4=6,所以m的值为6。
输出结果为m=6,i=4。
【例7】(2003年4月)若有以下程序段(n所赋的是八进制数)
intm=32767,n=032767;
printf(“%d,%o\n”,m,n);
执行后输出结果是( )。
A.32767,32767 B.32767,032767
C.32767,77777 D.32767,77777
【答案】A
【例8】(2003年4月)有以下程序段
intm=0,n=0,charc='a';
scanf("%d%c%d",&m,&c,&n);
prinft("%d,%c,%d\n",m,c,n);
若从键盘上输入:
10A10<回车>,则输出结果是( )。
A.10,A,10 B.10,a,10 C.10,a,0 D.10,A,0
【答案】A
【例9】(2003年4月)有以下程序
main()
{
inti=10,j=1;
printf("%d,%d\n",i--,++j);
}
执行输出的结果是(B )。
A.9,2 B.10,2
C. 9,1 D.10,1
【答案】B
【例10】(2003年9月)有以下程序
main()
{
inta;charc=10;
floatf=100.0;doublex;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
}
程序运行后的输出结果是( )。
A.1 65 1 6.5 B.1 65 1.5 6.5
C.1 65 1.0 6.5 D.2 65 1.5 6.5
【答案】B
【例11】(2003年9月)有以下程序
main()
{
inta=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a
printf("%d,%d\n",k,m);
}
程序运行后的输出结果是( )。
A. 0,0 B.0,1
C. 1,0 D.1,1
【答案】C
【例12】(2003年9月)有定义语句:
intx,y;若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是"
A. 11 12<回车> B.11, 12<回车>
C. 11,12<回车> D.11,<回车>12<回车>
【答案】A
【例13】(2003年9月)设有以下程序段:
intx=2002,y=2003;
printf(“%d\n”,(x,y));
则以下叙述中正确的是"
A. 输出语句中格式说明符的个数少于输出项的个数,不能正确输出。
B. 运行时产生出错信息。
C. 输出值为2002。
D. 输出值为2003。
【答案】D
【例14】(2003年9月)有以下程序
main()
{
int x=3,y=2,z=1;
printf("%d\n",x/y&~z);
}
程序运行后的输出结果是( )。
A. 3 B.2 C.1 D.0
【答案】D
【例15】(2004年4月)有以下程序
main()
{
intx=102,y=012;
printf("-,-\n",x,y);
}
执行后输出结果是( )。
A. 10,01 B.02,12
C. 102,10 D.02,10
【答案】C
【例16】(2004年4月)有以下程序
main()
{
unsignedchara,b;
a=4|3;
b=4&3;
printf("%d%d\n",a,b);
}
执行后输出结果是( )。
A. 70 B.07
C. 11 D.430
【答案】A
【例17】(2004年9月)有以下程序
main()
{
chara,b,c,d;
scanf("%c,%c,%d,%d",&a,&b,&c,&d);
printf("%c,%c,%c,%c\n",a,b,c,d);
}
若运行时从键盘上输入:
6,5,65,66<回车>。
则输出结果是( )。
A.6,5,A,B B.6,5,65,66
C.6,5,6,5 D.6,5,6,6
【答案】A
【考点解析】在C语言程序设计中,scanf函数的格式控制参数中“%d”表示输入整数,“%c”表示输入字符,也就是说,前两个输入的数是以字符形式输入的,后两个输入的数是以整数形式输入的,输出时,全部都以字符形式输出,而刚才的后两个整数应该用ASCII码转化为字符。
则输出的是6,5,A,B。
【例18】(2004年9月)有以下程序
main()
{
intm=3,n=4,x;
x=-m++;
x=x+8/++n;
printf(“%d\n”,x);
}
程序运行后的输出结果是( )。
A. 3 B.5
C. -1 D. -2
【答案】D
【考点解析】在本题中,根据C语言中printf函数的用法可知,格式控制参数是d,即是输出是十进制的数,表达式x=-m++可以转换成x=-(m++),可得x的值为-3,而表达式x=x+8/++n可以转换成x=x+8/(++n),代入x的值得x=-3+8/5=-2,所以最后的输出结果是-2。
【例19】(2004年9月)有以下程序
main()
{
chara=’a’,b;
printf(“%c”,++a);
printf(“%c\n”,b=a++);
}
程序运行后的输出结果是( )。
A. b,b B.b,c
C. a,b D.a,c
【答案】A
【例20】(2004年9月)有以下程序
main()
{
intm=0256,n=256;
printf("%o%o\n",m,n);
}
程序运行后的输出结果是( )。
A. 0256 0400 B.0256 256
C. 256 400 D.400 400
【答案】C
【例21】(2004年9月)有以下程序
main()
{
inta=666,b=888;
printf(“%d\n”,a,b);
}
程序运行后的输出结果是( )。
A. 错误信息 B.666
C. 888 D.666,888
【答案】B
【例22】(2004年9月)有以下程序
main()
{
unsignedinta;
intb=-1;
a=b;
printf(“%u”,a);
}
程序运行后的输出结果是( )。
A. -1 B.65535
C. 32767 D.-32768
【答案】B
【考点解析】在本题中,有一无符号变量和一整型变量,它们的值都是-1,在计算机整型的存储是以二进制存在,即是1000000000000001,输出函数的要求输出无符号a的值,即要把1000000000000001转化为十进制,得65535。
二、填空题:
【例23】(2002年4月)以下程序的输出结果是_______。
main()
{
inta=177;
printf("%o\n",a);
}
【答案】261
【考点解析】本题中先定义了一个十进制整数值为177的a,而printf()函数格式控制参数是o,也就是以八进制的整数形式输出,a的十进制数值是177转换为八进制数是261。
【例24】(2002年4月)以下程序的输出结果是_______。
main()
{
inta=0;
a+=(a=8);
printf(“%d\n”,a);
}
【答案】16
【考点解析】在程序是用printf函数输出十进制的整数,表达式经过复合运算:
a=a+a=8+8=16,则结果是16。
【例25】(2002年4月)以下程序的输出结果是_______。
main()
{
inta=5,b=4,c=3,d;
d=(a>b>c);
printf(“%d\n”,d);
}
【答案】0
【考点解析】在C语言中规定了关系运算符”>”按左结合来运算的,所以在本题中先计算a>b,结果是真,即是1,再计算a>c,结果是假,所以最后结果是0。
【例26】(2003年4月)若有语句
inti=-19,j=i%4;
printf(“%d\n”,j);
则输出结果是 。
【答案】-3
【考点解析】根据C语言中printf函数的用法可知,格式控制参数是d,即是输出是十进制的数,%运算符是取除运算运算符,j=-19%4=-3。
即答案是-3。
【例27】(2003年9月)以下程序运行后的输出结果是 。
main()
{
intp=30;
printf("%d\n",(p/3>0?
p/10:
p%3));
}
【答案】3
【考点解析】printf函数的格式控制参数是d,即是输出是十进制的数,三目运算符:
(条件表达式)?
(条件为真时的表达式):
(条件为假时的表达式),条件表达式p/3>0=10>0为真,按照规则求表达式p/10的值就是输出的值,因此最后的输出表达式的值为3。
【例28】(2003年9月)以下程序运行后的输出结果是 。
main()
{
charm;
m=’B’+32;
printf("%C\n",m);
}
【答案】b
【考点解析】printf函数的格式控制参数是C,即输出的是字符,在本题中,表达式m=’B’+32是表示字符B的ASCII码加上32再赋予m,而字符B的ASCII码是66,因此字符m的ASCII为66+32=98,最后输出的结果是ASCII码为98的字符,通过计算得字符b的ASCII码是98,则最后结果是输出b。
【例29】(2004年4月)已知字符A的ASCII码值为65,以下语句的输出结果是______。
charch=’B’;
printf("%c%d\n",ch,ch);
【答案】B66
【考点解析】本题中printf函数的格式控制参数有两个,分别是cd,即是以字符格式和十进制整数格式输出,B的ASCII码值为66,即输出的十进制数是66,则最后输出答案为B66。
【例30】(2004年9月)以下程序段的输出结果是________。
inti=9;
printf(“%o\n”,i);
【答案】11
【考点解析】本题中有一个十进制整数值为9的变量i,printf函数参数要求输出八进制的数,值为9的变量i的八进制数是11,则最后的结果是11。
例31】(2004年9月)以下程序运行后的输出结果是_______。
main()
{
inta,b,c;
a=25;
b=025;
c=0x25;
printf("%d %d %d\n"a,b,c);
}
【答案】25 21 37
【考点解析】本题中有十进制整数值为25的a,八进制整数值为025的b,十六进制整数值为0x25的c,printf函数要求输出结果是十进制整数,且中间要用空格分隔。
那么三个变量的十进制整数值分别是25,21,37。
即25 21 37也就是答案。
4.2选择结构
一、选择题:
【例1】(2002年9月)有以下程序
main()
{
inta=15,b=21,m=0;
switch(a%3)
{
case0:
m++;break;
case1:
m++;
switch(b%2)
{
default:
m++;
case0:
m++;break;
}
}
printf("%d\n",m);
}
程序运行后的输出结果是( )。
A. 1 B. 2
C. 3 D. 4
【答案】A
【考点解析】在本题中是运行switch语句,当中有break语句,而break语句的作用是跳出switch语句,即如果没有break语句,程序将继续执行到switch语句的结束。
程序中,首先执行表达式a%3=0,则执行case0,即m=m+1=1;所以最后输出1。
【例3】(2003年4月)有以下程序
main()
{
inti=1,j=1,k=2;
if((j++||k++)&&i++)
printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是( )。
A. 1,1,2 B. 2,2,1
C. 2,2,2 D. 2,2,3
【答案】C
【考点解析】在本题中,先计算if语句后面表达式(j++||k++)&&i++,当j=j+1=2成立时,程序并不继续运行k++,即k=2,再运行i=i+1=2,最后输出i、j、k的值分别是2,2,2。
【例4】(2003年4月)有以下程序
main()
{
inta=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else
if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
执行后输出结果是( )。
A.2 B. 3
C.4 D. 编译时有错,无结果
【答案】B
【考点解析】在C语言中if总是与离它最近的else语句配对。
首先执行第一个if语句,判断表达式(a>b>c),”>”运算符为左结合性,即a>b>c的值为假,所以执行else后面的语句。
而else后面语句又是ifelse语句,判断表达式((c-1>=d)==1),整个表达式成立,则执行输出d+1=3
【例6】(2004年4月)以下程序中与语句k=a>b?
(b>c?
1:
0):
0功能等价的是( )。
A.if((a>b)&&(b>c))k=1; B. if((a>b)||(b>c))k=1;
elsek=0;; elsek=0;
C.if(a<=b)k=0; D. if(a>b)k=1;
elseif(b<=c)k=1;
elseif(b elsek=0;
【答案】A
【考点解析】三目运算符:
(条件表达式)?
(条件为真时的表达式):
(条件为假时的表达式),分析题目给出的表达式可知如果a>b和b>c同时为真k=1,否则k=0。
明显选项A符合条件。
二、填空题:
【例10】(2003年4月)若有以下程序
main()
{
inta=4,b=3,c=5,t=0;
if(a
if(a
printf("%d%d%d\n",a,b,c);
}
执行输出结果是 。
【答案】5 0 3
【考点解析】根据C语言选择结构if语句知道,当条件成立时,程序将执行其后的一条语句或一个语句块。
当条件不成立时,程序将跳过if语句后的语句或语句块,然后继续执行。
在本题中,我们先计算第一个if后面的表达式a
【例12】(2004年4月)有以下程序
main()
{
intn=0,m=1,x=2;
if(!
n)x-=1;
if(m)x-=2;
if(x)x-=3;
printf("%d\n",x);
}
执行后输出结果是 。
【答案】-4
【考点解析】在本题中,是多个if构成的选择结构。
!
n=!
0为真执行x=x-1=2-1=1,m=1,而m又为真,执行x=x-2=1-2=-1,再x的值为真,执行x=x-3=-1-3=-4。
4.3循环结构
一、选择题:
【例1】(2002年4月)以下程序中,while循环的循环次数是( )。
main()
{
inti=0;
while(i<10)
{
if(i<1)continue;
if(i==5)break;
i++;
}
……
}
A.1 B.10
C.6 D.死循环,不能确定次数
【答案】D
【考点解析】在题目中,首先给整型变量i赋初始值为0,接着进行循环语句while判断,判断为真则进入循环体,在循环体中执行选择结构的if语句,这里有两个if语句,第一个if成立,则执行重新回到while语句重新判断,因为变量i的值没有发生改变,则程序会一直在这两条语句间执行,而造成死循环。
【例2】(2002年4月)以下程序的输出结果是( )。
main()
{
inta=0,i
for(i=1;i<5;i++)
{
switch(i)
{
case0:
case3:
a+=2;
case1:
case2:
a+=3;
default:
a+=5;
}
}
printf("%d\n",a);
}
A.31 B. 13
C.10 D. 20
【答案】A
【考点解析】在本题中,首先定义了一个整型变量a值为0,接着执行for循环语句,循环为5次,每一次的循环都执行选择结构的switch语句,而这个switch语句是根据i的值来对变量a进行操作,而这个switch语句并没有结合break语句,所以它是会继续执行当前语句下面的case,分别当i为1时,a=a+3+5=8;当i=2时,a=a+3+5=16;当i=3时,a=a+2+3+5=26;其余的为a=a+5=31,即答案为31。