Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言竞赛题怎么解

回复:
user: user-1
content: void out(const char *const strs, char *out)  {     逐个字符遍历strs         如果当前字符是元音字符             保存到out数组     遍历结束      输出 }  自己写

user: user-0
content: 引用 3 楼 user-2的回复:这也没难度，自己写多好？太懒了吧。 不是懒，我是没学过这里的内容……

user: user-2
content: show一个吧，仅供参考： #include <stdio.h> #include <string.h>  int yes_or_no(int c) { 	int result = 0;	 	if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') result = 1;	 	else if(c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') result = 1; 	return result; }  int main(void) { 	char buf[1001]; 	char *p; 	 	while(fgets(buf, sizeof(buf), stdin)) 	{ 		if(strcmp(buf, "end\n") == 0 || strcmp(buf, "end\r\n") == 0) break; 		 		p = buf; 		while(*p != '\0') 		{ 			if(yes_or_no(*p) == 1) printf("%c", *p); 			p++; 		} 		printf("\n"); 	} 	 	return 0; }

user: user-2
content: 这也没难度，自己写多好？太懒了吧。

user: user-0
content: 没有人吗？？

user: user-2
content: 引用 7 楼 m0_46868677 的回复:老哥谢谢你，请问一下那个while（fgets）里面那句的stdin是啥意思，还有里面的sizeof的作用是啥  stdin： 文件指针，表示标准输入。 sizeof：计算字符数组buf的大小。

user: user-0
content: 引用 4 楼 user-2的回复:show一个吧，仅供参考： #include <stdio.h> #include <string.h>  int yes_or_no(int c) { 	int result = 0;	 	if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') result = 1;	 	else if(c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') result = 1; 	return result; }  int main(void) { 	char buf[1001]; 	char *p; 	 	while(fgets(buf, sizeof(buf), stdin)) 	{ 		if(strcmp(buf, "end\n") == 0 || strcmp(buf, "end\r\n") == 0) break; 		 		p = buf; 		while(*p != '\0') 		{ 			if(yes_or_no(*p) == 1) printf("%c", *p); 			p++; 		} 		printf("\n"); 	} 	 	return 0; } 老哥谢谢你，请问一下那个while（fgets）里面那句的stdin是啥意思，还有里面的sizeof的作用是啥
user-0 提问: C语言数组问题：取两段整数的交集并排序

回复:
user: user-1
content: 请问一下最后正确的代码是什么样子的

user: user-2
content: 仅供参考，还需要补充去重复数据功能。。 #include<stdio.h> int main() {     int a[100], b[100], c[100];     int i, j, t, n, o, len = 0;          scanf("%d", &n);     for (i = 0; i < n; i++)     {         scanf("%d", &a[i]);     }      scanf("%d", &t);     for (i = 0; i < t; i++)     {         scanf("%d", &b[i]);     }          for (i = 0; i < n; i++) {         for (j = 0; j < t; j++)             if (a[i] == b[j]) { c[len++] = a[i]; break; }             else continue;     }     for (i = 0; i < len - 1; i++) {         for (j = 0; j < len - 1 - i; j++)         {             if (c[j] < c[j + 1])             {                 t = c[j];                 c[j] = c[j + 1];                 c[j + 1] = t;             }         }     }          /* 去除重复数据，需要在此处补上 */          if (len == 0) {         printf("No Answer");     }     else for (i = 0; i < len; i++)     {         printf("%d ", c[i]);     }      return 0; }
user-0 提问: 救救孩子吧！！  .exe' has exited with code 0 (0x0).   不知道哪块出了错

回复:
user: user-0
content: 不是这个错误，是有空地址，但不知道在哪

user: user-1
content: 楼主的程序没有输出呢，调用POP的地方呢？ 程序属于正常退出了吧
user-0 提问: 用c语言解题

回复:
user: user-1
content: 引用 4 楼 Milo Tuan 的回复:有个地方我还是不太理解，为什么那里是(result == 63)呀？ 位运算，结果是63，即0x3F。

user: user-0
content: 引用 2 楼 ctrigger的回复:仅供参考： #include <stdio.h>  int main(void) { 	int num, result, foot1, foot2; 	 	for(num = 50; num < 250; num++) 	{ 		foot1 = 2*num; 		foot2 = 4*num; 		 		result = 0; 		result |= (1 << (foot1 % 10)); 		result |= (1 << (foot1 % 100 / 10)); 		result |= (1 << (foot1 / 100)); 		 		result |= (1 << (foot2 % 10)); 		result |= (1 << (foot2 % 100 / 10)); 		result |= (1 << (foot2 / 100));		 		 		if(result == 63) 		{ 			printf("鸡数:\t%d脚数:\t%d\n", num, 2*num); 			printf("兔数:\t%d脚数:\t%d\n", num, 4*num); 		} 	} 	 	return 0; }  运行结果： E:\Workspace>tcc -run demo.c 鸡数:   76脚数: 152 兔数:   76脚数: 304 有个地方我还是不太理解，为什么那里是(result == 63)呀？

user: user-0
content: 引用 2 楼 ctrigger的回复:仅供参考： #include <stdio.h>  int main(void) { 	int num, result, foot1, foot2; 	 	for(num = 50; num < 250; num++) 	{ 		foot1 = 2*num; 		foot2 = 4*num; 		 		result = 0; 		result |= (1 << (foot1 % 10)); 		result |= (1 << (foot1 % 100 / 10)); 		result |= (1 << (foot1 / 100)); 		 		result |= (1 << (foot2 % 10)); 		result |= (1 << (foot2 % 100 / 10)); 		result |= (1 << (foot2 / 100));		 		 		if(result == 63) 		{ 			printf("鸡数:\t%d脚数:\t%d\n", num, 2*num); 			printf("兔数:\t%d脚数:\t%d\n", num, 4*num); 		} 	} 	 	return 0; }  运行结果： E:\Workspace>tcc -run demo.c 鸡数:   76脚数: 152 兔数:   76脚数: 304 啊谢谢谢谢谢谢！

user: user-1
content: 仅供参考： #include <stdio.h>  int main(void) { 	int num, result, foot1, foot2; 	 	for(num = 50; num < 250; num++) 	{ 		foot1 = 2*num; 		foot2 = 4*num; 		 		result = 0; 		result |= (1 << (foot1 % 10)); 		result |= (1 << (foot1 % 100 / 10)); 		result |= (1 << (foot1 / 100)); 		 		result |= (1 << (foot2 % 10)); 		result |= (1 << (foot2 % 100 / 10)); 		result |= (1 << (foot2 / 100));		 		 		if(result == 63) 		{ 			printf("鸡数:\t%d脚数:\t%d\n", num, 2*num); 			printf("兔数:\t%d脚数:\t%d\n", num, 4*num); 		} 	} 	 	return 0; }  运行结果： E:\Workspace>tcc -run demo.c 鸡数:   76脚数: 152 兔数:   76脚数: 304

user: user-2
content: 建议从网上搜一下吧，这样的题目很普遍了，遇到的人也很多。
user-0 提问: 求大佬这个怎么写

回复:
user: user-0
content: 谢谢啦不过我是刚入门，这些似乎还没学

user: user-1
content: int find_substr_first_pos(const char *str, const char *substr) {     const char *pstr = str;     int i = 0, pos = -1;      while (pstr[i]) {         if (strncmp(pstr+i, substr, strlen(substr)) == 0) {             pos = i;             break;         }     }      return pos; } 供参考～  没有测试，建议楼主调用一下并测试一下吧
user-0 提问: 刚开始学C语言，努力学习中

回复:
user: user-0
content: ok了大哥，我知道是哪里的问题了  多谢你了帮我找出了那么大的错误！！！谢谢！！！

user: user-0
content: #include<stdio.h> #include<math.h> int main() {     double eps,S=0;     int a=1,j;     scanf("%lf",&eps);     for(j=1;;j+=3)     {         S+=a*1.0/j;         a=(-1)*a;         if(1/j<=eps) break;     }     printf("sum = %.6f",S);     return 0; } (那大哥我后面改成这样了，pta上显示依旧有很大的错误，你能帮我找找吗，我找了很久了）再次感谢大哥的回答

user: user-1
content: S没有初始化，另外，S也不应该是double类型，S%2取余操作针对浮点数有这样的运算吗？我听说过整型数有取余操作
user-0 提问: 小白求助（关于自定义函数）

回复:
user: user-0
content: #include <stdio.h> int i, n = 0, a[5]; int min(int a[5], int n, int i) {     for (int j = i + 1; j < 5; j++)         if (a[i] > a[j])         {             int min = a[i];             a[i] = a[j];             a[j] = min;         }         return a[5]; } int sort(int a[5], int i) {     int min(int a[5], int, int);     for (i = n; i < 5; i++)     {         return min(a, n, i);     } } int main() {     printf("enter 5 integers:");     scanf("%d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4]);     printf("sorted numbers are:");     for (i = 0; i < 5; i++)     {         printf("%d ", sort(a, i));     }     printf("\n");     return 0; } 以上是原代码 感觉挺多地方有错。。。然后n是用来控制排序函数的开始值的

