2道C语言题不会,请哥哥们帮忙!
题1:以下程序运行结果是多少?#include<stdio.h>main(){inty=10;do{y--;}while(--y);printf("%d\n",y--);...
题1:
以下程序运行结果是多少?
#include<stdio.h>
main()
{ int y=10;
do{ y--;}
while(--y);
printf("%d\n",y--);
}
题2:
若运行以下程序时,从键盘输入 Total<回车>,则下面程序的运行结果是?
#include<stdio.h>
main()
{ char c;
int v1=0,v2=0;
do
{ switch(c=getchar())
case'a':v1+=1;
case't':case'T':v2+=1;
default:v1+=1;v2+=1;
}
} while(c!='\n');
printf("v1=%d,v2=%d\n",v1,v2);
}
-----------------------
以上问题严格按照原题格式,
请写出 解题思路和过程!十分感谢 等待回答中
刚才第2题程序抄掉了,以下为正确程序
#include<stdio.h>
main()
{ char c;
int v1=0,v2=0;
do
{ switch(c=getchar())
{case'a':v1+=1;
case't':case'T':v2+=1;
default:v1+=1;v2+=1;
}
} while(c!='\n');
printf("v1=%d,v2=%d\n",v1,v2);
}
---------
您的答案能详细点吗?我没有看懂
第1题y是怎么一步步变成0的?
第2题case't':case'T':v2+=1;这句是什么意思?
相当于
case't':
case'T':v2+=1;
吗? 展开
以下程序运行结果是多少?
#include<stdio.h>
main()
{ int y=10;
do{ y--;}
while(--y);
printf("%d\n",y--);
}
题2:
若运行以下程序时,从键盘输入 Total<回车>,则下面程序的运行结果是?
#include<stdio.h>
main()
{ char c;
int v1=0,v2=0;
do
{ switch(c=getchar())
case'a':v1+=1;
case't':case'T':v2+=1;
default:v1+=1;v2+=1;
}
} while(c!='\n');
printf("v1=%d,v2=%d\n",v1,v2);
}
-----------------------
以上问题严格按照原题格式,
请写出 解题思路和过程!十分感谢 等待回答中
刚才第2题程序抄掉了,以下为正确程序
#include<stdio.h>
main()
{ char c;
int v1=0,v2=0;
do
{ switch(c=getchar())
{case'a':v1+=1;
case't':case'T':v2+=1;
default:v1+=1;v2+=1;
}
} while(c!='\n');
printf("v1=%d,v2=%d\n",v1,v2);
}
---------
您的答案能详细点吗?我没有看懂
第1题y是怎么一步步变成0的?
第2题case't':case'T':v2+=1;这句是什么意思?
相当于
case't':
case'T':v2+=1;
吗? 展开
4个回答
展开全部
题1:
增加一个追踪变量i
#include<stdio.h>
void main()
{
int y=10,i=0;
do{
printf("%d\n",y);
y--;
i++;
}
while(--y);
printf("%d\ni=%d",y--,i);
}
putout:
10
8
6
4
2
0
i=5
意思是循环执行了5次
第一次:do{ y--;}y还是10 则--y为8,因为while(--y)时y=9,再--y,y=8.
一次循环后y=y-2
所以5次后y=0
题2:
因为switch里没有break;语句
所以程序会一直执行下去
总过程:
T:v1=1,v2=2
o:v1=2,v2=3
t:v1=3,v2=5
a:v1=5,v2=7
l:v1=6,v2=8
\n:v1=7,v2=9
即你输入T的时候执行了 case'T':v2+=1;default:v1++;v2+=1;
所以v1=0+1=1,v2=0+1+1=2
输入o的时候执行了 default:v1++;v2+=1;
所以v1=1+1=2,v2=2+1=3
do-whilde后验循环,先运行do{}循环体一次
输入回车是先执行
do
{ switch(c=getchar())
{case'a':v1+=1;
case't':case'T':v2+=1;
default:v1+=1;v2+=1;
}
这样又执行了
case'a':v1+=1; case't': case'T':v2+=1; default:v1+=1;v2+=1;
所以v1=7,v2=9
按照这样的步骤最后v1=7,v2=9
case't':case'T':v2+=1;
相当于
case't':
case'T':v2+=1;
增加一个追踪变量i
#include<stdio.h>
void main()
{
int y=10,i=0;
do{
printf("%d\n",y);
y--;
i++;
}
while(--y);
printf("%d\ni=%d",y--,i);
}
putout:
10
8
6
4
2
0
i=5
意思是循环执行了5次
第一次:do{ y--;}y还是10 则--y为8,因为while(--y)时y=9,再--y,y=8.
一次循环后y=y-2
所以5次后y=0
题2:
因为switch里没有break;语句
所以程序会一直执行下去
总过程:
T:v1=1,v2=2
o:v1=2,v2=3
t:v1=3,v2=5
a:v1=5,v2=7
l:v1=6,v2=8
\n:v1=7,v2=9
即你输入T的时候执行了 case'T':v2+=1;default:v1++;v2+=1;
所以v1=0+1=1,v2=0+1+1=2
输入o的时候执行了 default:v1++;v2+=1;
所以v1=1+1=2,v2=2+1=3
do-whilde后验循环,先运行do{}循环体一次
输入回车是先执行
do
{ switch(c=getchar())
{case'a':v1+=1;
case't':case'T':v2+=1;
default:v1+=1;v2+=1;
}
这样又执行了
case'a':v1+=1; case't': case'T':v2+=1; default:v1+=1;v2+=1;
所以v1=7,v2=9
按照这样的步骤最后v1=7,v2=9
case't':case'T':v2+=1;
相当于
case't':
case'T':v2+=1;
展开全部
do-while循环是后验循环,即不管循环条件是否为真,都要先运行do循环体一次;--,++,如果不涉及到函数,表达式等参数传递的话,置于变量前或者变量后没有区别,而如果涉及到参数传递,则置于变量前则先将变量自加(减)1再将加(减)后的值传递到函数或表达式中进行运算,如:int b,a=1;b=++a;则a在自加1之后再将值传递给b,所以a=2,b=2;而置于变量后则变量先将值传递给函数或表达式再自加(减)1.如int b,a=1;b=a--;则a先将值1传递给b,所以b=1,然后a自减1,故a=0。
明白上面的话之后就好说了:1)循环体结束于y=0时,而在printf()语句里,--位于变量y后,故y先传值再自减,故打印的是:0;2)do-whilde后验循环,先运行do{}循环体一次,在c=getchar()时输入回车,则switch()语句里运行的是default语句,故V1=1,V2=1;由于输入的是回车,故循环条件为假,跳出循环,打印的结果为:V1=1,V2=1。
明白上面的话之后就好说了:1)循环体结束于y=0时,而在printf()语句里,--位于变量y后,故y先传值再自减,故打印的是:0;2)do-whilde后验循环,先运行do{}循环体一次,在c=getchar()时输入回车,则switch()语句里运行的是default语句,故V1=1,V2=1;由于输入的是回车,故循环条件为假,跳出循环,打印的结果为:V1=1,V2=1。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1)结果为0,因为当y=0时退出do....while();循环,所以输出0
(2)如果输入字符‘a’,则输出的是v1=3,v2=3;
因为进入do..while循环后,符合case'a':v1+=1;
此时V1=1,因为没有break跳出switch,所以继续执行下面的情况case't':case'T':v2+=1;
default:v1+=1;v2+=1;
所以最后结果为:输出的是v1=3,v2=3;
同理可以得出输入t或其他的字符时的输出。
(2)如果输入字符‘a’,则输出的是v1=3,v2=3;
因为进入do..while循环后,符合case'a':v1+=1;
此时V1=1,因为没有break跳出switch,所以继续执行下面的情况case't':case'T':v2+=1;
default:v1+=1;v2+=1;
所以最后结果为:输出的是v1=3,v2=3;
同理可以得出输入t或其他的字符时的输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一题:do{ y--;} 执行时减一;
最后y为0时退出循环,在执行输出时再减一;最后结果为-1.
第二题:{ switch(c=getchar())
{case'a':v1+=1;
case't':case'T':v2+=1;
default:v1+=1;v2+=1;
}
函数体分析:键盘键入值为"a",V1加一;"T"或者"t",则v2加一;其它值则v1加一;
最后"v2+=1;"不是switch语句的一部分,每次都会执行.
最后结果:v1=3 v2=7
最后y为0时退出循环,在执行输出时再减一;最后结果为-1.
第二题:{ switch(c=getchar())
{case'a':v1+=1;
case't':case'T':v2+=1;
default:v1+=1;v2+=1;
}
函数体分析:键盘键入值为"a",V1加一;"T"或者"t",则v2加一;其它值则v1加一;
最后"v2+=1;"不是switch语句的一部分,每次都会执行.
最后结果:v1=3 v2=7
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询