【例31】(2004年9月)以下程序运行后的输出结果是_______。
main()
{
int a,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()
{
int a=15,b=21,m=0;
switch(a%3)
{
case 0:m++ ;break;
case 1:m++;
switch(b%2)
{
default:m++;
case 0:m++;break;
}
}
printf("%d\n",m);
}
程序运行后的输出结果是( )。
A. 1 B. 2
C. 3 D. 4
【答案】A
【考点解析】在本题中是运行switch语句,当中有break语句,而break语句的作用是跳出switch语句,即如果没有break语句,程序将继续执行到switch语句的结束。程序中,首先执行表达式a%3=0,则执行case 0,即m=m+1=1;所以最后输出1。
【例3】(2003年4月)有以下程序
main()
{
int i=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()
{
int a=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后面语句又是if else语句,判断表达式((c-1>=d)==1),整个表达式成立,则执行输出d+1=3。