| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 781 人关注过本帖
标题:求助有关C的问题
只看楼主 加入收藏
klklk
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-4-6
收藏
 问题点数:0 回复次数:8 
求助有关C的问题

题目为:输入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);

}

搜索更多相关主题的帖子: Roman New Times 
2005-04-08 14:04
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
恩,我们来看看你的问题 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"); }

淘宝杜琨
2005-04-08 23:36
klklk
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-4-6
收藏
得分:0 

谢谢这位大歌,不过我不是要它每行输出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个数。请帮忙看一下到底错在哪里了啊??

2005-04-09 09:05
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
我对你的题目仍然不是很了解,如果你想让我帮你把它解决掉,把题目直接写上来得了. if(i%10==0)printf("\n"); 这里改动为 if(i/10==0)printf("\n"); 应该是你弄错了% 和 /运算

淘宝杜琨
2005-04-09 09:33
形影随从
Rank: 1
等 级:新手上路
威 望:1
帖 子:188
专家分:0
注 册:2005-3-15
收藏
得分:0 
最简单的办法。你多定一个变量专门来计数的。当这个变量值为10时换行再赋初值为0,不过这样程序看起来就很笨的感觉就是了。

2005-04-09 10:07
klklk
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-4-6
收藏
得分:0 
书上的原题为:从键盘读入50个数存放入一个数组,求出该数组中最大值、最小值及所在位置。
2005-04-09 12:42
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
既然你搬出题目来了,那就是说要我帮作喔~!

我把2楼的程序修改一下就好

#include &lt;stdio.h&gt;
#define M 50

int main()
{
int max,min,i,s[M];

    /*输入10个数到数列s[M]中*/
    for(i=0;i&lt;M;i++)
    {
        printf("Please enter the %dth number:\t",i+1);
        scanf("%d",&amp;s[i]);
    }

    /*查找最大max最小min值*/
    max=min=s[0];
    for(i=0;i&lt;M;i++)
    {
        max=max&lt;s[i]?s[i]:max;
        min=min&lt;s[i]?min:s[i];
    }

    /*查找max的位置,并且输出之*/
    printf("\nmax=%d\n",max);
    printf("The max locate is :");
    for(i=0;i&lt;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&lt;M;i++)
        if(s[i]==min)
            printf(" s[%d]",i);

    printf("\nEND\n");
}

淘宝杜琨
2005-04-09 13:05
blanka_ren
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用神vLinux飘飘在2005-4-9 13:05:33的发言: 既然你搬出题目来了,那就是说要我帮作喔~! 我把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"); }
支持,楼上能把这个简单的程序写的这么简洁,挺有功底的啊

2005-04-09 20:16
hbjmll
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-3-14
收藏
得分:0 
对楼主的问题我是这样理解的: 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的地方换行
2005-04-09 21:28
快速回复:求助有关C的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017399 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved