C语言的问题,请讲解详细过程

intx,y;for(y=1;y<10;)y=((x=3*y,x+1),x-1);printf("x=%d,y=%d",x,y);... int x,y;
for(y=1;y<10;)
y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y);
展开
 我来答
veket的小号
推荐于2016-08-31 · TA获得超过3371个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:3991万
展开全部
分析如下

第一次循环
y=1时
y=((x=3*y,x+1),x-1);
这句进行语法
首先要明确 赋值符号“=”的优先级高于 逗号表达式运算符否 “,”
逗号表达式 取最右边的表达式的值

(x=3*y),x+1 这个表达式 先计算x=3*1=3 , 整个逗号表达式值为最右边的x+1的值 即4(注意此时x的值为3)

y=(4,x-1); 这个表达式右边 ()里的是逗号表达式 值为x-1 即为2

所以 y = 2

第二次循环(实际上x+1是个干扰项,由于逗号表达式的得点 x+1 实际不起作用,y=((x=3*y,x+1),x-1);可简化为 y=((x=3*y),x-1)
y=2
类似同上分析
x=3*2= 6
y=(7,x-1)
y=5

第三次循环 就直接用简化后的 分析好了
y=5
x=3*5=15
y=14 不满足y<10循环结束

输出 x为15 y为14
以上分析 用c-free 运行实测OK
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
载茹4177
2014-09-13 · TA获得超过130个赞
知道答主
回答量:116
采纳率:66%
帮助的人:57万
展开全部
#include <stdio.h>
#include <ctype.h>
void fun (char*p) //接收str数组的首地址
{ int i=0;
while(p[i]) //是否为结束标记'\0'
{ if (p[i]==' '&&islower(p[i-1]) p[i-1]=p[i-1]-'a'+'A'; //如果p[i]为空 且他的左边一个字符为小字母,就把它转化成大写字母 p[i-1]=p[i-1]-'a'+'A';相当p[i-1]=p[i-1]-32 这是ASCII运算
i++;
}
}
main()
{char sl[100]="ab cd EFG !";
fun(sl); printf("%s\n",sl);
}
islower()判定是否是小写字母,如果是则为真,否则为假
p[i-1]=p[i-1]-'a'+'A' 如'B'='b'-'a'+'A'=1+'A'='B'
希望对你能有所帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式