循环问题
这个程序哪里错了吗/*从键盘输入10个数存入数组a,计算数组中元素的平均值;将数组大于平均值的数据移至数组前部,小于等于平均值的数据移至数组后部*/
#include<stdio.h>
void main()
{
double a,b,sum=0,ave;
int i,j;
for(i=0;i<10;i++){
scanf("%lf",&a);
sum+=a;
}
ave=sum/10;
printf("%lf",ave);
for(i=0,j=0;i<10;i++,j++){
if(a>ave){
b=a;
}
else{
b=a;
}
}
for(j=0;j<10;j++){
printf("%lf ",b);
}
}
#include<stdio.h>
void main()
{
double a, b, sum = 0, ave;
int i, j;
for (i = 0; i<10; i++){
scanf("%lf", &a);
sum += a;
}
ave = sum / 10;
printf("%lf\n", ave);
for (i = 0, j = 0; i<10; i++) //1
{
if (a>=ave){
b = a;//2
}
else{
b = a;//3
}
}
for (j = 0; j<10; j++){
printf("%lf\n", b);
}
}
简单改了下 添加一个变量 k,程序看起来就清楚明白:
/*从键盘输入10个数存入数组a,计算数组中元素的平均值;将数组大于平均值的数据移至数组前部,小于等于平均值的数据移至数组后部*/
#include<stdio.h>
void main()
{
double a, b, sum = 0, ave;
int i, j = 0,k = 0;
for (i = 0;i < 10;i++)
{
scanf("%lf", &a);
sum += a;
}
ave = sum / 10;
printf("%lf ", ave);
for (i = 0;i < 10;i++)
{
if (a > ave)
{
b = a;
j++;
}
else
{
b = a;
k++;
}
}
for (j = 0;j < 10;j++)
{
printf("%lf ", b);
}
printf("\n");
} 程序还可这么来写,保持原输入顺序不变
/*从键盘输入10个数存入数组a,计算数组中元素的平均值;将数组大于平均值的数据移至数组前部,小于等于平均值的数据移至数组后部*/
#include<stdio.h>
void main()
{
double a, b, sum = 0, ave;
int i, j = 1;
for (i = 0;i < 10;i++)
{
scanf("%lf", &a);
sum += a;
}
ave = sum / 10;
b = ave;
for (i = 0;i < 10;i++)
{
if (a > ave)
{
b = a;
j++;
}
}
for (i = 0;i < 10;i++)
{
if (a < ave)
{
b = a;
j++;
}
}
for (j = 0;j < 11;j++)
{
printf("%lf ", b);
}
printf("\n");
} 北冰羊 发表于 2020-12-4 12:55
#include
void main()
{
改动//3:应该是:b = a; 风过无痕1989 发表于 2020-12-4 15:04
程序还可这么来写,保持原输入顺序不变
第33行,j = 1;
这个效率可能没有二楼的高,相当于数组a遍历了两次。
urva 发表于 2020-12-4 18:31
第33行,j = 1;
这个效率可能没有二楼的高,相当于数组a遍历了两次。
要想保持原输入顺序,就得遍历两次,一次找大数,一次找小数。就看你的取舍,要效果,遍历两次,要效率,遍历一次 北冰羊 发表于 2020-12-4 12:55
#include
void main()
{
非常感谢 风过无痕1989 发表于 2020-12-4 15:04
程序还可这么来写,保持原输入顺序不变
非常感谢 urva 发表于 2020-12-4 18:31
第33行,j = 1;
这个效率可能没有二楼的高,相当于数组a遍历了两次。
非常感谢
页:
[1]