关于C语言,本题为什么for循环用了两次呢,求详解 都是什么情况下for循环需要多次使用啊谢谢
三、编程题m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如:当sco...
三、编程题
m个人的成绩存放在score数组中,请编写函数 fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如:当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为10、20、30、40。
#include <stdio.h>
#include <string.h>
int fun(int score[], int m, int below[])
{int i,j=0,aver,sum=0;
for(i=0;i<m;i++)
sum=sum+score[i];
aver=sum/m;
for(i=0;i<m;i++)
if(score[i]<aver)
{below[j]=score[i];j++;}
return j;
}
main( )
{ int i, n, below[9] ;
int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ;
n = fun(score, 9, below) ;
printf( "\nBelow the average score are: " ) ;
for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ;
} 展开
m个人的成绩存放在score数组中,请编写函数 fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如:当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为10、20、30、40。
#include <stdio.h>
#include <string.h>
int fun(int score[], int m, int below[])
{int i,j=0,aver,sum=0;
for(i=0;i<m;i++)
sum=sum+score[i];
aver=sum/m;
for(i=0;i<m;i++)
if(score[i]<aver)
{below[j]=score[i];j++;}
return j;
}
main( )
{ int i, n, below[9] ;
int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ;
n = fun(score, 9, below) ;
printf( "\nBelow the average score are: " ) ;
for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ;
} 展开
3个回答
展开全部
既然你要详细解释,我就从题目开始来分析:
题目要求函数能干3件事:
1、计算出平均分;2、统计低于平均分的人数;3、把低于平均分的分数保存在另一个数组中
我们来分析一下:
首先,要做到这些是就必须遍历数组中的每一个元素,因此循环是必须的,而且对于这种循环次数已知的问题(数组元素数为9),我们一般会用for循环
其次,在设计程序的时候我们应遵守一项原则,尽量少地使用for循环的个数,尤其最好能避免for循环的嵌套问题(这道题显然不需要)。因此,我们想一想用一次for循环是否能完成这3个任务。显然是不行的,因为如果不计算出总的得分我们就无法得到平均分(任务1),进而就无法比较哪些低于平均分(任务2,3)。所以一个循环是不够的,只能用两个循环。
最后,我们来设计这两个循环。第一个循环只做一件事,就是把数组中的每个元素依次相加得到总成绩。循环结束以后我们就可以计算出平均分了。接着我们发现任务2和3可以同时在第二个循环中进行,先判断每个元素是否小于平均数,如果小于,就把它存入新数组并且把用于统计人数的变量j自增,于是循环结束后我们所需要的人数和新数组就都得到了
纯手打,加个人分析
题目要求函数能干3件事:
1、计算出平均分;2、统计低于平均分的人数;3、把低于平均分的分数保存在另一个数组中
我们来分析一下:
首先,要做到这些是就必须遍历数组中的每一个元素,因此循环是必须的,而且对于这种循环次数已知的问题(数组元素数为9),我们一般会用for循环
其次,在设计程序的时候我们应遵守一项原则,尽量少地使用for循环的个数,尤其最好能避免for循环的嵌套问题(这道题显然不需要)。因此,我们想一想用一次for循环是否能完成这3个任务。显然是不行的,因为如果不计算出总的得分我们就无法得到平均分(任务1),进而就无法比较哪些低于平均分(任务2,3)。所以一个循环是不够的,只能用两个循环。
最后,我们来设计这两个循环。第一个循环只做一件事,就是把数组中的每个元素依次相加得到总成绩。循环结束以后我们就可以计算出平均分了。接着我们发现任务2和3可以同时在第二个循环中进行,先判断每个元素是否小于平均数,如果小于,就把它存入新数组并且把用于统计人数的变量j自增,于是循环结束后我们所需要的人数和新数组就都得到了
纯手打,加个人分析
更多追问追答
追问
先谢谢你了,不过还想问一问,请您看一下,下面这道题为什么两次输出循环结构呢
他们是否可以去掉??感激不尽
main()
{int a[3][3],i,j;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
a[i][j]=rand()%10;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
printf("%d%d",a[i][j]);
printf("\n");
}
追答
你这个程序的输出结果太难看了,我给你改了一下输出格式,这样看着舒服点,你运行一下看看就容易理解我下面说的了。
main(){
int a[3][3],i,j;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
a[i][j]=rand()%10;
for(i=0;i<=2;i++){
for(j=0;j<=2;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
程序目的:利用随机数生成一个3*3的矩阵,并输出结果,由于矩阵保存在一个二维数组里,所以要用一次循环嵌套,也叫多重循环,不是两个循环。
最外层的循环(变量为i)控制行,内层的j控制列,这下明白了吧
展开全部
这里for用了两次是你解题的需要,
第一次for循环,将所有分数加和,然后算出平均分;
第二次for循环,将所有分数跟平均分对比,低于平均分的放到below数组中;
具体要用到几个for循环,就看解题的需要(正如此题)。
第一次for循环,将所有分数加和,然后算出平均分;
第二次for循环,将所有分数跟平均分对比,低于平均分的放到below数组中;
具体要用到几个for循环,就看解题的需要(正如此题)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本题中两次for是分开的,彼此没有关系,删除一个不影响另一个,不是for循坏的叠加
一次循环用一个for,这个循环里面的每一项还有一个循环,再用一个for,循环下有循环再用……
比如一个级有5个班,用一个for,一个班有四组,第一个for循环中叠加第二个for循环,一组中有12人,叠加第三个for……
其实for循环多次使用的问题不用考虑,使用很自然的事,该用时水到渠成
一次循环用一个for,这个循环里面的每一项还有一个循环,再用一个for,循环下有循环再用……
比如一个级有5个班,用一个for,一个班有四组,第一个for循环中叠加第二个for循环,一组中有12人,叠加第三个for……
其实for循环多次使用的问题不用考虑,使用很自然的事,该用时水到渠成
追问
还是那个问题,下面这道题可不可以改成如下呢
原题
main(){ int a[3][3],i,j;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
a[i][j]=rand()%10;
for(i=0;i<=2;i++){
for(j=0;j<=2;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
改后
main(){
int a[3][3],i,j;
for(i=0;i<=2;i++)
{for(j=0;j<=2;j++)
a[i][j]=rand()%10;
printf("%5d",a[i][j]);
printf("\n")}
谢谢
追答
可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询