佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1958|回复: 35

[急]好奇怪 C programming 米有BUG 不过 display 有 BUG

[复制链接]
发表于 15-9-2007 12:47 AM | 显示全部楼层 |阅读模式
偶 设计 一个 程式 会把 array 里的 number 找出 mode(出现最多次的number) 还 没有
做到 compare 的地方 就 有 一点点 问题

display 出来的 不是 1 吗 ? 怎么 会是 0 的??
本来是 这样的 number of 4 appear 0 times
现在
number of 4 appear 0 times   
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>

  5. main()
  6. {
  7.       int arr[10]={4,5,5,6,7,8,9,9,9,10};
  8.       int i, numPos;
  9.       int counterArr[13];
  10.       
  11.       for ( i = 0 ; i < 10 ; i++)
  12.       {
  13.           printf("%d", arr[i]);
  14.       }
  15.       
  16.           for ( numPos = 4 ; numPos < 13 ; numPos++)// 只要4~12
  17.           {
  18.               for ( i = 0 ; i < 10 ; i++) // 重复 chk array 中的0~9
  19.               {
  20.                   if ( numPos == arr[i-1])
  21.                   {
  22.                        counterArr[numPos] = counterArr[numPos] + 1;
  23.                   }
  24.               }
  25.           }
  26.       
  27.                   
  28.       printf("number of 4 appear %d times", counterArr[4]);// counterArr[4] 就代表 4, 4 应该 = 1 吧
  29.       
  30.       getch();
  31. }
复制代码


