黑马程序员技术交流社区

标题: 基础测试题,我抽中的最难的三道 [打印本页]

作者: 恋梦    时间: 2015-2-7 23:50
标题: 基础测试题,我抽中的最难的三道
本帖最后由 恋梦 于 2015-2-8 00:27 编辑

从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数
废话不多说,直接上代码 ,这绝对全是我自己写的,给你看是想让你借鉴,不是让你抄,零基础中有很多没讲到的地方,就比如数组排序,我这是给你个思路,如果有例子了,还照抄,你就算混进黑马,也跟不上学习进度另外,如果这个真的对你有帮助了,别忘了再顶一下。
  1. #include <stdio.h>
  2. [hide=d30]#include <stdio.h>

  3. // 计算字符出现次数的声明
  4. int jishu(char name[], char a);

  5. int main()
  6. {
  7.     // 1.提示用户输入一个一大推字符串
  8.     printf("请连续输入任意字符\n");
  9.    
  10.     // 2.定义一个变量保存用户输入的字符
  11.     char name[100];
  12.    
  13.     // 3.接收用户输入的字符串,默认在100以内包含空格
  14.     scanf("%[^\n]", name);
  15.    
  16.     // 4.定义结构体用来保存A,B,C,D出现的次数和A,B,C,D的标识
  17.     struct test {
  18.         int n; // 保存出现的次数
  19.         char c; // 标明这个出现的次数是什么字符
  20.     };
  21.    
  22.     // 5.定义4个数组,并初始化相应的出现的次数和字符
  23.     struct test array[4] = {
  24.         {jishu(name, 'A'),'A'}, // 调用jishu函数计算A出现的次数和标明这个字符是A
  25.         {jishu(name, 'B'),'B'}, // 调用jishu函数计算B出现的次数和标明这个字符是B
  26.         {jishu(name, 'C'),'C'}, // 调用jishu函数计算C出现的次数和标明这个字符是C
  27.         {jishu(name, 'D'),'D'}}; // 调用jishu函数计算D出现的次数和标明这个字符是D
  28.    
  29.     // 6.将存放有A,B,C,D的array数组进行排序
  30.     for (int i = 0; i<3; i++) // 最外层的循环表示要循环三次,两两比较最后一次不需要比较
  31.     {
  32.         for (int j = 0; j<3-i; j++) // 每一次循环中都和前一个数值相比
  33.         {
  34.             // 用数组元素字符出现的次数和前一个数组元素出现次数比较,如果小于就交换,降序
  35.             if (array[j].n < array[j+1].n)
  36.             {
  37.                 // 能来到这里说明条件成立,将这个时候的array[j]元素的值赋予一个新的值a
  38.                 struct test a = array[j];
  39.                
  40.                 // 将array[j+1]的值给array[j]这个地方
  41.                 array[j] = array[j+1];
  42.                
  43.                 // 最后将a的值给array[j+1],完成交换
  44.                 array[j+1] = a;
  45.             }
  46.         }
  47.     }
  48.    
  49.     // 7.此时含有A,B,C,D的array数组已经完成排序,打印采用循环,共打印4四
  50.     for (int i = 0; i<4; i++)
  51.     {
  52.         // 先打印出现的字符号,再打印出现的次数
  53.         printf("%C出现了%d次", array[i].c, array[i].n);
  54.     }

  55.     // 程序结束为0,完美退出
  56.     return 0;
  57. }
  58. // 定义一个计数的函数要求传入一个字符串数组和一个要求计算的字符
  59. int jishu(char name[], char a)
  60. {
  61.     // 定义一个变量用来保存被传入字符出现的次数,初始化为0
  62.     int n = 0;
  63.    
  64.     // 遍历字符串,将每个字符拿出
  65.     for (int i = 0; name[i]!='\0'; i++)
  66.     {
  67.         // 如果拿出的每一个字符等于这个传入的字符就将这个次数+1
  68.         if (name[i]== a)
  69.         {
  70.             // 每进入一次这里,说明这个字符出现一次,将出现的次数累积
  71.             n++;
  72.         }
  73.     }
  74.     // 将运算完传入字符出现的次数返回出去
  75.     return n;
  76. }
复制代码

