※ 引述《fragmentwing (片翼碎梦)》之铭言:
: https://imgur.com/fs1T6T9
: 献丑
: 原本想说要用log去算,发现超不准,只好直接算了
: 怕超过2*32次,就用10次和0.1的机率去算了
: 至少一次的机率==一次+两次+...+N(抽的总次数)次
: 以下程式码,才正式学C不到10天,请鞭小力点
: #include<stdio.h>
: #include<math.h>
: int cntnis(int a,int b){
: int top=1,bottom=1;
: for(int i=1;i<=b;i++){
: top*=(a-i+1);
: bottom*=i;
: }
: int compute=top/bottom;
: return compute;
: }
: double multi(double have,int havet,int nohavet){
: double result=pow(have,havet)*pow((1.0-have),nohavet);
: return result;
: }
: int main(){
: int times,cntn,i;
: double haveis,mulh,probability,expectation=0;
: times=10;
: haveis=0.1;
: for(i=1;i<=times;i++){
: cntn=cntnis(times,i);
: mulh=multi(haveis,i,times-i);
: probability=cntn*mulh;
: printf("抽 %d 次中,抽中 %d 张的机率= %lf\n",times,i,probability);
: expectation+=probability*i;
: }
: printf("抽 %d 次,机率 %.3lf 期望值为: %lf",times,haveis,expectation);
: return 0;
: }
看到原PO说刚学C就想拿来运用,想要鼓励一下原PO,
这才是学程式的精神,学了就是有需要就要想到它,把它要拿出来用
有一些人认为C太低阶,程式码太长,用Python或Matlab打起来比较简单
在这个案例上是没错啦,毕竟只是跑10次循环而已
但如果是跑上万次、甚至是百万次的话,我就建议用C了
我大学念资工时,有一堂课叫做 随机程序
专门就是再学如何写有效率的程式去模拟随机环境,统计十万百万次后,比较是否符合数学上计算的机率
例如:
扑克牌抽三张都是红心,模拟百万次的成功次数
有三个袋子,里面各有红白三颗球,A袋摸一颗球放B袋,B袋摸一颗放C袋,最后C袋摸出红球,模拟百万次的成功次数
诸如此类的各种机率问题,都可以用程式去模拟十万、百万、甚至千万次
这种循环都是要跑很久的,就比较需要可以碰触到低阶的C去写程式
可以break循环就break,尽可能的减少不必要的过程
Matlab就很适合跑一些很难去写的数学式算法,因为都建好函数了
Laplace阿、Fourier都可以直接呼叫
可以画图也是一大优势
我上面用C跑完的百万次随机模拟结果,也可以丢到Matlab去跑分布图 赞赞
再来Matlab是以矩阵做运算的,也很适合去跑图像分析和图像处理
当初实验室学长也有在用Matlab做人脸分析处理的,不过我没有涉猎就不赘述了
Python是我目前看过最好学的程式了
直觉符合人类语言、程式短易读易改、主流多数人都会用
我自己就google自学Python玩过网络爬虫、wikia文本处理机器人、聊天机器人
总结来说
C 适合新手打基础、或是写需要大量运算需要增加效率时使用
Matlab 适合数学计算、数位图像处理
Python 适合快速写简单程式、或是开发一些应用
以原原PO的漫画中例子,我们就可以以C做模拟:
SSR机率1%,抽100次中,如果有中SSR就算成功,模拟百万次,成功几次
以数学理论上就是1-99%^100,这就可以直接在Matlab或是Python上做
在来比较最后的数值是否相似,以两种不同的路来验证最终结果没问题
以上小弟浅见,还望各路大神鞭小力点
作者:
aleezible (laterproblem)
2019-06-04 11:24:00喔喔,对对对,跟我想得差不多
作者:
aikotoba (aikotoba)
2019-06-04 11:26:00其实我也是这么想的
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:29:00其实我觉得第一个学C挺怪的就是
作者:
js850604 (jack0604)
2019-06-04 11:29:00完了我只用过MATLAB
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 11:31:00python真的很不错,c和c++的语法和方法太繁复了,做什么都要一套流程
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:32:00static-typed 语言写起来就很累啊C/C++ 更麻烦的是没有 garbage collection
作者:
bbkingck (Twister)
2019-06-04 11:34:00大一上学校教c++根本害人
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:35:00不过现在 MATLAB 做得到的事情Python几乎都可以做了吧?
第一个学C怪在哪?顶多就没python丰富 支援一堆..
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:36:00第一个学C很ok,是学C++很怪
作者:
CorkiN (柯基)
2019-06-04 11:37:00很多工学院大一也都教C++但感觉不是很适合...
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:37:00我知道啊 因为我们当初也是教C++ 课本就蚂蚁 对吧?
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 11:38:00c->c++->others
作者:
seaEPC (没看见,我没看见 >_<)
2019-06-04 11:38:00语言好不好用看用在哪,杀鸡用牛刀怪刀不好用是很奇怪的事
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 11:39:00c算很简单的,c++导入物件概念,再来是其他
作者:
Xinlong (Ashyjet)
2019-06-04 11:41:00真的是要看用在什么地方 如果你是写driver跟写app用的语言本来就不会一样
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:43:00我之所以提C比C++做为第一个语言较佳就是因为硬件的关联我不太懂为什么教C++的一开始就 cout 和 << ,这两者涉及了class 和 operator overloading 的概念而且很多教授直接喷 string class 出来存字串这反而会妨碍学生理解字串的处理但是在 C 里面你就只有 char[]
作者:
Anzar (是一只安萨)
2019-06-04 11:45:00arrenwu有没有北七如我也看的懂得说法啊 ....
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:45:00简单的说就是C++的教学一开始常常使用高级咒文,但C会从初级元素魔法开始
作者:
CorkiN (柯基)
2019-06-04 11:46:00楼上把c++primer前面几章读一下就会大概知道a大在说啥
作者:
Xinlong (Ashyjet)
2019-06-04 11:46:00c++跟c的关系 用比较简单的说法就是c++多了物件概念
过时的高级咒文... 理解物件我认为要学java..
作者:
Xinlong (Ashyjet)
2019-06-04 11:47:00c比c++的东西少 当然比较好学(X
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:47:00所以你在用C的魔法时,虽然看起来好像不太俐落,但你很了解你在干什么
作者:
laechan (挥泪斩马云)
2019-06-04 11:48:00用c写一些数学算式还没那么不堪啦,纯文字下c算简单易懂
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:48:00C++是高级魔法师把复杂魔法简化给你用,但你其实只看得到效果跟某些初级魔法很像,但实际上哪里不同你搞不清楚
作者:
Anzar (是一只安萨)
2019-06-04 11:48:00你这例子真是浅显易懂,感恩~
作者:
CorkiN (柯基)
2019-06-04 11:49:00a大好神==
作者:
Anzar (是一只安萨)
2019-06-04 11:49:00Cork要求的也太困难了啦 grgrgr
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:49:00因为我在学C之前我从来没搞懂C++到底怎么弄字串的
fortran跟C到底哪个快啊 之前看到有人说90在现代也还是很快
作者:
Xinlong (Ashyjet)
2019-06-04 11:50:00换CPU比较快(X
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:51:00而Java跟C++这两大高阶魔法系统有一个很类似的哲理,但有
作者:
forsakesheep (家裡蹲é¯å»¢è‚¥å®…)
2019-06-04 11:51:00这篇给我的感想就是程式设计师=魔法师
之前学fortran字串理解也还行,毕竟宣告要lenfortran像是在打文章,宣告用integer,dimension,allocatable之类,通通没有缩写
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 11:53:00java有很多东西帮你做好了,抠他就可以了
作者:
Anzar (是一只安萨)
2019-06-04 11:53:00奇怪,印象中有看到Java要消失不支援的新闻
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 11:54:00只是从c跳到java会不习惯,所以接c++比较妥当
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:55:00是不习惯标准函式库太强太威猛吗XD
作者:
CorkiN (柯基)
2019-06-04 11:56:00这串钓到一堆神人==
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 11:56:00c接c++不习惯你是开玩笑,同一个妈生的程式语言
作者: dieorrun (Tide) 2019-06-04 11:58:00
高阶语言逻辑都差不多 跳来跳去很快的 玩单芯片才痛苦
作者:
arrenwu (键盘的战鬼)
2019-06-04 11:58:00应该说,你到Java不习惯的东西,在C++也会不习惯Java只是从syntax上面直接强迫你在精神上进入OOP的世界
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 11:59:00当然啊,高阶的语言大家的电脑都看得懂,特别用一种机器就要用它的机器语言
作者:
arrenwu (键盘的战鬼)
2019-06-04 12:00:00但是在怎么破烂的机器 现在应该都有 c compiler吧
作者: Stat14 (统计14) 2019-06-04 12:01:00
我觉得学数学比较有用KAPPA
作者:
arrenwu (键盘的战鬼)
2019-06-04 12:01:00我觉得他应该是想要说 C code 放到 C++ 不会出现error啦
从fortran往C开始学超不适应一堆东西会撞到比方说C的continue是fortran的cycle然后fortran自己有另一个代表不做事的continue,常用来跟goto搭配,然后fortran的goto是用行代码(据说有不少资管唸四年还不知道行代码是什么呢),C是用标签搭配goto
C跳C++会混乱是 你会下意识用C的概念去学 问题是物件
完全是另一个世界 很多C的概念根本不适用 加上语法像
第二不适应的是% C是mod fortran是要把资料型态module内的东西拿出来用才会% 然后在C这功能好像是用.?不过C的module似乎很少用,毕竟class比较方便的样子最不适应的是 fortran的函式是call by reference C是 call by value搭配address靠 讲到fortran那天导聚教授问怎么会用这个,教授自
作者:
NerVGear (Phantom)
2019-06-04 12:06:00学C很合适吧 指标那边也带你学硬件
己是学C,我也觉得系上为什么要教这个……我们原本要学python的说指标和指标与阵列的一些关系,我花了一个半小时才弄懂
作者:
NerVGear (Phantom)
2019-06-04 12:08:00但是这学期上swift完全不知道在干嘛==
C的goto已经有放限制器只能作用在同一block内了你知道,fortran的goto是可以从第十行跳到倒数三行的吗 所以fortran的goto真的是太过强大的东西,没写注解会让交接的人很头痛
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 12:12:00指标和参考是让你懂,c所用的都是最基础的观念,python就没想得这么麻烦,我要用阵列要传参数当然是要它的值啊,我还特地送地址过去干嘛,我到你家门口告诉你地址到我家取货,干嘛不顺便送给你咧
作者:
NerVGear (Phantom)
2019-06-04 12:13:00用指标是让你跟副程式沟通的好ㄇ==
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 12:14:00我说学校教你基础概念当然用最基础的c啊
比如你传一个a[] 其实是传a[0]的位址过去这在取址运算子&上很明显
作者:
NerVGear (Phantom)
2019-06-04 12:16:00那应该学组语 真 底层
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 12:16:00不在c上面告诉你不然在哪边告诉你
作者:
NerVGear (Phantom)
2019-06-04 12:19:00不过python速度太慢惹 算法测资都测不过QQ
作者:
arrenwu (键盘的战鬼)
2019-06-04 12:20:00算法测资测不过怪Python慢好像不太对吧
作者:
NerVGear (Phantom)
2019-06-04 12:22:00速度超时啊应该说时间超时
作者:
arrenwu (键盘的战鬼)
2019-06-04 12:22:00@Giornno Python的 List 是传地址没错喔
作者:
arrenwu (键盘的战鬼)
2019-06-04 12:23:00是MATLAB传才是整个 deep copy一般时间超时是时间复杂度不一样了吧?
作者:
NerVGear (Phantom)
2019-06-04 12:24:00时间复杂度一样啊 但用python跑就比较慢啊
作者:
arrenwu (键盘的战鬼)
2019-06-04 12:24:00挖 你那测资也太..严苛了吧
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 12:26:00什么,我误解了这么久吗
作者:
NerVGear (Phantom)
2019-06-04 12:26:00之前忘了在学哪个算法python就要跑0.26秒 但标准0.25
作者:
arrenwu (键盘的战鬼)
2019-06-04 12:26:00你现在去run: x = [1,2,3] -> y=x然后改 y[0],你会发现x的内容也会被改道
作者: dryadl88908 (闇夜星子) 2019-06-04 12:30:00
不懂怪在哪,会一个就会全部了,重点在培养写程式的思考方式,只是不同语言程式的语法不同而已
作者:
Giornno (乔鲁诺.乔三槐)
2019-06-04 12:34:00没错啊,如果总是写出复杂度平方以上的算法,用再快的语言也没救
作者: blazewings 2019-06-04 12:38:00
我直上C+++结果现在学R、Python、java时有障碍...
作者:
ttPttPtt (ttPtt)
2019-06-04 12:46:00现在都2019了,还有人在C+++==
作者:
arrenwu (键盘的战鬼)
2019-06-04 12:48:00其实你就想,很多人跑模拟还在用MATLAB,所以其实速度上大家不见得会追求到那么极致
个人经验有障碍的通常不是语言差异遇过几个文组的没学过c、c++还是写得有声有色研究所才开始学写程式的人也不少
最好是学一个就全部都会 ..工具方法都不太一样..
作者:
NerVGear (Phantom)
2019-06-04 12:55:00matlab速度很快吧==算矩阵谁比他快的
作者: as80110680 2019-06-04 13:33:00
语言确实有很多共同观念,例如基本的循环递回算法,但多的是不共通的语言特性,内存分配、指标、reference,不要以为像reference很容易,光是c++的左值右值就搞死你了,我到现在都不敢说我多会c++
以美国公司面试都要现场写code来说 你说你要以python来接受测试是会被工程师瞧不起的 反而资料结构跟算法学好来 公司看到你特别的地方会直接给你钱请你去总公司面试
作者:
arrenwu (键盘的战鬼)
2019-06-04 13:36:00用Python写code会被瞧不起? 现在还有这问题喔?我知道面试好像比较偏爱Java没错
作者:
a2334436 (<lol>)
2019-06-04 13:38:00优文
作者:
arrenwu (键盘的战鬼)
2019-06-04 13:49:00别怕啊 这一两个学期你降会很习惯了
作者: as80110680 2019-06-04 13:55:00
我大二才从文组转到资工,有兴趣很快就会习惯了
作者:
archer646 (DozinessIsGood)
2019-06-04 14:04:00我一下写c一下写verilog 就快死了
作者:
banana1 (香蕉一号)
2019-06-04 14:05:00国中的时候摸过C,隔了十几年年没碰程式,之后看python还是很容易上手
作者:
Litfal (Litfal)
2019-06-04 14:17:00想写程式练功心态是对的啦,但这问题真的不用循环来算用上机率统计和常态分布的概念,循环可以省起来
作者:
kaltu (ka)
2019-06-04 14:26:00除了要接着学资料结构和组合语言的资工系学生之外,母语都没有必要选CC的learning curve太反人类,母语腔调又很难摆脱,用他当母语荼毒过的人脑袋直接上了思想僵化+9的DEBUFF要理解其他paradigm难度直线往上跳一堆人拿着C++、JVM Python照着C的convention在写把C library字典对换成C++ equivalent就当自己在写C++,连template都不会用C++自己就算不用C style的for(int i … ),我觉得Iterator比较潮,不不通通来给我用range-based for开个static public Main()从头到尾call static method,什么是OO?什么是design pattern?DP我知道啊 我高中ZeroJudge就在用的Dynamic Programming那个嘛然后跟你说“啊每个语言都一样,会C就会写C++/Java/…,你看会动啊!”每种语言都有他们自己特殊的味道那种觉得语言没差都一样,通通照着自己那一套写的人,写出来的东西其他人合作起来有多臭自己都闻不出来举个例子,要写Python就算没办法写得够Pythonic,至少codestyle给我去把PEP8读过一遍再来,私人专案没关系,要公开之前先sanitize一下不要臭到别人也不是说写C的就不臭,去翻一下GNU standard library人家是用怎么样的惯例在写C的,不要自己恶搞能把虚拟码换成某种语言跑起来,不代表你会那种语言,大家都有的功能不重要,重点是你有没有弄懂为什么这个语言存在的核心feature和什么才是他的特色。嫌Python慢之前,如果你知道Cython在干嘛,知道Python为什么又称glue language,你就会用C来写core然后Python写wrapper的方式来Pythonic地实作你的算法然后再接驳给其他系统Python的设计目的是减少人类的开发时间和各种重要元件之间的串接overhead、作为复杂系统的前端语言,例如深度学习引擎不约而同选用Python作为前端,C/CUDA作为后端一样
结果这一串没有经典引战笑话XDDD,我以为是有人引战说了什么xxx是世界上最好的语言才这么多推
作者:
laechan (挥泪斩马云)
2019-06-04 14:45:00看来专家很多,想问一下,为啥学校教的跟业界要的落差很大
要引战的话先从tab还是4格空白开始聊吧再来聊IDE背景颜色要深色还浅色
作者:
arrenwu (键盘的战鬼)
2019-06-04 14:56:00我支持IDE背景要深色
应该说学c容易习惯从下往上堆的思考,而c++,java..etc通常是由上往下长的思路去设计的,没切换过来撞墙是必然的
作者:
shuncheng (shuncheng)
2019-06-04 14:59:00我都用tab 打C用深色 Matlab用浅色 Latex深浅看心情
因为学校不会教你实作...要自行摸索再来C++的教科书很烂
作者:
cayalst (highlight)
2019-06-04 15:15:00从C开始之后学java 现在学python轻松多
作者:
arrenwu (键盘的战鬼)
2019-06-04 15:57:00其实1堂课18周还满久的啦XD
作者:
sarsman (DeNT15T♠)
2019-06-04 16:17:00Code_Chat
作者:
an94mod0 (an94mod0)
2019-06-04 16:40:00现在好像战不了Vim或Sublime了?