Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 数值转换问题

回复:
user: user-1
content: 整数部分和小数部分分开处理 整数部分迭代进行除2的运算  小数部分迭代的进行乘2的运算 关于如何用栈处理数制转换可以看一下严蔚敏的那本数据结构关于栈那块的内容

user: user-2
content: 引用 2 楼 Benjaminzhou93 的回复:14.14 14 / 2 = 7 ... 0 把 0 压栈 7  / 2 = 3 ... 1 把 1 压栈 3  / 2 = 1 ... 1 把 1 压栈 1  / 2 = 0 ... 1 把 1 压栈  依次出栈得出整数部分二进制数 1110  0.14 * 2 = 0.28 得出二进制小数第 1 位 0 0.28 * 2 = 0.56 得出二进制小数第 2 位 0 0.56 * 2 = 1.12 得出二进制小数第 3 位 1 0.12 * 2 = 0.24 得出二进制小数第 4 位 0 0.48 * 2 = 0.96 得出二进制小数第 5 位 0 0.96 * 2 = 1.92 得出二进制小数第 6 位 1 0.92 * 2 = 0.84 得出二进制小数第 7 位 0 0.84 * 2 = 0.68 得出二进制小数第 8 位 0 0.68 * 2 = 1.36 得出二进制小数第 9 位 1 。。。  需要精度更高的继续计算1110.001001001。。。。  小学体育老师教的（数学老师兼职体育）请勿见怪

user: user-2
content: 14.14 14 / 2 = 7 ... 0 把 0 压栈 7  / 2 = 3 ... 1 把 1 压栈 3  / 2 = 1 ... 1 把 1 压栈 1  / 2 = 0 ... 1 把 1 压栈  依次出栈得出整数部分二进制数 1110  0.14 * 2 = 0.28 得出二进制小数第 1 位 0 0.28 * 2 = 0.56 得出二进制小数第 2 位 0 0.56 * 2 = 1.02 得出二进制小数第 3 位 1 0.02 * 2 = 0.04 得出二进制小数第 4 位 0 0.04 * 2 = 0.08 得出二进制小数第 5 位 0 0.08 * 2 = 0.16 得出二进制小数第 6 位 0 0.16 * 2 = 0.32 得出二进制小数第 7 位 0 0.32 * 2 = 0.64 得出二进制小数第 8 位 0 0.64 * 2 = 1.28 得出二进制小数第 9 位 1 。。。  需要精度更高的继续计算1110.001000001。。。。
user-0 提问: 不会对不起

回复:
user: user-1
content: 引用 6 楼 max_min_ 的回复:学习那个光谷神奇， 去超市捏方便面!关谷神奇吧，版主大人？

user: user-2
content: 学习那个光谷神奇， 去超市捏方便面!

user: user-3

user: user-4

user: user-5
content: 神马情况？～

user: user-6

user: user-7
content: 不明觉厉。。
user-0 提问: 今天我们学校校园招聘的题目，求给个标准的带有解释的代码，谢谢！

回复:
user: user-1
content: 数据结构里面有讲，翻翻书吧

user: user-2
content: 搜一搜就有了

user: user-3
content: 找字串的算法吧，我记得数据结构的书应该有讲。

user: user-4
content: 数据结构与算法上没讲？

user: user-5
content: 好吧  沙发坐等答案  求知识啊
user-0 提问: 数制转换

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-2
content: 问题呢？？？
user-0 提问: 杭电2092 关于整数解得 不知道怎么错的

回复:
user: user-1
content: 如下修改可AC #include<stdio.h> #include<math.h> int main() {   int a,b,t;   int n;//double n;   while(scanf("%d%d",&a,&b)&&!(a==0&&b==0))//while(scanf("%d%d",&a,&b)&&a>-10000&&a<10000&&b>-10000&&b<10000&&!(a==0&&b==0))   {     t=a*a-4*b;     n=(int)sqrt((double)t);//n=sqrt((double)t);     if(n<0||t!=(n*n)||(a+n)%2==1)//if(t<0||n!=(int)n||(a+(int)n)%2==1)       printf("No\n");     else       printf("Yes\n");   }   return 0; }

user: user-2
content: 没说a是正数，试试a+(int)n)%2!=0...

user: user-3
content: 晕啊   小菜鸟表示看不懂

user: user-4
content: 引用数学解法： 根据一元二次方程根和系数的关系以及根公式：  求根公式起始就是：  可以认为你所求的x,y就是两个根，两根之和以及两根乘积为已知，带入以上公式，就能得到答案。 无论答案是整数，还是实数，甚至是虚数都没有问题。 这是用word写的？ 是word写的。

user: user-5
content: 你输入3组样例，能得到正确结果么？不能的话单步调试

user: user-6
content: 引用 3 楼 KenZhang1031 的回复:数学解法： 根据一元二次方程根和系数的关系以及根公式：  求根公式起始就是：  可以认为你所求的x,y就是两个根，两根之和以及两根乘积为已知，带入以上公式，就能得到答案。 无论答案是整数，还是实数，甚至是虚数都没有问题。 这是用word写的？

user: user-4
content: 数学解法： 根据一元二次方程根和系数的关系以及根公式：  求根公式起始就是：  可以认为你所求的x,y就是两个根，两根之和以及两根乘积为已知，带入以上公式，就能得到答案。 无论答案是整数，还是实数，甚至是虚数都没有问题。

user: user-6
content: 引用 1 楼 Benjaminzhou93 的回复:n + m = x n * m = y  n(x-n) = y  -n^2 + nx -y = 0 deta = x^2 - 4( -1 * (-y)) // 大于等于0时有解 deta = x^2 -4y  因解为整数得 (-x + deta^1/2) / 2y 为整数 或 (-x - deta^1/2) / 2y 为整数 a是-1呵呵

user: user-6
content: n + m = x n * m = y  n(x-n) = y  -n^2 + nx -y = 0 deta = x^2 - 4( -1 * (-y)) // 大于等于0时有解 deta = x^2 -4y  因解为整数得 (-x + deta^1/2) / 2y 为整数 或 (-x - deta^1/2) / 2y 为整数
user-0 提问: c语言中很简单的问题。。   关于结构体数组成员在调用函数如何比较大小

回复:
user: user-1
content: 楼上的有用，拿结构体中的一个成员作为对比对象，这样也行。

user: user-2
content: struct foo { int a; int b; };  foo a[10];  for (int i = 0; i < 9; i++) { if (a[i].a > a[i + 1].a) { foo tmp; tmp = a[i]; a[i] = a[i + 1]; a[i + 1] = tmp; } }

user: user-3
content: 楼主先动手，我们来帮手。

user: user-4
content: 整数怎么排序，结构也这么做，就成了，只是比较方式不同而已。

user: user-4
content: 就是个如何比较的问题，会比较就会排序了，你这又不能，基数排序。

user: user-5
content: 自己先想想撒，写出个带bug的程序也好啊，哥们再帮你调试，不能就两字"大神"就行把问题解决撒。。 而且这是简单的问题~~~~

user: user-0
content: 大神

user: user-6
content: 如何做不到？

user: user-7
content: 和一般的数组冒泡排序一样啊，照着做就行了，先写下试试

user: user-8
content: 按照你的业务逻辑，定义一个大小的概念。

user: user-9
content: 很简单的问题就自己动手做一下吧，要不然你还是问“很简单”的问题

user: user-4
content: 这么说吧: 1）先实现一个整数排序，冒泡，选择，插入。。。。。任何一种。 2）然后把数据类型，替换为结构 把 数据比较用的 < ,<=，>,>=,== != 等运算符; 替换为一个，比较函数，效果等价于，那些运算符。 就可以简单排序了，  3）进一步，改成通过函数指针，比较。 4）再进一步，函数指针，当成参数传递。  至于 C++，可以用模板，functor ----函数对象，实现比较；  如果可以使用库函数，只需要实现比较函数既可以了。
user-0 提问: 如何定义成宏？

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:CComboBox * pCombo = (CComboBox *)this->GetDlgItem(IDC_COMBOPARAM1);  int index = pCombo->GetCurSel();  int *i2pv[]={&EFF,&FF,&I1,&IM,&ISC,&PM,&VM,&VOC};  m_min1 = m_item.item[*i2pv[index%8]][MIN];  m_max1 = m_item.item[*i2pv[index%8]][MAX];   是这样定义的 enum ITEM{ISC=0,VOC,PM,FF,I1,EFF,IM,VM,RS,RSH,IREV,ENVTEMP,SURFTEMP};

user: user-1
content: CComboBox * pCombo = (CComboBox *)this->GetDlgItem(IDC_COMBOPARAM1);  int index = pCombo->GetCurSel();  int *i2pv[]={&EFF,&FF,&I1,&IM,&ISC,&PM,&VM,&VOC};  m_min1 = m_item.item[*i2pv[index%8]][MIN];  m_max1 = m_item.item[*i2pv[index%8]][MAX];

user: user-2
content: 直接用数组index，比如直接这样：  m_min1 = m_item.item[index][MIN];  m_max1 = m_item.item[index][MAX];  也就是让你的index和什么VOC VM对应起来就可以了

