资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,Page,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,单击此处编辑母版标题样式,C+语言速成与ACM入门,Page,2,C+语言速成,语言,函数,数据类型,运算符,指针,数组,语句,Page,3,char:字符,用来存英文字母、数字,或其他字符,int:整型数字,输入的数字均为整数,数据类型,float:浮点数,用来存储小数,C+语言速成,Page,4,数据类型,数据类型可参加以下扩展声明:,short:该数据类型精度较小,long:该数据类型精度较大,例:short int 范围为-32768 32767,,long int 范围为-2147483648 2147483647),unsigned:该数据类型没有符号位,signed:该数据类型有符号位,(例:signed long int 范围为-2147483648 2147483647,unsigned long int 范围为 0 4294967295),long float 可以写作 double,默认情况下,int为signed 的 long,当使用 int时,假设有其他扩展声明可省略int,比方:long a;,Page,5,数据类型,如果觉得long不够长的话,还可以使用另外一种更长的int,long long,范围为-(2 63)2 63-1,如果还不够长,还可以,unsigned long long,在dev C+编译器下输入long long long后编译出错,错误提示为:long long long is too long,(注意,在VC+6.0中,long long必须写成_int64),Page,6,算术运算符,1,逻辑运算符,2,关系运算符,3,赋值运算符,4,运算符,Page,7,算术运算符,+:加法运算,比方3+2=5,-:减法运算,比方 3-2=1,*、/:同上,注意除法运算中,int类型的除法的结果为带余除法的商,%:取模运算,算a对b带余除法后的余数,&:两个数进行二进制与运算,|:二进制或运算,:二进制异或运算,:二进制取反运算,Page,8,逻辑运算符,计算机逻辑运算:0为假,1为真,对计算机而言,一切不是0的数都是真,&:逻辑与,而且,|:逻辑或,或者,!:逻辑非,不是,Page,9,关系运算符,判别两个数据之间的大小关系,=:等于,!=:不等于,:大于,=:大于等于,Page,10,赋值运算符,=:让某个数据的值变为另一个值,+=、-=、*=、/=、&=:让某个数据变成该数据加减、乘、除、取余某个值后的结果,&=、|=、=等等,+、-:自加一、自减一,Page,11,if,else,switch,while,for,do.while,goto,循环控制语句,continue&break,条件语句,循环语句,C+,语句,C+语言速成,Page,12,条件语句,if(条件,内容1;else,内容2;,当内容1/内容2只有一条语句时,if/else后面的大括号可省略,if(条件1,内容1;else,if(条件2),内容2;else,内容3;,if(条件1,内容1;else if条件2,内容2;else,内容3;,Page,13,循环语句,while(条件,内容;,内容只有一条语句时大括号可省略,for(内容1;条件;内容2内容3;,内容1;while(条件)内容3;内容2;,Page,14,循环控制语句,continue,不执行下面的语句,重新进入条件判断,如果条件成立那么重新执行循环语句,break,直接结束循环,Page,15,数组与指针,一维数组=数列,二维数组=很多个数列,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a5的位置,a的位置,a00,a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,Page,16,数组与指针,需要的数据存放在内存上,内存可以视作一个很长的表,申请一个长度为k的数组即int ak实际上是在内存上找一段长度为k的没有其他程序使用的连续的内存,然后将之命名为a,而申请二维数组int akl,实际上也是申请一个长度为k*l的没有其他程序使用的连续的内存,然后将之命名为a,然后将第一个位置命名为a0,第l+1个位置命名为a1,第2*l+1个位置命名为a2.以此类推,a0,a2,a1,a4,a3,a00,a10,a01,a20,a11,a21,Page,17,数组与指针,地址:存储一个数据的位置,取址运算&:获得该数据的地址,取值运算*:获得该地址的数据,a实际上指的就是a0的地址,即*a a0,&a0 a,&a1 a+1,a0,a2,a1,a4,a3,内存第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?,a0,a2,a1,a4,a3,p=k,内存第k个格子,内存第k+1个格子,内存第l个格子,存储的值为k,Page,19,数组与指针,双指针:用来存储某个指针的地址,int*p1=&p;,p1&p (l),*p1 p (k,a,&a0),*p1 a0,&p1?,a0,a2,a1,a4,a3,p1=l,p=k,内存第k个格子,内存第k+1个格子,内存第l个格子,存储的值为k,内存第m个格子,存储的值为l,Page,20,函数,返回类型 函数名参数1,参数2,.);int f(int x,int y);,返回类型 函数名参数1,参数2,.)int f(int x,int y),.return x*(x+y);,return.;,f(x,y)=x*(x+y),Page,21,函数,main函数是整个程序的开始,一般情况下main类型为int,返回值应为0,函数一旦运行到return时,立即返回该值并结束函数的运行,并不运行return之后的任何语句,函数可不带任何参数,当函数不需要返回值时,可以使用void作为该函数的类型,要结束函数运行时直接return;即可,void f()return;,函数内部可以调用其他的函数,也可以调用自身,int f(long x)if(x=0)return 0;else return x+f(x-1);,else可省略,Page,22,函数,函数运行时,不会修改参数的值,void f(int a),a+;,int main()int b=3;f(b);return 0;,事实上,f(b)的调用是先申请int a,成功后令a=b(即复制一个b,名字为a),然后再对a进行操作。,运行后a会被销毁,但是b不会被改变。,假设调用的是指针又会如何呢?,void f(int&a),a+;,int main(),int b=3;,f(b);,return 0;,Page,23,ACM,扎实的数学根底,良好的英语阅读理解能力,编程经验,创新思维能力,团队合作精神,心理素质,ACM入门,Page,24,ACM比赛规那么,三个人一台电脑Linux系统),队内可讨论,可由队内任何人编写任意题目,共612道题目,45小时,可用CC+Java答题,可带任何纸质材料,每次提交答案都有返回结果,假设不正确可以修改后再次提交,每次通过一道题目时,你的通过题目数+1,你的总罚时会加上当前的时间分钟为单位再加上你之前提交此题不通过的次数*20,没有答复顺序限制,可按任意顺序答题,场内有打印机,可打印任何你需要的东西通常是代码,可随时通过电脑向裁判(judge)问任何问题,judge可选择回不答复,排名按题数降序排序,假设题数相同那么按罚时升序排序,可以在比赛过程中查看所有队伍答复题目的情况以及当前的排名,此排名被称之为board,在比赛结束前一小时board将停止更新,保持在比赛结束前一小时的状态,在比赛结束后才会看到最终的结果,称为frozen或封board,Page,25,状态解释,Accepted(AC):成功解决一道题目,答案正确,Presentation Error(PE):输出的答案正确,但是格式错误了,Wrong Answer(WA):输出的答案与要求的答案不一致,Runtime Erorr(RE):程序运行时崩溃,Time-limit Exceeded(TLE):程序运行时间过长,Memory-limit Exceeded(MLE):程序花费内存空间过大,Output-limit Exceeded(OLE):输出的答案过长,System Error:裁判系统崩溃,Page,26,初学者易犯的错误,题目:输入两个数,输出该两个数的差,样例输入:12 3,样例输出:9,#includeusing namespace std;int main()int a,b;cout ab;cout The answer is:a-b ab;cout a-bendl;return 0;,没有endl会返回PE,Page,28,ACM常用技巧,一般而言,C+的cin与cout速度上会比C语言的scanf和printf慢很多,所以我们推荐使用scanf和printf而不是cin cout,scanf的格式为scanf(“,例如,int a;,scanf(%d,%以及后面的内容为需要代换的内容,不同的字母有不同的含义:,%d:一个整数,%f:一个小数,%c:一个字符,%s:一个字符串遇到空格与回车的时候结束,%:一个百分号,Page,29,ACM常用技巧,除了%以外,每一个百分号后面读入的内容要按顺序在后面的列表中提供读入到哪一个地址:,int a;,float b;,scanf(%d%f,将一个整数读入到a,一个小数读入到b,可以添加扩展说明,l:长型元素%ld长整数对应long%lf长小数对应double,*:读入后被忽略,比方scanf(%d%*d%d,读入三个整数,第一个读入到a,第二个被忽略,第三个读入到c,可以自己定义输入格式,如scanf(%d:%d,是指读入两个被分号分开的数,例如3:15,分别读到a和b,如读入数据并非如此那么会出现混乱,Page,30,ACM常用技巧,printf:与scanf类似的格式写出数据,printf(%ld%ldn,a,b);,printf(“Answer is:%ldn,a);,printf(%5.2lfn,f);,printf(%8dn,a);右对齐占八位的数字,printf(%-8dn,a);左对齐占八位的数字,printf(%08dn,a);八位补0的数字,Page,31,ACM常用技巧,n:输出一个回车,t:输出一个间隔,:输出一个双引号,:输出一个斜杠(),:输出一个单引号,Page,32,ACM常用技巧,一般而言,ACM题目中常常会有多组数据,一般有两种表示方法,1:第一行为数据组数t,下面总共有t个数据,2:有多个数据,读到当m=0之类时停止处理,3:有多个数据,处理到结束为止,1:scanf(%d,while(t-).,scanf(%d,Page,33,ACM常用技巧,2:有多个数据,读到当m=0之类时停止处理,while(scanf(%d,3:有多个数据,处理到结束为止,while(scanf(%d,Page,34,ACM团队合作,三个人一台电脑:只能由一个人编写程序,队内可讨论:讨论总能够得到更好的结果,可由队内任何人编写任意题目:轮流上机,可带任何纸质材料:模板,每次提交答案都有返回结果,假设不正确可以修改后再次提交:随时知道自己的答案正确与否,没有答复顺序限制,可按任意顺序答题:三个人不要看同一道题目,场内有打印机:如果提交错误那么可以打印代码,将机器交给队友使用,自己查看代
展开阅读全文