作者: byuan04    时间: 2015-2-8 00:18
卧槽 牛人啊
作者: Zeus-S    时间: 2015-2-8 00:20
先顶,再看
作者: HeavenYoung    时间: 2015-2-8 09:46
唉,几年不学C,编程题是硬伤啊!
作者: 挑战    时间: 2015-2-8 09:57
厉害啊。。。
作者: Micro    时间: 2015-2-8 10:11
我的也是这个。,你是怎么用代码的格式放到贴子上的。求教
作者: 恋梦    时间: 2015-2-8 10:19
Micro 发表于 2015-2-8 10:11
我的也是这个。,你是怎么用代码的格式放到贴子上的。求教


作者: 恋梦    时间: 2015-2-8 10:20
恋梦 发表于 2015-2-8 10:19

就是在你回复的那个<>这个就是代码
作者: Micro    时间: 2015-2-8 10:30
恋梦 发表于 2015-2-8 10:20
就是在你回复的那个这个就是代码
  1. 真的耶。非常感谢。一直没发现。
复制代码

作者: xiezhongmin    时间: 2015-2-8 11:15
这个题不难,难的不是这个题
作者: 大悟云    时间: 2015-2-8 12:46
都是大神啊
作者: sun397721060    时间: 2015-2-8 13:01
我测试基础时候有这个题 和你比起来写的,我可能写的不具体~ 牛人啊
作者: 漫步人生路    时间: 2015-2-8 13:30
牛逼啊  牛人到处都是啊 让我们这些个菜鸟如何混
作者: Aily    时间: 2015-2-8 13:46
楼主零基础吗  准备了多长时间?  我刚学到集合  有点吃力啊
作者: 余永健    时间: 2015-2-8 13:57
想运行看看结果,这题目。。。
作者: 昨夜雨轻栏    时间: 2015-2-8 14:00
流弊啊,、、、、、感觉自己好弱
作者: 头头小坏蛋    时间: 2015-2-8 14:08
谢谢楼主的分享哈。。
作者: 恋梦    时间: 2015-2-8 14:14
Aily 发表于 2015-2-8 13:46
楼主零基础吗  准备了多长时间?  我刚学到集合  有点吃力啊

彻彻底底的零基础,从正式学习c编程到现在一个月多点,c和oc现在视频全看完了
作者: devhackill    时间: 2015-2-8 17:07
恋梦 发表于 2015-2-8 14:14
彻彻底底的零基础,从正式学习c编程到现在一个月多点,c和oc现在视频全看完了 ...

请问面试中有多少内容是视频里没有的,自己该如何补充?
作者: 恋梦    时间: 2015-2-8 18:16
devhackill 发表于 2015-2-8 17:07
请问面试中有多少内容是视频里没有的,自己该如何补充?

我没面试过,我不知道,我只做到了基础测试题,基础测试题中,即使你把零基础所有的题都会了完完全全的会了,也不可能达到10分,除非你抽到的都是简单的题,就比较有些就需要数组排序,冒泡法就非常适合数组排序和一些其他的方法就不一一列举了,其实最好的办法就是买本比较系统的书,视频上有的,书上可以略略看一下,没有的再细细的看,不过这不是重点,重要要放在oc上面,毕竟做的是oc的开发

作者: Aily    时间: 2015-2-8 23:12
哇塞  楼主好牛啊    我学的java基础   现在半个月了  越来越吃力
作者: a3563365    时间: 2015-2-10 01:17
楼主你觉得这个难是因为你没抽到 学生管理系统 和 耶稣 那道题....
作者: 心镜逝水    时间: 2015-2-10 07:11
顶一个。。。。。
作者: 殇卜泣    时间: 2015-2-10 09:57
谢谢楼主的分享哈。。
作者: 恋梦    时间: 2015-2-10 10:30
a3563365 发表于 2015-2-10 01:17
楼主你觉得这个难是因为你没抽到 学生管理系统 和 耶稣 那道题....

不好意思,你说的这两道我全中
作者: 沈某人    时间: 2015-2-11 15:29
厉害啊,学习
作者: synhm    时间: 2015-2-11 15:48
厉害                    !
作者: Zeus-S    时间: 2015-2-11 23:30
楼主这个试行过可行么?对于我们零基础来说这段代码看得太吃力,比如里面两处地方都定义了a和n以及i,看起来很绕,加上除去jishu函数之外的最后一小段,我只能看到降序排序却看不出来降序排序后的字母也跟着变换了位置(新手),楼主能再详细点么?
作者: 恋梦    时间: 2015-2-12 07:36
Zeus-S 发表于 2015-2-11 23:30
楼主这个试行过可行么?对于我们零基础来说这段代码看得太吃力,比如里面两处地方都定义了a和n以及i,看起 ...