user: user-1
content: //如果这样定义： int EFF,FF,I1,IM,ISC,PM,VM,VOC; //那么 CComboBox * pCombo = (CComboBox *)this->GetDlgItem(IDC_COMBOPARAM1); int index = pCombo->GetCurSel(); int *i2pv[]={&EFF,&FF,&I1,&IM,&ISC,&PM,&VM,&VOC}; m_min1 = m_item.item[*i2pv[index%8]][MIN]; m_max1 = m_item.item[*i2pv[index%8]][MAX];  //-------------------------------------------------------------------- //如果这样定义： enum ITEM{ISC=0,VOC,PM,FF,I1,EFF,IM,VM,RS,RSH,IREV,ENVTEMP,SURFTEMP}; //            0   1  2  3  4   5  6  7  8   9   10      11       12 //那么 CComboBox * pCombo = (CComboBox *)this->GetDlgItem(IDC_COMBOPARAM1); int index = pCombo->GetCurSel(); //          EFF  FF  I1  IM  ISC  PM  VM  VOC int i2e[]={   5,  3,  4,  6,   0,  2,  7,   1}; m_min1 = m_item.item[ i2e [index%8]][MIN]; m_max1 = m_item.item[ i2e [index%8]][MAX];

user: user-2
content: 引用 3 楼 u013251402 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] CComboBox * pCombo = (CComboBox *)this->GetDlgItem(IDC_COMBOPARAM1);  int index = pCombo->GetCurSel();  int *i2pv[]={&EFF,&FF,&I1,&IM,&ISC,&PM,&VM,&VOC};  m_min1 = m_item.item[*i2pv[index%8]][MIN];  m_max1 = m_item.item[*i2pv[index%8]][MAX];   是这样定义的 enum ITEM{ISC=0,VOC,PM,FF,I1,EFF,IM,VM,RS,RSH,IREV,ENVTEMP,SURFTEMP};[/quote] 这样不是更加简单了，你只要和case的index对应上就行了
user-0 提问: C语言 实现http代理 访问上网

回复:
user: user-1
content: 在哪下C语言安装包？

user: user-2
content: 引用 1 楼 truexf 的回复:hook winsock api 引用 3 楼 u013241177 的回复:Libevent也可以很多库都可以实现  ++

user: user-3
content: 学习c中。。。。。

user: user-4
content: Libevent也可以很多库都可以实现

user: user-5
content: http://acme.com/software/micro_proxy/

user: user-6
content: hook winsock api

user: user-0
content: 引用 4 楼 user-7 的回复:收到客户端请求，发给下游，收到下游应答，回给客户端。 能在具体一点么，主要是 我想在本地写一个 代理服务器  采用C/S模式，服务器端监听接受上网数据，之后发给客户端，客户端在转发到外网上去

user: user-7
content: 收到客户端请求，发给下游，收到下游应答，回给客户端。
user-0 提问: 为什么程序之只能运行一般，就自动退出

回复:
user: user-0
content: 引用 7 楼 zhuobattle 的回复:你要消耗一个回车，否则下面的输入自然自动结束了。代码如上，添加一个getchar()按照你的成功了，我动了，谢谢你

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。懂了，解决了。谢谢你

