系统粉 > 电脑问答 > 其他问答

已解决这个c的for语句是不是特殊用法

提问者:暖晨姑娘  |  浏览次  |  提问时间:2017-03-22  |  回答数量:3

这个c的for语句是不是特殊用法main() {void squ(char a[],char b[]); char s1[20]="I am a boy",s2[20]="you are a boy"; squ(s1,s2); printf("\n%s",s1); } void squ(char x[],char y[]) {int i=0,j=0; while(x!='\0') {while(y[j]!='\0') {if(x==y[j]) {for(j=i;x[j]=x[j+1];j++); i--; break; } j++; } i++;j=0; } } 首先它要做的问题是把前一个句子中出现的于后一个句子中的相同字符删除,运行结果是 Im, 表示对for(j=i;x[j]=x[j+1];j++)此句很不理解,它不是连循环的格式都不是吗 这是清华出版社2005年11月的《c语言程序设计》p141的一道例题 求各位帮忙 按我的想法,另外写了一个,始终不对,做法如下: main() {void squ(char a[],char b[]);    char s1[

已有3条答案
斜翼天使

斜翼天使

回答数:209  |  被采纳数:111

for的语法是for(表达式1;表达式2;表达式3)
编译后变成
表达式1;
循环开始:
表达式2;
if 执行结果==0 goto 结束
...//执行循环内容
表达式3;
goto 循环开始
结束:
只要满足for的括号里有3个表达式(或两个分号)就是正确的
2017-03-22 10:33:06
赞 20
令狐泽

令狐泽

回答数:54  |  被采纳数:108


版主,我从别处得到答案了,在这里和大家分享哈!下为解答者的回复,至于我写的为啥不对,让我再想想吧

发信人: mllml (马连良 梦露), 信区: Program
标题: Re: 这个c程序看不懂
发信站: BBS 兰大西北望站 (2012-03-03 19:48:21 Sat), 站内

你是说for 里面的这句么?:x[j]=x[j+1]

这句的意思是:将x[j+1]的值赋给x[j],然后判断x[j]是否是0:如果是0,则循环终止,如果是非零,则循环继续。

这里涉及到C的一个概念:表达式或者赋值语句本身是有值的,并且这个值可以判断语句的条件。

比如初学者经常犯的错误: 把if (x==15) {...}
误写成: if (x=15){...};这时候表达式x=15的返回值是15(非零),因此条件为真,所以在任何情况下都会执行if所包含的语句。

同样的,如果错把if (x==0){...}写成了 if(x=0){...}那么if里的语句就永远不会执行了。

这个问题里for的写法等同于:

for (j=x; x[j]!='\0';x[j]=x[j+1],j++){...}
或者:
for (j=x; x[j];x[j]=x[j+1],j++){...}

那个例子的写法比较简洁,但是可读性比较差,一般不提倡为了一点点速度牺牲可读性。
2017-03-22 11:46:20
赞 5
曲楚珩

曲楚珩

回答数:162  |  被采纳数:126

就是个普通的用法循环的吗,只不过是引用的数组负值而已,的
2017-03-22 17:50:28
赞 16
相关问答
最新其他问答
解决方法