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;
吗?
展开
 我来答
jay45o
2009-04-09 · TA获得超过798个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:93.2万
展开全部
题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;
俟现佬00
2009-04-09
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
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。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
科技鸟
2009-04-09 · TA获得超过1251个赞
知道小有建树答主
回答量:865
采纳率:0%
帮助的人:0
展开全部
(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或其他的字符时的输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tanxuxin928
2009-04-14 · 超过21用户采纳过TA的回答
知道答主
回答量:157
采纳率:0%
帮助的人:78.2万
展开全部
第一题: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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式