跟紫皮书走一遍|第一章

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:结果符合预期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值