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
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 缩进,不加花括号,真做工程像出题的那么写会被打死吧。 |
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 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 陷阱白看了 我今年也报了名我看我还是先去面壁比较好 |
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[],然后才能实现写操作,避免段错误?
|