程序设计实践 笔记

14 篇文章 0 订阅
13 篇文章 1 订阅

异或运算(a^b)的应用

2n+1个数中,n个数都出现了两次,怎么找剩下那一个数?所有数进行异或运算即可。利用性质a^b^b=a。


关于while循环中的~scanf()

可以经常在ACM代码中看到 while(~scanf("%d",&n)){ } 这样的代码,意思是在读到输入结尾时循环也结束。

一般在读到输入流结尾时,scanf返回的是EOF。

EOF是在头文件stdio.h中定义的常量,一般为-1。

-1 的原码是10000001,反码是1111110,补码是11111111。复习一下,正数的原码、反码、补码都是一样的;负数的原码是符号位为1,反码是(对原码)符号位不变、其余位取反,补码是(对原码)符号位不变、其余位取反、末位加1.

~EOF则是对EOF进行按位取反操作,则为00000000。所以while条件不满足,循环结束。

注意Windows中cmd里用Ctrl+Z代表回车。


ACM基础——OJ上的Java代码提交规范

1、输入

Scanner cin = new Scanner(System.in);
	while(cin.hasNext()){
			int a = cin.nextInt();
			int b = cin.nextInt();
		}

2、类名

public class Main {}

其他Java注意事项见PTA中提交Java程序的一些套路


C语言数组下标太大怎么办?

当需要数组分配很大的空间,且为局部变量时,有可能会出现执行出错的情况。
这是因为,对于每个进程/线程,栈空间大小是有限的,而局部变量的内存是在栈上分配的,如果局部变量过大,则会出现分配失败的情况。
要解决这个问题,有两种方式:

1 将数组定义为全局变量。
全局变量分配时,会分配在全局变量空间,不受栈空间大小影响。
这种方法的好处是,代码简单,只需要将定义从函数内移动到函数外即可,其它不需要改变。
缺点是,在程序运行全程均需要占用该部分内存,很多时候这是一种浪费。

2 使用动态内存空间。
通过malloc,calloc, zalloc等函数,可以分配动态内存空间。该空间会分配在堆上,同样不受栈空间的限制。
不过这种方法使用后,必须通过free函数调用释放空间。
该方法的好处是,用后释放,不继续占用。
缺点是,代码复杂,必须保存原始分配空间的首地址,并对其释放,否则会出现内存泄露。


目 录 译者序 前言 第1章 风格 1 1.1 名字 2 1.2 表达式和语句 4 1.3 一致性和习惯用法 8 1.4 函数宏 14 1.5 神秘的数 15 1.6 注释 18 1.7 为何对此费心 22 第2章 算法与数据结构 23 2.1 检索 23 2.2 排序 25 2.3 库 27 2.4 一个Java快速排序 29 2.5 大O记法 31 2.6 可增长数组 33 2.7 表 35 2.8 树 39 2.9 散列表 43 2.10 小结 46 第3章 设计与实现 48 3.1 马尔可夫链算法 48 3.2 数据结构的选择 50 3.3 在C构造数据结构 51 3.4 生成输出 54 3.5 Java 56 3.6 C++ 59 3.7 Awk和Perl 61 3.8 性能 63 3.9 经验教训 64 第4章 界面 67 4.1 逗号分隔的值 67 4.2 一个原型库 69 4.3 为别人用的库 72 4.4 C++实现 79 4.5 界面原则 82 4.6 资源管理 84 4.7 终止、重试或失败 86 4.8 用户界面 90 第5章 排错 93 5.1 排错系统 94 5.2 好线索,简单错误 95 5.3 无线索,难办的错误 98 5.4 最后的手段 101 5.5 不可重现的错误 103 5.6 排错工具 105 5.7 其他人的程序错误 107 5.8 小结 108 第6章 测试 110 6.1 在编码过程测试 110 6.2 系统化测试 114 6.3 测试自动化 118 6.4 测试台 120 6.5 应力测试 123 6.6 测试秘诀 125 6.7 谁来测试 126 6.8 测试马尔可夫程序 127 6.9 小结 129 第7章 性能 130 7.1 瓶颈 130 7.2 计时和轮廓 135 7.3 加速策略 138 7.4 代码调整 140 7.5 空间效率 144 7.6 估计 145 7.7 小结 147 第8章 可移植性 149 8.1 语言 149 8.2 头文件和库 154 8.3 程序组织 156 8.4 隔离 159 8.5 数据交换 160 8.6 字节序 161 8.7 可移植性和升级 164 8.8 国际化 165 8.9 小结 167 第9章 记法 169 9.1 数据格式 169 9.2 正则表达式 174 9.3 可编程工具 180 9.4 解释器、编译器和虚拟机 182 9.5 写程序的程序 186 9.6 用宏生成代码 189 9.7 运行编译 190 后记 195 附录:规则汇编 197 索引 200
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值