user: user-1
content: 引用 2 楼 啊6吧 的回复:[quote=引用 1 楼 自信男孩的回复:]sort函数调用的时候传参有问题，min函数也是一样的；  另外，sort函数里的处理越界了。  建议楼主把代码贴出来～ 图片里的就是源代码呀[/quote] 那你的问题就是这样导致的呀，只看我最后一句，没看前面的内容吗？我的意思，你直接提出代码还能帮你在代码上修改一下，不贴代码，只发照片，给你改不了代码。

user: user-2
content: 1、C++有个min的宏定义，函数不能命名min 2、min函数没有返回值 3、sort函数最后没有返回值 ('sort': not all control paths return a value) 4、sort函数调用min函数，第一个参数传错了。return min(a, n, i); 5、main函数中调用sort函数，第一个参数传错了。sort(a, i); 6、没看懂n有啥用

user: user-0
content: 引用 1 楼 自信男孩的回复:sort函数调用的时候传参有问题，min函数也是一样的；  另外，sort函数里的处理越界了。  建议楼主把代码贴出来～ 图片里的就是源代码呀

user: user-1
content: sort函数调用的时候传参有问题，min函数也是一样的；  另外，sort函数里的处理越界了。  建议楼主把代码贴出来～
user-0 提问: 这个关于矩阵的程序怎么写？

回复:
user: user-1
content: void MatrixAdd(int* a, int* b, int* r, int len) { 	for (int i = 0; i < len; ++i) 	{ 		r[i] = a[i] + b[i]; 	} }  void MatrixSub(int* a, int* b, int* r, int len) { 	for (int i = 0; i < len; ++i) 	{ 		r[i] = a[i] - b[i]; 	} }  void MatrixDisplay(int* m, int row, int col) { 	for (int i = 0; i < row; ++i) 	{ 		for (int j = 0; j < col; ++j) 		{ 			printf("%d\t", m[i * col + j]); 		}  		printf("\r\n"); 	}  	printf("\r\n"); }  void MatrixTest(void) { 	srand(GetTickCount());  	int row = 0; 	int col = 0;  	printf("键盘输入矩阵行数、列数(m n格式)：\r\n"); 	scanf_s("%d %d", &row, &col);  	int len = row * col;  	int* a = new int[len]; 	int* b = new int[len]; 	for (int i = 0; i < len; ++i) 	{ 		a[i] = rand() % 100; 		b[i] = rand() % 100; 	}  	printf("矩阵a=\r\n"); 	MatrixDisplay(a, row, col);  	printf("矩阵b=\r\n"); 	MatrixDisplay(b, row, col);  	int* r = new int[len];  	printf("矩阵a+b=\r\n"); 	MatrixAdd(a, b, r, len); 	MatrixDisplay(r, row, col);  	printf("矩阵a-b=\r\n"); 	MatrixSub(a, b, r, len); 	MatrixDisplay(r, row, col);  	delete[] a; 	delete[] b; 	delete[] r; }
user-0 提问: 用函数调用的方式，求1个一维浮点型数组的最大值，最小值，和（提示：定义三个函数，每个函数都必须有返回参数）。

回复:
user: user-1
content: 供参考：#include <iostream.h> #define N 10 double arrayMax(double *arr, int n) {     int i;     double tmp;     tmp = arr[0];     for(i=0;i<n;i++)     {         if (tmp<arr[i])             tmp = arr[i];     }     return tmp; }  double arrayMin(double *arr, int n) {     int i;     double tmp;     tmp = arr[0];     for(i=0;i<n;i++)     {         if (tmp>arr[i])             tmp = arr[i];     }     return tmp; } double arraySum(double *arr,int n) {     int i;     double sum=0;     for(i=0;i<n;i++)     {        sum += arr[i];     }     return sum; }  int main() {    double array[N];    int i;     for ( i = 0 ; i < N ; i ++ )     {      if ( i % 2 )  array[ i ] = i * i ;       else array[ i ] = 100 - ( i / 2 ) * ( i / 2 ) ;     }    for ( i = 0 ; i < N ; i ++ )        cout << array[ i ]<<"\t" ;        cout << endl ;    cout<<"Max in Array is "<< arrayMax(array,N)<<endl;   cout<<"Min in Array is "<< arrayMin(array,N)<<endl;   cout<<"Sum of Array is "<< arraySum(array,N)<<endl;   system("pause");   return 0; }

user: user-2
content: 最大值： double arrayMax(double *arr, int n) {     int i;     double tmp;     tmp = arr[0]     for(i=0,i<n;=++)     {         if (tmp<arr[i])             tmp = arr[i];     }     return tmp; }   double arrayMin(double *arr, int n); double arraySum(double *arr,int n);
user-0 提问: 大佬们能不能帮我康康我的代码哪里错了

回复:
user: user-1
content: 而且，输入 3 0 0 0时，输出结果应该为 3: 0 但是代码的结果却是 0: 0 1 2 3 4 5 6 7 8 9 因为没有进入while(x>0)，所以a[0]没有被累加

user: user-1
content: n输入0的时候，结果会输出 0: 0 1 2 3 4 5 6 7 8 9 这个结果符合不符合题目要求，如果不符合，要去掉这个结果（程序加个判断n大于0才继续做处理）

user: user-2
content: 修改如下，供参考：#include<stdio.h> int main(int argc, char* argv[]) {       int n,i,x,max=0;       int a[10]={0};         scanf("%d",&n);        if(n==0) return 1;//如果n=0就退出         for(i=0;i<n;i++)         {           scanf("%d",&x);           if(x==0)   //这里加入对‘0’的计数            {              a[0]++;            }           else            {              while(x!=0)//这里判断条件改成'x!=0'              {                a[x%10]++;                x /= 10;              }            }         }        for(i=0;i<10;i++)           if(a[i]>max)                max=a[i];        printf("%d:",max);         for(i=0;i<10;i++)           if(max==a[i])               printf(" %d",i);        printf("\n");       return 0; }
user-0 提问: 请帮忙翻译下面代码，谢谢！

回复:
user: user-1
content: 前面6行给数组赋值，初始化数组。 最后一行调用函数，最后一个参数传数组地址。 貌似这个函数调用只传了数组首地址，没传数组大小啊。

user: user-2
content: 确实是没头没尾的代码， filter过滤器 signal信号 mem内存(应该是内存缓冲区)

user: user-3
content: "//"后面的内容是注释语句

user: user-4
content: 这没头没尾的代码，仅看代码是 给sos数组第1到第6个元素进行了赋值，然后调用了一个函数，其中sos数组地址作为最后一个参数

user: user-0
content: 顶一下，来个人回复下
user-0 提问: 请问这个输入行数n，输出n行杨辉三角错在哪了？求解