user: user-0
content: 引用 6 楼 zhuobattle 的回复: int main() { 	char str1; 	char str2[10]; 	puts("Please enter a character "); 	str1=getchar();        //获取字符 	getchar();//消耗一个回车,注意添加这行。 	putchar(str1);//输出获得的字符 	puts("Please enter string");//        提示输入字符串 	gets_s(str2,10);                 //从输入流中抓取字符串 	puts(str2);               //输出获得的字符串 	return 0; } 我明白了，可是为什么我的输入的字符会输出2次呢，那个X我只输出可一次

user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-2
content: 你要消耗一个回车，否则下面的输入自然自动结束了。代码如上，添加一个getchar()

user: user-2
content: int main() { 	char str1; 	char str2[10]; 	puts("Please enter a character "); 	str1=getchar();        //获取字符 	getchar();//消耗一个回车,注意添加这行。 	putchar(str1);//输出获得的字符 	puts("Please enter string");//        提示输入字符串 	gets_s(str2,10);                 //从输入流中抓取字符串 	puts(str2);               //输出获得的字符串 	return 0; }

user: user-2
content: 这个程序实际上不是crash

user: user-3
content: 引用 3 楼 u013163178 的回复:引用 1 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。在调试的时候就出现这个提示输入  那你就输入啊 继续跟踪

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。在调试的时候就出现这个提示输入

user: user-4
content: char str2[10]; gets_s(str2,10);

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
user-0 提问: C语言中怎么把已经存入TXT中的信息在程序开始运行时通过语句输出。

回复:
user: user-1
content: FILE* FP;

user: user-0
content: 引用 3 楼 user-3 的回复:写和读不差不多嘛，呵呵，会写文件就会读文件啦  嗯  现在会了

user: user-0
content: 引用 楼主 u013173634 的回复:现在再学C语言，遍一个学生管理系统。 输入程序运行输入数据都保存到txt文本里了，但是我想再程序开始运行还没输入数据前把txt已有的数据输出。  这个是什么意思啊？  我也是在学  很多不是很懂，能说明白点吗？

user: user-2
content: system("type xxx.txt&pause"); ?

user: user-3
content: 写和读不差不多嘛，呵呵，会写文件就会读文件啦
user-0 提问: 有没有专做网站验证码识别破解的同学

回复:
user: user-0
content: 引用 2 楼 user-2 的回复:一般网站都会有几套验证码，要破解的话肯定要有针对性，当然，万能的人工破解可以搞定一切。  啥人工破解？

user: user-1
content: 图像识别啊，还有就是人工代答。网游中很多

user: user-2
content: 一般网站都会有几套验证码，要破解的话肯定要有针对性，当然，万能的人工破解可以搞定一切。
user-0 提问: 怎样 编写一个程序 可以使之读出随机文件

回复:
user: user-1
content: 那就一起读出来然后随机访问啊      读硬盘上的东西是磁头在扫磁片，你也可以用手把磁头拿起来 然后放到一个你想放的位置。。。 如果你不怕你的硬盘被你弄坏了的话

user: user-2
content: 洗牌算法参考下面：#include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b,t; int c,j; void main() {     srand(time(NULL));     printf("shuffle 0..n-1 demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=0;i<n;i++) d[i]=i;/* 填写0～n-1 */             for (i=n;i>0;i--) {/* 打乱0～n-1 */                 a=i-1;b=rand()%i;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=0;i<n;i++) printf("%d",d[i]);             printf("\n");         }     }     printf("shuffle 1..n demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */             for (i=n;i>1;i--) {/* 打乱1～n */                 a=i;b=rand()%i+1;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=1;i<=n;i++) printf("%d",d[i]);             printf("\n");         }     } }

user: user-3
content: 文本模式得按序读入，起码要读要最大的随机编码。数据量大的话考虑用2进制模式，自己制定一个格式头，记录每笔数据的偏离值和大小，那么就可以随机读取...

user: user-4
content: 把你的程序代码贴出来吧. 你的思路没有问题. 顺序读取题目到数据t中. 然后再随机出索引读取.
user-0 提问: MFC编程，输出的问题

回复:
user: user-1
content: 你可以使用一个Lable控件  这样免得重绘了 你如果用当前这个方法的话需要使用重绘将之前显示的文本给覆盖掉 然后再显示出当前你想显示的文本 找一下有没有Label控件 用那个的话可以更容易一些   推荐看一下 孙鑫的 《VC++深入详解》 我当时就是看这本书 很多东西讲的还是很细的

user: user-2
content: 就是OnDraw,其他对话框只是把显示的数据传给view
user-0 提问: 如何对编号、单价等排序啊？用冒泡等方法

回复:
user: user-1
content: 简单的冒泡还会？

user: user-2
content: 这也行?  冒泡排序是最简单最容易实现的排序方法了吧  你是数据结构不懂还是排序算法不会 看这样应该就是进行简单的数组排序吧 int i = 0; int j = 0;  for (i = 0; i < len - 1; ++i) {     for (j = i + 1; j < len; ++j)     {         /* 如果是对编号的话 用strcmp 判断是正还是负 从而得出谁大谁小 */         if (sequenList.r[i].price > sequenList.r[j].price)         {                交换两者          }     } }   少年不要做伸手党 https://www.google.com.hk/search?q=%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F&oq=%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F&aqs=chrome..69i57j69i60l4j0.2661j0&sourceid=chrome&espv=210&es_sm=122&ie=UTF-8 一搜一大片 要学会自己解决问题
user-0 提问: 网络接受jpg，byte数据，如何存入本地路径？

回复:
user: user-1
content: 引用 4 楼 lwb910928 的回复:能具体点吗 ？ 不是太懂啊 ！有人好像说还是要有格式的。 关于图像是存在内部的一些字节决定了图像怎么被解析显示的问题 但是因为你在接受和存储的时候和原图像的内容是完全一样的 所以并不会破坏掉原来图像内部的整体格式 所以存储后照样很好的显示 所以你无需考虑图像内容的格式是什么样的

user: user-1
content: 引用 4 楼 lwb910928 的回复:能具体点吗 ？ 不是太懂啊 ！有人好像说还是要有格式的。 格式的话你可以根据接收文件的后缀名来决定你在本地存储的文件的后缀名 这样你在写入本地文件的时候使用二进制方式写入 这样图像之类的文件也都是没有任何问题的

user: user-0
content: 能具体点吗 ？ 不是太懂啊 ！有人好像说还是要有格式的。

user: user-1
content: 文件保存 就和你在本地是的文件操作是一样的 你在本地打开一个文件读入然后存入另一个文件 怎么做这个就怎么做 只是这个接受的文件是从socket读取的数据而已 并且socket也是一个文件描述符 所以当你开始接受网络数据时打开一个文件 然后将接受到的数据写入到你打开的那个文件 在接受完成后 关闭那个文件就OK了

user: user-2
content: CreateFile WriteFile CloseHandle 不用谢

user: user-3
content: 写文件保存，不谢。
user-0 提问: 为什么输出语句放在选择语句外和内得到结果不一样？

回复:
user: user-1
content: (float)(-b)/（2*a），试试这个吧

user: user-2
content: 请判断scanf函数的返回值！

user: user-3
content: 这些要学会自己调试，值不一样，你就将不同情况下，用于计算的各变量的值打印出来，问题就显而易见了吧。

user: user-4
content: 格式字符串和实际数据不匹配。%f的话，后面的整型数据要转成float型。
user-0 提问: 为什么这样可以输出 这样不可以输出？

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-2
content: int型如果除法，小于1会直接变成0

user: user-3
content: (float)(-b)/(2*a)，试试这个

user: user-4
content: printf("%.2f",-b/(float)(2*a));

user: user-5
content: 整形1/2=0，%f格式对应浮点不能用整形参数，改下printf("%.2f", -b/(2.0*a));

user: user-6
content: 先把a、b、c转成float然后再试一下，

user: user-0
content: 真奇怪，程序放在选择语句前，都是0.0 ，无奈。。。

user: user-0
content: 引用 1 楼 user-7 的回复:请养成自己debug的习惯。你应当先自己做一下基本的查错再来问。 你可以把a b c先print出来，看看你实际上读进去的是什么。 读进去是输进去的a,b,c的值，但是就是0.00我自己试了强制转换也没用

user: user-7
content: 请养成自己debug的习惯。你应当先自己做一下基本的查错再来问。 你可以把a b c先print出来，看看你实际上读进去的是什么。
user-0 提问: access函数在windows下对网络映射驱动器无效?

回复:
user: user-0
content: 好像没人回答了，结了

user: user-1
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。

user: user-0
content: 仔细测试了下发现调用StartServiceCtrlDispatcher注册到windows服务上就有这个问题
user-0 提问: 伟福仿真器keil c编译器，程序某些行不被编译和执行（急）

回复:
user: user-0
content: 实际上语句可能已经执行了，但是执行的光标没有指示到正确的行，而是指到了别的行，所以不要看光标，要看具体的实际变量是不是变了，就是这样，一开始结果不正确，就误以为是某些行看上去没有被编译，单步执行也不执行导致的，其实是程序中用到的外部数据空间定义的太大，超了导致的。

user: user-1
content: 你单步跟踪看到的不被执行？我遇到过这样的情况，某些IDE会有类似的问题（比如AVR studio和IAR），实际上语句可能已经执行了，但是执行的光标没有指示到正确的行，而是指到了别的行，所以不要看光标，要看具体的实际变量是不是变了。还有，发生这样的情况，通常是 1、用了中文的字符，比如中文输入法的情况下打了换行或空格这类不易发现的字符。注意要用ascii字符输入。 2、调试时，优化选项不要选优化。否则优化情况下，单步执行的指针你会觉得跳来跳去，根本看不懂。

user: user-0
content: 编译结果如图

user: user-2
content: 先用软件仿真试试看,如果可以再用硬件仿真
user-0 提问: UART丢帧和半帧数据如何处理？

回复:
user: user-1
content: 通讯要可靠，协议中要采用双向的通讯协议，比如A向B发数据，那么B要有应答，通过这个应答，A可以知道是否成功，不成功则需要重发。

user: user-2
content: 取决于双方所约定的协议，参考http://en.wikipedia.org/wiki/XMODEM  引用 楼主 jiemo1123 的回复:设备A向设备B通过UART链接，A向B发送数据，如果B收到的不是完整的一帧数据，那要怎么处理？直接抛弃？万一一帧都丢了，而B都不知道，又该如何处理？
user-0 提问: <<运算的规则是什么

回复:
user: user-1
content: C/C++标准里都写了，对于循环超过类型本身位数的移位，都是实现定义的。 Intel是这样取模。我记得PowerPC好像不是这样。  引用 6 楼 u013194740 的回复:[quote=引用 3 楼 KenZhang1031 的回复:] 引用1 << 32 是常量，编译时1和32都被当成int,编译时就被计算成为0了。 1 << x无法在编译前确定，是被采用指令shl reg cl来执行的，但是intel的汇编对shl有规定的。 引用 The SAL and SHL instructions perform the same operation (see Figure 7-6). They shift the source operand left by from 1 to 31 bit positions. 所以当移位超过31位后，结果可能会是未知的。  试了试shl和rol没区别啊，一会再看看  很久没写汇编了，不循环左移的指令是还要设置什么啊 直接上图最清楚。    谢谢了，我的意思是，超过32位时，shl其实被当做rol来处理了  现在就是只用汇编，如果超过32位，怎么不循环左移呢，是不是只能shl前自己判断啊[/quote] 并不是循环左移，SHL永远都补0，不会把头部再补过来。 The shift is repeated the number of times indicated by the second operand, which is either an immediate number or the contents of the CL register. To reduce the maximum execution time, the 80386 does not allow shift counts greater than 31. If a shift count greater than 31 is attempted, only the bottom five bits of the shift count are used. (The 8086 uses all eight bits of the shift count.) x86的实现决定不允许超过31位的左移,实际上移动值会和32取模。

user: user-0
content: 引用 3 楼 KenZhang1031 的回复:引用1 << 32 是常量，编译时1和32都被当成int,编译时就被计算成为0了。 1 << x无法在编译前确定，是被采用指令shl reg cl来执行的，但是intel的汇编对shl有规定的。 引用 The SAL and SHL instructions perform the same operation (see Figure 7-6). They shift the source operand left by from 1 to 31 bit positions. 所以当移位超过31位后，结果可能会是未知的。  试了试shl和rol没区别啊，一会再看看  很久没写汇编了，不循环左移的指令是还要设置什么啊 直接上图最清楚。    谢谢了，我的意思是，超过32位时，shl其实被当做rol来处理了  现在就是只用汇编，如果超过32位，怎么不循环左移呢，是不是只能shl前自己判断啊

user: user-2
content: 引用 3 楼 KenZhang1031 的回复:引用1 << 32 是常量，编译时1和32都被当成int,编译时就被计算成为0了。 1 << x无法在编译前确定，是被采用指令shl reg cl来执行的，但是intel的汇编对shl有规定的。 引用 The SAL and SHL instructions perform the same operation (see Figure 7-6). They shift the source operand left by from 1 to 31 bit positions. 所以当移位超过31位后，结果可能会是未知的。  试了试shl和rol没区别啊，一会再看看   很久没写汇编了，不循环左移的指令是还要设置什么啊 直接上图最清楚。   顶

user: user-3
content: 不懂，学习一下

user: user-4
content: 引用1 << 32 是常量，编译时1和32都被当成int,编译时就被计算成为0了。 1 << x无法在编译前确定，是被采用指令shl reg cl来执行的，但是intel的汇编对shl有规定的。 引用 The SAL and SHL instructions perform the same operation (see Figure 7-6). They shift the source operand left by from 1 to 31 bit positions. 所以当移位超过31位后，结果可能会是未知的。  试了试shl和rol没区别啊，一会再看看  很久没写汇编了，不循环左移的指令是还要设置什么啊 直接上图最清楚。

user: user-5
content: 超过32位时，结果是取决于编译器+cpu的，不要结果做任何假设。

user: user-6
content: 引用 楼主 u013194740 的回复:int y = 1 << 32; y是0  int x = 32; int y = 1 << x; y是1 如果考虑常量替换（常量代换）优化，二者极有可能相同，结果是。。。。。0 比如 VC Release 版，二者结果都是。。。。。0 VC Debug 版,结果1 << 32是。。。。。0，1 << x 就是SAL and SHL指令的结果。

user: user-0
content: 引用 1 楼 KenZhang1031 的回复:1 << 32 是常量，编译时1和32都被当成int,编译时就被计算成为0了。 1 << x无法在编译前确定，是被采用指令shl reg cl来执行的，但是intel的汇编对shl有规定的。 引用The SAL and SHL instructions perform the same operation (see Figure 7-6). They shift the source operand left by from 1 to 31 bit positions. 所以当移位超过31位后，结果可能会是未知的。  试了试shl和rol没区别啊，一会再看看  很久没写汇编了，不循环左移的指令是还要设置什么啊

user: user-4
content: 1 << 32 是常量，编译时1和32都被当成int,编译时就被计算成为0了。 1 << x无法在编译前确定，是被采用指令shl reg cl来执行的，但是intel的汇编对shl有规定的。 引用The SAL and SHL instructions perform the same operation (see Figure 7-6). They shift the source operand left by from 1 to 31 bit positions. 所以当移位超过31位后，结果可能会是未知的。
user-0 提问: 队列输出元素 求指导~~~~~~~~~~~~~~~~~~~

回复:
user: user-0
content: 引用 10 楼 yuzengyuan 的回复:现在的小朋友真是越来越过分了，呵呵，反正不管怎样，不能运行，不能编译，直接扔上来让大家帮忙看。别装逼

user: user-1
content: 引用 8 楼 bijiaoben 的回复:SqQueue *q; chushihua(q);  int chushihua(SqQueue *q) { q->front=q->rear=0; return 0; }  根本没有给指针q分配空间就拿去用了。。。 现在的小朋友真是越来越过分了，呵呵，反正不管怎样，不能运行，不能编译，直接扔上来让大家帮忙看。

user: user-2
content: SqQueue *q; chushihua(q);  int chushihua(SqQueue *q) { q->front=q->rear=0; return 0; }  根本没有给指针q分配空间就拿去用了。。。

user: user-3
content: #include <stdio.h> #include <stdlib.h>  #define maxsize 100  typedef struct _SqQueue {    int data[maxsize];    int front;    int tail;    int count; }SqQueue;  int init(SqQueue *q) { 	  if(q == NULL) 	  { 	      return -1; 	  }     q->front = 0;     q->tail  = 0;     q->count = 0;          return 0; } int isFull(SqQueue* q) { 	  if(q == NULL) 	  { 	      return -1; 	  } 	   	  if(q->count == maxsize) 	  { 	  	  printf("Queue is full!!\n"); 	      return 1; 	  } 	  else 	  { 	      return 0; 	  } }  int isEmpty(SqQueue* q) { 	  if(q == NULL) 	  { 	      return -1; 	  } 	   	  if(q->count == 0) 	  { 	  	  printf("Queue is empty!!\n"); 	      return 1; 	  } 	  else 	  { 	      return 0; 	  } }  int inQueue(SqQueue *q, int e) {     if(q == NULL) 	  { 	      return -1; 	  }        if(isFull(q) == 1)     {   	    return -1;   	}          q->data[q->tail] = e;     q->tail = (q->tail+1)%(maxsize);     q->count++;     return 0; }  int outQueue(SqQueue *q, int *e) { 	if(q == NULL)   {       return -1;   }      if(isEmpty(q) == 1)   {   		return -1;   }      *e = q->data[q->front];   q->front = (q->front+1)%maxsize;   q->count--;   return 0; } int main() {     int e;     SqQueue *q = (SqQueue*)malloc(sizeof(SqQueue));     if(q == NULL)     {         exit(-1);     }          init(q);          inQueue(q,1);     inQueue(q,3);     inQueue(q,5);     inQueue(q,7);     inQueue(q,8);     int i = 0;     for(; i<10; i++)     {         if(outQueue(q, &e) < 0)         {             break;         }         printf("%d ", e);     }     printf("\n");     free(q);     return 0; } 求40分

user: user-0
content: 引用 4 楼 ovoovo 的回复:你都不结贴，你去结贴，我就给你弄个可以运行的。 结了，。。

user: user-4
content: 不得不引用赵老师的名言： “对学习编程者的忠告：眼过千遍不如手过一遍！书看千行不如手敲一行！手敲千行不如单步一行！单步源代码千行不如单步对应汇编一行！” LZ请自行断点调试下

user: user-3
content: 你都不结贴，你去结贴，我就给你弄个可以运行的。

user: user-1
content: 另外函数名可以不用拼音吗？看着挺费劲的，呵呵。 你指针压根没有初始化，怎么能直接用。

user: user-1
content: SqQueue *q;//这个指针指向哪里？ chushihua(q);//直接拿来用？

user: user-0
content: int panduiman(SqQueue *q) { 	return ((q->rear+1)%maxsize==q->front?0:1); }  还有个函数忘写了

user: user-5
content: 现在的小朋友真是越来越过分了，呵呵，反正不管怎样，不能运行，不能编译，直接扔上来让大家帮忙看。
user-0 提问: 请问, 以下代码为什么要二级消息处理呢? 

回复:
user: user-0
content: 引用 1 楼 zhuobattle 的回复:重新编译下，代码用code包含起来。  ?

user: user-1
content: 重新编译下，代码用code包含起来。

user: user-2
content: 因为代码抽象通常都是一层一层的，上层只依赖直接相邻的下层，你只有根据代码设计的初衷去了解为什么2层
user-0 提问: POJ1001 总是RUNTime Error 在我电脑上运行所有测试用例均通过并且没有出现运行时错误

回复:
user: user-0
content: 引用 6 楼 user-1 的回复:[quote=引用 4 楼 gongheguoyingpai11 的回复:] [quote=引用 1 楼 user-1 的回复:] 是OJ平台不能通过吗，看看把system("pause");去掉如何 太感谢了 无语了 竟然真的是因为这个原因 谢谢了 马上结贴 [/quote] OJ平台检测比较严，这条语句，system（“pause”），测试平台是不认识的，它不会为你处理这条语句[/quote] 很感谢 我就很奇怪为什么所有测试用例都没问题就是通不过 唉 竟然是因为这么个原因

user: user-1
content: 引用 4 楼 gongheguoyingpai11 的回复:[quote=引用 1 楼 user-1 的回复:] 是OJ平台不能通过吗，看看把system("pause");去掉如何 太感谢了 无语了 竟然真的是因为这个原因 谢谢了 马上结贴 [/quote] OJ平台检测比较严，这条语句，system（“pause”），测试平台是不认识的，它不会为你处理这条语句

user: user-0
content: 引用 3 楼 user-1 的回复:还有主函数返回值语句要加上，return 0； 不过为什么加上system("pause")就会出现这个问题了呢 优点困惑  return 0应该不会有问题 因为很多优秀的编译器如果你不写return 0都会默认的使用return 0的

user: user-0
content: 引用 1 楼 user-1 的回复:是OJ平台不能通过吗，看看把system("pause");去掉如何 太感谢了 无语了 竟然真的是因为这个原因 谢谢了 马上结贴

user: user-1
content: 还有主函数返回值语句要加上，return 0；

user: user-0
content: 麻烦各位帮忙看一下 我重复的运行和查看了很多遍 并没有出现任何的运行时错误 这个问题确实把我难住了 从网上找的这个题的所有的测试用例都运行了 都没问题 但是一提就提示Runtime Error 我猜测可能是数组越界 但是运行了N多遍确实没出现问题啊 ??

user: user-1
content: 是OJ平台不能通过吗，看看把system("pause");去掉如何
user-0 提问: 虚拟内存和物理内存的地址映射关系

回复:
user: user-1
content: 你可以看看windows核心编程 看了这个，你会有一个很清晰的概念

user: user-1
content: 虚拟内存是问了方便管理物理内存而虚拟出来的，他们是映射关系 我们所说的地址，其实就是虚拟内存，他怎么映射到物理内存，系统有一套内部的机制 一个进程创建出来时，会保留（也就是分配）虚拟内存，但是，此时很多内存其实没有映射到物理存储器上面 当你需要时，才会映射过去。不需要时，又会释放掉。 还有一个内存共享的问题，就是说，在物理存储器上面的一个存储页，可以映射到虚拟内存上面的多个存储页。这样也就方便了进程通信了

user: user-2
content: 这里有一个缺页中断和虚拟内存的概念

user: user-3
content: 虚拟内存基本概念啊。  当进程所要求的页不在物理内存里，就会发生一个异常，操作系统的内存管理器捕捉这个异常，然后将相应的虚存页从硬盘掉进物理内存。

user: user-4
content: 共产主义，按需分配，呵呵，就是需要的话，才去映射，否则只是无效的地址

user: user-5
content: 实际每个进程不可能都把虚拟内存都加载到物理内存上，照这样以前256M时代时系统直接不用跑了。 当需要使用时，虚拟内存不在物理内存上，会有页中断，系统会帮你管理的。  具体建议看下操作系统相关的书籍。

user: user-6
content: 1. 只有实际使用的才映射 2. 如果实际使用的也不够, 会把不经常使用的页面换到硬盘上

user: user-7
content: 你是不是发现，要是10个进程，不是有40G要映射，更不够了。 肯定不是直接一一映射。

user: user-8
content: 《Windows核心编程》 《深入解析Windows操作系统-Windows Internals》
user-0 提问: 一个关于C语言文件的问题，求高手帮忙

回复:
user: user-1
content: 我觉得逐行调试比较靠谱

user: user-2
content: 首先 你的意思是说说无法读入 还是说文件打开总是失败 如果失败的话 是路径的问题的可能性大 如果是在Liunx下则可能因为权限的问题引起 无法打开文件 还有 你的数据在文件中是如何存放的? fseek(fp,n+1,SEEK_SET);/*将文件指针移到下一行*/这里的话 你的第三个参数是SEEK_SET则总是移动向第二行而已 如果你想总是向下移动应该使用SEEK_CUR否则永远只是在读入第二行数据(这是假设你的数据存取是正确的情况下)

user: user-3
content: 你的main函数在哪里？

user: user-0

user: user-0
content: 额，求高手帮忙
user-0 提问: 杭电oj 第2.1.5怎么做？

回复:
user: user-1
content: 题目贴出来呗

user: user-2
content: 要登录呢。。

user: user-0
content: http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=2§ionid=1&problemid=8
user-0 提问: 在用C语言写程序时，如何长久文件数据

回复:
user: user-0
content: 灰常感谢………………

user: user-0
content: 嗯，可以…… 我对文件使用太不熟悉…………

user: user-1
content: 引用 楼主 u013202002 的回复:每次运行程序需重新建立数据，如何可以将数据长久保存在文件里楼上正解！

user: user-2
content: 在使用fopen的是时候第二个参数使用"a" 就是在文件末尾追加数据 就不会抹去原来的数据了

user: user-0
content: 每次写文件就会 抹去原来的数据~~

user: user-3
content: 直接保存文件不行吗？
user-0 提问: 让正则表达式从指定位置开始查找？

回复:
user: user-1
content: 正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸)http://download.csdn.net/detail/zhao4zhong1/1808549

user: user-2
content: 另外推荐《精通正则表达式》一书，介绍了re的各种概念，不同实现的各种flavor，re的实现原理，等等。  LZ记得结贴。

user: user-2
content: 其实我给的相当于一个伪代码，表达出了基本的意思  不同的re，有不同的flavor，无外乎就是哪些是元字符，元字符如何转义，如何定义首尾，如何定义量词，如何定义捕获组，如何丢弃捕获的结果⋯⋯  \(^.\{80}\)\@<=.*$ 对于这个re，大胆猜测： \(\)定义了捕获组，^表示开始，.表示任一字符，{80}是量词，\(^.\{80}\)就捕获了前80个字符  .*$就是表示到结尾的所有字符了  <=猜是vim特有的东西？表示把捕获的东西(.*$)存入\@中，\@大概是寄存器吧

user: user-3
content: 你可以看一下 正则指引  或者 精通正则表达式  尤其是精通正则表达式 里面对于各种版本的正则都会有一些涉猎 所以一些比较偏僻的东西可能会在里面有介绍

user: user-0
content: 不知道这个神奇的细节会不会有人感兴趣……

user: user-0
content: 引用 6 楼 user-3 的回复:(?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思  这中表示方式vim中无效的，我最开始就这样写的，没反应，查了很多资料，在一个很偏僻的角落里找到了。 等效于"\(.\{80}\)\@<=.*$"，但是如要要求是从行首开始计算的话，还要加个字符吧。 \(^.\{80}\)\@<=.*$

user: user-0
content: 其实，vim和perl对正则的表示略有不同。我上面问题的答案是：\(^.\{80}\)\@<=.*$。先命中一行的前80个字符，不保留，然后命中后面直到行尾的所有字符，验证通过。

user: user-2
content: (.{80})(你的正则在这里)

user: user-3
content: (?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思

user: user-3
content: 把你的意思说的更清楚一点 是想找出所有字符数多于80个字符的行? 我没太明白你的意思

user: user-0
content: 然后呢？我要命中后面的东西，不包含前面的80个

user: user-1
content: [.\n]{80}      匹配任意字符包括'\n'80次

user: user-0
content: 哥，正则呀~我要写到vimrc里面的

user: user-1
content: char s[1000]; int i; for (i=0;i<100;i++) sprintf(s+i*2,"%2d",i); printf("%s\n",s); printf("%s\n",s+80);
user-0 提问: 请问它们的区别?

回复:
user: user-0
content: || 是逻辑或

user: user-1
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E

user: user-1
content: 个人意见：最大的区别在于|不会逻辑短路，||会逻辑短路  但也许是作者笔误

user: user-2
content: 如果AAA是5这样的宏的话，那么就没问题 见 http://gcc.gnu.org/onlinedocs/cpp/If.html#If if只能处理算术表达式来着  至于|还是||，逻辑上说，是||，只是|恰好也对 因为==产生1或者0 对于1和0来说，|和||的结果刚好一样，即 0 | 0 == 0 || 0 0 | 1 == 0 || 1 1 | 0 == 1 || 0 1 | 1 == 1 || 1 但逻辑不一样，一个是bit与，一个是逻辑与。

user: user-0
content: 引用 18 楼 ForestDB 的回复:如果是AAA这样的话，怎么写都是错，LZ还没发现么？  这里的AAA BBB其实是以下格式定义的宏, #if(CUSTOMERIZATION==AAA|CUSTOMERIZATION==BBB) 这样，编译后，运行时，也没发现什么异常.  #define RITMIX		6 #define TEXET		7 #define AAA		8 #define BBB		9

user: user-2
content: 如果是AAA这样的话，怎么写都是错，LZ还没发现么？

user: user-0
content: 引用 14 楼 ForestDB 的回复:# define foo CCC  # if (foo == AAA || foo == BBB) printf(); # endif  以上是源文件  以下是预编译的结果 # 1 "x.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "x.c"    printf();  LZ是否觉得有些以外？  我是新手，不明白。 请明说，我说的这种情况，应该用 | 还是 || ?

user: user-2
content: http://gcc.gnu.org/onlinedocs/cpp/If.html#If

user: user-2
content: 意外。。。。

user: user-2
content: # define foo CCC  # if (foo == AAA || foo == BBB) printf(); # endif  以上是源文件  以下是预编译的结果 # 1 "x.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "x.c"    printf();  LZ是否觉得有些以外？

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:#if和if相差十万八千里！  你觉得这样写合适吗?

user: user-3
content: 引用 6 楼 huabinsir 的回复:我的意思是: 是不是别人的代码有误? maybe

user: user-4
content: 123|456==507 123||456==true  任何一个整数 >0等同于true <=0等同于false

user: user-1
content: #if和if相差十万八千里！

user: user-3
content: |是按位与运算，||是逻辑或运算

user: user-5
content: 引用 6 楼 huabinsir 的回复:我的意思是: 是不是别人的代码有误?  仅对这行代码而言, 从功能上没问题, 但是这么写, 在逻辑上是不合理的.  "||"表达的意图是满足任何一个条件 "|"表达的是将左右操作数做或运算

user: user-6
content: 引用 5 楼 huabinsir 的回复:别人的代码中有以下这样的情况，别人的用意是什么?  #if(CUSTOMERIZATION==AAA|CUSTOMERIZATION==BBB) typedef enum { TimeHour= 0, TimeMin, TimeAP, TimeOK, TimeCancle }TypeTime; TypeTime curTimeItem = TimeHour; #else typedef enum { TimeMin = 0, TimeHour, TimeAP, TimeOK, TimeCancle }TypeTime; TypeTime curTimeItem = TimeMin; #endif  个人觉得宏定义应该这样：  #if(CUSTOMERIZATION==AAA||CUSTOMERIZATION==BBB)  但是按照它这样，编译器也可以成功识别，因为有如下情况:  int i = 1; int k = 0; int j = i || k;//只有都为0时，结果才为0 int s = i | k;//或也刚好是这样，只有两者都是0时结果才为0 //所以在判断上，1和其它非0值结果都是一样。

user: user-0
content: 我的意思是: 是不是别人的代码有误?

user: user-0
content: 别人的代码中有以下这样的情况，别人的用意是什么?  #if(CUSTOMERIZATION==AAA|CUSTOMERIZATION==BBB) typedef enum { TimeHour= 0, TimeMin, TimeAP, TimeOK, TimeCancle }TypeTime; TypeTime curTimeItem = TimeHour; #else typedef enum { TimeMin = 0, TimeHour, TimeAP, TimeOK, TimeCancle }TypeTime; TypeTime curTimeItem = TimeMin; #endif

user: user-7
content: 搜 位运算 逻辑运算
user-0 提问: 数据结构和算法有什么学习捷径

回复:
user: user-1
content: 学习算法导论 然后去OJ做题巩固 学习算法不可能有什么捷径的 否则大家不都成了算法大神了

user: user-2
content: 当时就是看谭浩强的书过来的，理解不了链表是怎么回事，就问老师，什么排序，查找，后来慢慢就都学会了

user: user-3
content: 引用 12 楼 aihahaheihei 的回复:http://acm.hdu.edu.cn/listproblem.php?vol=11 花两个星期做完这页，基本没问题了大神，我想问，这么多需要多少条做完呢？？？

user: user-3
content: 加油，我和你一样

user: user-4
content: 基础没有捷径！

user: user-5
content: 其实是有一个捷径的：把书烧成灰，用蜂蜜水送服，一天三本，7天见效。

user: user-6
content: 努力就是最好办法，多看看代码是怎么实现的，理解代码，多实践

user: user-7
content: 做面试和笔试题吧，边做题边学，不至于太枯燥

user: user-8
content: http://acm.hdu.edu.cn/listproblem.php?vol=11 花两个星期做完这页，基本没问题了

user: user-9
content: 越是基础的东西越没有捷径可走！  引用 楼主 nezhang 的回复:我扛不住啊，看了就困，越看越晕。各位都是怎么过这关的。有没有什么窍门？网上的严书不要提了，比普通不出名的结构书还不易懂。

user: user-10
content: 做任何事都想着捷径, 那你离成功就越来越远了.

user: user-11
content: 引用 8 楼 taodm 的回复:其实是有一个捷径的：把书烧成灰，用蜂蜜水送服，一天三本，7天见效。 要啥药引子吗？

user: user-12
content: 除了写还能咋样

user: user-13
content: 如果不是为了应付考试，是真的想学懂的话，除了认真去看书，去理解外，没有捷径。如果书看不懂，就换一本，等能看懂了再回过头去看，书关键是要适合自己。建议你可以看看《算法精解：C语言描述》，比较简单一点，重在代码实现，而不是一大堆数学公式，如果看懂了，可以看《算法导论》，看完了应该能算入门了。

user: user-11
content: 为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。

user: user-14
content: 理解原理，并写代码实现它~~~
user-0 提问: 帮忙解答，感谢！！庞果网提示的信息

回复:
user: user-1
content: 那最差的就是1到5000000

user: user-2
content: 因为你的测试用例不够复杂，没有覆盖最差的情况。

user: user-0
content: 就是这道题，a =1 b=30

user: user-0
content: {5 3 1}和{7 5 3}是2组不同的等差三元组，除了等差的性质之外，还有个奇妙的地方在于：5^2 – 3^2 – 1^2 = 7^2 – 5^2 – 3^2 = N = 15。 {19 15 11}同{7 5 3}这对三元组也存在同样的性质：19^2 – 15^2 – 11^2 = 7^2 – 5^2 – 3^2 = N = 15。 这种成对的三元组还有很多。当N = 15时，有3对，分别是{5 3 1}和{7 5 3}，{5 3 1}和{19 15 11}，{7 5 3}和{19 15 11}。 现给出一个区间 [a,b]求a <= N <= b 范围内，共有多少对这样的三元组。（1 <= a <= b <= 5*10^6） 例如：a = 1，b = 30，输出：4。（注：共有4对，{5 3 1}和{7 5 3}，{5 3 1}和{19 15 11}，{7 5 3}和{19 15 11}，{34 27 20}和{12 9 6}）

user: user-0
content: 测试的用例自己指定的啊

user: user-3
content: 跟测试用例的多少和强度有关吧？

user: user-4
content: 你测试的用例可能是1,1,1,1,1 胖国王的用例可能是100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100 so
user-0 提问: 在函数search_s无效的间接方法。什么意思？？？如何解决？？？ 

回复:
user: user-1
content: LZ想说什么？

user: user-2
content: 你的问题是什么？

user: user-3
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。
user-0 提问: 在线等 struct mode **head

回复:
user: user-1
content: 指向结构体mode的指针与双重指针~~~

user: user-2
content: **head，指针的指针； *ah *bh，两个指针。

user: user-3
content: 深刻理解指针才能领悟其中含义。
user-0 提问: 这算不算是一种新的压缩方法

回复:
user: user-1
content: 引用 11 楼 zhou19891113 的回复:[quote=引用 5 楼 baipv008 的回复:] 一个字节有255个可能值，如果你想表达这255个可能的值，用少于一个字节是不可能的。 是有可能的[/quote] for example?

user: user-2
content: 引用 5 楼 baipv008 的回复:一个字节有255个可能值，如果你想表达这255个可能的值，用少于一个字节是不可能的。 是有可能的

user: user-3
content: 你的算法跟已有的，有版权的，不一样，就不算侵权。

user: user-4
content: 7z zip rar cab ……

user: user-5
content: 压缩算法很多拉，百度把。

user: user-6
content: 我同意楼主的关点。同样的意思用文言文来表达，确实要简洁许多

user: user-7
content: 现在的压缩算法很多，类似的有 霍夫曼算法，KMP算法

user: user-8
content: 什么叫“把字节变短”？

user: user-9
content: 从信息的角度讲，压缩文件是把数据内的信息分成两部分，共性部分作为压缩解压算法，特性部分作为压缩后的数据 用数学计算将字节变短，如果字节数据本身没有特殊限制，那应该是不可能的，楼主所说的方法类似于永动机，试图用“数学计算”来挑战信息守恒定律

user: user-10
content: 引用 楼主 coler_ming 的回复:我想用一种数学计算 把文件的字节 变短   我想问问目前有没有这种压缩方式    如果开发了 算不算侵权啊？   所有的压缩本质上都是将编码变短，比如霍夫曼编码最短是是1位表示字符（其不同码值编码位数不同）  如果lz你确实能独立的开发出一种编码压缩算法，即使和已经存在的方式擂同，那你也是算法的牛人！

user: user-1
content: 引用 5 楼 baipv008 的回复:一个字节有255个可能值，如果你想表达这255个可能的值，用少于一个字节是不可能的。  是256个。

user: user-1
content: 一个字节有255个可能值，如果你想表达这255个可能的值，用少于一个字节是不可能的。
user-0 提问: 编一程序实现,输入一个整数，输出与该整数对应的月份的英文简称。具体要求为：1）使用指针数组，将指针元素的下标和指针所指向的字符串对应起来。2）超出范围的月份一律

回复:
user: user-1
content: 这是考试？？ 题目太少了

user: user-0
content: 根本就不能，重新编吧

user: user-2
content: for(int i=0;i<13;i++) {     puts(month[i]); }

user: user-2
content: char *month[13]={ "unlegal month" "January" "February" .... }
user-0 提问: 大一新生的C语言疑问

回复:
user: user-1
content: 建议：踏实学，基础学好，勿浮躁，学好各门基础课程，多编写，多调试，认真学好数学课程，毕业后前途不可限量！！！

user: user-2
content: 原来是短路运算符啊，一直不知道还有这个名字

user: user-3
content: 引用 2 楼 a510579741 的回复:首先 这个跟优先级关系不大 你说的对  ++的优先级比&&高    &&比||要高 但是  &&和||涉及到短路运算    你可以这么看这个式子（++a||（++b&&++c）） ++a = 3 >0  后面跟的是|| 所以  整个式子值是1    就不在运行++b和++c了 输出的结果为 3,2,2  如果把a的初值设置为-1的话 ++a = 0=0  后面跟的是|| 所以  要执行后面的式子    就执行++b  ++b后面跟的是&& 所以要执行++c 所以输出结果为 0,3,3支持

user: user-4
content: 引用 6 楼 xyzinfernity 的回复:||前面判断为真的时候后面不执行，所以执行代码只有++a 结果是a=3,b=2,c=2正解！

user: user-5
content: 确实，忘记了还有或运算就是这样，如果左边为1的话，右边根本不会参与计算。这应该是编译器的作用吧。

user: user-6
content: 其实这种问题一点都不用纠结的，按你想要的运算顺序加上括号就是了，省得还要想运算级的高低

user: user-7
content: ANSI C标准 6.5.14.4 Unlike the bitwise | operator, the || operator guarantees left-to-right evaluation; there is a sequence point after the evaluation of the first operand. If the first operand compares unequal to 0, the second operand is not evaluated.

user: user-8
content: ||前面判断为真的时候后面不执行，所以执行代码只有++a 结果是a=3,b=2,c=2

user: user-9
content: 引用 7 楼 truelance 的回复:ANSI C标准 6.5.14.4 Unlike the bitwise | operator, the || operator guarantees left-to-right evaluation; there is a sequence point after the evaluation of the first operand. If the first operand compares unequal to 0, the second operand is not evaluated. +1

user: user-10
content: 术语：短路代码。

user: user-11
content: 只能说编译器越来越厉害了

user: user-12
content: 式子是这样的（（++a）||（++b&&++c）） 少打了个括号

user: user-12
content: 首先 这个跟优先级关系不大 你说的对  ++的优先级比&&高    &&比||要高 但是  &&和||涉及到短路运算    你可以这么看这个式子（++a||（++b&&++c）） ++a = 3 >0  后面跟的是|| 所以  整个式子值是1    就不在运行++b和++c了 输出的结果为 3,2,2  如果把a的初值设置为-1的话 ++a = 0=0  后面跟的是|| 所以  要执行后面的式子    就执行++b  ++b后面跟的是&& 所以要执行++c 所以输出结果为 0,3,3

user: user-13
content: 编译器也是人写的，而且越来越能优化代码，如果写编译器的人像你所说那样的去做，那么效率会较低。 而且if(条件1 || 条件2）这样的语句，你可以理解为： if(条件1）    // 成立,do someting else if(条件2）    // 成立，do something  语句按顺序从上到下执行，不会因为后面的语句带有优先级高的运算符就先执行后面的语句吧？ 比如： ++a || ++b 看一下它的反汇编就明白了：  ++a || ++b; 00D618D3  mov         eax,dword ptr [a]   00D618D6  add         eax,1   00D618D9  mov         dword ptr [a],eax   00D618DC  jne         main+47h (0D618E7h)   00D618DE  mov         ecx,dword ptr [b]   00D618E1  add         ecx,1   00D618E4  mov         dword ptr [b],ecx
user-0 提问: 前段时间看见的一个有趣的C问题

回复:
user: user-1
content: 引用 楼主 Losicke 的回复:void a() {     ...... }  int main() {        int x=1,y=2;       a();       printf("x=%d,y=%d",x,y);       return 0;  }  记得好像是两个月前在CSDN上看见的这道题，找了很久找不到了，没记错的是这样，大意是在函数a中写程序要求改变main函数中输出x和y的值~~~~~~ 额，当时记得是用压栈，然后我尝试了几次只改变了x的值，y的值一直没变化~~~~~~  不同编译器，甚至同一编译器，不同时刻编译出的代码，x,y 占用的内存可能会不同；  另外同一编译器，不同配置（比如 Release,Debug）x,y占用内存，也未必相同 同样对于 函数 a() 调用，也可能由于优化的原因，变的面目全非。  因此，非要通过溢出方式，改写x,y ，而且要求任何时候效果相同， 这是不可能完成的任务。  如果，你写的代码，实现了这个功能，或者出错造成这种效果； 那道是可以分析出来，是什么原因造成的。

user: user-2
content: VC++12 32为测试结果  #include <stdio.h>  void a() { 	int i;  	{ 		int *p=&i; 		p[5]=5; 		p[6]=8; 	} }  int test() { 	int x=1, y=2; 	a(); 	printf("%d %d", x, y); 	return 0; }  int main() { 	test(); }  在debug下输出5 8貌似修改成功，release输出1 2。编译器的优化肯定会忽略a()的副作用的

user: user-3
content: 引用 10 楼 zhuobattle 的回复:这类题目编译器相关性太大了，你要debug版本还好，release版本编译优化后直接没有x,y就两个常数。 另外a函数你改成naked还有点可行性。要不入口处那个esp预留的堆栈空间又有不确定性，你怎么去操作呢  没错。

user: user-4
content: 这类题目编译器相关性太大了，你要debug版本还好，release版本编译优化后直接没有x,y就两个常数。 另外a函数你改成naked还有点可行性。要不入口处那个esp预留的堆栈空间又有不确定性，你怎么去操作呢

user: user-2
content: 上面Hack不能保证成功。好的编译器会直接把main处理成类似  [code=c] int main() {          // push eax     a(); // call _a     printf("x=%d, y=%d", 1, 2);// mov eax, 2                                // push eax                                // mov eax, 1                                // push eax                                // mov eax, addressof"x...."                                // push eax                                // call _printf       return 0;                   }

user: user-5
content: 用宏

user: user-6
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。

user: user-7
content: 简单一点 void a() { 	printf("x=%d,y=%d",10,20); 	exit(0); }

user: user-8
content: 我估计是用人为溢出吧~

user: user-9
content: #include <stdio.h>  void a() { asm( 	"movl 36(%ebp) , %eax\n\t" //y的值赋给 eax 	"movl 32(%ebp), %edx\n\t"  //x的值赋给 edx 	"movl %eax , 32(%ebp)\n\t" //eax 赋给x地址所指向的内存 	"movl %edx , 36(%ebp)\n\t" //edx 赋给y地址所指向的内存 	);	 } int main() { 	int x=1, y=2; 	a(); 	printf("x=%d, y=%d", x, y);	 	return 0;	 }  编译环境 ubantu 13.10 gcc编译器

user: user-10
content: void a(int *p, int *q) {     int *a = p;     int *b = q;      *a = 10;     *b = 20;      return; }  这个运行过，是可以的额

user: user-11
content: 只要找出x,y的地址、或者在栈中的位置

user: user-12
content: 老师曾经提到过，不过忘了
user-0 提问: 大一新生的C语言疑问

回复:
user: user-1
content: 引用 4 楼 u013078986 的回复:[quote=引用 1 楼 user-3 的回复:] 查查C运算符的优先级和结合顺序 引用 2 楼 relaxisland 的回复:与的优先级 高于 或吧 ++a||++b&&++c;  ----》等价于 ++a|| (++b&&++c); 引用 3 楼 KenZhang1031 的回复:条件1 || 条件2 && 条件3 因为&&优先级比||高，所以相当于 条件1 || （条件2 && 条件3） 只要条件1为真，那么后面不会计算了，因为无论后面如何，结果一定为真。如果为假，才会计算后面。  还有一个疑问，优先级高的不是应该先计算吗？ 比如：3-2*4    应该先算2*4=8，让后再3-8=-5 同样，为什么不先算++b&&++c=3&&3=1，然后再计算++a||……？[/quote]  只能说编译器太聪明了吧。 不过优先级高 不一定先计算的， 还要跟 结合性， 以及 左右操作数的计算顺序（不同编译器可能不一样）有关。 比如 a + b + (c +d ) * (e * f)

user: user-0
content: 引用 1 楼 user-3 的回复:查查C运算符的优先级和结合顺序 引用 2 楼 relaxisland 的回复:与的优先级 高于 或吧 ++a||++b&&++c;  ----》等价于 ++a|| (++b&&++c); 引用 3 楼 KenZhang1031 的回复:条件1 || 条件2 && 条件3 因为&&优先级比||高，所以相当于 条件1 || （条件2 && 条件3） 只要条件1为真，那么后面不会计算了，因为无论后面如何，结果一定为真。如果为假，才会计算后面。  还有一个疑问，优先级高的不是应该先计算吗？ 比如：3-2*4    应该先算2*4=8，让后再3-8=-5 同样，为什么不先算++b&&++c=3&&3=1，然后再计算++a||……？

user: user-2
content: 条件1 || 条件2 && 条件3 因为&&优先级比||高，所以相当于 条件1 || （条件2 && 条件3） 只要条件1为真，那么后面不会计算了，因为无论后面如何，结果一定为真。如果为假，才会计算后面。

user: user-1
content: 与的优先级 高于 或吧 ++a||++b&&++c;  ----》等价于 ++a|| (++b&&++c);

user: user-3
content: 查查C运算符的优先级和结合顺序
user-0 提问: 比较两个数组的问题

回复:
user: user-1
content: 引用 4 楼 u012322264 的回复:[quote=引用 2 楼 baipv008 的回复:] 不能使用额外存储空间吗？ 我定义了另外两个数组  一个放第二次运行结果  一个放差  运行一直提示段错误  搞了好久不提示了  运行了好久还没结果[/quote] 恩，局部变量数组肯定是不行的。  你要声明称static变量 或者通过malloc来分配动态内存。

user: user-1
content: 引用 3 楼 u012322264 的回复:[quote=引用 1 楼 relaxisland 的回复:] 那个计算都会计算了， 单纯 相减，取绝对值，再比较应该不难吧。  是担心性能问题？ 对啊  我一开始想的想把开始的数组存到一个文件里去，然后再比较 那个TXT得5M打都打不开- - 后来直接又定义数组  运行就没结束- -[/quote]  你什么机器啊 5M根本不算大啊。

user: user-2
content: 引用 5 楼 KenZhang1031 的回复:这个问题其实就是把每点的相邻6个点的平均值作为该点的新值，组成一个新的数组，然后求新数组和原来的数组对应位置的差值的最大值。直接用原来的数组，计算某点和其相邻6个点的差值的平均值结果是一样的，不需要生成新的数组。没明白解释？计算某点和其相邻6个点的差值的平均值不就是这个点的值么~~还用算？

user: user-2
content: 楼主的意思是在一次调用函数中结束么？

user: user-3
content: 这个问题其实就是把每点的相邻6个点的平均值作为该点的新值，组成一个新的数组，然后求新数组和原来的数组对应位置的差值的最大值。直接用原来的数组，计算某点和其相邻6个点的差值的平均值结果是一样的，不需要生成新的数组。

user: user-0
content: 引用 2 楼 baipv008 的回复:不能使用额外存储空间吗？ 我定义了另外两个数组  一个放第二次运行结果  一个放差  运行一直提示段错误  搞了好久不提示了  运行了好久还没结果

user: user-0
content: 引用 1 楼 relaxisland 的回复:那个计算都会计算了， 单纯 相减，取绝对值，再比较应该不难吧。  是担心性能问题？ 对啊  我一开始想的想把开始的数组存到一个文件里去，然后再比较 那个TXT得5M打都打不开- - 后来直接又定义数组  运行就没结束- -

user: user-4
content: 不能使用额外存储空间吗？

user: user-1
content: 那个计算都会计算了， 单纯 相减，取绝对值，再比较应该不难吧。  是担心性能问题？
user-0 提问: C语言小疑问

回复:
user: user-1
content: memcpy(por->p, "a", 1);改成memcpy(por.p, "a", 1);

user: user-2
content: 建议在memset(por, 0, sizeof(struct bao));后，打印一下指针p的值，没猜错的话，应该被memset弄成空指针了.

user: user-3
content: por->p = malloc(3);让p指向刚分配的内存，然后memset(por, 0, sizeof(struct bao));又让p指向了0地址；最后memcpy(por->p, "a", 1);往0地址写"a",自然段错误。
user-0 提问: 一道简单的贪心算法问题

回复:
user: user-1
content: n个物品，每个都可以放或者是不放，组合成最大体积，上限是v。 动态规划的解法,如果第n个物品放，体积就为T（n-1,v-vn)+vn , 如果不放则为T（n-1,v） 递归式如下: T(n,v) = max{T(n-1,v-vn)+vn , T(n-1,v)} 时间复杂度： O(n*v)
user-0 提问: 服务器没有文件系统，如何实现文件下载

回复:
user: user-1
content: 引用 3 楼 derekrose 的回复:那是什么OS啊 同问，这个没有文件系统的OS叫什么名字？？？

user: user-2
content: 没有文件系统，那是裸设备了

user: user-3
content: 连文件系统都没有，那还叫操作系统吗？而且有了文件系统，那也和你读写文件基本无关~

user: user-4
content: 那是什么OS啊

user: user-5
content: FTP.....
user-0 提问: 求高手帮忙解决一个一个问题

回复:
user: user-1
content: scanf("%d%c", &n, &c); while (c != '\n') {     fflush(stdin);     scanf("%d%c", &n, &c); }

user: user-0
content: 是以外，不是意外，发错了，不好意思。楼上把问题想复杂了，我用的是C语言，可以用正则表达式吗，那个好像是过滤提取的，我的没那么复杂，只要输入的不是数字，就提示出错，然后重新输入，嗯，就这样。

user: user-2
content: google一下正则表达式，比自己对每一位上进行检查要好多了。

user: user-3
content: 怎么个意外法？ 输入的类型都由scanf("%s", addr)""里控制的， 如果要输入的是数字，scanf("%d", &a);就好。  比如，如果用户需要输入整数，但是你输入的是1a2的话，系统会认为a是非法字符而当做输入结束，则此时输入的整数就为1。
user-0 提问: 一道考研题，求大神指教

回复:
user: user-1
content: 引用 1 楼 vipcxj 的回复:m=24 n=4 s=4 m=24+4/2=26/2=13 n=13 s=13-1=12 k=75 rt 26+75=101 m=13+13/2=19/2=9 n=9+3=12 s=null k=56 rt 19+56=75 m=9+12/2=15/2=7 n=7+3=10 s=null k=41 rt 15+41=56 m=7+10/2=12/2=6 n=6 s=6-1=5 k=29 rt 12+29=41 m=6+6/2=9/2=4 n=4+3=7 s=null k=20 rt 9+20=29 m=4+7/2=7/2=3 n=3+3=6 s=null k=13 rt 7+13=20 m=3+6/2=6/2=3 n=3 s=3-1=2 k=7 rt 6+7=13 m=3+3/2=4/2=2 n=2 s=2-1=1 k=3 rt 4+3=7 m=2+2/2=3 rt 3;  所以最后打印 /*k*/ 3 7 13 20 29 41 56 75 /*s*/ 1 2 5 12 4   using namespace std;   queue<int> Q; stack<int> S;  int finding(int n);  void findout(int m, int n) { 	Q.push(m); 	S.push(n); 	finding(n); 	while (!S.empty()) 	{ 		int tmp = S.top(); 		S.pop(); 		cout << tmp << endl; 	} }  int finding(int n) { 	int m, k; 	m = Q.back() + n/2; 	Q.pop(); 	if (m > 3) 	{ 		n = m/2; 		Q.push(n); 		if ((n << 1) == m) 		{ 			S.push(n-1); 			k = finding(n); 		} 		else 		{ 			k = finding(n+3); 		} 	} 	else 	{ 		return m; 	} 	cout << k << " "; 	return m + k; }  int main() {    findout(24,4);    return 0; }   这是第二题的，第一题逻辑和第二题是不一样的，但我没看出啥技巧，只能你看懂代码后死算。附上的程序是我的测试程序，我用了预编译头，所以你要自己加上头文件。已经编译并运行过了，用得vs2012，得到的结果和人工分析的结果是一样的

user: user-2
content: 第一个程序执行  m=30 n=4 初值  1. n=4 m=30+4/2=32     n=16 2. n=15 m=16+15/2=23 n=11 3. n=15 m=11+15/2=18 n=9 4. n=15 m=9+15/2=16 n=8 5. n=7 m=9+17/2=11 n=5 6. n=7 m=5+7/2=8 n=4 7. n=3 m=4+3/2=5 n=2 8. n=3 m=2+3/2=3返回 打印： 3 5 8 11 16 18 23（m) 3 7 15 4在Findout中打印（栈里的内容）

user: user-1
content: m=24 n=4 s=4 m=24+4/2=26/2=13 n=13 s=13-1=12 k=75 rt 26+75=101 m=13+13/2=19/2=9 n=9+3=12 s=null k=56 rt 19+56=75 m=9+12/2=15/2=7 n=7+3=10 s=null k=41 rt 15+41=56 m=7+10/2=12/2=6 n=6 s=6-1=5 k=29 rt 12+29=41 m=6+6/2=9/2=4 n=4+3=7 s=null k=20 rt 9+20=29 m=4+7/2=7/2=3 n=3+3=6 s=null k=13 rt 7+13=20 m=3+6/2=6/2=3 n=3 s=3-1=2 k=7 rt 6+7=13 m=3+3/2=4/2=2 n=2 s=2-1=1 k=3 rt 4+3=7 m=2+2/2=3 rt 3;  所以最后打印 /*k*/ 3 7 13 20 29 41 56 75 /*s*/ 1 2 5 12 4   using namespace std;   queue<int> Q; stack<int> S;  int finding(int n);  void findout(int m, int n) { 	Q.push(m); 	S.push(n); 	finding(n); 	while (!S.empty()) 	{ 		int tmp = S.top(); 		S.pop(); 		cout << tmp << endl; 	} }  int finding(int n) { 	int m, k; 	m = Q.back() + n/2; 	Q.pop(); 	if (m > 3) 	{ 		n = m/2; 		Q.push(n); 		if ((n << 1) == m) 		{ 			S.push(n-1); 			k = finding(n); 		} 		else 		{ 			k = finding(n+3); 		} 	} 	else 	{ 		return m; 	} 	cout << k << " "; 	return m + k; }  int main() {    findout(24,4);    return 0; }
user-0 提问: 有三万对坐标数据（x，y），要求分成合理的行列。求算法

回复:
user: user-0
content: 是不是可以这样：  随机预先选择一个位置作为种子， 在其上下左右寻找最近距离的邻居，  然后根据一个随机预设的deltaX/deltaY来判断该邻居是否可以视作同行或同列，循环迭代，得到一个划分；  然后调整deltaX/deltaY，又得到另外一种划分，在外层循环迭代，得不同的划分。  最后评估这些不同的划分，得出最优。  --- 但是数据点多了之后感觉运算量好大

user: user-0
content: 后面这种的不合理，产生了多余的空洞。 像下面蓝色部分的

user: user-0
content: 引用 5 楼 lelieven 的回复:惭愧，没明白楼主的意思！  不好意思， 可能是我没有把这个问题很好的表述出来。 最通俗的毕业， 类似于这样：  撒一把绿豆到桌面上， 在没有更多信息的条件下， 怎么把这些绿豆划分成合理的行和列。  例如对于如下：   可以划为：   也可以划成：   但合理的结果应该是第一种。

user: user-1
content: 惭愧，没明白楼主的意思！

user: user-2
content: 同楼上~~~~~

user: user-3
content: 我也没看明白。

user: user-4
content: 合理的行列，何为合理？

user: user-4
content: 楼主的意思是想先把重复的数据删除吗？
user-0 提问: intel MKL中三角函数调用问题

回复:
user: user-1
content: 好东西大家分享

user: user-2

user: user-3
content: 感谢楼主分享。

user: user-4

user: user-5
content: 谢谢分享

user: user-6
content: 好东西大家分享

user: user-7
content: http://blog.csdn.net/gengshenghong/article/details/7011939

user: user-8

user: user-9

user: user-10
content: http://blog.csdn.net/gengshenghong/article/details/7011939
user-0 提问: 关于子函数里从键盘读入一个字符的问题

回复:
user: user-1
content: getchar（）也可输入回车。

user: user-0
content: 引用 1 楼 user-4 的回复:因为留在输入缓冲区的回车键被getchar接收了 你在第一个getchar地方加上fflush(stdin)试试  刚刚百度输入缓冲区的时候产生一些疑问 1为什么输入缓冲区会留下回车键 2.getchar不是只读一个字符吗？而且不是遇到回车就结束吗？为什么会连续读两个 大一菜鸟 求解

user: user-0
content: 刚刚百度输入缓冲区的时候产生一些疑问 1为什么输入缓冲区会留下回车键 2.getchar不是只读一个字符吗？而且不是遇到回车就结束吗？为什么会连续读两个 大一菜鸟 求解

user: user-0
content: 刚刚百度输入缓冲区的时候产生一些疑问 1为什么输入缓冲区会留下回车键 2.getchar不是只读一个字符吗？而且不是遇到回车就结束吗？为什么会连续读两个 大一菜鸟 求解

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-3
content: 楼上正解...

user: user-4
content: 因为留在输入缓冲区的回车键被getchar接收了 你在第一个getchar地方加上fflush(stdin)试试
user-0 提问: TCP网络编程多个文件传输出错o(>﹏<)o

回复:
user: user-1
content: 1 客户端connect 等于0的时候才是成功 2 服务端接收的时候定长循环接收,检查返回值是否匹配长度，然后再接收下一次的

user: user-0
content: 引用 4 楼 SKATE11 的回复:少年啊，千万要重视单步调试和设置断点， 用VC调试时记得按下Alt+5、Alt+6、Alt+7和Alt+8。   对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和 寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时 候。单步了 ··程序还是不会改

user: user-2
content: 少年啊，千万要重视单步调试和设置断点， 用VC调试时记得按下Alt+5、Alt+6、Alt+7和Alt+8。   对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和 寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时 候。

user: user-0
content: 引用 1 楼 max_min_ 的回复:1 客户端connect 等于0的时候才是成功 2 服务端接收的时候定长循环接收,检查返回值是否匹配长度，然后再接收下一次的嗷 您好歹给你代码示例啊··

user: user-3
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html
user-0 提问: linux中关于sigsuspend信号屏蔽函数的疑问

回复:
user: user-1
content: 我专门帮你到内核里翻了一下。 你还是换个信号试一下吧，因为 static int sig_handler_ignored(void __user *handler, int sig) { 	/* Is it explicitly or implicitly ignored? */ 	return handler == SIG_IGN || 		(handler == SIG_DFL && sig_kernel_ignore(sig)); }  #define sig_kernel_ignore(sig) \ 	(((sig) < SIGRTMIN) && siginmask(sig, SIG_KERNEL_IGNORE_MASK))  #define SIG_KERNEL_IGNORE_MASK (\         rt_sigmask(SIGCONT)   |  rt_sigmask(SIGCHLD)   | \ 	rt_sigmask(SIGWINCH)  |  rt_sigmask(SIGURG)    )  默认情况下SIGWINCH是一个会被忽略的信号。 而忽略的信号 在信号根本投递不到目标进程中。 所以 你上面扯那么多其他的都没用了就。  PS  貌似你这个问题也发错区了吧。。。在C/C++区发这个问题 不合适的吧？
user-0 提问: 这个break 用得对吗？

回复:
user: user-0
content: 这么久才来结贴，真是抱歉，因为我以为我没有未结贴的内容，而且有半个多月没有进来csdn。

user: user-1
content: 有除法操作就要小心分母为0的情况

user: user-2
content: 艾玛啊，丢人了，我错了。那个是分母，不是分子。也就是说0不能做除数。抱歉啊

user: user-2
content: if(oddcount != 0 && evencount !=0) 	{ 		printf("There are %d odds and the average is %f;" 		"and there are %d evens and the average is %d.\n", 		oddcount, (float)oddsum/oddcount, evencount, evensum/evencount); 	}

user: user-2
content: 各位，是分子为0的情况。 在(float)oddsum/oddcount, evensum/evencount中，oddcount和eventcount可能为零， 建议在打印输出前，做一次检测。

user: user-3
content: break用法正常，你没有考虑到输入安全性问题，假如你输入的不是数字时候，会出现什么状况了。你可以去测试下这个问题。

user: user-4
content: break用的没有问题，至于代码是否达到你个人预期的那样，这个就看你自己的想法了。

user: user-5
content: 先输入0后面输出里分母是0

user: user-6
content: 什么意思？异常检查？  “另外，对于终止的条件是用break好， 还是在while条件里直接加上a!=0好？”  语义不同，while的语义是满足了条件后进入循环体代码  如果放在循环体里面，那么条件是scanf的返回值为1 如果放在条件里面，那么条件变成复合条件，看你感觉怎样表达的语义更好咯

user: user-7
content: 引用 1 楼 u012210441 的回复:break没问题，但你要保证分母不为0！正解

user: user-8
content: break没问题，但你要保证分母不为0！
user-0 提问: 请写过骑士漫游算法的同学帮忙看一下，多谢

回复:
user: user-0
content: 谢谢truelance。我居然问了一个200年前就证明正确的问题，:-)

user: user-1
content: 这种类型的算法叫贪心算法, 在一般情况下是不能找到最优解的. 但是在象棋马中的这个贪心算法在将近200年前就已经被证明过是正确的.