请教c语言大神?能回答哪个回答哪个?

如果看不清,代码在这个博客里面:http://www.cnblogs.com/xiaomi5320/p/4172460.html万分感谢!!!!!!!!!!!... 如果看不清,代码在这个博客里面:http://www.cnblogs.com/xiaomi5320/p/4172460.html
万分感谢!!!!!!!!!!!
展开
 我来答
mraaronjin
2014-12-18 · TA获得超过126个赞
知道小有建树答主
回答量:180
采纳率:100%
帮助的人:121万
展开全部
for是循环,将data数组循环了,总体就是输入了5次,输出了5次。
如果不加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个参数只是一个运算过程,本身并不取值,所以不会影响循环体,如果是写在取值的步骤,就会对取值产生影响了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2014-12-19 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6472万
展开全部

看来你读代码不太注意语句间的关系!解释如下:

  1. 由于代码要读入nValues个输入值,就是说需要执行nValues次scanf("%lf",&data[i]);,如果只写一个scanf("%lf",&data[i]);的话则只能读入一次。

  2. 由于代码要输出nValues个数据,就是说要执行nValues次printf("%15.2lf",data[i]);,如果只写一个printf("%15.2lf",data[i]);的话则只输出一个数据。

  3. 与前二项一样的道理,代码需要给reciprocals[0]~reciprocals[nValues-1]依次赋值为data[0]~data[nValues-1],同时要依次输出reciprocals[0]~reciprocals[nValues-1];那就是要执行nValues次for后面{}中的两条语句,如果没有for循环结构而只写这两条语句的话就只作一次赋值和一次输出。

  4. printf("+");是和前面的if(i>0)连在一起的条件语句,第一次i=0,不满足i>0的条件,所以不执行printf("+");,故第一个输出前面没有+号;最后一项在执行完printf("1/%.21f\n",data[i]);后,返回到for循环,这是i已经等于nValues了,不满足i<nValues的条件,所以for循环直接跳出而不执行它的“体"语句了,所以不可能再在其后面输出个“+”来。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
浅浅淡淡day
2014-12-18 · 超过10用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:13.6万
展开全部
一个一个回答:
(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循环为什么会写成两个方式呢?
什么时候该用这个、什么时候用那个?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bnfarseer
2014-12-18 · 超过16用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:30.1万
展开全部
1,2,3都是一样的,加for是为了能够读取多个值或者打印多个值,如果你不喜欢for循环,可以这样scanf("%f%f%f%f%f“,&data[0],&data[1],&data[2],&data[3],&data[4]);
和上文同样的效果,printf同上
“ + ”是为了打印加号,第一项没有是因为for循环初始化得时候,i=0,因此if(i>0)这个条件不满足,所以不打印,所以没加号。
最后没加号是因为for循环跳出,“=”和后面的结果是由4的红框下面的printf语句实现打印的。
追问
谢谢你的回答,基本上听懂了。
另外还想请问下:
1、2、3中++i和4中的i++,都是for循环为什么会写成两个方式呢?
什么时候该用这个、什么时候用那个?
追答
在for语句的条件中,++i和j++实现的效果都一样,都是在函数体也就是{}执行完毕后自增,两种写法都没错,但是从效率看,++i这样的前置自增好。
用后置自增就一种情况:
X=*Y++;
Y为指针,这条语句实现了赋值与指针自增两个功能。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风波00001
2014-12-19
知道答主
回答量:9
采纳率:0%
帮助的人:1.1万
展开全部
对说的对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式