大学里的小菜鸡 发表于 2020-8-17 10:27:48

c语言课后作业19的最后一题


#include <stdio.h>
#include <string.h>

#define NUM 128

int main()
{
      int ch, i, j = 0, max = 0;
      int input_num = 0;
      int ascii = {0};
      char count = "";

      printf("请输入英文文本:");

      while ((ch = getchar()) != '\n')
      {
                ascii++; // 字符对应的ASCII码加1
                input_num++;
      }

      for (i = 0; i < NUM; i++)
      {
                if (ascii)
                {
                        count = i;
                        if (ascii > ascii)
                        {
                              max = i;
                        }
                }
      }

      printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", input_num, strlen(count));
      printf("它们是:%s\n", count);
      printf("出现次数最多的字符是\'%c\',它总共出现了%d次。\n", max, ascii);

      return 0;
}
那个对应字符码加一是对输入的字符的ascii序号加一还是数组加一用来存储输入的字符;

baige 发表于 2020-8-17 10:34:25

数组里面存储的数值加1

小甲鱼的铁粉 发表于 2020-8-17 10:46:57

加了一下注释
#include <stdio.h>
#include <string.h>

#define NUM 128

int main()
{
      int ch, i, j = 0, max = 0;
      int input_num = 0;//用于统计输入的字符的数目
      int ascii = {0};//用于统计每个字符出现的次数
      char count = "";

      printf("请输入英文文本:");

      while ((ch = getchar()) != '\n')//这里面的ch是一个字符一个字符读取的,如果遇到回车键,就停止循环,也就是按下ENTER,就停止输入了
      {
                ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是对应的字符的数目加1
                input_num++;//字符的数目加1
      }

      for (i = 0; i < NUM; i++)
      {
                if (ascii)//如果说某一个字符出现了,就进入if循环
                {
                        count = i;//用来统计出现了几种不同的字符
                        if (ascii > ascii)//找出出现次数最多的字符
                        {
                              max = i;
                        }
                }
      }

      printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", input_num, strlen(count));
      printf("它们是:%s\n", count);
      printf("出现次数最多的字符是\'%c\',它总共出现了%d次。\n", max, ascii);

      return 0;
}

大学里的小菜鸡 发表于 2020-8-17 10:51:23

本帖最后由 大学里的小菜鸡 于 2020-8-17 10:56 编辑

小甲鱼的铁粉 发表于 2020-8-17 10:46
加了一下注释

ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是对应的字符的数目加1   请问这是用来对输入的字符进行存储的吗,加入输入四个a那么ascii是4还是存储的四个a

小甲鱼的铁粉 发表于 2020-8-17 10:55:38

大学里的小菜鸡 发表于 2020-8-17 10:51
ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是对应的字符的数目加1      ...

不是的,就是为了统计出现的字符的数目
比如说A的ASCII是65,那么每输入一个A,ascii就会加一,ascii的值就是A出现的次数
这样统计是为了后面方便找到出现次数最多的字符
比如说找出现次数最多的字符的时候,只需要找到数组ascii中的最大值,最大值对应的下标就是出现次数最多的字符

大学里的小菜鸡 发表于 2020-8-17 11:01:16

本帖最后由 大学里的小菜鸡 于 2020-8-17 11:05 编辑

小甲鱼的铁粉 发表于 2020-8-17 10:55
不是的,就是为了统计出现的字符的数目
比如说A的ASCII是65,那么每输入一个A,ascii就会加一,as ...

感谢,前面的那里懂了,后面的这个   if (ascii)//如果说某一个字符出现了,就进入if循环   的意思是什么呢,
是不是加入输入qwerq,w、e和r都是输入了一个,那么判断为1,还是说A的ascii是65,判断ascii的时候检测到了有A,然后就判断为1

baige 发表于 2020-8-17 11:03:03

大学里的小菜鸡 发表于 2020-8-17 11:01
感谢,前面的那里懂了,后面的这个   if (ascii)//如果说某一个字符出现了,就进入if循环   的意思是什么 ...

没有输入的字符的位置就为0,有输入的字符对应的if判断就为真

小甲鱼的铁粉 发表于 2020-8-17 11:07:32

大学里的小菜鸡 发表于 2020-8-17 11:01
感谢,前面的那里懂了,后面的这个   if (ascii)//如果说某一个字符出现了,就进入if循环   的意思是什 ...

意思就是只要ascii不是0,也就是之前输入过ASCII码为i的字符,这个字符是存在的,就进入了人if循环

