V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SorryChen
V2EX  ›  C

好久不看 c 了,麻烦看一个考研题……

  •  
  •   SorryChen · 2016-12-09 00:59:13 +08:00 via iPhone · 3948 次点击
    这是一个创建于 2905 天前的主题,其中的信息可能已经有所发展或是发生改变。
    做了半天没做出来……
    https://imgur.com/a/tqaIy
    谢过了

    刚躺在床上貌似就想出来了!
    第 1 条附言  ·  2016-12-09 12:25:59 +08:00
    虽然这道题是简单,但是高数什么的也很头疼啦,而且好学校的专业课也不是这么简单的,所以考研也不是都容易啦🙃🙃🙃还有十几天我就可以睡觉了开心
    39 条回复    2017-01-21 20:03:22 +08:00
    icedx
        1
    icedx  
       2016-12-09 01:12:22 +08:00 via Android
    为何专业课不能难一点呢 毫无味道啊
    eddie1
        2
    eddie1  
       2016-12-09 01:12:46 +08:00
    s2
    p0++
    '\0'
    SorryChen
        3
    SorryChen  
    OP
       2016-12-09 01:14:53 +08:00 via iPhone
    @icedx 顶尖那几个高校,专业课题质量会好一点……像我这种渣 985 ,老师都懒得出题……
    SorryChen
        4
    SorryChen  
    OP
       2016-12-09 01:15:19 +08:00 via iPhone
    @eddie1 就是这样!太久不看指针了,都忘了……
    justyy
        5
    justyy  
       2016-12-09 05:26:17 +08:00
    我的脖子。。。
    chiu
        6
    chiu  
       2016-12-09 07:54:21 +08:00 via Android
    早知道我去考研
    harry890829
        7
    harry890829  
       2016-12-09 08:47:00 +08:00
    啊……脖子……话说考研题这么简单啊
    wyntergreg
        8
    wyntergreg  
       2016-12-09 09:22:05 +08:00
    治好了多年的颈椎病
    lenjeans
        9
    lenjeans  
       2016-12-09 09:31:15 +08:00
    我去年考的山师,专业课的题你们可以看看,山师网站上有下,这样的算大题…………
    misaka19000
        10
    misaka19000  
       2016-12-09 10:01:26 +08:00
    。。。搞得我也想考研了
    qian19876025
        11
    qian19876025  
       2016-12-09 10:04:04 +08:00
    这是算法题 不是 C 语言题 如果你会算法 那剩下的就是 C 语言语法
    liuxu
        12
    liuxu  
       2016-12-09 10:07:50 +08:00
    题目看完了,脖子也扭了
    waterinet
        13
    waterinet  
       2016-12-09 10:09:41 +08:00
    比较容易迷惑的是 p0 和 p1 的关系, p0 遍历 s1 中的每个字符, p1 指向目标字符串的下一个写入位置。给 p1 分配空间会比较好理解。。。
    SpicyCat
        14
    SpicyCat  
       2016-12-09 10:18:15 +08:00
    C 语言是专业课,专业课难度是分学校的。一般考研,都是被数学拉分,或者挂在英语上。数学和英语搞定了,基本也就考上了。专业课都不会太难。
    Pan940425
        15
    Pan940425  
       2016-12-09 10:22:27 +08:00
    这张图治好了我多年的颈椎病。。。
    q397064399
        16
    q397064399  
       2016-12-09 10:27:51 +08:00
    @waterinet 传的是指针,你 malloc 一个新的就好了,把旧的 free 掉就 ok
    so easy ,
    q397064399
        17
    q397064399  
       2016-12-09 10:30:16 +08:00
    @waterinet 还有一种办法是 使用一个临时字符串,计算完成之后 strcpy 回去 结尾置 \0 即可
    rahuahua
        18
    rahuahua  
       2016-12-09 11:18:49 +08:00
    @q397064399 不太清楚这个考试的评分标准,不过有内存拷贝的话不是零分也就给个一两分
    muziki
        19
    muziki  
       2016-12-09 11:22:58 +08:00
    这代码真的没问题么,为什么用 2 楼的答案,推不出来。。。
    SorryChen
        20
    SorryChen  
    OP
       2016-12-09 11:47:37 +08:00 via iPhone
    @harry890829 专业课一般都简单……拉分主要看数学
    SorryChen
        21
    SorryChen  
    OP
       2016-12-09 11:48:36 +08:00 via iPhone
    @muziki 应该是没问题的……你可能哪里想错了
    SorryChen
        22
    SorryChen  
    OP
       2016-12-09 11:52:29 +08:00 via iPhone
    @SpicyCat 就是这样,同学考同济啊中科大的专业课也不是特别难,关键还是看公共课
    harry890829
        23
    harry890829  
       2016-12-09 11:52:59 +08:00
    @SorryChen 哎,我最近还在想,找个时间把高数那一套重新学起来呢
    muziki
        24
    muziki  
       2016-12-09 12:00:46 +08:00
    @SorryChen 在代码里面除了 s2 遍历到结尾和 while(*p0)完成的时候,没有对字符串做别的操作啊。能说下我哪里想错了吗? 代码写出来调试运行也没成功
    wwbfred
        25
    wwbfred  
       2016-12-09 12:16:45 +08:00
    这题难度不大不代表所有学校的所有题都这难度.
    并且上考场和你平时做着玩可不是一回事.
    别犯盲人摸象的错误.
    觉得简单的可以去搞 408 和高数.
    大学学的怎么样分分钟见原形.
    SorryChen
        26
    SorryChen  
    OP
       2016-12-09 12:21:35 +08:00 via iPhone   ❤️ 1
    @muziki 这段代码对字符串进行操作的语句其实是*p1++=*p0 是比较隐蔽的修改,因为 p0p1 这两个指针指的其实就是 s1 这块内存空间里面的字符, if 中的语句就表示当前 p0 所指字符,不是要删掉的,也就是要保留的,将这个字符,赋值给 p1 所指那块内存空间,然后 p1 向后移动一个,也就是说 p1 所指位置前面的所有字符,都是要保留下来的,最后在外面 p1 所指位置加上一个结束符,衣服穿就结束了。总体思想就是 p0 去后面找,然后不断覆盖 p1 位置, p1 向后移动,循环往复,最终结束之后 p1 位置加一个结尾,就好了
    SorryChen
        27
    SorryChen  
    OP
       2016-12-09 12:23:58 +08:00 via iPhone
    @wwbfred 高数是真头疼,我们学校专业好像没 408 的,准备的比较晚,只敢报个考 C 的😂😂😂
    vuser
        28
    vuser  
       2016-12-09 12:50:35 +08:00
    @muziki
    char s1[13] = "abcaa63akdfk";
    char s2[5] = "ayk5";
    ramen
        29
    ramen  
       2016-12-09 13:26:03 +08:00
    这题太容易钻空子了。根本不用看懂程序。
    首先 p0,p1 都是跟 s1 相关的,所以 p2 必然要跟 s2 关联起来。
    所以,第一个空应该是 s2.
    while 循环的条件是 p0,所以循环内应该有 p0 的增加操作,所以第二个空是 p0++。
    前面替换操作完成后,必然要设返回值。这函数没返回值,那肯定直接要改参数 s1 ,而本身 p1=s1 ,所以替换完成后增加一个结束符是必要的。
    于是第三个空就是\0 了
    xiaolingxinna
        30
    xiaolingxinna  
       2016-12-09 13:49:22 +08:00
    void func(char* s1, char* s2){
    char *p0, *p1, *p2;
    p0=p1=s1;
    while(*p0){
    p2=_________;
    while(*p2 && ( *p0 != *p2 )){
    p2++;
    }
    if(*p2=='\0'){
    p1=p0;
    p1++;
    }
    ____________;
    }
    p1=_____________;
    }
    附上能看的格式。 xjb 缩进,不加花括号,真做工程像出题的那么写会被打死吧。
    SorryChen
        31
    SorryChen  
    OP
       2016-12-09 14:22:43 +08:00 via iPhone   ❤️ 1
    @xiaolingxinna 基本每一道题的写法,放在工程都会被打死……
    Cu635
        32
    Cu635  
       2016-12-09 14:57:59 +08:00
    @chiu
    @harry890829
    @lenjeans
    @wwbfred
    @icedx
    各位,先搞明白研究生考试是干什么的再来评价考题的难度。。。
    研究生入学考试其实重点是后面的复试。

    至于初试,其实考的并不是你的知识,而是你的身体素质:一场考试 3 个小时,一天两场之间中午只有不到 2 个小时的休息时间,而且考题又是那种又累人分值又小数量又多的那种,那不是考验你的脑力劳动方面的体力是啥?哦,初试你连两天这种高强度的脑力劳动都坚持不下来考不出好成绩,研究生更累。

    所以说你看,初试的分数线看起来并不高,甚至只是折算成百分制的及格线附近甚至更低。
    Cu635
        33
    Cu635  
       2016-12-09 14:59:17 +08:00
    @wyntergreg
    @Pan940425
    反而是落枕了吧,治颈椎病得是一会儿左一会儿右,这几张图都是一个方向最后的结果就是落枕。。。
    deeporist
        34
    deeporist  
       2016-12-09 15:09:57 +08:00   ❤️ 1
    '''
    #include <stdio.h>

    int main()
    {
    char sa[]="abcaa63akdfk";
    char sb[]="ayk5";

    void fun(char *,char *);
    printf("%s\n%s\n",sa,sb);
    fun(sa,sb);
    printf("%s\n%s\n",sa,sb);
    return 0;
    }

    void fun(char *s1,char *s2)
    {
    char *p0,*p1,*p2;
    p0=p1=s1;
    char c=0;
    while(*p0)
    {
    p2=s2;
    while(*p2 && (*p0!=*p2))
    p2++;
    if(*p2=='\0')
    *p1++=*p0;
    p0++;
    }
    *p1='\0';
    }
    '''
    win8.1 cygwin gcc 编译成功运行成功结果无误 gdb 完全调试
    ps :我一开始把那两字符串声明成了指针类型(char *sa="abcaa63akdfk") 然后 segmentation fault 了一下午..........神 tmC 陷阱白看了 我今年也报了名我看我还是先去面壁比较好
    SorryChen
        35
    SorryChen  
    OP
       2016-12-09 15:33:29 +08:00 via iPhone
    @deeporist 哈哈这个错误我也犯过
    zscself
        36
    zscself  
       2016-12-09 15:55:41 +08:00
    @SorryChen 你这专业课是叫“数据结构”还是叫“ C 语言”?
    SorryChen
        37
    SorryChen  
    OP
       2016-12-09 16:02:36 +08:00 via iPhone
    @zscself 其实是叫高级程序设计,其实就是 c 语言,考一点简单算法
    peneazy
        38
    peneazy  
       2016-12-09 19:20:25 +08:00 via Android
    早知道五年前考计算机研究生了,因为公费读本专业硕士,就读了三年。。发了多篇 EI ,可惜没什么卵用,转行前端了
    ghSimon
        39
    ghSimon  
       2017-01-21 20:03:22 +08:00
    所以这个问题的实质是在于对形参 char *的内存分配位置的理解?需要先拷贝一份到 char[],然后才能实现写操作,避免段错误?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3580 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 04:21 · PVG 12:21 · LAX 20:21 · JFK 23:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.