好久不看 c 了,麻烦看一个考研题…… - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SorryChen
V2EX    C

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

  •  
  •   SorryChen 2016-12-09 00:59:13 +08:00 via iPhone 4359 次点击
    这是一个创建于 3240 天前的主题,其中的信息可能已经有所发展或是发生改变。
    做了半天没做出来……
    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     Solana     5206 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:16 PVG 15:16 LAX 00:16 JFK 03:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86