《C语言速成和ACM入门ppt课件》由会员分享,可在线阅读,更多相关《C语言速成和ACM入门ppt课件(36页珍藏版)》请在金锄头文库上搜索。
1、C+语言速成与ACM入门Page 2C+语言速成言语言语函数函数数据数据类型类型运算运算符符指针指针数组数组语句语句Page 3char:字符,用来存英文字母、数字或其他字符int:整型数字,输入的数字均为整数float:浮点数,用来存储小数C+语言速成Page 4数据类型n数据类型可加入以下扩展声明:nshort:该数据类型精度较小nlong:该数据类型精度较大n(例: short int 范围为 -32768 32767,nlong int 范围为 -2147483648 2147483647)nunsigned: 该数据类型没有符号位nsigned:该数据类型有符号位n(例:signed
2、 long int 范围为 -2147483648 2147483647,nunsigned long int 范围为 0 4294967295)nlong float 可以写作 doublen默认情况下,int为signed 的 longn当使用 int时,若有其他扩展声明可省略intn比如:long a;Page 5数据类型n如果觉得long不够长的话,还可以使用另外一种更长的intnlong longn范围为-(2 63) 2 63 - 1n如果还不够长,还可以nunsigned long longn范围为 0 2 64 - 1 (2 64 = 18446744073709551616)
3、n在dev C+编译器下输入long long long后编译出错n错误提示为:long long long is too longn(留意,在VC+ 6.0中,long long必须写成_int64)Page 6算术运算符逻辑运算符关系运算符赋值运算符运算符Page 7算术运算符n+:加法运算,比如3+2=5n-:减法运算,比如 3-2=1n*、/: 同上n(注意除法运算中,int类型的除法的结果为带余除法的商)n%:取模运算,算a对b带余除法后的余数n&:两个数进行二进制与运算n|:二进制或运算n:二进制异或运算n:二进制取反运算Page 8逻辑运算符n计算机逻辑运算:0为假,1为真n对计
4、算机而言,一切不是0的数都是真n&:逻辑与,而且n|:逻辑或,或者n!:逻辑非,不是Page 9关系运算符n判别两个数据之间的大小关系n=:等于n!=:不等于n:大于n=:大于等于Page 10赋值运算符n=:让某个数据的值变为另一个值n+=、-=、*=、/=、&=:让某个数据变成该数据加减、乘、除、取余某个值后的结果n&=、|=、=等等n+、-:自加一、自减一Page 11ifelseswitchwhilefordo.whilegoto循环控制语句循环控制语句continue & break条件语句条件语句循环语句循环语句C+语句C+语言速成Page 12条件语句nif(条件)n内容1;el
5、sen内容2;nn当内容1/内容2只有一条语句时,if / else后面的大括号可省略nif(条件1)n内容1;elsenif(条件2)n 内容2;elsen 内容3;nif(条件1) 内容1;else if条件2) 内容2;else 内容3;Page 13循环语句nwhile(条件)n内容;nn内容只有一条语句时大括号可省略nfor(内容1;条件;内容2)内容3;n内容1;while(条件)内容3;内容2;Page 14循环控制语句ncontinuen不执行下面的语句,重新进入条件判断,如果条件成立则重新执行循环语句nbreakn直接结束循环Page 15数组与指针n一维数组 = 数列n二维
6、数组 = 很多个数列a0a1a2a3a4a5a6a7a8a9a5的位置a的位置a00a01a02a03a04a05a06a07a08a09a10a11a12a13a14a15a16a17a18a19a20a21a22a23a24a25a26a27a28a29Page 16数组与指针n需要的数据存放在内存上n内存可以视作一个很长的表,申请一个长度为k的数组即int ak)实际上是在内存上找一段长度为k的没有其他程序使用的连续的内存,然后将之命名为an而申请二维数组int akl,实际上也是申请一个长度为k*l的没有其他程序使用的连续的内存,然后将之命名为a,然后将第一个位置命名为a0,第l+1个
7、位置命名为a1,第2*l+1个位置命名为a2.以此类推a0a2a1a4a3a00a10a01a20a11a21Page 17数组与指针n地址:存储一个数据的位置n取址运算&:获得该数据的地址n取值运算*: 获得该地址的数据na实际上指的就是a0的地址n即*a a0n&a0 an&a1 a+1a0a2a1a4a3内存第k个格子内存第k+1个格子Page 18数组与指针指针:用来存储某个元素的地址int *p = a;*p a0p &a0 (a,k)p + 1 &a1&*p &a0 (a,k)p+ :让p的值+1,实际上就是指向p的下一个位置&p ?a0a2a1a4a3p=k内存第k个格子内存第k
8、+1个格子内存第l个格子,存储的值为kPage 19数组与指针双指针:用来存储某个指针的地址int *p1 = &p;p1 &p (l)*p1 p (k,a,&a0)*p1 a0&p1 ?a0a2a1a4a3p1=lp=k内存第k个格子内存第k+1个格子内存第l个格子,存储的值为k内存第m个格子,存储的值为lPage 20函数n返回类型 函数名参数1,参数2,.); int f ( int x, int y);n返回类型 函数名参数1,参数2,.) int f ( int x, int y) n. return x*(x+y);nreturn .;nf(x, y) = x*(x + y)Pag
9、e 21函数nmain函数是整个程序的开始n一般情况下main类型为int,返回值应为0n函数一旦运行到return时,立即返回该值并结束函数的运行,并不运行return之后的任何语句n函数可不带任何参数n当函数不需要返回值时,可以使用void作为该函数的类型,要结束函数运行时直接return;即可nvoid f()return;n函数内部可以调用其他的函数,也可以调用自身nint f(long x)if(x = 0)return 0;else return x+f(x-1);else可省略Page 22函数n函数运行时,不会修改参数的值nvoid f(int a)na+;nint main(
10、)int b = 3;f(b);return 0;n事实上,f(b)的调用是先申请int a,成功后令a=b(即复制一个b,名字为a),然后再对a进行操作。n运行后a会被销毁,但是b不会被改变。n若调用的是指针又会如何呢?void f(int &a)a+;int main()int b = 3;f(b);return 0;Page 23扎实的数学基础良好的英语阅读理解能力编程经验创新思维能力团队合作精神心理素质ACM入门Page 24ACM比赛规则n三个人一台电脑Linux系统)n队内可讨论,可由队内任何人编写任意题目n共612道题目,45小时n可用CC+Java答题n可带任何纸质材料n每次提
11、交答案都有返回结果,若不正确可以修改后再次提交n每次通过一道题目时,你的通过题目数+1,你的总罚时会加上当前的时间分钟为单位再加上你之前提交此题不通过的次数*20n没有回答顺序限制,可按任意顺序答题n场内有打印机,可打印任何你需要的东西通常是代码)n可随时通过电脑向裁判(judge)问任何问题,judge可选择回不回答n排名按题数降序排序,若题数相同则按罚时升序排序n可以在比赛过程中查看所有队伍回答题目的情况以及当前的排名,此排名被称之为boardn在比赛结束前一小时board将停止更新,保持在比赛结束前一小时的状态,在比赛结束后才会看到最终的结果,称为frozen或封boardPage 25
12、状态解释nAccepted(AC):成功解决一道题目,答案正确nPresentation Error(PE):输出的答案正确,但是格式错误了nWrong Answer(WA):输出的答案与要求的答案不一致nRuntime Erorr(RE):程序运行时崩溃nTime-limit Exceeded(TLE):程序运行时间过长nMemory-limit Exceeded(MLE):程序花费内存空间过大nOutput-limit Exceeded(OLE):输出的答案过长nSystem Error:裁判系统崩溃Page 26初学者易犯的错误n标题:输入两个数,输出该两个数的差n样例输入:12 3n样
13、例输出:9n#includeusing namespace std;int main()int a,b;cout ab;cout The answer is: a-b endl;return 0;Page 27初学者易犯的错误nACM比赛中,期待获得的程序是输入一些数据后能马上输出需要输出的结果n即输入12 3之后马上输出9n而该程序会输出的是:nPlease input the numbers:The answer is:9n这与答案9不一样,虽然方法是对的,但仍然会出现WAn#includeusing namespace std;int main()cin ab;cout a-bendl;
14、return 0;没有endl会返回PEPage 28ACM常用技巧n一般而言,C+的cin与cout速度上会比C语言的scanf和printf慢很多,所以我们推荐使用scanf和printf而不是cin coutnscanf的格式为scanf(“”, &, );n例如nint a;nscanf(%d,&a);n%以及后面的内容为需要代换的内容,不同的字母有不同的含义:n%d:一个整数n%f:一个小数n%c:一个字符n%s:一个字符串遇到空格与回车的时候结束)n%:一个百分号Page 29ACM常用技巧n除了%以外,每一个百分号后面读入的内容要按顺序在后面的列表中提供读入到哪一个地址:nint
15、 a;nfloat b;nscanf(%d%f,&a,&b);n将一个整数读入到a,一个小数读入到bn可以添加扩展说明nl:长型元素 %ld长整数对应long %lf长小数对应doublen*:读入后被忽略 n比如scanf(%d%*d%d,&a,&c);读入三个整数,第一个读入到a,第二个被忽略,第三个读入到cn可以自己定义输入格式,如scanf(%d:%d,&a,&b);是指读入两个被分号分开的数,例如3:15,分别读到a和b,如读入数据并非如此则会出现混乱Page 30ACM常用技巧nprintf:与scanf类似的格式写出数据nprintf(%ld %ldn, a,b);nprintf
16、(“Answer is : %ldn,a);nprintf(%5.2lfn,f);nprintf(%8dn,a);右对齐占八位的数字nprintf(%-8dn,a);左对齐占八位的数字nprintf(%08dn,a);八位补0的数字Page 31ACM常用技巧nn:输出一个回车nt:输出一个间隔n:输出一个双引号n:输出一个斜杠( )n:输出一个单引号Page 32ACM常用技巧n一般而言,ACM题目中常常会有多组数据,一般有两种表示方法n1:第一行为数据组数t,下面总共有t个数据n2:有多个数据,读到当m=0之类时停止处理n3:有多个数据,处理到结束为止n1:scanf(%d,&t);whi
17、le(t-).nscanf(%d,&t);for(h=1;h=t;h+).printf(Case %d:n,h);Page 33ACM常用技巧n2:有多个数据,读到当m=0之类时停止处理nwhile(scanf(%d,&m), m!=0).;n3:有多个数据,处理到结束为止nwhile(scanf(%d,&m)!=EOF).;Page 34ACM团队合作n三个人一台电脑:只能由一个人编写程序n队内可讨论:讨论总能够得到更好的结果n可由队内任何人编写任意题目:轮流上机n可带任何纸质材料:模板n每次提交答案都有返回结果,若不正确可以修改后再次提交:随时知道自己的答案正确与否n没有回答顺序限制,可按
18、任意顺序答题:三个人不要看同一道题目n场内有打印机:如果提交错误则可以打印代码,将机器交给队友使用,自己查看代码发现错误Page 35提示n不要盲目交题,要有充分把握才交。并不是你的程序能跑过样例就是正确的。提交前最好再次检查题目和代码。n尽可能不要在机子上调试,这会花去很多的时间。n一般常用的计算机一秒内最多能计算的次数为107,最好检查下你的程序在题目的规模下大概要计算多少次。n错误的时候不要慌张,打印你的代码下机,把机器交给队友吧。n要相信你的队友,给他的应该是鼓励而不是压力。n当你不知道做什么题目时,看看别人做什么题,自己跟着做就行了。n罚时没有题数重要。到了最后关头,罚时永远都是浮云。最后时刻拼人品,绝杀吧!n淡定。感谢观赏感谢观赏Produced By Jan.D huang, For ACMM:13430311469(631469) :280985918