你无论怎么看定义什么标识符,a和n以及i,它们只要有int就说明了它都是从新分配内存,之间的关联一点联系也没有,另能你能看到降序应该就能理解到字母的位置已经跟站变换了,因为字母是乘放A,B,C,D那个数组里的元素之一,结构体嘛,好好理解,应该不会有难度的。
作者: macau    时间: 2015-2-12 10:43
赞一个,我还得加油
作者: xiezhongmin    时间: 2015-2-12 15:47
恋梦 发表于 2015-2-8 14:14
彻彻底底的零基础,从正式学习c编程到现在一个月多点,c和oc现在视频全看完了 ...

你如果是零基础,那你这冒泡排序法是在哪里学的,自己写的有点吹嘘,如果不是零基础,那就不错,思路还可以。结构体运用的不错
作者: 星汉灿烂    时间: 2015-2-12 18:15
冒泡排序这个算法至少得会吧,不会就背下来
作者: PlwNs    时间: 2015-2-13 03:59
认真的人啊,不错。
作者: clairetoto2012    时间: 2015-2-13 06:57
谢谢,受教了!
作者: clairetoto2012    时间: 2015-2-13 07:25
还没到这步呢 !
作者: vera    时间: 2015-2-13 10:14
有一些是没有在视频中出现过的,十分感谢。这道题又有了一个思路。
作者: superdite    时间: 2015-2-17 17:50
也是零基础自学 ,还在学C,看完楼主的题,感觉压力山大啊
请教下楼主,你自学是完全看视频还是也同时看书的?
作者: 恋梦    时间: 2015-2-17 18:25
superdite 发表于 2015-2-17 17:50
也是零基础自学 ,还在学C,看完楼主的题,感觉压力山大啊
请教下楼主,你自学是完全看视频还是也同时看书 ...

书基本上没看,只不过一有不会的题,就翻书。
作者: superdite    时间: 2015-2-17 21:23
恋梦 发表于 2015-2-17 18:25
书基本上没看,只不过一有不会的题,就翻书。

是看黑马的IOS基础视频中的那些吗?
作者: 恋梦    时间: 2015-2-18 00:23
superdite 发表于 2015-2-17 21:23
是看黑马的IOS基础视频中的那些吗?

嗯,除了这个视频,我还没有找到过讲的比这个还好的了。
作者: 恋梦    时间: 2015-2-18 00:25
superdite 发表于 2015-2-17 17:50
也是零基础自学 ,还在学C,看完楼主的题,感觉压力山大啊
请教下楼主,你自学是完全看视频还是也同时看书 ...

视频为主,书不好理解,完全没视频上的快。
作者: 血玉漫天    时间: 2015-2-18 08:22
楼主棒棒哒
作者: superdite    时间: 2015-2-18 11:23
恋梦 发表于 2015-2-18 00:25
视频为主,书不好理解,完全没视频上的快。

是啊,之前我先看书,然后再看视频,发现进度好慢,而且书上的东西有时老师都不讲,可能后续用不到吧

作者: 13hoop    时间: 2015-3-11 12:00
我的也是这个
其实想做好也不容易
作者: bieny    时间: 2015-3-14 01:48
请问楼主第二行代码中的[hide=d30] 是做什么用的?
作者: 恋梦    时间: 2015-3-14 18:55
bieny 发表于 2015-3-14 01:48
请问楼主第二行代码中的[hide=d30] 是做什么用的?

无任何作用,是我将代码复制到黑马论坛上,自动生成的

作者: shmilyAshen    时间: 2015-3-15 21:09
nice,上次遇到这个题目,没有做出来
作者: 463467479    时间: 2015-3-17 21:12
不错不错
作者: 粘糊浆    时间: 2015-3-18 17:38
这还不好,加强了你的知识掌握
作者: 理工007    时间: 2015-3-23 20:08
很厉害啊
作者: frozen    时间: 2015-3-24 14:36
大家加油哈
作者: 王宁007    时间: 2016-8-25 22:29
思路很重要




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2