请教c语言大神?能回答哪个回答哪个?
万分感谢!!!!!!!!!!! 展开
如果不加for,你怎么控制循环次数?
特别你要注意,你在定义的时候data的[]是nvalue,也就是说,数组长度是通过nvalue来定义的
至于第4个问题,为什么没有加号
是因为循环体设置了在输出之前放置加号,所以最后那个不会有,而数组的起始是从0开始,所以i>0,使得第一个也没有加号了
谢谢了
另外还想请问下:
1、2、3中++i和4中的i++,都是for循环为什么会写成两个方式呢?
什么时候该用这个、什么时候用那个?
var i=1;
undefined
console.log(i++);
1
console.log(i)
2
console.log(++i);
3
console.log(i);
3
在控制台,我做了这样一段小测试,你可以根据结果看一下
i++是先取i的值,然后再i=i+1,而++i是先i=i+1,然后再取值,区别就在这里
然后回到你的问题中,这2个东西是没有区别的,因为for的第3个参数只是一个运算过程,本身并不取值,所以不会影响循环体,如果是写在取值的步骤,就会对取值产生影响了
看来你读代码不太注意语句间的关系!解释如下:
由于代码要读入nValues个输入值,就是说需要执行nValues次scanf("%lf",&data[i]);,如果只写一个scanf("%lf",&data[i]);的话则只能读入一次。
由于代码要输出nValues个数据,就是说要执行nValues次printf("%15.2lf",data[i]);,如果只写一个printf("%15.2lf",data[i]);的话则只输出一个数据。
与前二项一样的道理,代码需要给reciprocals[0]~reciprocals[nValues-1]依次赋值为data[0]~data[nValues-1],同时要依次输出reciprocals[0]~reciprocals[nValues-1];那就是要执行nValues次for后面{}中的两条语句,如果没有for循环结构而只写这两条语句的话就只作一次赋值和一次输出。
printf("+");是和前面的if(i>0)连在一起的条件语句,第一次i=0,不满足i>0的条件,所以不执行printf("+");,故第一个输出前面没有+号;最后一项在执行完printf("1/%.21f\n",data[i]);后,返回到for循环,这是i已经等于nValues了,不满足i<nValues的条件,所以for循环直接跳出而不执行它的“体"语句了,所以不可能再在其后面输出个“+”来。
(1):double data[nValues];//定义的数组,for循环是用来循环输入来填充数组的,不用for也行,那就连续的scanf,很麻烦。
(2):循环输出数组,i是变量,循环+ 输出数组中存储的数值,不用也可以,手动输出,一个一个的敲。
(3):reciprocals[i] = 1.0/data[i]; 注意这句,和前面的一样,i是变量,数组中的地址,循环输出reciprocals[i],
(4):if(i > 0) { printf(" + ") } 数组地址是从0开始的,i初始=0;i不大于0,不执行下一句(printf(" + ");),至于最后一句,printf(" = %lf\n", sum);,不在for循环 中,所以不输出+。
十分感谢!
另外还想请问下:
1、2、3中++i和4中的i++,都是for循环为什么会写成两个方式呢?
什么时候该用这个、什么时候用那个?
和上文同样的效果,printf同上
“ + ”是为了打印加号,第一项没有是因为for循环初始化得时候,i=0,因此if(i>0)这个条件不满足,所以不打印,所以没加号。
最后没加号是因为for循环跳出,“=”和后面的结果是由4的红框下面的printf语句实现打印的。
谢谢你的回答,基本上听懂了。
另外还想请问下:
1、2、3中++i和4中的i++,都是for循环为什么会写成两个方式呢?
什么时候该用这个、什么时候用那个?
在for语句的条件中,++i和j++实现的效果都一样,都是在函数体也就是{}执行完毕后自增,两种写法都没错,但是从效率看,++i这样的前置自增好。
用后置自增就一种情况:
X=*Y++;
Y为指针,这条语句实现了赋值与指针自增两个功能。