[ 本帖最后由 keatliang2005 于 15-9-2007 12:49 AM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 15-9-2007 03:57 AM | 显示全部楼层
2种写法
1
改成:

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>

  5. main()
  6. {
  7.       int arr[10]={4,5,5,6,7,8,9,9,9,10};
  8.       int i, numPos, u;
  9.       int counterArr[13];
  10.       
  11.       
  12.       for ( i = 0 ; i < 10 ; i++)
  13.       {
  14.           printf("%d", arr[i]);
  15.       }
  16.       
  17.           for ( numPos = 4 ; numPos < 13 ; numPos++)
  18.           {   
  19.               u =0; //加 u,每iteration把他reset 0
  20.               for ( i = 0 ; i < 10 ; i++)
  21.               {   
  22.                   if ( numPos == arr[i])
  23.                   {  
  24.                        u++; //若发现号码一样,u数目累计
  25.                        
  26.                   }
  27.                   
  28.               }
  29.               counterArr[numPos] = u; //把数目assign给那个array
  30.           }
  31.       
  32.                   
  33.       printf("number of 4 appear %d times", counterArr[4]);
  34.       
  35.       getch();
  36. }
复制代码


2
该成:

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>

  5. main()
  6. {
  7.       int arr[10]={4,5,5,6,7,8,9,9,9,10};
  8.       int i, numPos;
  9.       int counterArr[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
  10.       
  11.       
  12.       for ( i = 0 ; i < 10 ; i++)
  13.       {
  14.           printf("%d", arr[i]);
  15.       }
  16.       
  17.           for ( numPos = 4 ; numPos < 13 ; numPos++)
  18.           {   
  19.             
  20.               for ( i = 0 ; i < 10 ; i++)
  21.               {   
  22.                   if ( numPos == arr[i])
  23.                   {  
  24.                        counterArr[numPos]++; 
  25.                        
  26.                   }
  27.                   
  28.               }
  29.               
  30.           }
  31.       
  32.                   
  33.       printf("number of 4 appear %d times", counterArr[4]);
  34.       
  35.       getch();
  36. }
复制代码


array没有declare initial value的话,会乱

[ 本帖最后由 湖俊 于 15-9-2007 02:15 PM 编辑 ]
回复

使用道具 举报

发表于 15-9-2007 11:33 AM | 显示全部楼层

回复 #1 keatliang2005 的帖子

  1. if ( numPos == arr[i-1])
  2.                   {
  3.                        counterArr[numPos] = counterArr[numPos] + 1;
  4.                   }
复制代码



为什么 "i - 1" ?
counterArr 的 initial value 是 0 吗?如果是 -1 那么 + 1 就等于 0 。
回复

使用道具 举报

 楼主| 发表于 15-9-2007 03:36 PM | 显示全部楼层
谢谢各位大大 的 帮忙 偶 的 Assignment 顺利完成
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>

  4. void sort(int* arr,int s)
  5. {
  6.      int i, j, temp;
  7.      for (i=0; i<s-1; i++)
  8.      {
  9.          for(j=i+1 ; j<s ; j++)
  10.          {
  11.                    if(arr[j] < arr[i])
  12.                    {
  13.                              temp = arr[i];
  14.                              arr[i] = arr[j];
  15.                              arr[j] = temp;
  16.                              
  17.                    }
  18.          }
  19.      }
  20. }
  21. int findmode(int* arr,int s)
  22. {
  23.     int i , u;
  24.     int numPos;
  25.     int counterArr[13];
  26.     int mode, bigger;
  27.    
  28.    
  29.     for ( numPos = 4 ; numPos < 13 ; numPos++)// chk number 4~ 12
  30.           {
  31.               u = 0;
  32.               for ( i = 0 ; i < s ; i++) // repert chk array
  33.               {
  34.                   if ( numPos == arr[i])
  35.                   {
  36.                        u++;
  37.                   }
  38.               }
  39.               counterArr[numPos] = u ;
  40.           }
  41.          
  42.     for ( numPos = 4; numPos < 13 ; numPos ++) // chking purpose
  43.     {
  44.         printf("%d has %d hits\t", numPos, counterArr[numPos]);
  45.     }     
  46.     counterArr[3] = 0;
  47.     bigger = counterArr[3];
  48.     mode = 0;
  49.     for (numPos = 4 ; numPos < 13; numPos++)
  50.     {
  51.         if ( counterArr[numPos] > bigger )
  52.         {
  53.              bigger = counterArr[numPos];
  54.              mode = numPos;
  55.         }
  56.     }
  57.     return mode;
  58. }
  59. int findRange(int* arr,int s)
  60. {
  61.     int i ;
  62.     int smallest, biggest, range;
  63.    
  64.     smallest = arr[0];
  65.       for ( i = 1 ; i < s ; i++);
  66.       {
  67.           if ( arr[i] < smallest )
  68.           {
  69.                smallest = arr[i];
  70.           }
  71.       }
  72.       printf("\nsmallest = %d\n", smallest);
  73.       
  74.     biggest = arr[0];
  75.       for ( i = 1 ; i < s ; i++)
  76.       {
  77.           if ( arr[i] > biggest )
  78.           {
  79.                biggest = arr[i];
  80.           }
  81.       }
  82.       printf("\nbiggest = %d\n", biggest);
  83.       
  84.       range = biggest - smallest;
  85.       return  range;
  86. }

  87. float findmean(int* arr,int s)
  88. {
  89.       int i;
  90.       float mean;
  91.       mean = arr[0];
  92.       
  93.       for( i =1 ; i < s ; i++)
  94.       {
  95.            mean = mean + arr[i];
  96.       
  97.       }
  98.       mean = mean / s;
  99.       return mean;
  100. }
  101. float findmedian(int* arr,int s)
  102. {
  103.      float median;
  104.      int arrayPos;
  105.      if (s%2 != 0)
  106.      {     
  107.            arrayPos = (int)s/2 + 1 - 1;
  108.            median =(float)  arr[arrayPos];
  109.            printf("\n%f\n", median); // for chking purpose
  110.      }
  111.      else
  112.      {
  113.           arrayPos = (int)s/2;
  114.           median =(float) (arr[arrayPos - 1 ] + arr[arrayPos])/2;
  115.           printf("\n%f\n", median); // for chking purpose
  116.      }
  117.      return median;
  118. }

  119. main()
  120. {
  121.       int size , i, Range, mode;
  122.       float median, mean;
  123.       int *array;
  124.       FILE *Array;
  125.       
  126.       //create dynamic memory
  127.       printf("how many numbers to generate?:");
  128.       scanf("%d", &size);
  129.       array = (int*) malloc(sizeof(int)*size);
  130.       
  131.       // rendom generate number between 4 - 12
  132.       srand(2+size);
  133.       for (i=0; i< size; i++)
  134.       {
  135.           array[i] = rand()%9 + 4;
  136.           printf(" be fore %d\t", array[i]);
  137.       }
  138.       printf("\n");
  139.       sort(array, size);
  140.       for (i=0; i< size; i++)
  141.       {
  142.           printf("sorting %d\t", array[i]);
  143.       }
  144.       // find the generated number median
  145.       mean = findmean(array, size);
  146.       median = findmedian(array, size);
  147.       mode = findmode(array, size);
  148.       Range = findRange(array, size);
  149.       
  150.       printf("\n\nMean =%.2f\n", mean);
  151.       printf("\n\nMedian =%.2f\n", median);
  152.       printf("\n\nMode = %d\n", mode);
  153.       printf("\n\nRange =%d\n", Range);
  154.       
  155.       Array = fopen("C:\\startfile.txt","w");
  156.       
  157.       fprintf(Array,"Mean = %.2f\n", mean);
  158.       fprintf(Array,"Median = %.2f\n", median);
  159.       fprintf(Array,"Mode = %d\n", mode);
  160.       fprintf(Array,"Median = %d\n", Range);
  161.       fclose(Array);
  162.       
  163.       getch();
  164. }
复制代码
回复

使用道具 举报

发表于 15-9-2007 03:36 PM | 显示全部楼层
这使我想起以前我师傅跟我说的话

"simplify your logic."
回复

使用道具 举报

发表于 15-9-2007 03:43 PM | 显示全部楼层
对了,这种写法叫做C?
C++多了什么?class那些?
回复

使用道具 举报

Follow Us
 楼主| 发表于 15-9-2007 03:48 PM | 显示全部楼层

回复 #5 tensaix2j 的帖子

还有得 simplify 啊 ?? 请指点 偶才 学 C 不久

那些 print out 是 拿来 chking 罢了
回复

使用道具 举报

发表于 15-9-2007 03:49 PM | 显示全部楼层
C++的libraries都是wrapped in classes..
例如 string class, stl map, vector etc...
C 却不是。
回复

使用道具 举报


ADVERTISEMENT

发表于 15-9-2007 03:51 PM | 显示全部楼层
原帖由 tensaix2j 于 15/9/2007 15:49 发表
C++的libraries都是wrapped in classes..
例如 string class, stl map, vector etc...
C 却不是。


那么C就不能include这些library??
回复

使用道具 举报

 楼主| 发表于 15-9-2007 03:51 PM | 显示全部楼层

回复 #6 湖俊 的帖子

蛤? 偶 用到 C++ 的方法 ?? 米有 可能 啊 偶 米有学过 C++
那里 出错 偶 愿意该 , 学

很多 Keyword 都是 refere 课本 的 不过 很难
比起 这份 Assignment 容易得多
http://chinese.cari.com.my/myfor ... 3971&extra=page%3D1

[ 本帖最后由 keatliang2005 于 15-9-2007 03:54 PM 编辑 ]
回复

使用道具 举报

发表于 15-9-2007 03:53 PM | 显示全部楼层
原帖由 keatliang2005 于 15/9/2007 15:51 发表
蛤? 偶 用到 C++ 的方法 ?? 米有 可能 啊 偶 米有学过 C++
那里 出错 偶 原理 该 , 学

很多 Keyword 都是 refere 课本 的 不过 很难
比起 这份 Assignment 容易得多
http://chinese.car ...


不,我是不大了解c & c++的分别多大,因为我没学过c。
其实学programming学logic比较重要,
会逻辑后,langguage已经不是什么问题。

C++好像比较新,还有一个更新的叫c#,不懂是不是。。
回复

使用道具 举报

发表于 15-9-2007 03:54 PM | 显示全部楼层
原帖由 湖俊 于 15-9-2007 03:51 PM 发表


那么C就不能include这些library??



basic C compiler 是会complain的。。
例如,你打 gcc yourprogram.c -o output
是不行的。

要 compile C++ 就要用
g++
回复

使用道具 举报

发表于 15-9-2007 03:56 PM | 显示全部楼层
原帖由 湖俊 于 15-9-2007 03:53 PM 发表


不,我是不大了解c & c++的分别多大,因为我没学过c。
其实学programming学logic比较重要,
会逻辑后,langguage已经不是什么问题。

C++好像比较新,还有一个更新 ...


它们给我的look and feel 感觉差很远的。。
回复

使用道具 举报

发表于 15-9-2007 03:58 PM | 显示全部楼层
原帖由 tensaix2j 于 15/9/2007 15:56 发表


它们给我的look and feel 感觉差很远的。。


是说c和c++?

不懂,可能我看syntax很多还一样,就没什么感觉。
回复

使用道具 举报

发表于 15-9-2007 04:09 PM | 显示全部楼层
原帖由 湖俊 于 15-9-2007 03:58 PM 发表


是说c和c++?

不懂,可能我看syntax很多还一样,就没什么感觉。


C 给我的感觉是很clean 。。。因为没有那么多class inheritance的东西,有时会看到眼花撩乱。。
回复

使用道具 举报

发表于 15-9-2007 04:11 PM | 显示全部楼层
原帖由 湖俊 于 15-9-2007 03:53 PM 发表


不,我是不大了解c & c++的分别多大,因为我没学过c。
其实学programming学logic比较重要,
会逻辑后,langguage已经不是什么问题。

C++好像比较新,还有一个更新 ...


C# 另当别论了。。
因为那是managed code 来的。。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 15-9-2007 04:19 PM | 显示全部楼层

回复 #11 湖俊 的帖子

C# 是 .NET framework 之一 下个sem 就学 VB.NET 和 JAVA
PS:final 下个月就是了
回复

使用道具 举报

发表于 15-9-2007 04:20 PM | 显示全部楼层
C++之后,是一个叫D的东西。。。

不过你有兴趣,可以研究这张海报,
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf
回复

使用道具 举报

发表于 15-9-2007 04:28 PM | 显示全部楼层
原帖由 keatliang2005 于 15/9/2007 16:19 发表
C# 是 .NET framework 之一 下个sem 就学 VB.NET 和 JAVA
PS:final 下个月就是了


你读什么的?

我programming自修的,可怜。
回复

使用道具 举报

发表于 15-9-2007 04:30 PM | 显示全部楼层
读书时学的比basic 还basic..
工作时遇到高人才能学到更多。。。
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 26-9-2025 02:46 AM , Processed in 0.135356 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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