鱼C论坛

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

[已解决]求助!

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

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

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

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

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

  8.         for(i=0;i<N;i++)
  9.         {
  10.                 if( 0 <= a[i] <= 9 )                          (c[0])++;                  //年龄大于0小于9,c[0]++
  11.                 if( 10 <= a[i] <= 19 )                   (c[1])++;              //同上
  12.                 if( 20 <= a[i] <= 29 )                  (c[2])++;
  13.                 if( 30 <= a[i] <= 39 )                  (c[3])++;
  14.                 if( 40 <= a[i] <= 49 )                  (c[4])++;
  15.                 if( 50 <= a[i] <= 59 )                  (c[5])++;
  16.                 if( 60 <= a[i] <= 69 )                  (c[6])++;
  17.                 if( 70 <= a[i] <= 79 )                  (c[7])++;
  18.                 if( 80 <= a[i] <= 89 )                 (c[8])++;
  19.                 if( 90 <= a[i] <= 99 )                   (c[9])++;
  20.                 if( 100 <= a[i] )                                   (c[10])++;
  21.         }
  22.         for(i=0;i<M;i++)
  23.         {
  24.                 b[i] = c[i];                                          
  25.         }
  26. }


  27. double  rnd()
  28. {
  29.           static int t=29,c=217,m=1024,r=0;
  30.           r=(r*t+c)%m;  
  31.           return((double)r/m);
  32. }
  33. void main()
  34. {
  35.           FILE *wf;
  36.           int age[N], i,d[M];
  37.           int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};
  38.           for(i=0; i<N; i++)  
  39.              age[i]=(int)(115*rnd());     /*产生一个随机的年龄数组*/
  40.           printf("The original data :\n");
  41.           for(i=0; i<N; i++)  
  42.              printf((i+1)%10==0? "%4d\n":"%4d",age[i]);   /*每行输出10个数*/
  43.           printf("\n\n");
  44.           fun(age,d);
  45.           for(i=0; i<10; i++)  
  46.              printf("%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
  47.           printf("Over 100  :  %4d\n",d[10]);
  48.         /******************************/
  49.           wf=fopen("out.dat","w");
  50.           fun(b,d);
  51.           for(i=0; i<10; i++)  
  52.              fprintf(wf,"%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
  53.           fprintf(wf,"Over 100  :  %4d",d[10]);
  54.           fclose(wf);
  55.         /*****************************/
  56. }

  57. 运行结果:
复制代码



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

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

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

  8.         for(i=0;i<N;i++)
  9.         {
  10.                 if( 0 <= a[i] && a[i] <= 9 )                      (c[0])++;                  //年龄大于0小于9,c[0]++
  11.                 if( 10 <= a[i] && a[i] <= 19 )                  (c[1])++;              //同上
  12.                 if( 20 <= a[i] && a[i] <= 29 )                  (c[2])++;
  13.                 if( 30 <= a[i] && a[i] <= 39 )                  (c[3])++;
  14.                 if( 40 <= a[i] && a[i] <= 49 )                  (c[4])++;
  15.                 if( 50 <= a[i] && a[i] <= 59 )                  (c[5])++;
  16.                 if( 60 <= a[i] && a[i] <= 69 )                  (c[6])++;
  17.                 if( 70 <= a[i] && a[i] <= 79 )                  (c[7])++;
  18.                 if( 80 <= a[i] && a[i] <= 89 )                  (c[8])++;
  19.                 if( 90 <= a[i] && a[i] <= 99 )                  (c[9])++;
  20.                 if( 100 <= a[i] )                                      (c[10])++;
  21.         }
  22.         for(i=0;i<M;i++)
  23.         {
  24.                 b[i] = c[i];                                          
  25.         }
  26. }


  27. double  rnd()
  28. {
  29.           static int t=29,c=217,m=1024,r=0;
  30.           r=(r*t+c)%m;  
  31.           return((double)r/m);
  32. }
  33. void main()
  34. {
  35.           FILE *wf;
  36.           int age[N], i,d[M];
  37.           int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};
  38.           for(i=0; i<N; i++)  
  39.              age[i]=(int)(115*rnd());     /*产生一个随机的年龄数组*/
  40.           printf("The original data :\n");
  41.           for(i=0; i<N; i++)  
  42.              printf((i+1)%10==0? "%4d\n":"%4d",age[i]);   /*每行输出10个数*/
  43.           printf("\n\n");
  44.           fun(age,d);
  45.           for(i=0; i<10; i++)  
  46.              printf("%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
  47.           printf("Over 100  :  %4d\n",d[10]);
  48.         /******************************/
  49.           wf=fopen("out.dat","w");
  50.           fun(b,d);
  51.           for(i=0; i<10; i++)  
  52.              fprintf(wf,"%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);
  53.           fprintf(wf,"Over 100  :  %4d",d[10]);
  54.           fclose(wf);
  55.         /*****************************/
  56. }
复制代码
又一个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行
  1. /*随机数产生年龄,统计各个年龄段人数,大于100岁的人数放在b[10],0-9放在b[0],10-19放在b[1],类推*/
  2. #include <stdio.h>
  3. # define N  50
  4. # define M  11

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

  8.         for(i=0;i<N;i++)
  9.         {
  10.                 if( 0 <= a[i] && a[i] <= 9 )                      (c[0])++;                  //年龄大于0小于9,c[0]++
  11.                 if( 10 <= a[i] && a[i] <= 19 )                  (c[1])++;              //同上
  12.                 if( 20 <= a[i] && a[i] <= 29 )                  (c[2])++;
  13.                 if( 30 <= a[i] && a[i] <= 39 )                  (c[3])++;
  14.                 if( 40 <= a[i] && a[i] <= 49 )                  (c[4])++;
  15.                 if( 50 <= a[i] && a[i] <= 59 )                  (c[5])++;
  16.                 if( 60 <= a[i] && a[i] <= 69 )                  (c[6])++;
  17.                 if( 70 <= a[i] && a[i] <= 79 )                  (c[7])++;
  18.                 if( 80 <= a[i] && a[i] <= 89 )                  (c[8])++;
  19.                 if( 90 <= a[i] && a[i] <= 99 )                  (c[9])++;
  20.                 if( 100 <= a[i] )                                      (c[10])++;
  21.         }
  22.         for(i=0;i<M;i++)
  23.         {
  24.                 b[i] = c[i];                                          
  25.         }
  26. }


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

使用道具 举报

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

比如表达式
  1. 0 <= a[i] <= 9
复制代码
首先会计算
  1. 0<=a[i]
复制代码
假设这个数是16,结果为
  1. 0
复制代码
原表达式变为
  1. 0<=9
复制代码
结果为
  1. 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, 2024-5-3 22:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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