C学习笔记 控制数组的有效长度并统计数组中重复数字。


使用C进行用户输入统计,会遇到字符长度计算,整数数组有效长度选取的问题。



当时确实想了很久有效长度的问题,实在是找不到好办法,只能使用一个全局随机变量作为数组最后一个元素,作为终止元素。
这样会有几率让用户输入对这个随机数,导致程序错误,不过感觉这几率太低。


这个程序是统计多行输入的字符串长度,并将统计结果以升序方式列出,以水平树状图的形式显示出来。

#include<stdio.h>
#include<stdlib.h>
#define MAX 500
#define SINGLE 100




int  randomize(); 
int STOP=rand();           //定义一个由随机数产生的全局变量








void OutPtstar(int [],int []);
void outit(int []);
void *popo(int []);
void info();


int main()
{
<span style="white-space:pre">	</span>int i=0,n=0,m=0,j=0,x=0;
<span style="white-space:pre">	</span>int UserPut[MAX];
<span style="white-space:pre">	</span>int inP[SINGLE];
<span style="white-space:pre">	</span>int rate[MAX];
<span style="white-space:pre">	</span>int frequency[MAX];


<span style="white-space:pre">	</span>info();


<span style="white-space:pre">	</span>while((UserPut[i]=getchar())!=EOF)
<span style="white-space:pre">		</span>i++;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>UserPut[i]='\0';<span style="white-space:pre">					</span>// 让用户输入任意字符 使用EOF终止
<span style="white-space:pre">	</span>//puts(UserPut);


<span style="white-space:pre">	</span>for(j=0;UserPut[j]!='\0';j++)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>if(UserPut[j]=='\n'||UserPut[j]=='!')
<span style="white-space:pre">			</span>{
<span style="white-space:pre">					</span>n=j-n;<span style="white-space:pre">											</span>
<span style="white-space:pre">					</span>
<span style="white-space:pre">					</span>inP[m]=n;
<span style="white-space:pre">					</span>n=j+1;
<span style="white-space:pre">					</span>
<span style="white-space:pre">					</span>m++;
<span style="white-space:pre">					</span>
<span style="white-space:pre">			</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>inP[m]=STOP;<span style="white-space:pre">						</span>//对输入结果进行初步统计,以回车为判断条件,初步了解用户输入的字符长度,每次存储在
<span style="white-space:pre">										</span>//数组inP中,以输入先后作为排序存储。
<span style="white-space:pre">										</span>//使用STOP值作为数组末尾标记。方便读取其有效值。
<span style="white-space:pre">	</span>popo(inP);<span style="white-space:pre">							</span>//使用起泡排序对inP进行由小到大的排列。
<span style="white-space:pre">	</span>//for(i=0;i<m;i++)
<span style="white-space:pre">		</span>//printf("inP:%d\n",inP[i]);
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>n=0;j=1;
<span style="white-space:pre">	</span>for(i=0;i<m;i++)<span style="white-space:pre">					</span>//比较inP中重复的数字和重复次数
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>j=1;
<span style="white-space:pre">		</span>if(inP[i]==inP[i+1])
<span style="white-space:pre">		</span>{<span style="white-space:pre">		</span>
<span style="white-space:pre">			</span>for(x=i;inP[x]==inP[x+1];x++)
<span style="white-space:pre">				</span>j++;
<span style="white-space:pre">			</span>//printf("\nj:%d n:%d x:%d",j,n,x);
<span style="white-space:pre">			</span>rate[n]=j;
<span style="white-space:pre">			</span>frequency[n]=inP[x];


<span style="white-space:pre">			</span>//printf("\ninP: %d",inP[x]);
<span style="white-space:pre">			</span>n++;
<span style="white-space:pre">			</span>i=x;         //使用i=x跳过重复数字 避免重复比较
<span style="white-space:pre">			</span>
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>else if(inP[i]==STOP)
<span style="white-space:pre">			</span>break;<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>else if(inP[x]!=inP[x+1])
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>j=1;
<span style="white-space:pre">			</span>x=1;
<span style="white-space:pre">			</span>frequency[n]=inP[i];
<span style="white-space:pre">			</span>rate[n]=j;
<span style="white-space:pre">			</span>n++;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}




<span style="white-space:pre">	</span>frequency[n]=STOP;
<span style="white-space:pre">	</span>rate[n]=STOP;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>//outit(frequency);
<span style="white-space:pre">	</span>//outit(rate);
<span style="white-space:pre">	</span>




<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>OutPtstar(frequency,rate);
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>return 0;


}




void OutPtstar(int x[],int m[])
{
<span style="white-space:pre">	</span>int i,j;
<span style="white-space:pre">	</span>char star='*';
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>printf("length   Number    Graphic\n");
<span style="white-space:pre">	</span>printf("============================\n");
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>for(i=0;x[i]!=STOP;i++)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>
<span style="white-space:pre">			</span>printf("%-11d %-8d",x[i],m[i]);
<span style="white-space:pre">			</span>for(j=0;j<m[i];j++)
<span style="white-space:pre">				</span>printf("%c",star);<span style="white-space:pre">			</span>
<span style="white-space:pre">			</span>printf("\n");
<span style="white-space:pre">		</span>}
}






void *popo(int vals[])
{<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>int i,j,t,A;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>int m;
<span style="white-space:pre">	</span>for(m=0;vals[m]!=STOP;m++);


<span style="white-space:pre">	</span>A=m;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>for(i=0;i<A;i++)
<span style="white-space:pre">	</span>{<span style="white-space:pre">	</span>for(j=0;j<A;j++)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>if(vals[j]>vals[j+1])
<span style="white-space:pre">			</span>{ t=vals[j];
<span style="white-space:pre">			</span>  vals[j]=vals[j+1];
<span style="white-space:pre">			</span>  vals[j+1]=t;}
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}


return vals;
}




void outit(int x[])
{
<span style="white-space:pre">	</span>int i;
<span style="white-space:pre">	</span>printf("\n");
<span style="white-space:pre">	</span>for(i=0;x[i]!=STOP;i++)
<span style="white-space:pre">		</span>printf("%d",x[i]);
<span style="white-space:pre">	</span>printf("\n");
}


void info()
{
<span style="white-space:pre">	</span>printf("\nThis program allow you to input everychar you want.Use Enter to end once input.\n");
<span style="white-space:pre">	</span>printf("Press Ctrl+Z to end your input.\n");
<span style="white-space:pre">	</span>printf("Then the program will give you the counts of everytime you have input.\n");
<span style="white-space:pre">	</span>printf("And it will be printed to a histogram to you.\nNow start to input :\n");


}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值