一道C语言的题

下面是书上的一道例题,可是书上没有详细过程,麻烦大家告诉我详细的过程(尤其是运行到!a=b这点时)谢谢!以下程序的输出结果是()(答案:D)main(){inta,b,t... 下面是书上的一道例题,可是书上没有详细过程,麻烦大家告诉我详细的过程(尤其是运行到!a=b这点时)谢谢!
以下程序的输出结果是()(答案:D)
main()
{ int a,b,t;
for(a=3,b=0;!a=b;a--,b++)
if(a>b){ t=a; a=b; b=t;}
printf("%d,%d\n",a,b);
}
A)4,1 B)1,4 C)4,-1 D)-1,4
展开
 我来答
White_MouseYBZ
2019-06-27 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6412万
展开全部

#include "悉誉stdio.h"

int Judge(const char *a,const char *b){

int s,n;

for(s=n=0;n<10;s+=a[n]==b[n++]);

return s;

}

int main(int argc,char *argv[]){

const char std[]="ABCDBBCBBC";

char ans[10],i,t;

printf("Please enter your answer(orderly sequence of ABCD)...\n");

while(1){

if(scanf("%10s",ans)==1)

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

if(ans[i]!='A' && ans[i]!='B' && ans[i]!='C' && ans[i]!='D')

break;

if(i>=10)

break;

printf("Input error, redo:\nPlease enter your answer(orderly sequence of ABCD)...\n"竖陆枣);

}

printf("\nCorrect answer:\n");

for(t=Judge(std,ans),i=0;i<10;i++)

if(std[i]==ans[i])

printf("%2d",i+1);

printf("\nTOTAL: %d\n",10*t);

return 0;

}

代码格式和运行样例图余拆片:

黄邦勇帅哥哥
2010-07-23 · TA获得超过3987个赞
知道大有可为答主
回答量:1199
采纳率:100%
帮助的人:472万
展开全部
!a=b这一句是错误的,应该是森帆颂!a==b,这样才正确

for语句中,首先执行a=3,b=0;这轿誉一句,

然后执行!a==b这一句,这是条件判断语句,若为真则执行for循环,若为假,则退出for循环。因为!非运算符的优先级高于==运算符,因此先计算!a,因为a=3,所以!a的值为0,因此!a==b的条件成立,也就是说!a与b的值是相等的。

执行for循环体,执行if,判断a>b是否成立,很明显3>0,因此交换两者的值,这时b=3, a=0;

执行for语句中的a--,b++;因为执行if后a=0, b=3,因此a--之后a的值为-1,b++之后的值为4。

再次执行for语句中的条件语句,!a==b;很明显!a为0,b为4,两者不相等,条件为假,退出for循环。

执行printf语句,输出a和b的值,这里可以看到,a的值为-1,而b的值为此郑4。

注意:for(表达式1;表达式2;表达式3)语句1;

执行顺序是,先执行表达式1,再执行表达式2,若表达式2的值为真,则执行语句1,若为假则跳出循环。执行完语句1之后,再执行表达式3,然后再执行表达式2,判断表达式2的结果是否为真,真则循环,假则退出,如此循环。要注意:表达式1只执行一次。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zolanking
2010-07-23 · TA获得超过424个赞
知道小有建树答主
回答量:488
采纳率:100%
帮助的人:364万
展开全部
初始条件 a=3,b=0
第一轮凳陵:
for判断语句,!a=b,!a的值为0,因此0=0这个逻辑表达式为真,也就是1
进入if判断,3>禅镇0 ,此时 t=3,a=0,b=3
回到for语句
a--后值为-1,b++后值为4
第二轮:
在此for判断语句,这次!a=b 不成立,因为!a值为0,而b值为4,因此0=4这个逻辑表式为假,也就贺粗粗是0,循环结束
所以打印a b 为 -1 4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
知道梦者
2010-07-23 · TA获得超过418个赞
知道小有建树答主
回答量:816
采纳率:0%
帮助的人:555万
展开全部
main()//主函数
{ int a,b,t;//变量定义,a,b,t都为整型
for(a=3,b=0;!a=b;a--,b++)//初始化变量并循环,判断条件是 !a是否等于b(!是隐清逻辑非,搏携兆!0 结果为1 ,!3 结果为0 只要不是0,!之后就为0,是0则为1)
if(a>b){ t=a; a=b; b=t;} // 这里基租执行完a=0,b=3但还要执行上句中的a--,b++,所以a=-1,b=4
printf("%d,%d\n",a,b);//输出
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5c49b6b6a
2010-07-23 · 超过34用户采纳过TA的回答
知道小有建树答主
回答量:83
采纳率:0%
帮助的人:94.8万
展开全部
a=3,b=0
a=3,!a=0,b=0,执行,if(a>b),
a(3)>b(0)
a,b交换,b=3,a=0
然后 a--成-1,b++成4,
!a=0,b=4,!a不等于b,跳哗搜出循环,结束
所以a=-1,b=4

!a=b这个地方有举芦首问题
要正数不就是a!=b,要不就是!a==b
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式