c语言篇
1-1算术表达式
1.乘除法的输出:
printf("%0.1f",8.0/5.0)
结果则为:1.6
printf("%0.1f",8/5)
结果则为:0.0
printf("%d",8.0/5.0)
结果为一串地址
说明:8.0和5.0作为浮点数,如果以%d形式将结果输出或者反过来,结果都会产生错误。
2.加减法的输出
整数 - 浮点数 = 整数;
printf("%f",5-0.1)
输出:4.900000
3.数据类型转换
这里只强调隐式转换
- 算术转换:
long double > double > float > unsigned long long > long > long > unsigned long > long > unsigned int > int
1.如果 long 和 int 大小相同,则 unsigned int 的等级应位于 long 之上
2.char 和 short 并没有出现于这个等级列表,是因为它们应该已经被升级成了 int 或者 unsigned int
3.在任何涉及两种数据类型的操作中,它们之间等级较低的类型会被转换成等级较高的类型
- 赋值转换:
赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。
- 输出转换
用printf函数以指定格式输出时,当要输出的类型与输出格式不符时,便自动进行类型转换。
1.较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则转换时将出错
2.输出的数据类型与输出格式不符时常常发生错误(如上面的例子)
1-2变量及输入
紫皮书内只提示算法竞赛中需要注意的一些事项
1.竞赛程序只执行:读入数据、计算结果和打印输出。故不要打印提示信息,也无需打印输出后的getchar()等函数。
2.尽量用const关键字声明常数,表示一个此常数量不可变。
1-3顺序结构
三位数反转:
int main(){
int n;
scanf("%d",&n);
m = (n%10)*100 + (n/10%10)*10 +(n/100); //原百分位,十分位,个位
printf("%03d",m);
1-4分支结构
1-5注解与习题
1.数据类型实验:
- 输入表达式111111*1111111
结果:编译器提示超出整型范围 - 表达式1.0/0.0
结果:inf - 表达式0.0/0.0
结果:nan - 表达式1/0
结果:编译器警告
2.输入输出实验
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d\n",a,b);
}
1.同行输入数字:结果符合预期
2.换行输入数字:结果符合预期
3.两数之间输入空格或TAB:结果符合预期