查看: 1958|回复: 35
|
[急]好奇怪 C programming 米有BUG 不过 display 有 BUG
[复制链接]
|
|
偶 设计 一个 程式 会把 array 里的 number 找出 mode(出现最多次的number) 还 没有
做到 compare 的地方 就 有 一点点 问题
display 出来的 不是 1 吗 ? 怎么 会是 0 的??
本来是 这样的 number of 4 appear 0 times
现在
number of 4 appear 0 times  - #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- main()
- {
- int arr[10]={4,5,5,6,7,8,9,9,9,10};
- int i, numPos;
- int counterArr[13];
-
- for ( i = 0 ; i < 10 ; i++)
- {
- printf("%d", arr[i]);
- }
-
- for ( numPos = 4 ; numPos < 13 ; numPos++)// 只要4~12
- {
- for ( i = 0 ; i < 10 ; i++) // 重复 chk array 中的0~9
- {
- if ( numPos == arr[i-1])
- {
- counterArr[numPos] = counterArr[numPos] + 1;
- }
- }
- }
-
-
- printf("number of 4 appear %d times", counterArr[4]);// counterArr[4] 就代表 4, 4 应该 = 1 吧
-
- getch();
- }
复制代码
[ 本帖最后由 keatliang2005 于 15-9-2007 12:49 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 15-9-2007 03:57 AM
|
显示全部楼层
2种写法
1
改成:
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- main()
- {
- int arr[10]={4,5,5,6,7,8,9,9,9,10};
- int i, numPos, u;
- int counterArr[13];
-
-
- for ( i = 0 ; i < 10 ; i++)
- {
- printf("%d", arr[i]);
- }
-
- for ( numPos = 4 ; numPos < 13 ; numPos++)
- {
- u =0; //加 u,每iteration把他reset 0
- for ( i = 0 ; i < 10 ; i++)
- {
- if ( numPos == arr[i])
- {
- u++; //若发现号码一样,u数目累计
-
- }
-
- }
- counterArr[numPos] = u; //把数目assign给那个array
- }
-
-
- printf("number of 4 appear %d times", counterArr[4]);
-
- getch();
- }
复制代码
2
该成:
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- main()
- {
- int arr[10]={4,5,5,6,7,8,9,9,9,10};
- int i, numPos;
- int counterArr[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
-
-
- for ( i = 0 ; i < 10 ; i++)
- {
- printf("%d", arr[i]);
- }
-
- for ( numPos = 4 ; numPos < 13 ; numPos++)
- {
-
- for ( i = 0 ; i < 10 ; i++)
- {
- if ( numPos == arr[i])
- {
- counterArr[numPos]++;
-
- }
-
- }
-
- }
-
-
- printf("number of 4 appear %d times", counterArr[4]);
-
- getch();
- }
复制代码
array没有declare initial value的话,会乱
[ 本帖最后由 湖俊 于 15-9-2007 02:15 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 15-9-2007 11:33 AM
|
显示全部楼层
回复 #1 keatliang2005 的帖子
- if ( numPos == arr[i-1])
- {
- counterArr[numPos] = counterArr[numPos] + 1;
- }
复制代码
为什么 "i - 1" ?
counterArr 的 initial value 是 0 吗?如果是 -1 那么 + 1 就等于 0 。 |
|
|
|
|
|
|
|

楼主 |
发表于 15-9-2007 03:36 PM
|
显示全部楼层
谢谢各位大大 的 帮忙 偶 的 Assignment 顺利完成
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- void sort(int* arr,int s)
- {
- int i, j, temp;
- for (i=0; i<s-1; i++)
- {
- for(j=i+1 ; j<s ; j++)
- {
- if(arr[j] < arr[i])
- {
- temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
-
- }
- }
- }
- }
- int findmode(int* arr,int s)
- {
- int i , u;
- int numPos;
- int counterArr[13];
- int mode, bigger;
-
-
- for ( numPos = 4 ; numPos < 13 ; numPos++)// chk number 4~ 12
- {
- u = 0;
- for ( i = 0 ; i < s ; i++) // repert chk array
- {
- if ( numPos == arr[i])
- {
- u++;
- }
- }
- counterArr[numPos] = u ;
- }
-
- for ( numPos = 4; numPos < 13 ; numPos ++) // chking purpose
- {
- printf("%d has %d hits\t", numPos, counterArr[numPos]);
- }
- counterArr[3] = 0;
- bigger = counterArr[3];
- mode = 0;
- for (numPos = 4 ; numPos < 13; numPos++)
- {
- if ( counterArr[numPos] > bigger )
- {
- bigger = counterArr[numPos];
- mode = numPos;
- }
- }
- return mode;
- }
- int findRange(int* arr,int s)
- {
- int i ;
- int smallest, biggest, range;
-
- smallest = arr[0];
- for ( i = 1 ; i < s ; i++);
- {
- if ( arr[i] < smallest )
- {
- smallest = arr[i];
- }
- }
- printf("\nsmallest = %d\n", smallest);
-
- biggest = arr[0];
- for ( i = 1 ; i < s ; i++)
- {
- if ( arr[i] > biggest )
- {
- biggest = arr[i];
- }
- }
- printf("\nbiggest = %d\n", biggest);
-
- range = biggest - smallest;
- return range;
- }
- float findmean(int* arr,int s)
- {
- int i;
- float mean;
- mean = arr[0];
-
- for( i =1 ; i < s ; i++)
- {
- mean = mean + arr[i];
-
- }
- mean = mean / s;
- return mean;
- }
- float findmedian(int* arr,int s)
- {
- float median;
- int arrayPos;
- if (s%2 != 0)
- {
- arrayPos = (int)s/2 + 1 - 1;
- median =(float) arr[arrayPos];
- printf("\n%f\n", median); // for chking purpose
- }
- else
- {
- arrayPos = (int)s/2;
- median =(float) (arr[arrayPos - 1 ] + arr[arrayPos])/2;
- printf("\n%f\n", median); // for chking purpose
- }
- return median;
- }
- main()
- {
- int size , i, Range, mode;
- float median, mean;
- int *array;
- FILE *Array;
-
- //create dynamic memory
- printf("how many numbers to generate?:");
- scanf("%d", &size);
- array = (int*) malloc(sizeof(int)*size);
-
- // rendom generate number between 4 - 12
- srand(2+size);
- for (i=0; i< size; i++)
- {
- array[i] = rand()%9 + 4;
- printf(" be fore %d\t", array[i]);
- }
- printf("\n");
- sort(array, size);
- for (i=0; i< size; i++)
- {
- printf("sorting %d\t", array[i]);
- }
- // find the generated number median
- mean = findmean(array, size);
- median = findmedian(array, size);
- mode = findmode(array, size);
- Range = findRange(array, size);
-
- printf("\n\nMean =%.2f\n", mean);
- printf("\n\nMedian =%.2f\n", median);
- printf("\n\nMode = %d\n", mode);
- printf("\n\nRange =%d\n", Range);
-
- Array = fopen("C:\\startfile.txt","w");
-
- fprintf(Array,"Mean = %.2f\n", mean);
- fprintf(Array,"Median = %.2f\n", median);
- fprintf(Array,"Mode = %d\n", mode);
- fprintf(Array,"Median = %d\n", Range);
- fclose(Array);
-
- getch();
- }
复制代码 |
|
|
|
|
|
|
|
发表于 15-9-2007 03:36 PM
|
显示全部楼层
这使我想起以前我师傅跟我说的话
"simplify your logic." |
|
|
|
|
|
|
|
发表于 15-9-2007 03:43 PM
|
显示全部楼层
对了,这种写法叫做C?
C++多了什么?class那些? |
|
|
|
|
|
|
|

楼主 |
发表于 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 却不是。 |
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
发表于 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 来的。。 |
|
|
|
|
|
|
|

楼主 |
发表于 15-9-2007 04:19 PM
|
显示全部楼层
回复 #11 湖俊 的帖子
C# 是 .NET framework 之一 下个sem 就学 VB.NET 和 JAVA
PS:final 下个月就是了 |
|
|
|
|
|
|
|
发表于 15-9-2007 04:20 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 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..
工作时遇到高人才能学到更多。。。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|