![]() | 1 icedx 2016-12-09 01:12:22 +08:00 via Android 为何专业课不能难一点呢 毫无味道啊 |
2 eddie1 2016-12-09 01:12:46 +08:00 s2 p0++ '\0' |
![]() | 3 SorryChen OP @icedx 顶尖那几个高校,专业课题质量会好一点……像我这种渣 985 ,老师都懒得出题…… |
![]() | 5 justyy 2016-12-09 05:26:17 +08:00 我的脖子。。。 |
![]() | 6 chiu 2016-12-09 07:54:21 +08:00 via Android 早知道我去考研 |
![]() | 7 harry890829 2016-12-09 08:47:00 +08:00 啊……脖子……话说考研题这么简单啊 |
![]() | 8 wyntergreg 2016-12-09 09:22:05 +08:00 治好了多年的颈椎病 |
![]() | 9 lenjeans 2016-12-09 09:31:15 +08:00 我去年考的山师,专业课的题你们可以看看,山师网站上有下,这样的算大题………… |
![]() | 10 misaka19000 2016-12-09 10:01:26 +08:00 。。。搞得我也想考研了 |
11 qian19876025 2016-12-09 10:04:04 +08:00 这是算法题 不是 C 语言题 如果你会算法 那剩下的就是 C 语言语法 |
![]() | 12 liuxu 2016-12-09 10:07:50 +08:00 题目看完了,脖子也扭了 |
13 waterinet 2016-12-09 10:09:41 +08:00 比较容易迷惑的是 p0 和 p1 的关系, p0 遍历 s1 中的每个字符, p1 指向目标字符串的下一个写入位置。给 p1 分配空间会比较好理解。。。 |
14 SpicyCat 2016-12-09 10:18:15 +08:00 C 语言是专业课,专业课难度是分学校的。一般考研,都是被数学拉分,或者挂在英语上。数学和英语搞定了,基本也就考上了。专业课都不会太难。 |
15 Pan940425 2016-12-09 10:22:27 +08:00 这张图治好了我多年的颈椎病。。。 |
![]() | 16 q397064399 2016-12-09 10:27:51 +08:00 @waterinet 传的是指针,你 malloc 一个新的就好了,把旧的 free 掉就 ok so easy , |
![]() | 17 q397064399 2016-12-09 10:30:16 +08:00 @waterinet 还有一种办法是 使用一个临时字符串,计算完成之后 strcpy 回去 结尾置 \0 即可 |
18 rahuahua 2016-12-09 11:18:49 +08:00 @q397064399 不太清楚这个考试的评分标准,不过有内存拷贝的话不是零分也就给个一两分 |
19 muziki 2016-12-09 11:22:58 +08:00 这代码真的没问题么,为什么用 2 楼的答案,推不出来。。。 |
![]() | 20 SorryChen OP @harry890829 专业课一般都简单……拉分主要看数学 |
![]() | 23 harry890829 2016-12-09 11:52:59 +08:00 @SorryChen 哎,我最近还在想,找个时间把高数那一套重新学起来呢 |
24 muziki 2016-12-09 12:00:46 +08:00 @SorryChen 在代码里面除了 s2 遍历到结尾和 while(*p0)完成的时候,没有对字符串做别的操作啊。能说下我哪里想错了吗? 代码写出来调试运行也没成功 |
![]() | 25 wwbfred 2016-12-09 12:16:45 +08:00 这题难度不大不代表所有学校的所有题都这难度. 并且上考场和你平时做着玩可不是一回事. 别犯盲人摸象的错误. 觉得简单的可以去搞 408 和高数. 大学学的怎么样分分钟见原形. |
![]() | 26 SorryChen OP ![]() @muziki 这段代码对字符串进行操作的语句其实是*p1++=*p0 是比较隐蔽的修改,因为 p0p1 这两个指针指的其实就是 s1 这块内存空间里面的字符, if 中的语句就表示当前 p0 所指字符,不是要删掉的,也就是要保留的,将这个字符,赋值给 p1 所指那块内存空间,然后 p1 向后移动一个,也就是说 p1 所指位置前面的所有字符,都是要保留下来的,最后在外面 p1 所指位置加上一个结束符,衣服穿就结束了。总体思想就是 p0 去后面找,然后不断覆盖 p1 位置, p1 向后移动,循环往复,最终结束之后 p1 位置加一个结尾,就好了 |
![]() | 27 SorryChen OP @wwbfred 高数是真头疼,我们学校专业好像没 408 的,准备的比较晚,只敢报个考 C 的 |
29 ramen 2016-12-09 13:26:03 +08:00 这题太容易钻空子了。根本不用看懂程序。 首先 p0,p1 都是跟 s1 相关的,所以 p2 必然要跟 s2 关联起来。 所以,第一个空应该是 s2. while 循环的条件是 p0,所以循环内应该有 p0 的增加操作,所以第二个空是 p0++。 前面替换操作完成后,必然要设返回值。这函数没返回值,那肯定直接要改参数 s1 ,而本身 p1=s1 ,所以替换完成后增加一个结束符是必要的。 于是第三个空就是\0 了 |
![]() | 30 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 缩进,不加花括号,真做工程像出题的那么写会被打死吧。 |
![]() | 31 SorryChen OP ![]() @xiaolingxinna 基本每一道题的写法,放在工程都会被打死…… |
![]() | 32 Cu635 2016-12-09 14:57:59 +08:00 @chiu @harry890829 @lenjeans @wwbfred @icedx 各位,先搞明白研究生考试是干什么的再来评价考题的难度。。。 研究生入学考试其实重点是后面的复试。 至于初试,其实考的并不是你的知识,而是你的身体素质:一场考试 3 个小时,一天两场之间中午只有不到 2 个小时的休息时间,而且考题又是那种又累人分值又小数量又多的那种,那不是考验你的脑力劳动方面的体力是啥?哦,初试你连两天这种高强度的脑力劳动都坚持不下来考不出好成绩,研究生更累。 所以说你看,初试的分数线看起来并不高,甚至只是折算成百分制的及格线附近甚至更低。 |
![]() | 33 Cu635 2016-12-09 14:59:17 +08:00 |
![]() | 34 deeporist 2016-12-09 15:09:57 +08:00 ![]() ''' #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 陷阱白看了 我今年也报了名我看我还是先去面壁比较好 |
![]() | 38 peneazy 2016-12-09 19:20:25 +08:00 via Android 早知道五年前考计算机研究生了,因为公费读本专业硕士,就读了三年。。发了多篇 EI ,可惜没什么卵用,转行前端了 |
![]() | 39 ghSimon 2017-01-21 20:03:22 +08:00 所以这个问题的实质是在于对形参 char *的内存分配位置的理解?需要先拷贝一份到 char[],然后才能实现写操作,避免段错误? |