大学里的小菜鸡 发表于 2020-8-17 11:08:11

本帖最后由 大学里的小菜鸡 于 2020-8-17 11:11 编辑

baige 发表于 2020-8-17 11:03
没有输入的字符的位置就为0,有输入的字符对应的if判断就为真

请问如果输入的是ABC,那么0到65之前的都判断为假吗,那个判断里面的i是ascii码吗

大学里的小菜鸡 发表于 2020-8-17 11:12:58

小甲鱼的铁粉 发表于 2020-8-17 11:07
意思就是只要ascii不是0,也就是之前输入过ASCII码为i的字符,这个字符是存在的,就进入了人if循环

意思是i是ascii码,假如之前输入了A,当i=65的时候就判断为真,进入循环了吗

小甲鱼的铁粉 发表于 2020-8-17 11:18:28

大学里的小菜鸡 发表于 2020-8-17 11:12
意思是i是ascii码,假如之前输入了A,当i=65的时候就判断为真,进入循环了吗

不是的{:10_250:},i是数组ascii的下标,比如说我输入ABBDE,然后进入循环,那么ascii = 1, ascii = 2
ascii = 0, 因为没有输入C,所以它是0 , ascii = 1, ascii = 1, 那么在这里,当i = 65、66、68、69是数组ascii的值都不是0,就可以进入if (ascii)语句,而i = 67时,ascii = 0,不可以进入

大学里的小菜鸡 发表于 2020-8-17 11:27:23

小甲鱼的铁粉 发表于 2020-8-17 11:18
不是的,i是数组ascii的下标,比如说我输入ABBDE,然后进入循环,那么ascii = 1, ascii

感谢,最后一个问题,请问   ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是对应的字符的数目加1   这个读取的是输入字符的ascii码吗

小甲鱼的铁粉 发表于 2020-8-17 11:33:35

大学里的小菜鸡 发表于 2020-8-17 11:27
感谢,最后一个问题,请问   ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是 ...

ascii++,ch在这里面其实是一个数字,因为ASCII码是数字
比如说A吧,A的ASCII码是65,那么你每输入一个A,ascii就会加一
每输入一个B,ascii就会加一
这是ASCII码表,在评论区最下面

小甲鱼的铁粉 发表于 2020-8-17 11:34:16

大学里的小菜鸡 发表于 2020-8-17 12:16:40

小甲鱼的铁粉 发表于 2020-8-17 11:34


好的,谢谢,终于理解了

毛驴子哈 发表于 2020-8-20 10:33:46

{:10_257:}感谢楼主和解答的大佬,来蹭了个答案{:10_256:}

毛驴子哈 发表于 2020-8-20 11:03:17

本帖最后由 毛驴子哈 于 2020-8-20 11:05 编辑

小甲鱼的铁粉 发表于 2020-8-17 10:46
加了一下注释

for循环是用户输入完毕才开始的嘛?
例如输入AABBCCC
ascii=2,ascii=2,ascii=3;
for(i=0,;i<NUM;i++)开始循环
当i=65时,对应的ascii=2,进入if循环
count=65,count=66 , count = 67(这里后面打印为它们的ascii对应的值)
然后下层if循环判断ascii > ascii   也就是2>0,这里ascii=0,
然后max被i(0被2)替换,下次与ascii 也就是ascii作比较
以此类推,最后输入次数最多的就是max
最后打印为max的ascii对应的值(66 / C),次数是ascii的值(3)。

这道题是这样的逻辑嘛{:10_298:}


大学里的小菜鸡 发表于 2020-8-20 11:09:58

毛驴子哈 发表于 2020-8-20 11:03
for循环是用户输入完毕才开始的嘛?
例如输入AABBCCC
ascii=2,ascii=2,ascii=3;


ascii并不一定等于0,如果你输入了空格,那么就不为0,这个是用来比较出最大数

毛驴子哈 发表于 2020-8-20 15:55:24

大学里的小菜鸡 发表于 2020-8-20 11:09
ascii并不一定等于0,如果你输入了空格,那么就不为0,这个是用来比较出最大数

那max其实初始化为多少都可以喽,只要不超过ascii码值

大学里的小菜鸡 发表于 2020-8-20 16:50:12

毛驴子哈 发表于 2020-8-20 15:55
那max其实初始化为多少都可以喽,只要不超过ascii码值

页: [1] 2
查看完整版本: c语言课后作业19的最后一题