ch01 程序设计入门
const double pi = acos(-1.0);
提示:
- 不要加sysytem pause或者get插入()让程序按任意键退出
- 一般情况下,你的程序不能直接读取键盘和控制屏幕:不要在竞赛中使用getch() getche() gotoxy() clrscr()函数
- 不使用conio.h,脑韩getch() clrscr()等函数
- 竞赛中,输出应以回车符结束,包括最后一行,输出的两个数或者字符串之间应该以单个空格隔开
- 尽量使用const关键字声明常数
ch02 循环结构
提示:
- 如果有多个并列,情况不交叉的条件需要一一处理,可以用else if语句
- 建议尽量缩短变量的定义范围,例如,在for循环的初始化部分定义循环变量
- 浮点运算可能存在误差,注意浮点误差
- c99没有规定int类型的确切大小,但是在竞赛片平台中,int都是32位的,及-2146483648~2147283647
- 可以使用time。h和clock()函数获得程序运行时间,常数CLOCKS_PER_SEC与操作系统有关,不要直接使用clock()的返回值,而应该总是除以CLOCKS_PER_SEC
- 上述位避免输入时间使用技巧“管道”,windows命令行执行 echo 10(输入)|abc(程序名称)
- 两个小工具:输出中间结果和计时工具
算法竞赛中的输入输出
- 变量在未赋值之前的值是不确定的,特别的他不一定等于0
用文件:把输入输出保存在文件中,使用文件的最简单的方法是使用输入输出重定向,需要在main函数的入口处加
freoprn("input.txt","r",stdin);
freopen("output.txt","w",stdout);
注意:事实上,不只是scanf和printf,所有读键盘输入,写屏幕输出的函数都将改用文件。(竞赛前看相关读写规定,使用文件时注意文件名和路径)
- 主义在多数据的题目中,某些变量没有重置会影响到下组数据的求解
- 当嵌套的两个代码块中有同名变量时,内层的变量会屏蔽外层变量,有时候会引起十分隐蔽的错误
ch03 数组和字符串
-
比较大的数组应尽量生命在main()函数外,否则程序无法进行
-
a复制k个元素到数组b memcpy(b,a,sizeof(int)*k) 记得包含头文件strig。h 如果全部复制到b中 memcpy(b,a,sizeof(a))
-
字符串本质是数组。赋值 比较 链接 strcpy strcmp strcat 记得不能用= == +等运算符
-
输入字符串的方法:scanf("%s"),但是碰到空格和tab会停下来:
解决方法:
(1)fgetc(fin)读取一个打开的文件fin,读取一个字符,然后返回一个int值。读取字符时应该检查它不是EOF后再将其转换成char值。
从标准输入读取一个字符可以用getchar 等价于fgetc(stdin)
以为不同os的回车换行不一样,用fgetc和getchar时,应避免写与操作系统相关的程序
(2)fgets(buf,maxn,fin)读取完整的一行放在字符数组buf中 -
定义常量数组能简化代码,定义时候无须指明大小,编译器会计算
ch03 函数和递归
- c语言用调用栈(call stack)来描述函数之间的调用关系
调用栈由stack frame组成,每个frame对应一个未运行完的函数
网友评论