鱼C论坛

 找回密码
 立即注册
查看: 525|回复: 6

[已解决]求助!

[复制链接]
发表于 2020-4-13 15:15:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*随机数产生年龄,统计各个年龄段人数,大于100岁的人数放在b[10],0-9放在b[0],10-19放在b[1],类推*/
#include <stdio.h>
# define N  50
# define M  11

void fun(int *a,  int *b)
{
        int c[M],i;

        for(i=0;i<N;i++)
        {
                if( 0 <= a[i] <= 9 )                          (c[0])++;                  //年龄大于0小于9,c[0]++
                if( 10 <= a[i] <= 19 )                   (c[1])++;              //同上
                if( 20 <= a[i] <= 29 )                  (c[2])++;
                if( 30 <= a[i] <= 39 )                  (c[3])++;
                if( 40 <= a[i] <= 49 )                  (c[4])++;
                if( 50 <= a[i] <= 59 )                  (c[5])++;
                if( 60 <= a[i] <= 69 )                  (c[6])++;
                if( 70 <= a[i] <= 79 )                  (c[7])++;
                if( 80 <= a[i] <= 89 )                 (c[8])++;
                if( 90 <= a[i] <= 99 )                   (c[9])++;
                if( 100 <= a[i] )                                   (c[10])++;
        }
        for(i=0;i<M;i++)
        {
                b[i] = c[i];                                          
        }
}