回复:
user: user-1
content: scanf（“%d”，&n）这句未尾缺“；”号 printf (“杨辉三角\n”）；这句缺\n  if (n <=0)printf (“数据录入不正确”）；应该移到while ()语句前。

user: user-2
content: 错误： 1. scanf后面没； 2. return 0; 语句缩进不对
user-0 提问: qtwebengine ninja: build stopped: subcommand failed.

回复:
user: user-1
content: 我在银河麒麟系统arm64下编译qt5.51.0也遇到ninja: build stopped: subcommand failed.该咋解决呢？

user: user-2
content: 解决没？

user: user-0
content: 没什么好办法，把整个系统的qt上提了一个版本，重新编译就好了

user: user-2
content: 没用啊

user: user-3
content: 什么叫提上了一个版本？
user-0 提问: 使用C语言用函数调用的方式，求1个一维浮点型数组的最大值，最小值，和（提示：定义三个函数，每个函数都必须有返回参数）。

回复:
user: user-1
content: 仅供参考： #include <stdio.h>  void func(double *a, int n, double *max, double *min, double *sum) { 	int i; 	*max = *min = *sum = a[0]; 	for(i=1; i<n; i++) 	{ 		if(*max < a[i]) *max = a[i]; 		if(*min > a[i]) *min = a[i]; 		*sum = *sum + a[i]; 	} }  int main(void) { 	double a[10] = {0.1,1.2,2.3,3.4,4.5,5.6,6.7,7.8,8.9,9.0}; 	double max, min, sum; 	func(a, 10, &max, &min, &sum); 	printf("MAX:\t%.2lf\nMIN:\t%.2lf\nSUM:\t%.2lf\n", max, min, sum); 	 	return 0; }
user-0 提问: 调用函数出现问题

回复:
user: user-0
content: 想了半天没想到是这里出错了。。谢谢大家

user: user-1
content: 原因楼上已经说了； for(i=1;score[i-1]>=0;i++) 改一下 for(i=1;i < n && score[i]>=0;i++) 防止越界～

user: user-2
content: for(i =1;i <=n-1;n ++)这句把n ++了，i 始终是1，死循环里出不来了。

user: user-3
content: LIST函数中的循环：for (i = 1; i <= n - 1; n++) n++ ==> i++
user-0 提问: 求教用c语言解析HTTP报文（请求报文，响应报文）

回复:
user: user-1
content: 请教，你后来是怎么处理的啊？

user: user-2
content: 看博客效果不一定好，最权威的就是RFC。 HTTP 1.1 RFC 2616 再结合抓包工具，如fiddler。有耐心，慢慢折腾即可。。
user-0 提问: windows 下 串口当作文件来操作时，fread()读不到内容

回复:
user: user-0
content: cnt = fread(buff,1,sizeof(buff),fp);             if (cnt)             {                 printf("data:%s\n",buff);             } 用read()可以,fread()不行。

user: user-1
content: 应换read

user: user-2
content: printf("data:\t\n",buff2); 你看看你这写的是个啥？
user-0 提问: 如何用c语言统计一个文件夹中所有的txt文件的字数总和

回复:
user: user-1
content: glob的作用是获取txt文件的名字; 正则表达式用于求取字数;

user: user-1
content: 情况很复杂，文件夹中可能还包括文件夹，可能有多层文件夹，需要递归处理。perl/python中用glob处理，如果必须用C语言，你需要实现glob和正则表达式功能。

user: user-2
content: 开始 - opendir - readdir - (.txt文件，处理，非.txt，跳过，目录，递归。）- 结束

user: user-3
content: 目录的打开，readdir和文件的打开读取关闭等等操作，建议楼主找一下这些系统调用函数～

user: user-0
content: 文本都是英文，题目如下 老师给出了一部分c代码，我们对文件夹中的txt进行了停用词删除，现在就想知道如何计算出文件夹中112个txt文件由于停用词的删除，文件中字数的百分比减少是多少？

user: user-2
content: 引用 5 楼 真相重于对错 的回复:这个问题有个难点，就是字符的判断，如果都是英文，或者都是中文，好处理，如果中英文混编，需要根据txt编码处理 对，就是这样的，需要判断编码。  比如中文：UTF-8，3个字节。GBK，2个字节。

user: user-4
content: 这个问题有个难点，就是字符的判断，如果都是英文，或者都是中文，好处理，如果中英文混编，需要根据txt编码处理

user: user-2
content: 引用 3 楼 proorck2019 的回复:glob的作用是获取txt文件的名字; 正则表达式用于求取字数; 杀鸡焉用牛刀
user-0 提问: C语言：关于getche被跳过的疑问，请大佬教教我吧

回复:
user: user-0
content: 是的是的，谢谢各位，我刚才改好了，也通过了，这真是好弱智的问题 麻烦各位大佬啦

user: user-1
content: ch[i-1][0]!='\0' 这个判断，当i为0时，i-1已经是-1，已经是越界了。越界访问结果是未定义的，楼主的ch[-1][0]可能正好是0，所以输入的循环没有执行～

user: user-2
content: 1、for(i=0;ch[i-1][0]!='\0';i++) 数组越界  ch[i-1][0] => ch[-1][0] 2、ch[i][j - 1] = ch[i][j] = 0; 此处也会越界 变量 j 有可能等于0 3、ch[i][j - 1] = ch[i][j] = 0; 最后一个字符被清掉 4、运行结果不对  123 +2  24请按任意键继续. . .
user-0 提问: 竞赛题怎么解

回复:
user: user-0
content: 引用 4 楼 qzjhjxj的回复:供参考：#include <math.h> #include <stdio.h> #define N 50 #define M 2  int main(int argc, char* argv[]) {    int i,j,h,n;    float max=0;     float score[N][M]={0},a_space[N]={0};     printf("请输入运动员人数：");     while(1)    {      scanf("%d",&n);      if(n==0) break;       for(i=0;i<n;i++)         for(j=0;j<M;j++)           scanf("%f",&score[i][j]);       for(i=0;i<n;i++)        {          for(j=0;j<M;j++)             a_space[i] += score[i][j]*score[i][j];          a_space[i] = sqrt(a_space[i]);        }       max=a_space[0];      for(i=0;i<n;i++)        {            if(max<a_space[i])            {              max=a_space[i];              h  = i+1 ;            }        }      printf("冠军是 NO.%d 号，成绩=%f\n",h,max);    }    return 0; } 我自己写出来了，不过还是很感谢你

user: user-0
content: 引用 2 楼 user-3的回复:擦，写错了，应该是max清零   while(1) {     max = 0;     scanf("%d", &n);     // 之后的代码与你相同 }  老哥，我刚发布的时候就解决了，max直接在循环里面定义就好了不过还是谢谢哈

user: user-1
content: 依题意，这句该定义：#define N 100

user: user-1
content: 供参考：#include <math.h> #include <stdio.h> #define N 50 #define M 2  int main(int argc, char* argv[]) {    int i,j,h,n;    float max=0;     float score[N][M]={0},a_space[N]={0};     printf("请输入运动员人数：");     while(1)    {      scanf("%d",&n);      if(n==0) break;       for(i=0;i<n;i++)         for(j=0;j<M;j++)           scanf("%f",&score[i][j]);       for(i=0;i<n;i++)        {          for(j=0;j<M;j++)             a_space[i] += score[i][j]*score[i][j];          a_space[i] = sqrt(a_space[i]);        }       max=a_space[0];      for(i=0;i<n;i++)        {            if(max<a_space[i])            {              max=a_space[i];              h  = i+1 ;            }        }      printf("冠军是 NO.%d 号，成绩=%f\n",h,max);    }    return 0; }

user: user-2
content: 在for循环前或循环后对max清零操作都是没问题的。如果不清零，那么上次计算得到的max可能会影响到下一组的结果～

user: user-3
content: 擦，写错了，应该是max清零   while(1) {     max = 0;     scanf("%d", &n);     // 之后的代码与你相同 }

user: user-3
content: 每次输入之前，需要把sum清零，  while(1) {     sum = 0;     scanf("%d", &n);     // 之后的代码与你相同 }
user-0 提问: C语言上手就废( •̥́ ˍ •̀ू )嘤嘤嘤~

回复:
user: user-1
content: visual studio IDE： #include <stdio.h> #include <stdlib.h>  int main() { 	char rs2[1024], rs8[1024], rs16[1024]; 	int data; 	scanf_s("%d", &data);  	if (data < 0 || data > 255) 	{ 		printf("输入有误\n"); 		return 1; 	}  	_itoa_s(data, rs2, 2); 	_itoa_s(data, rs8, 8); 	_itoa_s(data, rs16, 16);  	printf("二进制：%s\n八进制：%s\n十六进：%s\n", rs2, rs8, rs16);  	return 0; }

user: user-1
content: 仅供参考： #include <stdio.h> #include <stdlib.h>  int main(void) { 	char rs2[1024], rs8[1024], rs16[1024]; 	int data, d; 	scanf("%d", &data); 	 	if(data < 0 || data > 255) 	{ 		printf("输入有误\n"); 		return 1; 	} 	 	itoa(data, rs2, 2); 	itoa(data, rs8, 8); 	itoa(data, rs16, 16); 	 	printf("二进制：%s\n八进制：%s\n十六进：%s\n", rs2, rs8, rs16);  	return 0; }

user: user-2
content: strtol函数，用这个试试～
user-0 提问: 三维数组

回复:
user: user-1
content: 第二种形式从未见过，可能是python中有类似写法。C语言是一门古老的语言，应该并不支持新的写法。

user: user-2
content: a[2][3][4]：这个是C标准语法。 a[2,3,4]：   这个在C语言中没见过。

user: user-3
content: 《C++Primer第5版中文版》中提到： 当一个数组的元素仍是数组时，通常使用两个维度来定义它：一个维度表示数组本身大小，另外一个维度表示其元素（也是数组）的大小。 所以， float a[2][3][4]; 表示数组a中有2个元素，每个元素的大小是[3][4]

user: user-4
content: c/c++里应该没有float a[2,3,4]这样的

user: user-5
content: 第二种错误

user: user-6
content: 标准语法应该只支持float a[2][3][4]吧 扩展语法就看编译器支持不支持了

user: user-7
content: 不是Python，是Pascal，Pascal中a[2][3][4]、a[2][3,4]、a[2,3][4]、a[2,3,4]等价
user-0 提问: 小白求解

回复:
user: user-1
content: 这种测试程序会把代码运行多次，每次输入不同的值，并判断输出是否正确。对于某些测试用例，你的代码不能通过。

user: user-2
content: int mask[256]{ 0 }; int main() { 	char src[10000], patten[10000], dest[10000]; 	gets_s(src); 	gets_s(patten); 	int k = 0; 	for (int i = 0; i < strlen(patten); i++) 	{ 		mask[patten[i]]++; 	} 	for (int j  = 0; j < strlen(src); j++) 	{ 		if (mask[src[j]] == 0) 		{ 			dest[k] = src[j]; 			k++; 		} 	} 	dest[k] = '\0'; 	printf("%s", dest); }

user: user-3
content: 楼主，第一种方法在for（）循环中的判断条件有问题：引用for(i=0;i!='\n';i++){ temp=1; for(j=0;j!='\n';j++){ 按第一种方法修改如下,供参考：#include <stdio.h> #define N 10001  int main(int argc, char* argv[]) {     int i,j,temp;     char a[N],b[N];      gets(a);     gets(b);     for(i=0;a[i]!='\0';i++)       {         temp=1;         for(j=0;b[j]!='\0';j++)           {             if(a[i]==b[j])              {                temp=0;                break;              }           }         if(temp==1)         {           printf("%c",a[i]);         }      }     printf("\n");     system("pause");     return 0; }
user-0 提问: 求大佬看看这一题

回复:
user: user-1
content: 01 02    	10        	20        这四个位置的数相加，完事了

user: user-2
content: 修正一下： #include <stdio.h>  int main() { 	int a[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 	int sum = 0; 	int i, j; 	 	for(i=0; i<3; i++) 	{ 		for(j=0; j<3; j++) 		{ 			if(i != j && i+j != 3) 			{ 				sum = sum + a[i][j]; 			} 		} 	} 	 	printf("%d\n", sum);  	return 0; }
user-0 提问: 求大佬看看这一题

回复:
user: user-0
content: 谁能帮忙看看这个题  5、对于字符串“abcdefghijklmn”，读入两个数字，比如begin、num，假定begin为1，num为5，则动态申请内存，存放子串“bcdef”，最后输出该子串。简化起见，假定begin、num都在有效范围内。设计main函数, 同时要展示出字符串和动态内存的地址。

user: user-1
content: 01 02    	10        	20        这四个位置的数相加，完事了

user: user-2
content: 上面错了，修正一下： #include <stdio.h>  int main() { 	int a[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 	int sum = 0; 	int i, j; 	 	for(i=0; i<3; i++) 	{ 		for(j=0; j<3; j++) 		{ 			if(i != j && i+j != 3) 			{ 				sum = sum + a[i][j]; 			} 		} 	} 	 	printf("%d\n", sum);  	return 0; }
user-0 提问: 求解错误

回复:
user: user-1
content: 应该是{}不配对，少了一个。把代码格式化一起缩进对齐看看哪一块少了}

user: user-2
content: 代码不是猜出来的，需要看完整代码～

user: user-3
content: player2move=2 少个;

user: user-0
content: D:\未命名3.cpp	In function 'int main()': 8	2	D:\未命名3.cpp	[Error] expected ';' before 'if' 19	1	D:\未命名3.cpp	[Error] expected '}' at end of input

user: user-3
content: 看到了，英文单词写错了 Youer  -> your

user: user-3
content: 这啥意思，编译不过吗？只有一半的代码，没法看哪里错了
user-0 提问: 求大佬解答！这个输入0.02，为什么不出来运行结果？

回复:
user: user-0
content: 明白了，谢谢

user: user-1
content: 引用 3 楼 尘溪 的回复:可是加了 flag*1.0/(i + 3)之后还是运行不出来结果，输入0.02回车之后，光标一直闪，没有运行出结果。 你这代码逻辑有问题。参考我的代码，修改。。

user: user-0
content: 可是加了 flag*1.0/(i + 3)之后还是运行不出来结果，输入0.02回车之后，光标一直闪，没有运行出结果。

user: user-2
content: flag*1.0/(i + 3) 确保该运算是浮点类型的运算，不加则按照整型的除法来运算，得到的是整型值

user: user-1
content: 仅供参考： #include <stdio.h> #include <math.h>  int main() { 	double t, eps, i = 1, sum = 1; 	int flag = 1; 	scanf("%lf", &eps); 	do 	{ 		i = i + 3; 		flag = -flag; 		t = 1.0 * flag / i; 		sum = sum + t;  	} while (fabs(t) > eps); 	printf("sum = %.6lf", sum);  	return 0; }
user-0 提问: 构造出哈夫曼树了求哈夫曼编码

回复:
user: user-1
content: https://blog.csdn.net/mdjros/article/details/97140637

user: user-0
content: 引用 1 楼 user-2的回复:严蔚敏老师的数据结构(C语言版)之P146，很详细介绍，一看就懂的。 有没有链接有没有链接可以用

user: user-2
content: 严蔚敏老师的数据结构(C语言版)之P146，很详细介绍，一看就懂的。
user-0 提问: Linux经典书籍推荐

回复:
user: user-0
content: 还有大神回复吗

user: user-1
content: 《Linux环境下C编程》，《C prime plus》， 《C++ prime plus》

user: user-2
content: UNIX环境高级编程 —— UNIX/Linux系统编程圣经 UNIX网络编程 TCP/IP详解 Linux内核设计与实现 深入理解Linux内核 Linux设备驱动程序
user-0 提问: 小白求解

回复:
user: user-1
content: 有点糊涂，但是我看到了两个i++，和一句m=m

user: user-2
content: 自己的代码最好加上注释，或者讲下自己的思路，这样友好一些。

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h>  int main() {     static char str[10001];     int len, i;     unsigned long long sum ;      while (scanf("%s", str) != EOF) {         sum = 0;         len = strlen(str);         for (i = 0; i < len; i++)             if (str[i] != '0')                 sum += (unsigned long long)pow(2, len - i - 1) * (str[i] - '0');         //printf("%llu\n", sum);         if (sum % 3 == 0)             printf("YES\n");         else             printf("No\n");      } #if 0     char a[10001];     while(scanf("%s",a) != EOF)     {         int i=0,yusu=0,m;         while(a[i]!='\0')         {             m=yusu*10+(a[i]-'0');             if(m<11)             {                 i++;                 if(a[i]=='\0')                     m=m;                 else                     m=m*10+(a[i]-'0');             }             yusu=m%11;             i++;         }         if(yusu==0)             printf("YES\n");         else             printf("NO\n");     } #endif } 优化一下，供参考～

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h>  int main() {     static char str[10001];     int len, i;     unsigned long long sum ;      while (scanf("%s", str) != EOF) {         sum = 0;         len = strlen(str);         for (i = 0; i < len; i++)             sum += (unsigned long long)pow(2, len - i - 1) * (str[i] - '0');         //printf("%llu\n", sum);         if (sum % 3 == 0)             printf("YES\n");         else             printf("No\n");      } #if 0     char a[10001];     while(scanf("%s",a) != EOF)     {         int i=0,yusu=0,m;         while(a[i]!='\0')         {             m=yusu*10+(a[i]-'0');             if(m<11)             {                 i++;                 if(a[i]=='\0')                     m=m;                 else                     m=m*10+(a[i]-'0');             }             yusu=m%11;             i++;         }         if(yusu==0)             printf("YES\n");         else             printf("NO\n");     } #endif } 供参考～
user-0 提问: 萌新不知道错哪了

回复:
user: user-1
content: #include<stdio.h> #define N 90 double fuxc(double x, int n) { 	int i; 	double f[N],s; 	if (n == 0) 	{ 		s = 1; 	} 	if (n == 1) 	{ 		s = x; 	} 	if(n>1) 	{ 		f[0] = 1; 		f[1] = x; 		for(i=2;i<=n;i++) 		{ 			f[i]=(2.0*i-1)/i*x*f[i-1]-(i-1)/i*f[i-2]; 		} 		s = f[n]; 	} 	return s; }  int main() { 	double x,z; 	int n; 	scanf("%lf %d", &x,&n); 	z=fuxc(x, n); 	printf("%.2lf", z); 	return 0; }

user: user-2
content: 楼主应该是想写递归的算法，修改如下，供参考：#include<stdio.h> double fuxc(double x,int n) {     double s;     if(n==0)         return 1;     else if(n==1)             return x;          else             {               s=((2*n-1)*x* fuxc(x,n-1) -(n-1)* fuxc(x,n-2))/n*1.0;               return s;             } }   int main(int argc, char* argv[]) {     double x,z;     int n;     scanf("%lf %d", &x, &n);     z = fuxc(x, n);     printf("%.2lf\n", z);     system("pause");     return 0; }

user: user-1
content: 你给出勒让德多项式的定义

user: user-3
content: f[0]=0; 改成 f[0]=1; 否则 i*f[i-2]就发生除以0错误了

user: user-4
content: 没语法错误，肯定是逻辑错误。 你也没贴出来多项式是什么样子的，谁能帮你？？？
user-0 提问: 求助 C语言中如何利用数组计算两个坐标之间的距离

回复:
user: user-0
content: 主函数怎么写啊

user: user-1
content: #include <math.h>  double calculateDistance(double x1, double y1, double x2, double y2) {     return sqrt(       (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)        ) }

user: user-1
content: 很简单嘛，哪里不会？
user-0 提问: 为什么文件无法打开呀？

回复:
user: user-1
content: 引用 5 楼 qq_46029678 的回复:[quote=引用 4 楼 自信男孩 的回复:][quote=引用 3 楼 qq_46029678 的回复:][quote=引用 1 楼 自信男孩 的回复:]  if((fp=fopen("Fname", "r"))==NULL){  /*打开数据文件*/ 这句有问题，改成：   if((fp=fopen(Fname, "r"))==NULL){  /*打开数据文件*/  你写的代码，是要打开文件名为Fname的文件，不是你输入的文件名，因为变量Fname存放的就是文件路径的字符串；但是还是不行，实际上我直接复制了文件路径，然后出现了Debug Assertion Failed，大佬麻烦你再看看，谢谢[/quote] 那你打印一下Fname是多少？是不是你输入的路径呢？在打开之前打印一下[/quote] 我晓得，真正的问题是，我插入函数EnQueue里面的free（p）出了问题，好像是多次释放指针造成的，但是我不晓得为啥子多次释放了，我感觉就每次使用，然后用完了就释放了呀[/quote] 你的问题是打开文件，没仔细看你的其他问题～

user: user-0
content: 引用 4 楼 自信男孩 的回复:[quote=引用 3 楼 qq_46029678 的回复:][quote=引用 1 楼 自信男孩 的回复:]  if((fp=fopen("Fname", "r"))==NULL){  /*打开数据文件*/ 这句有问题，改成：   if((fp=fopen(Fname, "r"))==NULL){  /*打开数据文件*/  你写的代码，是要打开文件名为Fname的文件，不是你输入的文件名，因为变量Fname存放的就是文件路径的字符串；但是还是不行，实际上我直接复制了文件路径，然后出现了Debug Assertion Failed，大佬麻烦你再看看，谢谢[/quote] 那你打印一下Fname是多少？是不是你输入的路径呢？在打开之前打印一下[/quote] 我晓得，真正的问题是，我插入函数EnQueue里面的free（p）出了问题，好像是多次释放指针造成的，但是我不晓得为啥子多次释放了，我感觉就每次使用，然后用完了就释放了呀

user: user-1
content: 引用 3 楼 qq_46029678 的回复:[quote=引用 1 楼 自信男孩 的回复:]  if((fp=fopen("Fname", "r"))==NULL){  /*打开数据文件*/ 这句有问题，改成：   if((fp=fopen(Fname, "r"))==NULL){  /*打开数据文件*/  你写的代码，是要打开文件名为Fname的文件，不是你输入的文件名，因为变量Fname存放的就是文件路径的字符串；但是还是不行，实际上我直接复制了文件路径，然后出现了Debug Assertion Failed，大佬麻烦你再看看，谢谢[/quote] 那你打印一下Fname是多少？是不是你输入的路径呢？在打开之前打印一下

user: user-1
content: if((fp=fopen("Fname", "r"))==NULL){  /*打开数据文件*/ 这句有问题，改成：   if((fp=fopen(Fname, "r"))==NULL){  /*打开数据文件*/  你写的代码，是要打开文件名为Fname的文件，不是你输入的文件名，因为变量Fname存放的就是文件路径的字符串；

user: user-0
content: 引用 1 楼 自信男孩 的回复:  if((fp=fopen("Fname", "r"))==NULL){  /*打开数据文件*/ 这句有问题，改成：   if((fp=fopen(Fname, "r"))==NULL){  /*打开数据文件*/  你写的代码，是要打开文件名为Fname的文件，不是你输入的文件名，因为变量Fname存放的就是文件路径的字符串；但是还是不行，实际上我直接复制了文件路径，然后出现了Debug Assertion Failed，大佬麻烦你再看看，谢谢

user: user-0
content: 但是还是不行，实际上我直接复制了文件路径，然后出现了Debug Assertion Failed，大佬麻烦你再看看，谢谢
user-0 提问: 各位大佬，我想知道我这个折半法查找序数哪儿错了

回复:
user: user-0
content: 谢谢大佬(*°∀°)=3

user: user-0
content: 引用 1 楼 宇来风满楼的回复:看不懂报错的吗 没有报错，只是运行的答案不正确

user: user-1
content: 仅供参考： #include <stdio.h>  int main(void) { 	int a[15] = {14,13,12,11,10,9,8,7,6,5,4,3,2,1,0}; 	int x, mid, left = 0, right = 14; 	 	printf("请输入一个数字："); 	scanf("%d", &x); 	 	while(left <= right) 	{ 		mid = (left + right)/2; 		 		if(a[mid] == x) break; 		else if(a[mid] > x) left = mid + 1; 		else right = mid - 1; 	} 	 	if(left <= right) printf("x在数组中第%d个元素\n", mid); 	else printf("%d不在数组中\n", x); 	 	return 0; }

user: user-2
content: 看不懂报错的吗
user-0 提问: 数据结构中引用和指针的区别

回复:
user: user-1
content: 引用必须赋初值，且不能改变，而指针可以。

user: user-2
content: 而且引用这个概念就是编译期，也就是说是语言层面的  引用 6 楼 ctrigger 的回复:[quote=引用 5 楼 真相重于对错 的回复:]引用和指针不能完全互换。否则c++不会引入这个多余的盲肠 举个例子 class A{   public:     A& operator=(const A& rh);     A operator+(const A& rh); } A a,b,c,d,e; 如果用指针，怎么写出   a=b=c=d+e;  “C++中引用的本质，通过反汇编手段揭示了引用的底层实现机与指针实质是一样的。” 也就说明引用的底层实现用的就是指针。你觉得指针行不行呢？？？[/quote] 如果不考虑语言，只考虑最后编译的结果的，当然可以，但是那样，为何我们要发明高级语言，不直接用汇编，甚至用01呢。

user: user-2
content: 引用 6 楼 ctrigger 的回复:[quote=引用 5 楼 真相重于对错 的回复:]引用和指针不能完全互换。否则c++不会引入这个多余的盲肠 举个例子 class A{   public:     A& operator=(const A& rh);     A operator+(const A& rh); } A a,b,c,d,e; 如果用指针，怎么写出   a=b=c=d+e;  “C++中引用的本质，通过反汇编手段揭示了引用的底层实现机与指针实质是一样的。” 也就说明引用的底层实现用的就是指针。你觉得指针行不行呢？？？[/quote] 我说的是语言，建议了解一下c++的重载操作符。

user: user-2
content: 没有c/c++,汇编一样编程，没有汇编，扎纸带一样编程，不要太纠结这个

user: user-3
content: 没有引用，只有指针的时候 也能编程，不要太纠结这个

user: user-4
content: 引用 5 楼 真相重于对错 的回复:引用和指针不能完全互换。否则c++不会引入这个多余的盲肠 举个例子 class A{   public:     A& operator=(const A& rh);     A operator+(const A& rh); } A a,b,c,d,e; 如果用指针，怎么写出   a=b=c=d+e;  “C++中引用的本质，通过反汇编手段揭示了引用的底层实现机与指针实质是一样的。” 也就说明引用的底层实现用的就是指针。你觉得指针行不行呢？？？

user: user-2
content: 引用和指针不能完全互换。否则c++不会引入这个多余的盲肠 举个例子 class A{   public:     A& operator=(const A& rh);     A operator+(const A& rh); } A a,b,c,d,e; 如果用指针，怎么写出   a=b=c=d+e;

user: user-4
content: 引用 3 楼 Minikinfish 的回复:引用比指针快 是不是说反了啊？？？ 引用的底层实现也是靠指针。指针直接暴力，当然更高效益一点。

user: user-5
content: 引用比指针快

user: user-4
content: 楼上分析很棒。。 我个人觉得还是用指针醒目，看起来更自然一点。

user: user-6
content: 能用引用的地方，都可以用指针。用指针的地方也可以用引用。 不过，引用是C++独特的（相对于C语言），C语言不支持这种语法。所以，你的讨论应该是在C++的范围内。  引用是丰富了指针的功能，可以用另一种形式来表达指针的作用。个人观点，供参考。 建议楼主详细的了解引用的定义，指针的定义以及在传递参数的区别与相同点，以及在内存中是否占用内存，占用多大内存等等这些信息
user-0 提问: 诸位大佬帮忙看看，这个1是哪里冒出来的？

回复:
user: user-1
content: printf("发放的奖金数为: %f万元\n",bonus);  => printf("发放的奖金数为: %.2f万元\n",bonus);

user: user-1
content: 浮点数表示问题，是近似值。
user-0 提问: sockt http问题

回复:
user: user-0
content: 自已动手学习学习

user: user-1
content: 你是要实现HTTP请求？首先了解一下OSI7层网络协议。  socket工作在传输层，你要收发并解析HTTP包，要自己写封包和解包。  window有现成的API函数可以直接使用HTTP请求，CInternetSession，或者使用libcurl，也非常好用。
user-0 提问: 求大佬帮我看看这道二叉树问题

回复:
user: user-1
content: isSubtree(s->left, t) //这里的递归没有判断s->left是不是null（null的情况是可能存在的），所以要在isSubtree里面做判断 isSubtree(s->right, t) //同理，这里也如此 如果改成 return isequal(s, t) || (s->left && isSubtree(s->left, t)) || (s->right && isSubtree(s->right, t)) 那么isSubtree函数内就不需要判断了 但是，从函数的设计来看，在isSubtree函数内判断s是合理的，因为用户在调用isSubtree，不一定会判断参数是否为null，所以函数内部要尽量保证能容错程序不崩溃。

user: user-2
content: if (!s) return false;  == 这是判断示例2的情况。。
user-0 提问: 新手求问，C语言中多个不加大括号的if语句连续使用该如何理解？

回复:
user: user-0
content: 引用 8 楼 qzjhjxj 的回复：int main(int argc, char* argv[]) {     int i=1,j=3,k=5,m=4;     do{         if(i%j==0)            if(i%k==0)               if(i%m==0)//这三个if语句，等价于：if(i%j==0 && i%k==0 && i%m==0)                {                 printf("%d\n",i);                 break;                }         i++;        }while(i!=0);     system("pause");     return 0; }谢谢大佬，明白了

user: user-1
content: int main(int argc, char* argv[]) {     int i=1,j=3,k=5,m=4;     do{         if(i%j==0)            if(i%k==0)               if(i%m==0)//这三个if语句，等价于：if(i%j==0 && i%k==0 && i%m==0)                {                 printf("%d\n",i);                 break;                }         i++;        }while(i!=0);     system("pause");     return 0; }

user: user-1
content: 把第二个程序稍加修改，楼主去试验下，就明白了：int main(int argc, char* argv[]) {     int i=1,j=3,k=5,m=4;     do{         if(i%j==0)            if(i%k==0)               if(i%m==0)                {                 printf("%d\n",i);                 break;                }         i++;        }while(i!=0);     system("pause");     return 0; }

user: user-2
content: 1的意思是if的条件成立，就执行一条if语句，所以最后那个大括号属于第三条（第三层）if语句的执行部分 2 i++不是if的执行语句，上面的情况和1类似 是if为true，则执行一个if语句，然后如果这第二层if为真，则执行下一条语句（或是下一个大括号内的所有语句）， 所以这两重if语句走到大括号结束就完了。判断方法就是if（xxx）之后只管一条语句，不用大括号的话 if （xx） s1;          // if到这儿就完了 s2;

user: user-1
content: 第一题：这个语句是属于if语句中的，如果要执行，必须是前面三个if条件全满足才会执行到。 第二题：i++；不属于if语句中的。c是以“；”号表示一条语句的结束，所以前面两个if之间没有结束符号，就表示这是同一条并列语句。

user: user-3
content: 从问题2的结果可以看出要所有的if语句满足条件才执行输出i，所以i一直累加到15,15可以整除j和k。

user: user-4
content: 这个i++不是if语句中的， 那个大括号里面的是两个if语句的作用域, 看大括号啊， 其实第一个if语句最好也加上大括号，或者改写两个if语句为一个与的判断

user: user-3
content: C语言中语句是以分号;或者大括号{}结束，所以问题1中的语句不属于if语句中。问题2中的i最终结果是15

user: user-5
content: 不属于。这语言等价的结构是这样的： #include<stdio.h> void main() { 	int i = 1, j = 3, k = 5; 	do { 		if (i % j == 0) 		{ 			if (i % k == 0) { 				printf("%d\n", i); 				break; 			} 		} 		i++; 	} while (i != 0); }
user-0 提问: 希望大神给讲解一下这道题

回复:
user: user-1
content: 第一个for（i=0;i<10;i++）            scanf("%d",&a[i]);  它的作用域就在scanf("%d",&a[i]);这句就结束了，循环十次，完成十个数值输入。 第四个for（i=0；i<10;i++）                          printf("%d",a[i]); 它的作用域就在 printf("%d",a[i]);这句，循环十次，完成打印输出十次。以上两个都是一次循环就结束了，没有内外之分。 第二和第三个for()循环才是组合循环，第二个for是外循环，第三个for是第二个for的内循环,和第一、第四没有任何关联。

user: user-0
content: 引用 3 楼 user-2的回复:[quote=引用 2 楼 m0_51795044 的回复:][quote=引用 1 楼 user-2的回复:]标准的冒泡排序算法。 每一次循环外层，一个最大数沉底。循环结束，排序完成。。。 那些for里面都是啥意思啊[/quote]  内层循环，每次沉底一个最大值。 外层循环，跑完结束，排序完成。[/quote] 第一个和第四个for是外层循环，第二个和第三个是内层循环？

user: user-2
content: 引用 2 楼 m0_51795044 的回复:[quote=引用 1 楼 user-2的回复:]标准的冒泡排序算法。 每一次循环外层，一个最大数沉底。循环结束，排序完成。。。 那些for里面都是啥意思啊[/quote]  内层循环，每次沉底一个最大值。 外层循环，跑完结束，排序完成。

user: user-0
content: 引用 1 楼 user-2的回复:标准的冒泡排序算法。 每一次循环外层，一个最大数沉底。循环结束，排序完成。。。 那些for里面都是啥意思啊

user: user-2
content: 标准的冒泡排序算法。 每一次循环外层，一个最大数沉底。循环结束，排序完成。。。
user-0 提问: 有没有大佬能解答一下啊

回复:
user: user-1
content: 整数字面量被自动编译为int，就好像浮点数字面量都被自动编译为double一样。 一般的32位/64位编译器的sizeof(int)是4（就是整形占4个字节32位），所以sizeof(int)+3=4+3=7

user: user-0
content: 引用 1 楼 user-2的回复:这种题，纯属扯蛋的。没人定义int类型就一定是4位。  等于7的理解：sizeof 2 + 3；== sizeof（int) + 3 == 4 + 3 == 7 感谢！感谢！

user: user-2
content: 这种题，纯属扯蛋的。没人定义int类型就一定是4位。  等于7的理解：sizeof 2 + 3；== sizeof（int) + 3 == 4 + 3 == 7
user-0 提问: 字符串逆序输出

回复:
user: user-1
content: #include<stdio.h> #include<string.h> int main(int argc, char* argv[]) {     /*********Begin*********/     char s[100]="\0",x;     int i,n;     scanf("%s",&s);     n=strlen(s)-1;     for(i=0;i<=n/2;i++)//或者按楼上所说，循环条件改成：i<=n/2      {          x=s[i];          s[i]=s[n-i];          s[n-i]=x;      }    printf("%s\n",s);    system("pause");    return 0; }

user: user-1
content: 修改如下，供参考：#include<stdio.h> #include<string.h> int main(int argc, char* argv[]) {     /*********Begin*********/     char s[100]="\0",x;     int i,b,n;     scanf("%s",&s);     n=strlen(s)-1;     for(i=0;i<n-i;i++)      {          x=s[i];          s[i]=s[n-i];          s[n-i]=x;      }    printf("%s\n",s);    system("pause");    return 0; }

user: user-2
content: 用两个指针来输出也是一种方法

user: user-3
content: 你赋值给x的值就是正序的，后面x又赋值给了字符串s，所以输出的还是正序的

user: user-4
content: 另建议你把s定义成char型指针,再用malloc给它个空间会更好一些

user: user-0
content: 求助

user: user-4
content: 改完之后就可以运行了,帮你测试过了

user: user-5
content: for(i=0;i<=n;i++)   ==  》 for(i=0;i<=n/2;i++)

user: user-4
content: i  <= n  改成i <= n/2 因为如果是n的话倒序之后又改回去了
user-0 提问: 求大神帮忙看看问题在哪？这题是将一个偶数拆成两个质数之和

回复:
user: user-1

user: user-0
content: 感谢你啊，我大一刚开始学c语言，新手小白啥都不懂，犯一些蠢蠢的错误。。。。。

user: user-1
content: 依楼主思路，修改如下：#include <stdio.h> #include <math.h> int prime(int n) {     int i;     for(i=2;i<=sqrt(n);i++)         if(n%i==0) return 0;     return 1; }  int main(int argc, char* argv[]) {    int a,b,c,d,n;    printf("请输入一个偶数(n>3):");    scanf("%d",&n);    if(n<3 || n%2!=0)         {           printf("该值不符合输入要求.\n");           //return 0;         }    else         {           for(a=2;a<=n/2;a++)            {              b=n-a;              c=prime(a);              d=prime(b);              if(c==1&&d==1)                 printf("%d=%d+%d\n",n,a,b);            }         }    system("pause");    return 0; }
user-0 提问: 穿的插入删除

回复:
user: user-1
content: #include <stdio.h> #include<stdlib.h> #include <string.h>  #define MAXSIZE 40  //结构体 typedef struct {     char ch[MAXSIZE];     int len; }sstring;  //插入 int strinsert(sstring *s,int pos,sstring t) {     int i;      printf("请输入你想要插入的位置:");     scanf("%d",&pos);      if(pos<0||pos>s->len)         return (0);      //if(s->len + t.len<=MAXSIZE){     if(s->len + t.len <= MAXSIZE-1){   //'\0' is 1         for(i=s->len+t.len-1; i>=t.len+pos; i--){             s->ch[i] = s->ch[i-t.len];         }         for(i=0;i<t.len;i++) {             s->ch[i+pos]=t.ch[i];         }         s->len=s->len+t.len;         s->ch[s->len] = 0;    //for '\0'     }     else if(pos+t.len<=MAXSIZE-1){         for(i=MAXSIZE-1;i>t.len+pos-1;i--)         {             s->ch[i]=s->ch[i-t.len];         }         for(i=0;i<t.len;i++)         {             s->ch[i]=s->ch[i-t.len];         }         s->len=MAXSIZE-1;         s->ch[s->len] = 0;     }     else     {         for(i=0;i<MAXSIZE-pos-1;i++)             s->ch[i+pos]=t.ch[i];         s->len=MAXSIZE-1;         s->ch[s->len] = 0;     }     return (1); } //删除 int strdelete(sstring *s,int pos,int len) {     int i;     printf("请输入你想要删除的位置:");     scanf("%d",&pos);     printf("请输入你想要删除的长度:");     scanf("%d",&len);     if(pos<0||pos>(s->len-len))     {         printf("删除的位置不合理!");         return (0);     }     for(i=pos+len;i<s->len;i++)         s->ch[i-len]=s->ch[i];     s->len=s->len-len;     s->ch[s->len] = 0;     return (1); }  //void main() int main() {     sstring s,t;     int pos=0,len=0;     //主串     printf("请输入主串s\n");     scanf("%s",s.ch);     s.len = strlen(s.ch);   //缺少更新len     printf("\n");     //子串     printf("请输入子串t\n");     scanf("%s",t.ch);     t.len = strlen(t.ch);   //缺少更新len     printf("\n");     //插入     strinsert(&s,pos,t);     //printf("%s",s);     printf("%s",s.ch);     //删除     strdelete(&s,pos,len);     //printf("%s",s);     printf("%s",s.ch); } 供参考～
user-0 提问: #C语言#递归

回复:
user: user-1
content: 20的时候，算了 2^20遍，很快能够完成。 50的时候，要算 2^50遍，这个太多了，不是不行，是要等很久，甚至有可能内存爆掉  把 sum[n] = num(n-1) * n 改成 sum[n] = sum[n-1]*n，应该就可以了。

user: user-2
content: 应该是时间复杂度太高了，递归50次的话耗时比20次多太多

user: user-3
content: 引用现在的编译器太牛了，优化能力超乎想象。这种尾递归，编译器很好优化，非常块，不存在所谓的递归缺点。楼上说的没错，楼主的问题是递归的算法有问题，额外增加了一些不必要的开销。

user: user-4
content: 引用 6 楼 glory@胖奇奇 的回复:应该是时间复杂度太高了，递归50次的话耗时比20次多太多  我用这个递归10000，都很快的，用时0.001秒。没任何问题。 #include <stdio.h>   int num(int n) {     if(n==0)     {         return 0;     }     else     {         return n + num(n-1);     } }   int main(void) {     int n = 10000;     printf("sum(%d) = %d\n", n, num(n));           return 0; }   运行结果如下： [root@localhost Workspace]# gcc -o demo demo.c [root@localhost Workspace]# time ./demo sum(10000) = 50005000  real	0m0.001s user	0m0.001s sys	0m0.000s

user: user-4
content: 引用 4 楼 qzjhjxj 的回复:没什么错误，执行递归算法，特别是递归执行层数多的时候，结果极其的慢，而且递归层数达到一定的值，需要增加额外的堆栈处理，就有可能出现内存溢出的情况，这是递归算法的缺点。 现在的编译器太牛了，优化能力超乎想象。这种尾递归，编译器很好优化，非常块，不存在所谓的递归缺点。

user: user-3
content: 没什么错误，执行递归算法，特别是递归执行层数多的时候，结果极其的慢，而且递归层数达到一定的值，需要增加额外的堆栈处理，就有可能出现内存溢出的情况，这是递归算法的缺点。

user: user-4
content: 仅供参考： #include <stdio.h>  int num(int n) { 	if(n==0) 	{ 		return 0; 	} 	else 	{ 		return n + num(n-1); 	} }  int main(void) { 	printf("%d", num(20)); 	 	return 0; }

user: user-0
content: 引用 1 楼 的回复:一定要用递归 要计算从一加到n

user: user-0
content: 一定要用递归
user-0 提问: 指针的值为何为0？

回复:
user: user-1
content: 一楼的解释是有可能的和有道理的，建议楼主不用过分在意这个，对于指针的初始化，即char *ptr = NULL;

user: user-1
content: 楼主打印的是ptr指向的内容，如果没有初始化，它是随机的值，即指向的内容不确定。楼主的0其实是一个特殊的位置0地址位置即(void *)0。 另外，打印地址的格式应该用%p或%x

user: user-2
content: 这个要看编译器环境，未指定具体数值的野指针

user: user-3
content: 可能是随机值吧。我用gcc 9.2，结果是16。  E:\Workspace>gcc --version gcc (tdm64-1) 9.2.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   E:\Workspace>>demo ptr = 16  E:\Workspace>>demo ptr = 16  E:\Workspace>>demo ptr = 16

user: user-4
content: 试了一下 centos8.2、g++ 8.3上 未初始化的指针确实被自动置空，应该是gcc做的一个保护机制吧 win下是没有这么做的（但vc2019 debug版就会在编译报错C4700， 并且强行关闭之后，debug版仍会弹出运行时错误，可以说两个平台都做了足够保护）

user: user-5
content: 52，你第一行的;号打成中文符号了
user-0 提问: c语言求救：输出的时候少一个数

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: sum+=(int)round(pow(a[j],n));  加个round四舍五入再取整试试  好像是因为精度误差

user: user-3
content: 你把数组a[10]=｛0｝；赋初值再试试。

user: user-0
content: 引用 1 楼 user-4 的回复：没错啊，你的运行结果是什么少第一个数

user: user-3
content: 可以这样改下，看看问题在哪：int hhh(int n) {     long a[10]={0}, i, j, x, y, t, sum;     x=pow(10, n-1);     y=pow(10, n);     //printf("X=%d,Y=%d\n",x,y);       for(i=x;i<y;i++)     {         printf("i=%d\n",i);//这里加一句打印出i         t=i;         sum=0;         for(j=0;j<n;j++)         {             a[j]=t%10;             t=t/10;         }         for(j=0;j<n;j++)         {             sum+=pow(a[j],n);             printf("sum+第(%d)次=%d\n",j,sum);//这里看看sum的值             system("pause");  //这里暂停下看的清楚         }         if(sum==i)         {             printf("%ld \t",sum);         }     } }  实际效果，如下图：

user: user-0
content: 引用 9 楼 qzjhjxj 的回复:引用printf("x=d%,y=%d\",x,y);//这里增加看看x y 的值。或者干脆 x=150,y=155赋值，看看下面能不能输出153.这句打错了，应该这样的：printf("X=%d,Y=%d\n",x,y); 还是不可以，就153输出不了，把y=999之后，还是153出不来，只输出其他三个。

user: user-3
content: 引用printf("x=d%,y=%d\",x,y);//这里增加看看x y 的值。或者干脆 x=150,y=155赋值，看看下面能不能输出153.这句打错了，应该这样的：printf("X=%d,Y=%d\n",x,y);

user: user-3
content: 你可以把int hhh(int n)函数单独拿出来，在你的机器上单独调试下，int hhh(int n) {     long a[10], i, j, x, y, t, sum;     x=pow(10, n-1);     y=pow(10, n);     printf("x=d%,y=%d\",x,y);//这里增加看看x y 的值。或者干脆 x=150,y=155赋值，看看下面能不能输出153.     for(i=x;i<y;i++)     {         t=i;         sum=0;//把sum赋初值放在这里         for(j=0;j<n;j++)         {             a[j]=t%10;             t=t/10;         }         for(j=0;j<n;j++)         {             sum+=pow(a[j],n);         }         if(sum==i)         {             printf("%ld \t",sum);// “%ld\t"在间加入一空格.         }     } }

user: user-0
content: 引用 6 楼 qzjhjxj 的回复：你把数组a[10]=｛0｝；赋初值再试试。还是不行

user: user-0
content: 我刚刚在另一个电脑上运行了一下，是正确的， 但是在我的电脑上就是少一个数字

user: user-0
content: 我的还是少一个数。。。不知道为什么。。。

user: user-3
content: 没看到你的运行结果，我试运行了下，没有问题： 把int hhh()函数稍改了下：int hhh(int n) {     long a[10], i, j, x, y, t, sum;     x=pow(10, n-1);     y=pow(10, n);     for(i=x;i<y;i++)     {         t=i;         sum=0;//把sum赋初值放在这里         for(j=0;j<n;j++)         {             a[j]=t%10;             t=t/10;         }         for(j=0;j<n;j++)         {             sum+=pow(a[j],n);         }         if(sum==i)         {             printf("%ld \t",sum);// “%ld\t"在间加入一空格.         }     } }

user: user-4
content: 没错啊，你的运行结果是什么
user-0 提问: char类型的指针大小为4，为什么加1只加1呢

回复:
user: user-1
content: 引用 5 楼 lotte198666的回复:[quote=引用 2 楼 真相重于对错 的回复:]T* p; p=p+1; 意思是把p移动一个sizeof(T)位置 如果char** p 无论p=p+1,还是p++, p往后移动一个sizeof(char*) 也就是移动4个字节（32位），8个字节（64位系统） char类型指针大小是4   p=p+1不应该是加4吗怎么是加1呢[/quote] 加sizeof T不是加sizeof T*

user: user-2
content: pc+1就是加一个字节（地址偏于一个字节） pc++才会加4个字节（地址前进一个指针单位） 这是有区别的，否则想地址偏移1个字节就没法实现了

user: user-0
content: 引用 2 楼 真相重于对错 的回复:T* p; p=p+1; 意思是把p移动一个sizeof(T)位置 如果char** p 无论p=p+1,还是p++, p往后移动一个sizeof(char*) 也就是移动4个字节（32位），8个字节（64位系统） char类型指针大小是4   p=p+1不应该是加4吗怎么是加1呢

user: user-0
content: char类型指针大小是4   p=p+1不应该是加4吗怎么是加1呢

user: user-0
content: char类型指针大小是4加我1不是加4吗

user: user-1
content: T* p; p=p+1; 意思是把p移动一个sizeof(T)位置 如果char** p 无论p=p+1,还是p++, p往后移动一个sizeof(char*) 也就是移动4个字节（32位），8个字节（64位系统）
user-0 提问: 新手求问，C语言中n++<=2中是n++还是n最终与2比较？会和优先级有冲突吗？

回复:
user: user-1
content: https://blog.csdn.net/Minikinfish/article/details/107520644

user: user-2
content: n++是先运算再++。

user: user-3
content: ++n：是先加1后运算； n++：是先运算后加1；

user: user-4
content: n++<=2是个表达式，n++是求出表达式的值以后n才自增，所以<=的时候用的是n来比较
user-0 提问: 这个简单C程序的第二个scanf为什么不起作用？

回复:
user: user-1
content: 起作用了，第二个scanf接收的是'\n'，%c匹配'\n'，这个上一个输入之后留在输入缓存里的'\n'

user: user-2
content: 你想要的效果应该是下面的这个吧    int main() {     int a;     char z;     scanf("%d",&a);     printf("%d\n",a);     //printf("b");     //z=getchar();     fflush(stdin);     scanf("%c",&z);     printf("%c",z);     return 0; }

user: user-2
content: 第一个scanf你把输入值赋给了a,然后打印字符b怎么可能会有结果的啊 无论你输入的是什么,打印的都是字符b啊,第二个scanf也一样,中间还没清空缓冲区
user-0 提问: C语言代码，输入n1 n2 m  三个数

回复:
user: user-0
content: 大神，多谢，我看看我的哪里出问题惹

user: user-1
content: void Test(void) { 	int n1 = 0; 	int n2 = 0;  	int m = 0;  	scanf_s("%d", &n1); 	scanf_s("%d", &n2); 	scanf_s("%d", &m);  	if (m <= 1 || 9 <= m || n2 <= n1) 	{ 		printf("err\r\n"); 		return; 	}  	for (int i = n1, j = 0; i < n2 + 1; ++i, ++j) 	{ 		if (i % m == 0) 		{ 			printf("_ "); 		} 		else 		{ 			int bit = 0; 			int num = i; 			while (num != 0) 			{ 				bit = num % 10; 				num /= 10;  				if (bit == m) 					break; 			}  			if (bit == m) 				printf("_ "); 			else 				printf("%d ", i); 		}  		if ((j + 1) % 10 == 0) 			printf("\r\n"); 	}  	printf("\r\n"); }  12 210 5 12 13 14 _ 16 17 18 19 _ 21 22 23 24 _ 26 27 28 29 _ 31 32 33 34 _ 36 37 38 39 _ 41 42 43 44 _ 46 47 48 49 _ _ _ _ _ _ _ _ _ _ _ 61 62 63 64 _ 66 67 68 69 _ 71 72 73 74 _ 76 77 78 79 _ 81 82 83 84 _ 86 87 88 89 _ 91 92 93 94 _ 96 97 98 99 _ 101 102 103 104 _ 106 107 108 109 _ 111 112 113 114 _ 116 117 118 119 _ 121 122 123 124 _ 126 127 128 129 _ 131 132 133 134 _ 136 137 138 139 _ 141 142 143 144 _ 146 147 148 149 _ _ _ _ _ _ _ _ _ _ _ 161 162 163 164 _ 166 167 168 169 _ 171 172 173 174 _ 176 177 178 179 _ 181 182 183 184 _ 186 187 188 189 _ 191 192 193 194 _ 196 197 198 199 _ 201 202 203 204 _ 206 207 208 209 _ 请按任意键继续. . .
user-0 提问: C语言小项目出了点问题,求各位大佬指点

回复:
user: user-0
content: 这里不是指向了这个定义出来的数组了吗

user: user-0
content: 购买完后,再次打印出来,商品的部分没有出错啊,是玩家的金币出现了问题

user: user-1
content: Prop props[];  //道具数组  问题在这里，Init的时候没有对其申请空间不赋值，这里的props是一个指针，在Init里被赋值为NULL，没有指向什么内容。
user-0 提问: 请问这个报错怎么解决

回复:
user: user-1
content: 至少得有个typedef int ElemType;这样的语句吧

user: user-2
content: 想到了第一次学数据结构的自己，书上的是伪代码，直接拿过来编译是不行的。ElemType代表元素类型，是一个统称，具体的可以写成int char float等等，Status也是统称

user: user-3
content: 第7行 ElemType 是用来说明的，使用的时候要换成具体类型，比如int char等等。还有*=elem把=去掉。 第11行字符打错了I换成小写i

user: user-4
content: Status未定义，ElemType未定义。楼主没有定义怎么可以直接使用呢?拷贝别人的代码吗？那也拷全了。
user-0 提问: [求助]clion 无法debug

回复:
user: user-1
content: 解决了吗请问，能告知一下怎么解决的吗

user: user-2
content: 请问最后怎么解决的？

user: user-3
content: 引用 2 楼 Ricardo_PAO 的回复:之前用PYcharm，挺喜欢这个公司出的东西的，然后用的clion。vs太大了  其实，VS只有一个缺点太大。其他都是优点。现在的电脑配置越来越牛，vs大一点也算不上缺点了。

user: user-4
content: 这点我要反驳，它除了大还非要装C盘，我就看不惯它非要住C盘这点，其他都还好

user: user-0
content: 之前用PYcharm，挺喜欢这个公司出的东西的，然后用的clion。vs太大了

user: user-3
content: visual studio 2019，号称宇宙第一IDE，功能强大，调试方便。
user-0 提问: C语言

回复:
user: user-1
content: 这种题目，就自己做了，没必要发出来。

user: user-2
content: 作业自己做

user: user-3
content: 引用 2 楼 四斋的回复:输入天数用7求余，然后用if语句打印各个星期试试 或者直接打印结果

user: user-3
content: 输入天数用7求余，然后用if语句打印各个星期试试

user: user-4
content: #include <stdio.h>  int main(void) { 	printf("%d\n", 2019%7); }
user-0 提问: C语言

回复:
user: user-1
content: #include <stdio.h>  int main(void) {     int i = 0;     int father_age, son_age;      father_age = 40;     son_age = 6;     while (1) {         father_age = 40 + i;         son_age = 6 + i;          if (father_age / son_age == 2 && father_age % son_age == 0) {             printf("%d, %d\n", father_age, son_age);             break;         }         i++;     }      printf("%d\n", i); #if 0     for(i=1; i<40; i++)     {         p = 40 +i;         s = 6 +i;          if(p == 2*s)         {             printf("Years:\t%d\n", i);         }     } #endif } 供参考～

user: user-2
content: 运行结果，28年。仅供参考。  #include <stdio.h>  int main(void) { 	int i, p, s; 	 	for(i=1; i<40; i++) 	{ 		p = 40 + i; 		s = 6 + i; 		 		if(p == 2*s) 		{ 			printf("Years:\t%d\n", i); 			break; 		} 	} }
user-0 提问: socket 编程，何向客户端传送图片文件？

回复:
user: user-0
content: okay, I got it.  #define byte char Thanks.

user: user-0
content: 引用 7 楼 火花20180731的回复:socket并不在乎你传递得内容是啥，因为对于计算机而言，所有的数据都是二进制流，使用char类型仅仅是因为内存读写的最小单位是字节，而sizeof(char)为1字节。 也就是说，图片文件、视频文件都是以byte为最小单位？

user: user-1
content: 引用 7 楼 火花20180731 的回复:socket并不在乎你传递得内容是啥，因为对于计算机而言，所有的数据都是二进制流，使用char类型仅仅是因为内存读写的最小单位是字节，而sizeof(char)为1字节。 是的。都是二进制，而我们所谓说的各种类型是为了我们的方便，计算机不认识这些，只认识0101的二进制数

user: user-2
content: 如果是linux系统的话，sendfile函数效率很高。  #include <sys/sendfile.h> ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

user: user-3
content: socket并不在乎你传递得内容是啥，因为对于计算机而言，所有的数据都是二进制流，使用char类型仅仅是因为内存读写的最小单位是字节，而sizeof(char)为1字节。

user: user-3
content: socket并不在乎你传递得内容是啥，因为对于计算机而言，所有的数据都是二进制流，使用char类型仅仅是因为内存读写的最小单位是字节，而sizeof(char)为1字节。

user: user-4
content: 数据以二进制传递，不管字面意思。传文件你只管传数据就可以，文件表达了什么你不用解析。 一个char表示一个数值，就像‘@’编码是0x40，传到另一端也是0x40，对方是按照char来解释还是按照数值来解释你不必操心，你只负责传递正确的值就可以了。

user: user-5
content: 二进制读取文件，放入buf，然后发送。char类型可以的。

user: user-1
content: 引用 2 楼 陳錄生 的回复:好像这篇文章跟你说的方式一样，但是用char 字符似乎不合理，应该定义什么变量？     char buffer[BUF_SIZE] = {0};  //缓冲区     int nCount;     while( (nCount = fread(buffer, 1, BUF_SIZE, fp)) > 0 ){         send(clntSock, buffer, nCount, 0);     } 用u8 buffer[BUF_SIZE];也行  合不合理为什么不试试呢？别人怎么说不如自己亲自试试～

user: user-0
content: 好像这篇文章跟你说的方式一样，但是用char 字符似乎不合理，应该定义什么变量？     char buffer[BUF_SIZE] = {0};  //缓冲区     int nCount;     while( (nCount = fread(buffer, 1, BUF_SIZE, fp)) > 0 ){         send(clntSock, buffer, nCount, 0);     }

user: user-1
content: 按照正常的传输文件即可，发送端打开文件，读取文件，最后发送数据到对端； 接收端把数据接收之后写入文件，接收完关闭文件。  视频和图片都可以采用这个方式
user-0 提问: C语言问题求解答

回复:
user: user-0
content: 我自己做的也是感觉这四个选项全对，应该是题的问题了，感谢大佬们的解答

user: user-1
content: 全对  出题人水平太低 没搞懂if而已 习惯就好了

user: user-2
content: 楼主可以再提供更多信息，所谓的错误的if语句是什么错误；这些选项都没什么问题。 可以再细化一下这个错误的标准。 A是赋值不是比较，但是赋值之后就和D是一样的了。C也是一样，A是赋值，C是做差之后和D一样：判断一个值是否为真

user: user-3
content: A\B\C\D四项全对，都符合C语言语法，没毛病。。。

user: user-4
content: 算数运算表达式 赋值运算表达式 逻辑运算表达式 都是表达式的一种，都可以当做if的条件