当前位置: 代码迷 >> C语言 >> 关于FOR循环的三级题
  详细解决方案

关于FOR循环的三级题

热度:164   发布时间:2005-01-08 20:34:00.0
关于FOR循环的三级题
不明白怎么循环的,高手指点一下。 这是里面的一段代码,这是一个求一个4位整数数组中千位和10位是奇数的正整数个数和它们中千位和10位是奇数的平均数的函数, int i, j1, j2; for( i=0; i<100; i++) if(xx[i]) tntcon++; for( i=0; i<tnttcon; i++){ j1 = xx[i]%1000 ; j2 = (xx[i]%100)/10; if ( j1%2!==0 && j2 % 2!==0) tcncon += xx[i] ; cnt++ } pingjun = tcncon/cnt; 数组和一些变量在主函数中定义了。 还有一些,不过都忘了。不明白第二个FOR是怎么循环的。 还有程序介绍说xx[i]%1000是求千位数,我不明白怎么求出来的.。 告诉我

[此贴子已经被作者于2005-1-8 20:42:02编辑过]

搜索更多相关的解决方案: FOR  cnt  整数  变量  tcncon  

----------------解决方案--------------------------------------------------------
能不能给出完整点的代码啊?
----------------解决方案--------------------------------------------------------

int i, j1, j2;

for( i=0; i<100; i++) if(xx[i]) tntcon++;//统计数组xx[i]中的元素,存储在tntcon中 for( i=0; i<tnttcon; i++){ j1 = xx[i]%1000 ;//得到千位数字注意j1是整形 j2 = (xx[i]%100)/10;//得到十位数字 if ( j1%2!==0 && j2 % 2!==0)//如果千位和十位都是基数 { tcncon += xx[i] ;//求和 cnt++;//统计数目(这里掉了括号) } } pingjun = tcncon/cnt//求均值 我加了注释,你再仔细想想,挺简单的


----------------解决方案--------------------------------------------------------
你的代码是不是写错了啊!
----------------解决方案--------------------------------------------------------
谢谢,不过还是有点不明白第二个for怎么循环的,两次循环都应该在数组xx[i]中吧
for( i=0; i&lt;100; i++) if(xx[i])   tntcon++;
           for( i=0; i&lt;tnttcon; i++)

由于if(xx[i]) 判断数组中的数是否为正整数,所以tnttcon只能统计数组中一部分整数的个数,
用tnttcon控制循环就不能把整个数组里的数值查找完吧。所有的正整数不可能都在前面吧。

这个题是在一个3级试题上看的,具体的程序记不清了,只记的这些代码
----------------解决方案--------------------------------------------------------
//假设输入的数不会超过100且都大于0
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
void main(){
int tnttcon,tcncon,cnt,pingjun;
int  i,j1,j2;
int xx[100];
tcncon=0;//用来累计求和
cnt=0;
tnttcon=0;
for(i=0;i&lt;100;i++){
xx[i]=0;
}
printf("Please input the nums you want to tongji:\n");
//最后请输入0000
for(i=0;i&lt;100;i++){
scanf("%d",&amp;xx[i]);
if(xx[i]==0)
  break;
}
for( i=0; i&lt;100; i++){
if(xx[i]){   
   tnttcon++;//统计共输入几个数
}
}
for( i=0; i&lt;tnttcon; i++){
j1=(xx[i]%10000)/1000 ;//取千位数(在保证输入的数不超过10000时原来的语句就能得到千位了)
j2=(xx[i]%100)/10;//取十位数
if (j1%2!=0&amp;&amp;j2%2!=0){
  tcncon+=xx[i];
  cnt++;//统计数目
}
}
pingjun=tcncon/cnt;//平均
}
题目总是弄些莫名其妙的东西让我们来解析,很烦!
我试着理解它的意思写了个完整的程序,你看看吧!
应该对你的理解有帮助!
不过有个bug,就是你必须输入一个以上满足题意的数!
----------------解决方案--------------------------------------------------------
j1 = xx[i]%1000 ;这不能得到千位数,要得到千位数,应该这样:j1 = xx[i]/1000;这是原则问题,不能有错。
----------------解决方案--------------------------------------------------------
谢谢
----------------解决方案--------------------------------------------------------
以下是引用78838698在2005-1-8 20:34:39的发言: 不明白怎么循环的,高手指点一下。 这是里面的一段代码,这是一个求一个4位整数数组中千位和10位是奇数的正整数个数和它们中千位和10位是奇数的平均数的函数, int i, j1, j2; for( i=0; i<100; i++) if(xx[i]) tntcon++; for( i=0; i<tnttcon; i++){ j1 = xx[i]%1000; j2 = (xx[i]%100)/10; if ( j1%2!==0 && j2 % 2!==0) tcncon += xx[i] ; cnt++ } pingjun = tcncon/cnt; 数组和一些变量在主函数中定义了。 还有一些,不过都忘了。不明白第二个FOR是怎么循环的。 还有程序介绍说xx[i]%1000是求千位数,我不明白怎么求出来的.。 告诉我
首先,你的运算符用过了。例如:j1 = xx[i]%1000中的%号是求余的,整除应该是/的,这是原则问题。还有 j1 = xx[i]%1000; j2 = (xx[i]%100)/10; if ( j1%2!==0 && j2 % 2!==0) tcncon += xx[i] ; cnt++ 这些都是循环体的,在内循环是顺序执行的
----------------解决方案--------------------------------------------------------
for( i=0; i<100; i++) if(xx[i]) tntcon++; 这条是算出XX[100]这个数组中具体放了多个数在里面。他定义为XX[100]并不代表这个数组里有100个数, TNTCON是这个数组中的个数。所以在第二个循环里会用到这个控制循环的次数。 第二个循环是执行 { } 这个大括符中的内容。
----------------解决方案--------------------------------------------------------
  相关解决方案