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); 展开
for(y=1;y<10;)
y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y); 展开
2个回答
展开全部
分析如下
第一次循环
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
第一次循环
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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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'
希望对你能有所帮助。
#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'
希望对你能有所帮助。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询