《2017年0508信息学奥赛c++语法入门》由会员分享,可在线阅读,更多相关《2017年0508信息学奥赛c++语法入门(17页珍藏版)》请在金锄头文库上搜索。
1、信息学奥赛C+语法,如何区分一个程序是C语言程序还是C+程序?,如果文件的扩展名是 .c ,那么该程序是c语言程序; 如果文件的扩展名是.cpp,那么该程序是c+程序。,C语言和C+之间有什么关系吗?,C语言是C+的子集。在C语言的基础上再加上一些语法,就形成了C+。,信息学奥赛的官网是什么?,http:/ 软件版本:5.4.2 ,高版本也可,NOI是什么意思?,全国青少年信息学奥林匹克竞赛 National Olympiad in Informatics NOIP 简称联赛,以省份为单位组织比赛。,做题网站: http:/ www.luogu.org,/1.cpp HelloWorld #i
2、nclude int main() printf(“Hello world!n“); return 0; ,第一个C语言程序:Hello world!,语法解释: 1.C语言/C+区分大小写。 格式排版:大括号对应,内容缩进。字体颜色自动变化。 2.include:文件包含。 cstdio 这个文件是包含了标准输入输出的头文件。 std:standard,标准的.i:input,输入.o:output,输出. (你暂且把它当英语短语记住,会用就行。 当你学得多了,你就会明白了。) 3.程序从 main() 函数开始执行,一句一句向下执行, 执行到某句时才可能调用头文件。 函数必须带括号。 4.
3、main()前面用int,最后一句是 return 0; int是整型,所以main()的返回值必须是整型。 return 是“返回“,main()函数的返回值一般为0. 5.注释的方法两种:1./单行注释 2. /* */ 段注释,多行注释。 6.printf是输出,用双引号括起来。 用双引号括起来的内容,一般原样输出。,7.在输出语句中,n 是换行 nn 换了两行。 8.printf中, printf(“%d“,3+2);用3+2 的结果代替 %d 。(百度搜索“转义字符“) 9.每句话后面都要有英文分号。一个分号代表一句话结束。单独的一个分号也是一句话。,在.cpp文件内,应使用C+语法
4、, 而C+包括C,所以可以在.cpp文 件内直接使用C语言语法。在每 次新建文件时,我们都直接新 建cpp文件。上面的程序,用的 是C语言的语法。,/2.cpp #include int main() int a,b; /所有的变量,都必须先声明,后使用。这句话的作用,是声明变量a,b是整型。 a=5; /给a赋值,使a的值为5。 b=8; printf(“%dn“,a+b); printf(“%dn“,a-b); printf(“%dn“,a*b); printf(“%dn“,a/b); /整数除以整数,结果是整数。小数部分都会被直接删掉,而不是四舍五入。 printf(“%dn“,b/a)
5、; /整数除以整数,结果是整数。小数部分都会被直接删掉,而不是四舍五入。 printf(“%dn“,b%a); / %,求余运算。 如果b=-8,求余运算后结果是多少呢? printf(“Hello world!n“); return 0; ,/ 3.cpp #include int main() int a,b; scanf(“%d“, ,语法解释: scanf()函数是用来输入数据的,它的第一个参数要用双引号引起来,用来控制要输入的数据的格式,后面参数是指把输入的数据依次放到内存中哪个位置(或者说,赋值给哪个变量。对于普通的变量,要在变量名称前加上 此时,在两个%d之间有一个逗号,用这个逗
6、号来“抵消“输入的逗号。如果在两个%d之间不加逗号,系统会把“5,8“之间的逗号当作第二个数输入。 总结:用scanf()输入整数时,用%d,系统会忽略掉输入的所有空格,但不会忽略掉其它字符。 用printf()输出数据时,双引号之间的大部分内容(包括空格)会原样输出,少部分内容会发生变化(比如 n )。,在程序编译阶段不报错,而在运行时报错并提示“该内存不能为written”,一般有两种原因,一是在输入数据时忘记使用 &符号,二是数组越界,访问了非法空间。,/ 4.cpp C+语法 #include using namespace std; int main() int a,b; cina;
7、 /scanf(“%d“, ,cin是用来输入数据的,cout是用来输出数据的。 cin和cout是c+中的语法,必须使用#include 和 using namespace std; 如果在c+中仍想使用scanf()和printf(),即使已经有了#include 和 using namespace std;, 仍然需要加上#include头文件。 关于输入输出,从语法上讲,使用scanf()和printf()需要考虑数据类型(比如整数需要用到%d,字符需要用到%c),而cin和cout则不需要考虑数据类型,因而书写更方便。但并不是说cin和cout比scanf()和printf()好,因
8、为在输入输出少量数据的时候,前者和后者所花的时间是差不多的;而当输入输出大量数据的时候,后者要比前者节省时间。,顺序结构 选择结构 循环结构,可以用流程图来表示一个算法。,顺序结构,选择结构,选择结构,循环结构,/5.cpp #include #include using namespace std; int main() int a,b,c; scanf(“%d“, ,/6.cpp #include #include using namespace std; int main() int a,b,c; scanf(“%d“, ,#include #include using namespac
9、e std; int main() int a,b,c; scanf(“%d“, /else部分,什么语句都不执行,因此,可以省略掉else,形成新的语法。,/这么写,是什么含义? #include #include using namespace std; int main() int a,b,c; scanf(“%d“, ,多了分号,有什么后果?,/常用的比较运算符 = = = /这个是等于,用于判断左右两侧是否相等 != /这个是不等于 ! /取反运算,它的优先级比并且高 & /并且 ,它的优先级比或者高 | /或者 ,它的优先级比并且低,/7.cpp 判断闰年 #include #in
10、clude using namespace std; int main() int n; scanf(“%d“, ,一个等号是赋值,两个等号是判断是否相等,/8.cpp 如何交换两个变量? /两个瓶子,一个装油,一个装醋,如何让这两个瓶子里的东西互换一下? #include #include using namespace std; int main() int a,b,c; scanf(“%d“, ,/9.cpp/ 字符和整数 #include #include using namespace std; int main() char cc,dd; cc=A; scanf(“%c“ ,int
11、 a;/ int的范围:-21亿 到 21亿 之间,向两边扩展一点 scanf(“%d”, */ /在64位系统里,无论windows还是linux,用 I64 或 lld 都行。,输入完数字以后的回车换行符也是字符,因此这样写接收不到第二行的字符,int占4个字节,long int占4个字节,long long int 占8个字节。 char占1个字节。 float占4个字节,double占8个字节。 sizeof() 函数:求变量占几个字节。结果跟变量类型有关。,在计算机里面,关于二进制的加减运算, 从来都不单独处理符号。符号位也当成 普通的数位进行加减运算。 以4位二进制数为例:,/10
12、.cpp/十进制、十六进制、八进制 #include int main() int a=10; printf(“%dn“,a);/以十进制形式输出 printf(“%Xn“,a);/以十六进制输出 /如果遇到字母,则输出大写字母 printf(“%xn“,a);/以十六进制输出 /如果遇到字母,则输出小写字母 printf(“%on“,a);/以八进制输出 printf(“%5dn“,a); /输出总共占5位,不足5位则左侧补空格 int b=3; printf(“%dn“,b2); /移位运算。 /左移1位相当于乘以2,右移1位相当于除以2。 return 0; ,/11.cpp.单精度浮点
13、数与双精度浮点数 #include #include #include using namespace std; int main() float f= 3.1415926*3*3;/单精度 输入输入用%f printf(“%fn“,f); printf(“%.5fn“,f);/保留小数点后5位 printf(“%10.5fn“,f); /总共10位(包括小数点),保留小数点后5位 。如果不足10位,则前面补空格 printf(“%7.5fn“,f); /总共7位(包括小数点),保留小数点后5位 。如果超过了7位,则原样输出 double c=3.1415926*3*3;/双精度 输入输出用l
14、f printf(“%lfn“,c); int d; d=(int)c; /强制类型转换 printf(“%dn“,d); return 0; ,#include #include using namespace std; int main() int i,n,sum=0; scanf(“%d“, ,for循环语法: for(; ) for循环从开始执行,然后执行的判断。 判断结果是假的话,就退出循环,执行循环后面的语句。 判断结果是真的话,就执行,可能是一条语句, 也可能是很多条语句,如果是很多条语句的话, 就一定要用大括号括起来。 执行完以后,再执行,执行完再执行的判断, 然后再根据判断的结果退出循环或执行,等等。,输入整数n,输出 1+2+3+n 的结果。,输入一个小于100的整数n,然后输入 n个整数。请将这n个整数逆序输出。,#include int main() int a100,i,n; scanf(“%d“, ,int a100; 声明了100个整数,它们分别是 a0、a1、a2、a99 注意:C+ 数组的下标是从0开始的。,