C语言蓝桥杯真题:单词分析-创新互联

创新互联公司是一家专注于成都网站建设、成都做网站与策划设计,麻城网站建设哪家好?创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:麻城等地区。麻城做网站价格咨询:18982081108第一个代码解析: 

#include#includeint main()
{
  int count[26]={0};
  char ch=0;
  int maxc=0;
  while((ch=getchar())!='\n')
  {
    if(++count[ch-97]>=count[maxc])
    {
      maxc=ch-97;
    }
  }
  printf("%c\n%d",maxc+97,count[maxc]);
  return 0;
}
初始化: 

创建字母表count,巧妙地串联起了单词顺序,主要作用是记录单词出现的个数

解释:我们已知ASCII码中,小写的字母a之后的ASCII码为97,98....后面的代码中将输入的字符ch-97,我们可知'a'-97=0,'b'-97=1,'c'-97=2....

即作者意图将count创立为count[0]表示a,count[1]表示b,count[2]表示c以此类推

数组内部则统计各个字母出现的个数

ch用来遍历

maxc记录出现最多次的单词,作为输出内容的一部分(原变量名为maxInside,我改成了maxc,意思是maxchar 大的字符,这个因人而异,但是有一个好的变量名称习惯是很必要的!)

初始化为0,在下一步中默认为count[0],即第一个字母a

遍历过程:
while((ch=getchar())!='\n')
  {
    if(++count[ch-97]>count[maxc])
    {
      maxc=ch-97;
    }

循环条件为  ch接收的getchar函数读取的字符不为回车符 

进入if条件后,先对出现的字符进行计数:  ++count[ch-97],前置++

然后对其进行比较出现次数的大小判断:

第一次进入时:maxc为0,即count[0],表示的是第一个字母a

如果ch-97>=maxc,即 '输入字母'>='a'   则将最多次数的字母的位置记录为maxc

  因为是前置++,所以第一次肯定更新maxc

     除非是a,因为count[0]=count[0]

后面遍历的情况:

因字符而异啦

进入条件先对读取字符的次数加一,然后判断

如果读取的字符出现的次数 大于 目前出现次数最多的字符

更新 maxc

输出过程:
printf("%c\n%d",maxc+97,count[maxc]);

因为maxc的大小和ch-97是配合起来的,哪怕是初始化,当maxc=0时,maxc+97为a的ASCII码值

所以这里直接输出字符%c,按照char类型输出maxc+97  及%d,按照Int类型输出数组的内容count[maxc]即出现最多的字符

第二个代码解析: 
#include#includeint main(int argc, char *argv[])
{
  // 请在此输入您的代码
  int count[26]={0},max=0,i;
  char ch;
  while((ch=getchar())!='\n')
    count[ch-'a']++;
  for(i=1;i<26;i++)
    if(count[i]>count[max])
      max=i;
  printf("%c\n%d",max+'a',count[max]);
  return 0;
}

这个写的很清晰很简单,但是它不如第一个简约:

1.先while循环 进行字母出现次数 计数

2.进行for循环遍历,看看哪个出现的字母个数最多

这里需要注意的点是: i=1,它没有从0开始

  因为第一次进入后count[1]先和count[max]比较,此时的max=0,很细节的优化

3.输出

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


标题名称:C语言蓝桥杯真题:单词分析-创新互联
地址分享:http://scyanting.com/article/dhjdei.html