随笔分类 - c++/c
摘要:问题:在一个二维数组中,每行的元素从左到右是递增的,每列元素从上到下是递增的。写一个函数,查找一给定的元素是否在此数组中输入:一个二维数组,和一个待查找的数输出:待查找的数在数组中输出“YES",否则输出”NO"原始思路:最简单思路就是暴力搜索,遍历一遍数组中的元素时间复杂度为O(n2)。但是这样就没有用问题的已知条件(从左到右、从上到下递增),因此不是个好的解法改进1:从第一行开始找,找到待查元素大的,如果还没找到,接着从第二行开始找,直到找到或到最后一个元素为止(如图),但是如果带查找的元素在最后,还得遍历到最后,时间复杂度还是O(n2) 改进2:上来在随机在里面挑一个
阅读全文
摘要:问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢?答:printf的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。参见问题15.2。对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。下表列出了printf和scanf对
阅读全文
摘要:先从一个小程序谈起:#include <iostream>#include <string>using namespace std;int main(){ string s1; cin >> s1; cout << s1 << endl; return 0;}看看测试结果:当输入字串“hello”时,输出是“hello”, 正确。但是下面当输入“hello, nihao"时,输出确实”hello,"把空格后面的东西全部忽略掉了。读入规则是这样的:读取并忽略开头所有的空白字符(如空格、换行符、制表符)读取字符直到空白
阅读全文
摘要:int a;while (a != 0) cout << a << endl;之前对上面这上面的理解很肤浅,认为输出cout就是个输出标志,并且有时候忘记是"<<" 还是">>"。现在理解稍微深了些:cin 、 cout 只是个对象而已 C++中输入、输出由标准库iostream库提供的。iostream库的基础是两个命名为istream和ostream的类型,分别表示输入流和输出流。cin是istream类型的对象,cout是ostream类型的对象。<< 、 >> 是重定向符 上
阅读全文
摘要:C/C++产生随机数用到两个函数rand() 和 srand()一. 不指定范围产生随机数 用到函数rand(),函数原型为int rand(),无参数。此时会产生一个介于0~RAND_MAX间的整数。RAND_MAX的大小可以查看,在include文件夹(linux在usr目录、windows在安装目录)的stdlib.h可以看到,linux下其值为2147483647(),其值与具体系统有关。参考代码:#include#includeint main(){ int i; for(i=0; i#include#define Random(x) (rand() %...
阅读全文
摘要:一个最简单的队列初始化操作案例:编译可以通过:但是运行程序时,会出现段错误:Segmentation fault分析:主函数中声明了队列的一个指针(只是声明,并未实际分配地址空间),调用初始化函数queue_init(*lk),在函数中直接利用指针进行了操作,在一个没有空间的空间里进行操作犹如空中楼阁。导致内存错误!改正如下(分配内存空间)即可:注意:queueLk *lk = NULL;不行,指向空,还是没内存,是个野指针。
阅读全文
摘要:char *a = "hello" 中的a是指向第一个字符‘a'的一个指针char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针但二者并不相同:看实例:把两个字符串相加:结果:对比:结果:把字符串加到指针所指的字串上去,出现段错误,本质原因:*d="0123456789"存放在常量区,是无法修的。而数组是存放在栈中,是可以修改的。两者区别如下:一. ”读“ ”写“ 能力char *a = "abcd"; 此时"abcd"存放在常量区。通过指针只可以访问字符
阅读全文

浙公网安备 33010602011771号