用C语言如何让编写统计程序,高手帮一下忙,谢谢,题目如下:

有一二维数组str[m][n],其中每个元素值0<=str[i][j]<256,请编写一个统计程序,统计处0到255每个值得个数(比如值=10的有100个,值=11的有200个等等,要求算法效率越高越好)
函数原型:
int *StatisticGray(BYTE *str,int m,int n)

第1个回答  2011-12-13
我给你讲下思路吧,首先2个for循环,找值很简单没什么问题,在函数里自己弄个256的数组,初始全为0,比如那个值为40,则array[40]++,变为1了,再遇到40的值同样array[40]++,变2了,我看你返回的也是Int指针,我不知道你返回的数组有什么协议,我觉得就把那数组返回就行了,比如返回20,0, 30, 50.。。。。。。值等于1的有20个,值为2的为0个,值为3的为3个。。。。。声明数组下标我都是以1为标准,写代码要为0为标准
第2个回答  2011-12-13
#include <stdio.h>
#include <string.h>

#define N 20
#define M 20

int main()
{
unsigned char str[M][N];
int a[256] = {0};
int i, j;

srand(time(NULL));

for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
str[i][j] = rand() % 256;
a[str[i][j]]++;
printf("%3u ", str[i][j]);
}
printf("\n");
}

for (i = 0; i < 256; i++)
{
printf("%3d有%03d个 ", i, a[i]);
if ((i + 1) % 5 == 0) printf("\n");
}

return 0;
}追问

能把程序主要的语句注释一下吗?谢谢

追答

#include
#include
#define N 20
#define M 20

int main()
{
unsigned char str[M][N];
int a[256] = {0};
int i, j;

srand(time(NULL));

for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
// 随机产生一个0-255的数并把它赋值给str[i][j]
str[i][j] = rand() % 256;

/* 这句是关键: 此方法是从计数排序演变来的,思路如下:
* 假设a[10] 中的数据是0-5,要统计a 中某个数(0-5)出现多少次,
* 我们可以定义一个数组,并把其所以元素置0,b[5] = {0};
* 现在开始从0-10检索数组a,如果a[i]的值为a,就把b[a]++
* 这样,最后b[i] 的就是数i在a中出现的次数
*/
a[str[i][j]]++;
printf("%3u ", str[i][j]);
}
printf("\n");
}

for (i = 0; i < 256; i++)
{
printf("%3d有%03d个 ", i, a[i]);
if ((i + 1) % 5 == 0) printf("\n");
}
return 0;
}

本回答被提问者采纳

用C语言如何让编写统计程序,高手帮一下忙,谢谢,题目如下:
我给你讲下思路吧,首先2个for循环,找值很简单没什么问题,在函数里自己弄个256的数组,初始全为0,比如那个值为40,则array[40]++,变为1了,再遇到40的值同样array[40]++,变2了,我看你返回的也是Int指针,我不知道你返回的数组有什么协议,我觉得就把那数组返回就行了,比如返回20,0, 30...

C语言大作业,C语言高手们救下小弟啊```
程序功能:能完成每位学生的某门课程的平时成绩和期末考试成绩的录入,完成每位学生的总评成绩计算(平时成绩*30%+期末考试成绩*70%)并生成数据文件,生成分数段统计文件(不及格人数,60-69数,70-79人数,80-89人数,90-100人数,及格率),通过学生成绩的数据文件查询学生成绩(查询条件自定)。通过学...

求助C语言高手,跪求一个关于成绩统计程序.希望哪位大侠帮帮忙,感激不...
p1=head;\/\/p1使之永远指向排好序的第一个结点,初值为head,head使之永远是已经排好序的最后一个结点 while(head->next!=NULL)\/\/本次循环使ptemp排好序 { ptemp=head->next;\/\/ptemp指向未排好序的第一个结点 head->next=ptemp->next;\/\/ ptemp->next=p1;\/\/ptemp也排好序了,ptemp变成排好序的第一个...

1000以内所有素数之和 C语言程序,请高手帮我编写下,谢谢啊!_百度...
include<stdio.h> void main(){ int a,i;long int sum=0;for(a=2;a<=1000;a++){ for(i=2;i<=a\/2;i++)if(a%i==0)break;if(i>a\/2)sum=sum+a;} printf("%ld",sum);getch();}

请教高手,如何用C语言编写一个程序,计算整数1-30的和
include<sdtio.h> main(){int i,sum;sum=0;for(i=1,i<=30,i++);sum=sum+i:printf("sum=%d",sum);} sum中就是1-30的和,希望能帮到你。。

用c语言编写一个程序
用c语言编写一个程序:对于一个自然数n(n<=50),统计具有下列数字的个数,并输出所有符合条件的数字:自然数n,在n的左边加上一个自然数,但该自然数不能超过原数的一半;继续按此规则进行处理,直到不能加自然数为止。例如当n=6时,符合条件条件的是:6,16,26,36,126,136共6个;当n=5时,...

C语言高手来一下帮我编个小程序
首先,我可以用字符串来做。我现在先把代码贴上:include <stdio.h> int main(){ char *str , *ch , *c[] = {"个位为:" , "十位为:" , "百位为:" , "千位为:" , "万位为:"};scanf("%s",str);int i = 0 ;\/\/要求1.求出它是几位数 printf("此数为%d位数\\n",(size...

c语言中如何完成这个操作啊,求高手帮我编下好吧我看看明朗些,谢谢了...
int main(){ FILE *fin,*fout;char num[20],name[20];int count=1,chi,math,eng,sum;float avg;fin=fopen("c:\\\\StuScore3.txt","r");fout=fopen("c:\\\\StuScore4.txt","w");fprintf(fout,"ID Num Name Chi Maths Eng Sum Avg\\n");while(!feof(fin)){...

c语言高手帮我编两个个数学计算程序,有公式,高悬赏!!能者来!!!_百度...
void main(void){ double P,x,lg_P,T; printf("Please input x:"); scanf("%lf",&x);A: printf("Please input T:"); scanf("%lf",&T); if(T==0)\/\/分母不能为0,为0重输 goto A; lg_P=gs(x,T); P=pow(10,lg_P); printf("\\nlg_P=%.10f\\n",lg_P); printf(...

C语言高手帮编个小程序?
{ printf("您猜大了");continue;} else if(ren<com){ printf("您猜小了");continue;} else { printf("恭喜您,第%d次猜中了",sum);sum=0;break;} if(i==9){ printf("您已经猜了10次了,请重新开始(y\/n)");flushall();scanf("%c",&flag);} } if(flag=="n")break;} } ...

相似回答
大家正在搜