题目为:输入10个数放入一个数列并输出这个数列中的最大和最小值。我编写的内容如下可是这个里面有几个问题要请教一下:
1、不管我怎么定义数组都是从a[0]开始的。我要怎样定义才能让数组从a[1]到a[10]让数组中的数于之一一对应呢?
2、为什么在显示输入的数那里,我是不是定义为每行10个数字可是为什么实际结果是第一个数输出后换一行输出9个数呢。而不是一行里输出10个数字呢??
请高手指点一下吧!!!
#include <stdio.h>
#include <math.h>
main()
{double a[10];
double max=-1e20, min=1000;/*max,min分别为最大和最小值并给出初值*/
int i, c, b; /*i控制循环量,c最大值的位置,b最小值所在的位置*/
for(i=0; i<10; i++)
{printf("输入第%d数:º", i);
scanf("%lf", &a[i]);
if(max<a[i]) /*求最大值 */
{max=a[i];
c=i+1;
}
else if(min>a[i]) /*求最小值*/
{min=a[i];
b=i+1;
}
}
printf("输入的数为ª:\n"); /*显示输入的数*/
for(i=0; i<10; i++)
{printf("%3.2f ", a[i]);
if(i%10==0)printf("\n");
}
printf("max=%3.2f\n", max);
printf("maxwaizhi:%d\n", c);
printf("min=%lf\n", min);
printf("minweizhi:%d", b);
}
----------------解决方案--------------------------------------------------------
恩,我们来看看你的问题 1.很遗憾,程序语言中,数组都是从0开始记数的,当然,如果你想在显示的时候是从1开始的可以这样改 printf("输入第%d数:º", i); 改为 printf("输入第%d数:º", i+1); 2.我们首先找到是哪个语句控制换行,最终我们找到的是 if(i%10==0)printf("\n"); 这样就很明显啦,当i不是10的时候i%10都不为0,想要每输出一个就可以自动换行这样改 if(i%10==0)printf("\n"); 改为 printf("\n"); 最后,我不得不说一句,你这个程序实在是太乱了,乱到无法来引导你到正确的编程学习道路上. 下面是我帮你做的一个,功能一样.希望对你的思维有帮助 /* 输入10个数放入一个数列并输出这个数列中的最大和最小值。 */ int main() { int max,min,i,s[10]; /*输入10个数到数列s[10]中*/ for(i=0;i<10;i++) { printf("Please enter the %dth number:\t",i+1); scanf("%d",&s[i]); } /*查找最大max最小min值*/ max=min=s[0]; for(i=0;i<10;i++) { max=max<s[i]?s[i]:max; min=min<s[i]?min:s[i]; } /*查找max的位置,并且输出之*/ printf("\nmax=%d\n",max); printf("The max locate is :"); for(i=0;i<10;i++) if(s[i]==max) printf(" %d",i); /*查找min的位置,并且输出之*/ printf("\nmin=%d\n",min); printf("The min locate is:"); for(i=0;i<10;i++) if(s[i]==min) printf(" %d",i); printf("\nEND\n"); }
----------------解决方案--------------------------------------------------------
谢谢这位大歌,不过我不是要它每行输出1个而是要它每行输出10数。因为真正的题目是50个数的数列而不是10个数的数列。 我是这样定义的
printf("输入的数为ª:\n"); /*显示输入的数的头*/
for(i=0; i<10; i++)
{printf("%3.2f ", a[i]);
if(i%10==0)printf("\n");/*每行输出10个数*/
} 这是程序里的运行结果是第一行1个数,第二行9个数。而我用20个数的数列来试的时后结果是第一行1个数,第二行10个数,第三行9个数。请帮忙看一下到底错在哪里了啊??
----------------解决方案--------------------------------------------------------
我对你的题目仍然不是很了解,如果你想让我帮你把它解决掉,把题目直接写上来得了. if(i%10==0)printf("\n"); 这里改动为 if(i/10==0)printf("\n"); 应该是你弄错了% 和 /运算
----------------解决方案--------------------------------------------------------
最简单的办法。你多定一个变量专门来计数的。当这个变量值为10时换行再赋初值为0,不过这样程序看起来就很笨的感觉就是了。
----------------解决方案--------------------------------------------------------
书上的原题为:从键盘读入50个数存放入一个数组,求出该数组中最大值、最小值及所在位置。
----------------解决方案--------------------------------------------------------
既然你搬出题目来了,那就是说要我帮作喔~!
我把2楼的程序修改一下就好
#include <stdio.h>
#define M 50
int main()
{
int max,min,i,s[M];
/*输入10个数到数列s[M]中*/
for(i=0;i<M;i++)
{
printf("Please enter the %dth number:\t",i+1);
scanf("%d",&s[i]);
}
/*查找最大max最小min值*/
max=min=s[0];
for(i=0;i<M;i++)
{
max=max<s[i]?s[i]:max;
min=min<s[i]?min:s[i];
}
/*查找max的位置,并且输出之*/
printf("\nmax=%d\n",max);
printf("The max locate is :");
for(i=0;i<M;i++)
if(s[i]==max)
printf(" s[%d]",i);
/*查找min的位置,并且输出之*/
printf("\nmin=%d\n",min);
printf("The min locate is:");
for(i=0;i<M;i++)
if(s[i]==min)
printf(" s[%d]",i);
printf("\nEND\n");
}
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
对楼主的问题我是这样理解的: 1、“让数组从a[1]到a[10]让数组中的数于之一一对应呢?” 我觉得定义数组的时候定义为: double a[11]; 使用的时候用a[1]--a[10]即可,a[0]放着不用,也可以用作中间变量。 2、第二个问题的出现是第一个问题在作祟,你的 if(i%10==0)printf("\n");并没有错,可以实现每10个换一行,但是你的循环变量i=0 to 9就不行了,改成i=1 to 10就可以了 这是因为 0%10=0 1%10=1 10%10=0 所以i从0到9就会在i=0的地方换行,而i从1到10就在i=10的地方换行
----------------解决方案--------------------------------------------------------