double  rnd()
{
          static int t=29,c=217,m=1024,r=0;
          r=(r*t+c)%m;  
          return((double)r/m);
}
void main()
{ 
          FILE *wf;
          int age[N], i,d[M];
          int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};
          for(i=0; i<N; i++)  
             age[i]=(int)(115*rnd());     /*产生一个随机的年龄数组*/
          printf("The original data :\n");
          for(i=0; i<N; i++)  
             printf((i+1)%10==0? "%4d\n":"%4d",age[i]);   /*每行输出10个数*/
          printf("\n\n");
          fun(age,d);
          for(i=0; i<10; i++)  
             printf("%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
          printf("Over 100  :  %4d\n",d[10]);
        /******************************/
          wf=fopen("out.dat","w");
          fun(b,d);
          for(i=0; i<10; i++)  
             fprintf(wf,"%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
          fprintf(wf,"Over 100  :  %4d",d[10]);
          fclose(wf);
        /*****************************/
}

运行结果:


最佳答案
2020-4-13 15:18:42
本帖最后由 永恒的蓝色梦想 于 2020-4-13 15:22 编辑

问题出在12-21行
/*随机数产生年龄,统计各个年龄段人数,大于100岁的人数放在b[10],0-9放在b[0],10-19放在b[1],类推*/
#include <stdio.h>
# define N  50
# define M  11

void fun(int *a,  int *b)
{
        int c[M],i;

        for(i=0;i<N;i++)
        {
                if( 0 <= a[i] && a[i] <= 9 )                      (c[0])++;                  //年龄大于0小于9,c[0]++
                if( 10 <= a[i] && a[i] <= 19 )                  (c[1])++;              //同上
                if( 20 <= a[i] && a[i] <= 29 )                  (c[2])++;
                if( 30 <= a[i] && a[i] <= 39 )                  (c[3])++;
                if( 40 <= a[i] && a[i] <= 49 )                  (c[4])++;
                if( 50 <= a[i] && a[i] <= 59 )                  (c[5])++;
                if( 60 <= a[i] && a[i] <= 69 )                  (c[6])++;
                if( 70 <= a[i] && a[i] <= 79 )                  (c[7])++;
                if( 80 <= a[i] && a[i] <= 89 )                  (c[8])++;
                if( 90 <= a[i] && a[i] <= 99 )                  (c[9])++;
                if( 100 <= a[i] )                                      (c[10])++;
        }
        for(i=0;i<M;i++)
        {
                b[i] = c[i];                                          
        }
}


double  rnd()
{
          static int t=29,c=217,m=1024,r=0;
          r=(r*t+c)%m;  
          return((double)r/m);
}
void main()
{ 
          FILE *wf;
          int age[N], i,d[M];
          int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};
          for(i=0; i<N; i++)  
             age[i]=(int)(115*rnd());     /*产生一个随机的年龄数组*/
          printf("The original data :\n");
          for(i=0; i<N; i++)  
             printf((i+1)%10==0? "%4d\n":"%4d",age[i]);   /*每行输出10个数*/
          printf("\n\n");
          fun(age,d);
          for(i=0; i<10; i++)  
             printf("%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
          printf("Over 100  :  %4d\n",d[10]);
        /******************************/
          wf=fopen("out.dat","w");
          fun(b,d);
          for(i=0; i<10; i++)  
             fprintf(wf,"%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
          fprintf(wf,"Over 100  :  %4d",d[10]);
          fclose(wf);
        /*****************************/
}
又一个Python写法受害者
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-13 15:16:05 | 显示全部楼层
我不知道怎么贴图。。没办法放结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 15:17:05 | 显示全部楼层
结果是年龄成功生成了,但是统计人数返回错了,不知道什么原因,求助大佬们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 15:18:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 永恒的蓝色梦想 于 2020-4-13 15:22 编辑

问题出在12-21行
/*随机数产生年龄,统计各个年龄段人数,大于100岁的人数放在b[10],0-9放在b[0],10-19放在b[1],类推*/
#include <stdio.h>
# define N  50
# define M  11

void fun(int *a,  int *b)
{
        int c[M],i;

        for(i=0;i<N;i++)
        {
                if( 0 <= a[i] && a[i] <= 9 )                      (c[0])++;                  //年龄大于0小于9,c[0]++
                if( 10 <= a[i] && a[i] <= 19 )                  (c[1])++;              //同上
                if( 20 <= a[i] && a[i] <= 29 )                  (c[2])++;
                if( 30 <= a[i] && a[i] <= 39 )                  (c[3])++;
                if( 40 <= a[i] && a[i] <= 49 )                  (c[4])++;
                if( 50 <= a[i] && a[i] <= 59 )                  (c[5])++;
                if( 60 <= a[i] && a[i] <= 69 )                  (c[6])++;
                if( 70 <= a[i] && a[i] <= 79 )                  (c[7])++;
                if( 80 <= a[i] && a[i] <= 89 )                  (c[8])++;
                if( 90 <= a[i] && a[i] <= 99 )                  (c[9])++;
                if( 100 <= a[i] )                                      (c[10])++;
        }
        for(i=0;i<M;i++)
        {
                b[i] = c[i];                                          
        }
}


double  rnd()
{
          static int t=29,c=217,m=1024,r=0;
          r=(r*t+c)%m;  
          return((double)r/m);
}
void main()
{ 
          FILE *wf;
          int age[N], i,d[M];
          int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};
          for(i=0; i<N; i++)  
             age[i]=(int)(115*rnd());     /*产生一个随机的年龄数组*/
          printf("The original data :\n");
          for(i=0; i<N; i++)  
             printf((i+1)%10==0? "%4d\n":"%4d",age[i]);   /*每行输出10个数*/
          printf("\n\n");
          fun(age,d);
          for(i=0; i<10; i++)  
             printf("%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
          printf("Over 100  :  %4d\n",d[10]);
        /******************************/
          wf=fopen("out.dat","w");
          fun(b,d);
          for(i=0; i<10; i++)  
             fprintf(wf,"%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
          fprintf(wf,"Over 100  :  %4d",d[10]);
          fclose(wf);
        /*****************************/
}
又一个Python写法受害者
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 15:21:59 | 显示全部楼层
给你解释一下:

比如表达式
0 <= a[i] <= 9
首先会计算
0<=a[i]
假设这个数是16,结果为
0
原表达式变为
0<=9
结果为
1
于是本来不想执行的代码就执行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 15:23:21 | 显示全部楼层
满意请选最佳~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 15:26:04 | 显示全部楼层
感谢感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表