C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印

从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印。例如

5

*****

*****     3

*****   *****     2

*****   *****   *****

*****   *****   *****

alp     num     oth

思路解析:

在统计了字母、数字和其他字符的个数之后,分别记作alpN, numN, othN。取三者最大值hMax.分别取alpN, numN, othN与hMax的绝对值h1,h2,h3。

取三个标志位,flag1,flag2,flag3,初值设为0,表示有没有打印柱形上的数字。

0表示没有打印最上面的数字,1表示已经打印了数字。

在打印的过程中,第一行打印最大值的数字,同时flag设为1,其他的就输入空格,flag设为0。

从第二行开始,进入循环阶段,循环次数为hMax,如果flag为1,则打印*****,否则,h自减,一旦为0,设立flag为1,打印个数。直到循环结束。

最后再打印相应的标识。

程序结果如下:

 void print_Column(char*str)
{
//定义字母,数字,其他字符个数
int alpN = , numN = , othN = ;
//hMax为三者中最大的数,h1,2,3分别为距离hMax的值
int hMax = , h1 = , h2 = , h3 = ;
//指示标志,0表示没有打印最上面的数字,1表示已经打印了数字
int flag1 = , flag2 = , flag3 = ;
int i = ;
for (i = ; str[i] != '\0'; i++)
{
if (('a' <= str[i] && str[i] <= 'z') || ('A' <= str[i] && str[i] <= 'Z'))
{
alpN++;
}
else if ('' <= str[i] && str[i] <= '')
{
numN++;
}
else
{
othN++;
}
}
printf("alpN=%d,numN=%d,othN=%d", alpN, numN, othN); //计算hMax
hMax = othN > (alpN > numN ? alpN : numN) ? othN : (alpN > numN ? alpN : numN);
//计算距离差值
h1 = abs(alpN - hMax);
h2 = abs(numN - hMax);
h3 = abs(othN - hMax);
printf("\nprint column.....\n"); //开始打印
//打印最上面的数字
if (h1 == )
{
printf(" %d ", alpN);
flag1 = ;
}
else
{
printf(" ");
}
printf("\t");
if (h2 == )
{
printf(" %d ", numN);
flag2 = ;
}
else
{
printf(" ");
}
printf("\t");
if (h3 == )
{
printf(" %d ", othN);
flag3 = ;
}
else
{
printf(" ");
}
printf("\n"); //开始循环,总共有 hMax 遍
for (i = ; i <= hMax; i++)
{
//针对alp的打印
if (flag1)
{
printf("*****");
}
else
{
h1--;
if (h1 == ) //表示要打印数字了
{
printf(" %d ", alpN);
flag1 = ;
}
else
{
printf(" ");
}
}
printf("\t"); //针对num的打印
if (flag2)
{
printf("*****");
}
else
{
h2--;
if (h2 == ) //表示要打印数字了
{
printf(" %d ", numN);
flag2 = ;
}
else
{
printf(" ");
}
}
printf("\t"); //针对oth的打印
if (flag3)
{
printf("*****");
}
else
{
h3--;
if (h3 == ) //表示要打印数字了
{
printf(" %d ", othN);
flag3 = ;
}
else
{
printf(" ");
}
}
//打印完一行就换行
printf("\n");
}
printf(" alp \t");
printf(" num \t");
printf(" oth \t");
printf("\n"); }
---------------------------------------------------------------------------------------------------------------------------
在主函数中的调用:
char str[];
printf("input a string:");
gets(str);
print_Column(str);

C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印

上一篇:mysql-workbench工具update(更新)失败的解决办法


下一篇:c程序设计语言_习题1-13_统计输入中单词的长度,并且根据不同长度出现的次数绘制相应的直方图