Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言简单编程

回复:
user: user-0
content: 引用 1 楼 user-3的回复:第一题分成分子分母来看第二题是一个求进制位上数字的算法建议看看我博客 深奥的样子

user: user-0
content: 引用 3 楼 Jacob Cai的回复: #include <stdio.h> #include <stdlib.h>  int main() {     int n;     int i;     double data = 0;     printf("\n*************************\n");     printf("请输入一个奇数：");     scanf("%d", &n);     if(n%2 != 0)     {         for(i = 1; i <= n; i ++)         {            data += pow(-1, i + 1) * 1 / i;         }         printf("data: %f\n", data);     }     else     {         printf("请输入奇数");     }     printf("\n*************************\n");      int a[5];     for(i = 0; i < 5; i++)     {         printf("请输入第%d个数字：", i + 1);         scanf("%d", &a[i]);     }     printf("你输入的数组为：");     for(i = 4; i >= 0; i--)         printf("%-6d\t", a[i]);     printf("\n*************************\n");  }   好的，谢谢你

user: user-0
content: 引用 2 楼 狐帝的回复:第1题： int n; scanf("%d", &n); float factor = -1.0; float data = 0.0; for(count = 1; count <= n; count ++) {    data += -1 * factor * 1.0 / count; } printf("data: %f\n", data);  第2题：把这个5位数字当做字符数组处理，每一位数字是字符数组中的一个字符，将这个字符数组倒排即可。 好像第二句运行的时候显示错误😢😢

user: user-1
content: #include <stdio.h> #include <stdlib.h>  int main() {     int n;     int i;     double data = 0;     printf("\n*************************\n");     printf("请输入一个奇数：");     scanf("%d", &n);     if(n%2 != 0)     {         for(i = 1; i <= n; i ++)         {            data += pow(-1, i + 1) * 1 / i;         }         printf("data: %f\n", data);     }     else     {         printf("请输入奇数");     }     printf("\n*************************\n");      int a[5];     for(i = 0; i < 5; i++)     {         printf("请输入第%d个数字：", i + 1);         scanf("%d", &a[i]);     }     printf("你输入的数组为：");     for(i = 4; i >= 0; i--)         printf("%-6d\t", a[i]);     printf("\n*************************\n");  }

user: user-2
content: 第1题： int n; scanf("%d", &n); float factor = -1.0; float data = 0.0; for(count = 1; count <= n; count ++) {    data += -1 * factor * 1.0 / count; } printf("data: %f\n", data);  第2题：把这个5位数字当做字符数组处理，每一位数字是字符数组中的一个字符，将这个字符数组倒排即可。

user: user-3
content: 第一题分成分子分母来看第二题是一个求进制位上数字的算法建议看看我博客
user-0 提问: 卷子小题目！！

回复:
user: user-0
content: 引用 4 楼 chxchxkkk 的回复：楼上的说法是对的，printf应该放在循环体后面问题解决了谢谢，没看清题目并没有括号 printf输出最后结果

user: user-0
content: 引用 3 楼 與蘤舊縐 的回复：打印问题？？  最后答案应该是13654问题解决了谢谢，没看清题目并没有括号 printf输出最后结果

user: user-0
content: 引用 2 楼 自信男孩 的回复：应该把那条printf放到外面吧。不然输出的结果是 1 13 136 1365 13655问题解决了谢谢，没看清题目并没有括号 printf输出最后结果

user: user-1
content: 楼上的说法是对的，printf应该放在循环体后面

user: user-2
content: 打印问题？？  最后答案应该是13654

user: user-3
content: 应该把那条printf放到外面吧。不然输出的结果是 1 13 136 1365 13655

user: user-2
content: 所以你的结果是什么  按该程序的思路确实应该得到13654
user-0 提问: C语言中。如何从文本中读取汉字到结构体中？

回复:
user: user-1
content: 文本文件都是以字符串的形式保存，先读出字符串，打印看看，保证读出的数据正确。 然后，转换成需要的数据类型。

user: user-2
content: 首先声明我也不太懂哈。我也不怎么用控制台。随便说说 你都写到文本文件里了，都是文本，再读出来怎么可能是结构体？如果是UNICODE，需要在文件头先写入0XFEFF，那样就不会有乱码了。

user: user-0
content: 引用 1 楼 自信男孩的回复:看你的文件格式，另外贴出你的代码吧 谢谢提醒，第一次发帖没经验

user: user-0
content: 引用 楼主 m0_46235144的回复:将一个名单读入到结构体中，如果用fscanf %s的形式读入的是乱码！这个应该如何从txt文本中读取汉字 #include<stdio.h> #include<process.h> #define MAX 1024 struct student { 	int no; 	char name[30]; 	char dao[30]; }stu[29]; int main() { 	FILE *fp; 	if((fp=fopen("C:\\Users\\47390\\Desktop\\名单.txt","r"))==NULL) 	{ 		printf("定位失败"); 		getchar(); 		exit(0); 	} 	int a[30]={0},i=0; 	char str[30];  	for(i=0;i<29;i++) 	{ 		fscanf(fp,"%d %s",&a[i],&stu[i].name); 		stu[i].no=a[i]; 		fgets(str,sizeof(str),fp);   		printf("%d %s\n",a[i],stu[i].name ); 	}     	return 0; }

user: user-3
content: 以二进制格式保存文件，然后以二进制格式读取试试看

user: user-4
content: 看你的文件格式，另外贴出你的代码吧
user-0 提问: 为什么这个冒泡排序不能排序？我以前也是这么写的

回复:
user: user-0
content: 引用 1 楼 與蘤舊縐 的回复:思路没问题  程序大体没问题  这时候你就得想想到底什么地方有问题  这时你得到了j始终为5的错误  你离成功就只差一步  查看该行for j=……，看看后面多了什么 有一说一刚刚开始我没理解你说的啥意思，，，我发现问题后终于明白了，，这错误太...

user: user-0
content: 引用 3 楼 自信男孩 的回复:你的for循环后面多了一个分号；检查一下第二层for循环后是不是少了一个分号～ ！！发现了....这错误太低级了.....

user: user-0
content: 引用 2 楼 神童i 的回复:第一张图片的冒泡排序怎么感觉也有问题呢。 我以前也是这么写的一点问题都没有

user: user-1
content: 你的for循环后面多了一个分号；检查一下第二层for循环后是不是少了一个分号～

user: user-2
content: 第一张图片的冒泡排序怎么感觉也有问题呢。

user: user-3
content: 思路没问题  程序大体没问题  这时候你就得想想到底什么地方有问题  这时你得到了j始终为5的错误  你离成功就只差一步  查看该行for j=……，看看后面多了什么
user-0 提问: 想知道这个程序为什么在devc++能运行在vc++6.0中无法运行 。谢谢！

回复:
user: user-0
content: 引用 2 楼 真相重于对错的回复:开头加上#include "stdafx.h" 试过了 好像还是不可以 按另一位提供的方式是可以的 将int i放到第一个printf之前可以 谢谢

user: user-0
content: 引用 4 楼 自信男孩的回复:贴出错误吧，应该就是不同编译器检查规则不一样。 试着把i, j的声明定义放在数组定义之后，第一个printf之前。遵循先定义后使用，并且，定义在前～ 编译通过了 谢谢

user: user-1
content: 贴出错误吧，应该就是不同编译器检查规则不一样。 试着把i, j的声明定义放在数组定义之后，第一个printf之前。遵循先定义后使用，并且，定义在前～

user: user-0
content: 引用 1 楼 自信男孩的回复:程序暂未发现什么问题，楼主所说的无法运行是编译不通过，还是结果不对？  编译器不一样，语法检查也可能有所差异～ 编译没通过。

user: user-2
content: 开头加上#include "stdafx.h"

user: user-1
content: 程序暂未发现什么问题，楼主所说的无法运行是编译不通过，还是结果不对？  编译器不一样，语法检查也可能有所差异～
user-0 提问: 如何给简单c程序添加背景图

回复:
user: user-1
content: #include "windows.h" HBITMAP hbitmap=NULL; //加载一张bmp图片  void LoadMyBitmap( char* FileName ) { 	hbitmap = LoadImage( NULL, FileName, 0, 0, 0, LR_LOADFROMFILE ); } //在控制台窗口上绘制之前加载的图片  void DrawBitmapInConsole( void ) { 	BITMAP bitmap; 	GetObject( hbitmap , sizeof(BITMAP), &bitmap );  	HWND hwnd = GetConsoleWindow(); 	HDC hdc = GetDC( hwnd ); 	HDC mdc = CreateCompatibleDC( hdc ); 	SelectObject( mdc, hbitmap ); 	BitBlt( hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, mdc, 0, 0, SRCCOPY ); 	ReleaseDC( hwnd, hdc ); 	DeleteDC( mdc ); } int main( void ) { 	LoadMyBitmap( "背景.bmp" );	 	while( 1 ) 	{ 		DrawBitmapInConsole(); 		Sleep(300); 	} 	return 0; }  效果如下（设置控制台窗口上）：   准备一张bmp图片，将它的文件名（不和exe同一目录则用绝对路径或相对路径）传给LoadMyBitmap。绘图前这样加载一次就行。然后循环时每次先调用一次DrawBitmapInConsole()。这两个函数你照抄就行了。效果不是很好。对于控制台窗口宽高和图片不符的情况，你可以用MoveWindow或system函数修改控制台窗口的大小以适应图片。

user: user-2
content: undefined reference to `__imp_GetObjectA'    请问这个怎么解决？

user: user-1
content: 链接gdi32这个库

user: user-3
content: [Error] invalid conversion from 'HANDLE {aka void*}' to 'HBITMAP' [-fpermissive]这怎么办

user: user-4
content: 控制台添加背景图建议使用GDI绘图 由GetConsoleWindow和GetDC获取画图设备 再由LoadBitmap或LoadImage加载图片,然后绘图  不过这样的话文本输出只能用TextOut或DrawText了

user: user-5
content: C++ Builder简单电话簿Demo例子v1.11

user: user-5
content: 背景图参考 C++ Builder 6.0几个示例程序项目源代码下载：      C++ Builder第一个程序（模拟聊天室）v1.11 C++ Builder模拟数字双时钟示例（未完成）v0.2.1 C++ Builder纸牌游戏Demo v0.03 C++ Builder不规则图像透明贴图（位图的透明显示）三种方法及简单动画v1.3 C++ Builder写的《ZEC 四则运算练习程序》 海底海星情景v0.9.2   　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。

user: user-6
content: 你好，控制台添加背景图这怕不是小白能搞得，你需要基于对话框的应用程序，比如Qt或Vc，而不是控制台应用程序。

user: user-7
content: 添加背景图有点难度，起码需要图片解析，改变颜色是可行的。 能控制显示信息，主要是gdi模块在起作用，更下面是通过像素操作framebuf空间。如果需要添加图片，最好使用gui框架，如：mfc，minigui，qt等等。

user: user-8
content: 改变控制台背景颜色及输出信息颜色 《VS2015中修改控制台背景及输出字体颜色》 类似如下图  希望能够帮到你！

user: user-9
content: 如果你想改背景颜色，是可以的，但是你写的再长也是控制台程序，想添加背景图，就得做图形开发啦，学学Qt或C++Builder，不行的话Python简单

user: user-10
content: 这只是个控制端程序，运行时调出来的背景可不是C代码控制的。 如果是觉得不好看，想做成界面化得，你得用那种java, C++ builder等支持图形化编程的工具

user: user-11
content: 改变背景颜色还容易些，放个背景图比较复杂
user-0 提问: 这啥用c语言实现连续四个空格转换成tab，我的代码在oj上显示presentation error

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> int main() {     int c,i;     int flag = 1;      while((c=getchar()) != EOF) {         if (c == ' ') {             if (flag == 0)                 i++;             else                 i = 1;             //i=1;             /*             while((c=getchar())==' '){                 ++i;                 if(i==4){                     printf("\t");                     i=0;                 }             }             */             flag = 0;             if(i==4) {                 printf("\t");                 i = 0;             }             //printf("%*s",i," ");             //putchar(c);         }         else{             flag = 1;             putchar(c);             i=0;         }     }     return 0; } 供参考～

user: user-2
content: 引用 楼主 weixin_46841697 的回复:printf("%*s",i," "); printf有这个用法吗 应该是printf("%d ",i);吧
user-0 提问: 指针报错，希望大神赐教。

回复:
user: user-1
content: while(fgets(str[i],10,fp) != NULL )     {         printf("%s",str[i]);         i++;     }   注意下i的值是否>=3了？如果大于等3了，那么就是数组越界了～

user: user-2
content: 你写文件的函数，写完文件后没有close关闭文件，估计文件还没真正存储在磁盘上，所以读的时候可能还是空文件。 WriteToFile的getchar之后或则之前加上 fflush(fp); //缓存写到磁盘 fclose(fp); //关闭文件  另外，你的MAXSIZE是多大？你写文件的时候输入了什么内容，有没有大于10个字符？因为你读文件每次只取10个字符，如果文件没行的内容大于10，则你循环里的 i 就像LS说的，有可能大于3，造成数组越界
user-0 提问: 【求助】字符统计统计不进去，到底是哪里的错      泪奔

回复:
user: user-1
content: 你函数islower（）在哪呢

user: user-2
content: 你这 i 都没有初始化，if和else if估计都没进入，又或者进入了一个分支以后，i 的值还一直不变 这道题你把它复杂化了，其实可以简单一些 #define N 300 int main() {     int n[N],max[N],i,cnt=0;     char ch[N],a[N];     while (cnt<N)     {         if (gets(a) == NULL) break;         memset(n, 0, sizeof(n));         ch[cnt] = 0;         max[cnt] = 0;         for (i=0; i<strlen(a); i++)         {             if(isalpha(a[i]))             { //只考虑英文字母的情况                 n[a[i]]++; //相同字符出现次数累加                 if (n[a[i]] > max[cnt])                 { //如果出现次数大于max，则更新max和ch                     max[cnt] = n[a[i]];                     ch[cnt] = a[i];                 }                 else if (n[a[i]] == max[cnt])                 { //如果出现次数和max相同，则更新ch为更小ascii的字符                     if (ch[cnt] > a[i])                         ch[cnt] = a[i];                 }             }         }         cnt++;     }     for (i=0; i<cnt; i++)     {         printf("%c %d\n",ch[i],max[i]);     }     return 0; }

user: user-3
content: 引用 1 楼 Master Chicken 的回复:你函数islower（）在哪呢 在头文件<ctype.h>中～

user: user-3
content: #include<stdio.h> #include<ctype.h> #include<string.h>  //#define N 300 #define N 300 int main() {     //int n[N]= {0},max,i, j;     //char a[N],ch;//,j;      int n[52] = {0}, i;     int ch, max;     char a[N];      while(fgets(a, N, stdin)!=NULL)     {         i = 0;         //puts(a);         while (a[i]) {             //putchar(a[i]);             if (isupper(a[i]))                 n[a[i]-'A']++;             if (islower(a[i]))                 n[a[i]-'a'+26]++;             i++;         }         max = n[0];         for (i = 1; i < 52; i++)             if (max < n[i]) {                 max = n[i];             }         printf("max = %d\n", max);          for (i = 0; i < 52; i++)             if (max == n[i]) {                 if (i >= 26)                     ch = 'a' + (i - 26);                 else                     ch = 'A';                 break;             }          printf("%c %d\n", ch, max);          memset(n, 0, sizeof(n)); #if 0             if(isalpha(j)!=0)          if(islower(a[i])!=0)         {             for(j='A'; j<='Z';j++)                 for(i=0; i<strlen(a); i++)                     if(a[i]==j)                         n[j]++;         }         else if(isupper(a[i])!=0)         {             for(j='a'; j<='z';j++)                 for(i=0; i<strlen(a); i++)                     if(a[i]==j)                         n[j]++;         }         ch='A',max=n[ch];          for(j='A'; j<='z';j++)             if(isalpha(j)!=0)             {                 if(n[j]>max)                     max=n[j],ch=j;                 else if(n[j]==max&&j<ch)                     max=n[j],ch=j;             }         printf("%c %d\n",ch,max); #endif     }      return 0; } 供参考～
user-0 提问: C语言一个小问题求解！

回复:
user: user-1
content: #include <stdio.h> struct Test { 	int NUM; 	char NAME[10]; }; int main() { 	Test test[3]; 	for (int k = 0; k < 3; k++) 	{ 		scanf("%d", &((test + k)->NUM));//---------注意，test+k是指针，所以要用->符号----------- 		scanf("%s", test[k].NAME); 	} 	return 0; } 输入为  最后test数组的值是

user: user-2
content: test是结构体，还是结构体指针呢，是结构体显然+k是不成立的。

user: user-0
content: 谢谢！！！！

user: user-3
content: scanf("%d",&((test + k)->NUM));
user-0 提问: 关于relloc函数的，可编译不能运行，麻烦大佬看看问题出在哪了（C和指针十一章编程练习3））

回复:
user: user-1
content: array = (char *) malloc (sizeof(char)); gets(ptr); 申请一个字节，输入一个字符就会导致内存溢出～

user: user-2
content: ptr未配置空间 将char *ptr改为char ptr[256]; 然后将ptr == NULL改为*ptr == NULL

user: user-0
content: 引用 5 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h>  char *readstring(void); int main(void) {     char *str = readstring();     if(str == NULL)         printf("error\n");     else         printf("%s\n",str);     if (!str)         free(str);     return 0; }  char *readstring(void) {     char *array,*p;     char *ptr;     int length = 0;      ptr = (char *)malloc(sizeof(char) * 32);     if (!ptr)         return NULL;     fgets(ptr, 32, stdin);     array = (char *) malloc (sizeof(char));     //if (ptr == NULL || array == NULL)     if (array == NULL)         return NULL;     while(*(ptr + length) != '\0')         length++;     array = (char *) realloc (array,(length + 1) * sizeof(char));     if(array == NULL)         return NULL;     for(int i = 0; i < length; i++)         array[i] = *(ptr + i);     array[length] = '\0';     p = array;     //free(array);      return p; } 供参考～  内存还没用完不要着急释放，释放了概念就是这部分空间不用了，但是在main函数里还会输出，那就是还在用。

user: user-1
content: #include<stdio.h> #include<stdlib.h>  char *readstring(void); int main(void) {     char *str = readstring();     if(str == NULL)         printf("error\n");     else         printf("%s\n",str);     if (!str)         free(str);     return 0; }  char *readstring(void) {     char *array,*p;     char *ptr;     int length = 0;      ptr = (char *)malloc(sizeof(char) * 32);     if (!ptr)         return NULL;     fgets(ptr, 32, stdin);     array = (char *) malloc (sizeof(char));     //if (ptr == NULL || array == NULL)     if (array == NULL)         return NULL;     while(*(ptr + length) != '\0')         length++;     array = (char *) realloc (array,(length + 1) * sizeof(char));     if(array == NULL)         return NULL;     for(int i = 0; i < length; i++)         array[i] = *(ptr + i);     array[length] = '\0';     p = array;     //free(array);      return p; } 供参考～  内存还没用完不要着急释放，释放了概念就是这部分空间不用了，但是在main函数里还会输出，那就是还在用。

user: user-0
content: 引用 1 楼 user-2 的回复:ptr未配置空间 将char *ptr改为char ptr[256]; 然后将ptr == NULL改为*ptr == NULL 一直以为是realloc的时候出问题了。。。谢谢

user: user-0
content: 引用 2 楼 自信男孩 的回复:array = (char *) malloc (sizeof(char)); gets(ptr); 申请一个字节，输入一个字符就会导致内存溢出～ 为什么下面的方法可以运行呢 char *readstring(void) { 	char *array; 	char *ptr; 	int length = 1; 	array = (char *) malloc (sizeof(char)); 	gets(ptr); 	if (ptr == NULL || array == NULL) 	{ 		return NULL; 	} 	while (*ptr != '\0' ) 	{ 		length++; 		array  = (char *) realloc (array , length * sizeof(char)); 		if (array == NULL) 			return NULL; 		array[length - 2] = *ptr; 		ptr++; 	} 	array[length - 1] = '\0'; 	 	return array; }
user-0 提问: 求解：C语言Socket套接字TCP/IP程序疑问---服务端和客户端不能正确接收数据

回复:
user: user-1
content: 直接printf不行吗 printf("Sendbuf:%s\n", Sendbuf);

user: user-0
content: 引用 1 楼 user-2 的回复：send(socket_client, Sendbuf, 100, 0);查看下Sendbuf里到底是什么,100改成实际长度，socket发送的是字节流，不是字符串，不一定能打印出来，要完成打印的话最好转成16进制打印怎么查看sendbuf里的信息呢？转换成16进制又怎么转呢？新手小白，谢谢了。

user: user-2
content: send(socket_client, Sendbuf, 100, 0);查看下Sendbuf里到底是什么,100改成实际长度，socket发送的是字节流，不是字符串，不一定能打印出来，要完成打印的话最好转成16进制打印
user-0 提问: c语言求一定范围内的斐波那契数

回复:
user: user-1
content: 写个while(1)，直到数字大于b就停止，然后在循环内用变量计次  int count=0; int a,b,c,d; c=0; cin>>a>>b; while(1){ if(c>b) break; d=c; c=a+c; a=d; count++; } cout<<"有"<<(count-1)<<"个";  应该是这样子没错了，是存手打的，有可能出错

user: user-2
content: 写个递归函数用count记录序号

user: user-0
content: 问的是ab区间内一共有多少个斐波那契数，不求出来是哪几个数
user-0 提问: C语言题目，求助大神

回复:
user: user-0
content: 这才是源代码，二楼的发错了。。。  /*  求cos x的近似值 模块化设计*/ //输入精度e，用下列公式求cos x的近似值，精确到最后一项的绝对值小于e， //Cos（x）=x0/0!-x2/2!+x4/4!-x6/6!+… //要求求x的n次方、求阶乘以及余弦函数都用自定义函数实现。 //本例为参考代码，需要完善mycos,main函数 #include<stdio.h> #include<math.h> int fac(int n);   //阶乘函数申明 double CF(double x,int n);   //x^n 幂次方函数申明 double mycos(double x,double e);    //自定义余弦函数申明 //阶乘函数定义 double fac(int n) { 	int i; 	double fact=1; 	for(i=1;i<=n;i++) fact*=i; 	return fact; } //x^n 幂次方函数定义 double CF(double x,int n) { 	double f=1; 	if(n>0) 		for( ;n>0;n--)	f*=x;  	else if(n<0) 		for( ;n<0;n++)	f/=x; 	return f; } //自定义余弦函数  x为角度值,e为精度值 double mycos(double x,double e){ 	//角度转弧度 	//级数求和，满足精度e要求结束 	//返回余弦值return  } //主函数测试自定义余弦函数 void main() { 	double x,x0,e,g=0; 	int n=0; 	printf("测试自定义余弦函数 mycos\n"); 	printf("请输入角度值与精度值，用空格隔开\n"); 	scanf("%lf%lf",&x,&e); 	x0=x*3.1415926/180;//角度转弧度  	while(CF(x0,2*n)/fac(2*n)>e)//精度限制 	{ 		g+=CF(-1,n)*CF(x0,2*n)/fac(2*n);  //级数求和 		n++; 	} 	//分别显示自定义余弦函数与系统函数值，尝试输入e=0.001，0.000001进行对比 	printf("mycos(%.1lf)=%lf\t\tcos(%.1lf)=%lf\n",x,g,x,cos(x0)); }

user: user-1
content: 啥意思，自定义cos函数，修改了mycos和main，看看是你想要的吗？ //阶乘函数定义 int fac(int n) {     int i;     double fact=1;     for(i=1;i<=n;i++) fact*=i;     return fact; } //x^n 幂次方函数定义 double CF(double x,int n) {     double f=1;     if(n>0)     for( ;n>0;n--) f*=x;     else if(n<0)     for( ;n<0;n++) f/=x;     return f; } //自定义余弦函数  x为角度值,e为精度值 double mycos(double x, double e){     x = x*3.1415926/180;//角度转弧度     double c=0, s=0, f=1, k;     while((k=CF(x,c)/fac(c))>=e)//精度限制     {         s += f*k;  //级数求和         c += 2;         f *= -1;     }//级数求和，满足精度e要求结束     return s;//返回余弦值return } //主函数测试自定义余弦函数 int main() {     double x,x0,e;     printf("测试自定义余弦函数 mycos\n");     printf("请输入角度值与精度值，用空格隔开\n");     scanf("%lf%lf",&x,&e);     x0 = x*3.1415926/180;     printf("mycos(%.1lf)=%lf\t\tcos(%.1lf)=%lf\n",x,mycos(x, e),x,cos(x0));     return 0; }

user: user-0
content: //输入精度e，用下列公式求cos x的近似值，精确到最后一项的绝对值小于e， //Cos（x）=x0/0!-x2/2!+x4/4!-x6/6!+… //要求求x的n次方、求阶乘以及余弦函数都用自定义函数实现。 //本例为参考代码，需要完善mycos,main函数 #include<stdio.h> #include<math.h> int fac(int n);   //阶乘函数申明 double CF(double x,int n);   //x^n 幂次方函数申明 double mycos(double x,double e);    //自定义余弦函数申明 //阶乘函数定义 int fac(int n) { 	int i; 	double fact=1; 	for(i=1;i<=n;i++) fact*=i; 	return fact; } //x^n 幂次方函数定义 double CF(double x,int n) { 	double f=1; 	if(n>0) 		for( ;n>0;n--)	f*=x;  	else if(n<0) 		for( ;n<0;n++)	f/=x; 	return f; } //自定义余弦函数  x为角度值,e为精度值 double mycos(double x,double e){ 	double m,w=0;  	int c=0; 	m=x*3.1415926/180;//角度转弧度 	while(CF(m,2*c)/fac(2*c)>=e)//精度限制 	{ 		w+=CF(-1,c)*CF(m,2*c)/fac(2*c);  //级数求和 		c++; 	}//级数求和，满足精度e要求结束 	return w;//返回余弦值return  } //主函数测试自定义余弦函数 int main() { 	double x,x0,e,g=0; 	int n=0; 	printf("测试自定义余弦函数 mycos\n"); 	printf("请输入角度值与精度值，用空格隔开\n"); 	scanf("%lf%lf",&x,&e); 	x0=x*3.1415926/180;//角度转弧度  	while(CF(x0,2*n)/fac(2*n)>e)//精度限制 	{ 		g+=CF(-1,n)*CF(x0,2*n)/fac(2*n);  //级数求和 		n++; 	} 	//分别显示自定义余弦函数与系统函数值，尝试输入e=0.001，0.000001进行对比 	printf("mycos(%.1lf)=%lf\t\tcos(%.1lf)=%lf\n",x,g,x,cos(x0)); 	return 0; } 代码在这里！！！
user-0 提问: 问题

回复:
user: user-0
content: p在十六进制中是以2为底数p后面的数字为次幂数的计数法如p5代表2的5次方

user: user-0
content: 只找到了p计数法，但p计数法是啥真的不懂

user: user-0
content: 查了，没找到

user: user-1
content: 。。。建议上网查一下
user-0 提问: 求助大佬，指针和数组名的区别

回复:
user: user-1
content: 指针是*类型，数组是[]类型，对char*类型取地址得到的是char**，对char[]取地址得到的是数组首元素的地址也就是char的地址char*

user: user-2
content: 指针是用来存放地址的 数组存放一系列数据，数组名指向数组的首地址 这么一看可能没什么区别 你可以使用sizeof() 看一下数组和指针的字节大小可能就懂了
user-0 提问: C语言

回复:
user: user-1
content: 这种定义声明方式第一次见，长见识了。 刚学习了一下，虽然是被后来的标准所兼容。不过建议用新一些的方式

user: user-0
content: 引用 1 楼 寻开心的回复:函数一章， 形参和实参 ok好的哥

user: user-0
content: 引用 2 楼 Italink的回复:记住一条定律：无论函数形参如何改变，实参都不会变 函数传参其实是将实参复制一份作为形参，函数内部其实只是对实参的复制进行操作 那为什么第一个能改变呢？因为传的是指针，指针里存放的是数据的地址，通过函数传参，形参就是复制了一个实参（指针），但这个指针跟实参是指向同一个地方的，因此在函数内部使用*b，就能访问到这片数据区域，从而进行修改，回到定律，我们修改了形参的值吗？没有吧，我们只是通过形参里存放的地址，去访问并修改它，归根结底没有修改形参的值 而你第二个为什么没变？上面已经说你，你操作的其实是实参的一份复制 好的谢谢😜，我下去再看看，明天把帖结了

user: user-0
content: 引用 3 楼 白色一大坨的回复:这都不会还考二级，你开玩笑呢 牛皮大佬，能告诉我怎么屏蔽人吗

user: user-2
content: 记住一条定律：无论函数形参如何改变，实参都不会变 函数传参其实是将实参复制一份作为形参，函数内部其实只是对实参的复制进行操作 那为什么第一个能改变呢？因为传的是指针，指针里存放的是数据的地址，通过函数传参，形参就是复制了一个实参（指针），但这个指针跟实参是指向同一个地方的，因此在函数内部使用*b，就能访问到这片数据区域，从而进行修改，回到定律，我们修改了形参的值吗？没有吧，我们只是通过形参里存放的地址，去访问并修改它，归根结底没有修改形参的值 而你第二个为什么没变？上面已经说你，你操作的其实是实参的一份复制

user: user-3
content: 函数一章， 形参和实参
user-0 提问: 一道循环结构的题目，有点小错误，但是不知道怎么改，看了好久了，望大神指点

回复:
user: user-1
content: m没初始化啊

user: user-2
content: 就是m没初始化 int A,i,j,k,m=0;

user: user-3
content: 把 m 初始化一下试试
user-0 提问: 求助大佬帮助：想用C语言的结构实现多态，但是为什么创建子类对象时不能在堆空间中创建呢？？？

回复:
user: user-0
content: 引用 2 楼 user-1的回复:不是不能在对上创建对象，是你的用法不对 试试以下的代码 DeriveA* deriveA =(DeriveA*)malloc(sizeof(DeriveA)); //要么用malloc，注意参数是sizeof(DeriveA) deriveA->base.vptrTable.eat = aEat; deriveA->base.vptrTable.play = aPlay; deriveA->base.age = 40; deriveA->age = 20; deriveA->base.vptrTable.eat(); free(deriveA);  deriveA = new DeriveA(); //要么用new deriveA->base.vptrTable.eat = aEat; deriveA->base.vptrTable.play = aPlay; deriveA->base.age = 40; deriveA->age = 20; deriveA->base.vptrTable.play(); delete deriveA; 哦习惯了new。。。突然用malloc，忘了要用sizeof，谢谢大佬了

user: user-1
content: 不是不能在对上创建对象，是你的用法不对 试试以下的代码 DeriveA* deriveA =(DeriveA*)malloc(sizeof(DeriveA)); //要么用malloc，注意参数是sizeof(DeriveA) deriveA->base.vptrTable.eat = aEat; deriveA->base.vptrTable.play = aPlay; deriveA->base.age = 40; deriveA->age = 20; deriveA->base.vptrTable.eat(); free(deriveA);  deriveA = new DeriveA(); //要么用new deriveA->base.vptrTable.eat = aEat; deriveA->base.vptrTable.play = aPlay; deriveA->base.age = 40; deriveA->age = 20; deriveA->base.vptrTable.play(); delete deriveA;

user: user-0
content: 为什么不能在堆空间上创建对象呢
user-0 提问: 数据结构作业，要实现链表类型，我写了一个.h函数，一开始还好好的，睡觉之前不知道是点到什么还是删了什么，突然就不能实现功能了，请大佬帮我看一下，真的感谢！！！

回复:
user: user-1
content: 头文件里定义函数？头文件里一般用于函数声明～

user: user-0
content: 下面的注释不用管，有的注释还没改，预定义那一块的注释是没问题的
user-0 提问: 求助，谁能解释一下这个代码

回复:
user: user-1
content: 不理解就调试呀           if(j==0 || T[i] == T[j]){                 ++i; ++j;                  next[i] = j;                   printf("%d i=%d j=%d %d\n", __LINE__, i, j, next[i]);           }           else          {                 j = next[j];                   printf("%d j=%d %d\n", __LINE__, j, next[j]);          }

user: user-2
content: 字符串匹配算法，就是数据结构中的KMP算法

user: user-3
content: 。百度kmp算法。。。。。

user: user-4
content: 统计字符出现的位置？
user-0 提问: 二叉树创建

回复:
user: user-1
content: 创建二叉树时，你输入格式是%d， int类型，设置的变量是  x 是char类型，ASCII码值 1，2，4所对应的字符是非打印字符，打印出来无法显示。 如果你想存入二叉树的数据为int 类型，建议你讲二叉树中data的类型改变为 int 类型，输出也为int类型。

user: user-2
content: 建议参考：https://blog.csdn.net/weixin_46695826/article/details/105315351
user-0 提问: if else语句增加个开关的区别

回复:
user: user-1
content: 要么把ｊ拿出来单独判断，不管放外面还是里面都行，要么就直接if else，就不要再加第二个了，这样就是满足三个都为１执行，其余都不执行

user: user-1
content: else是你上面的判断不满足就执行下面假如有６种组合，你的代码是if(１)执行clr。else(剩下的２３４５６)都执set。然后又来一个if(2)执行clr,else(１３４５６)set，你没发现你的语句里是重复的吗？

user: user-2
content: 哪里一样了？你第二个都没有else，三个if语句都会进行判断。  引用 楼主 wenroudelang8888 的回复:各位大神，我最近在做OLED显示的程序，遇到需要反色显示的情况，需要加个开关控制是否反色， 原来语句是这样的   我加完开关j后的语句是这样的   可这个语句不能正确执行，  我又在main里用同样的格式写了这几句语句测试下，但这样的语句正常执行，如下    同样的格式，却结果不一样，请大神们帮忙看看，指点指点。谢谢了！！ 你修改之后的if语句判断条件从一个变成了两个，容易出错，比如当（dat&0x80）为假时，也执行了Set操作。 既然是开关，应该是先判断开关j是否等于0，再判断dat&0x80是否为0。
user-0 提问: 求助各位大佬，谢谢谢谢，明早就要收了，万分感谢！

回复:
user: user-1
content: #include <stdio.h> //母鸡５元一只，公鸡３元一只，小鸡１元三只，现１００元买了１００只鸡，各有多少？ int main(){         int i=0,j=0,k=3;         for(i=0;i<=19;i++){                 for(j=0;j<=(100-5*i)/3;j++){                         for(k=3;k<=(100-5*i-3*j)*3;k+=3){                                 if(i*5+j*3+k/3==100&&i+j+k==100){                                         printf("母鸡%d只,公鸡%d只,小鸡%d只\n",i,j,k);                                 }                         }                 }         }         return 0; }

user: user-2
content: 楼主和你们玩游戏，你猜你猜你猜猜猜

user: user-3
content: 哥们，你要问的是啥呀？怎么只贴出了代码？问题呢？

user: user-4
content: 是答案不对还是咋滴
user-0 提问: SDL2使用单独线程来绘制时绘制的东西大小会自动随窗口大小改变

回复:
user: user-1
content: 引用 8 楼 Pudron 的回复：解决了，在新的线程里创建渲染器就行了可以，通过控制不变量，猜测，验证问题，加油吧

user: user-0
content: 解决了，在新的线程里创建渲染器就行了

user: user-0
content: 使用多线程是因为我使用单线程时，我缩放窗口（改变大小）的时候，主线程会因为事件处理而阻塞，使窗口无法刷新，导致里面的物体的坐标没法随窗口变化，直到窗口大小定了（鼠标松开）时才刷新，很难看，所以我想试一下多线程能不能解决这个问题

user: user-0
content: 引用 5 楼 user-1 的回复:最后问题来了 既然归根结底都是ren在触发刷新， 主窗体并没有说要进行一些异步的动作，为何要用多线程呢？ 如果纯为练习，可以理解 最近试了一下，发现在窗口大小改变时原来屏幕根本没有渲染，找好久都不知道问题出在哪

user: user-1
content: 最后问题来了 既然归根结底都是ren在触发刷新， 主窗体并没有说要进行一些异步的动作，为何要用多线程呢？ 如果纯为练习，可以理解

user: user-1
content: 你在修改宽和高的时候，给他加锁 线程在根据宽高设置rt的时候也加锁 试试看吧 ~~~刚才的分析可能有些问题，你这边刷屏幕应该全都是靠正方形的刷新来触发整体的刷新的。     SDL_RenderFillRect(ren,&rt);     SDL_RenderPresent(ren); ~~~~

user: user-1
content: 屏幕刷新主窗体和里面的正方形，这两个步骤不是同步的吧 但是这两个窗体肯定要通信，  你放在主函数是放在handleEvent（）函数后面，（也在循环体里面？） 这样的意思是刷新主窗体的同时，刷新正方形。 ~~~~~~~~~~~~~~ 你所谓的垂直同步是什么意思呢? 假设你的ren只在main里面present一次，后续handleEvent会如何？ ~~~~~~~~~~~~~~ 假设你要完全独立控制你的正方形，（也许有分离模式，detach？这个组件我没用过，不知道了） 你的ren既然是通过win创建的，他们肯定有一些内部实现，互相通信的，你需要去了解，阅读相关文档。 那么你主线程在处理事件（拖拽外部主窗体）的时候， 是不是应该跟你的drawing线程（描绘正方形）通信，告诉他，外部环境已经变化 比如正方形的位置，是不是要跟着变，你通过帧的刷新率来同步，这种是不靠谱的， 需要线程间一种同步机制， 或许，你的ren也可以捕获事件？ ~~~~~~~~~~~~~~~~~~~~~~~

user: user-0
content: 引用 1 楼 user-1 的回复:虽然这块功能和API没接触过， 还是提供一些思路和猜测吧。 1.你里层的正方形其实和外层窗口是关联的。因为你的ren是基于win创建的 ren = SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC); 这个应该表示ren和win始终保持同步的意思吧，（按比例同步缩放） ----你看看是不是还可以设置成不同步的，应该是有另外的flag 2.你可以尝试先不拖拉外层窗体，然后修改render函数， 不断的去修改边长，看你的程序运行结果如何。 是否能入你预期的，正方形在不断的刷新出来？如果不能，那就是你还不知道怎么单独刷新SDL window里面的元素， 可能你还需要去了解下 ~~~~ 以上两点都可能是导致这个问题的原因 1. 那个SDL_RENDERER_PRESENTVSYNC是垂直同步，与此无关，我删了试过了。 2. 我把render()函数改在主线程里那个正方形的大小就不会改变，但如果把它放在线程了就这样了，我很想知道这和线程有什么关系...

user: user-1
content: 虽然这块功能和API没接触过， 还是提供一些思路和猜测吧。 1.你里层的正方形其实和外层窗口是关联的。因为你的ren是基于win创建的 ren = SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC); 这个应该表示ren和win始终保持同步的意思吧，（按比例同步缩放） ----你看看是不是还可以设置成不同步的，应该是有另外的flag 2.你可以尝试先不拖拉外层窗体，然后修改render函数， 不断的去修改边长，看你的程序运行结果如何。 是否能入你预期的，正方形在不断的刷新出来？如果不能，那就是你还不知道怎么单独刷新SDL window里面的元素， 可能你还需要去了解下 ~~~~ 以上两点都可能是导致这个问题的原因
user-0 提问: 求助大佬，C语言从文件里面读取数据到链表和将链表保存到文件

回复:
user: user-1
content: 就是把整个结构体当做一块写入，而不是把里面的一项一项写入

user: user-0
content: 引用 1 楼 user-1 的回复:fwrite(&write->n,write->n,sizeof(write->n),fp);         fputs(write->name,fp);         fputs(write->place,fp);         fputs(write->writer,fp);         fwrite(&write->price,write->price,sizeof(write->price),fp)  fwrite(write, sizeof(struct Node), 1, fp); 这个我看不太明白。。。麻烦详细说明一下

user: user-1
content: fwrite(&write->n,write->n,sizeof(write->n),fp);         fputs(write->name,fp);         fputs(write->place,fp);         fputs(write->writer,fp);         fwrite(&write->price,write->price,sizeof(write->price),fp)  fwrite(write, sizeof(struct Node), 1, fp);
user-0 提问: 麻烦大佬帮我看一下我这个代码，主函数的第一个for循环为什么运行不了

回复:
user: user-0
content: 引用 6 楼 六道佩恩的回复:[quote=引用 5 楼 weixin_45663602 的回复:] [quote=引用 2 楼 六道佩恩的回复:]内外循环的递增变量（i）混用了 大佬 我照你的改了 循环是可以了 结果也和要求的一样了 但是提交到平台还是报runtime error 请问是什么问题啊  求告知 非常感谢[/quote] 没看完，这道题的题的意思也没怎么看懂，不知道你的程序逻辑会不会有问题，不过代码还是有点问题的，f[i][j]这里，你的f数组申请为int**[] 类型，它表示，每个数组成员都是int**类型，即每个数组成员都是一个指向int*指针的指针，而照你的使用方法f[i][j]来看，你应该是想申请一个二维数组，二维数组不是这么申请的，你可以循环创建一些数组，让前面你的int**数组的成员来保存它们的首地址，但这样显然太麻烦了。 申请二维数组最简单的办法就是像申请一位数组那样，int arr[a][b]，a、b是整型变量，这是C99引入的变长数组，即用变量指定申请数组的长度。 如果要用malloc的话，最简单的办法就是申请一个一维数组，因为二维数组本质上就是在一维上顺序排列的，比如int arr[5][4]，那就是每4个元素为一个小组，这四个元素位置是相连的，大数组中一共有5个这样的小组，这5个小组也一样是相连的，你只要确定好位置方位就可以了，比如要使arr[i][j]赋值1，首先申请内存 int *arr = malloc( 5*4*sizeof(int) )，这里malloc返回的是void*指针，不需要强转，接着*( arr+ i*4+j ) = 1，或者 arr[ i*4+j ] =1; 如果一定要用malloc申请二维数组，应该这样申请：int (*arr)[4] = malloc( sizeof(4*5*sizeof(int)) )， 使用时  arr[i][j]=1;[/quote] 哇 非常感谢 已经解决了

user: user-1
content: 引用 5 楼 weixin_45663602 的回复:[quote=引用 2 楼 六道佩恩的回复:]内外循环的递增变量（i）混用了 大佬 我照你的改了 循环是可以了 结果也和要求的一样了 但是提交到平台还是报runtime error 请问是什么问题啊  求告知 非常感谢[/quote] 没看完，这道题的题的意思也没怎么看懂，不知道你的程序逻辑会不会有问题，不过代码还是有点问题的，f[i][j]这里，你的f数组申请为int**[] 类型，它表示，每个数组成员都是int**类型，即每个数组成员都是一个指向int*指针的指针，而照你的使用方法f[i][j]来看，你应该是想申请一个二维数组，二维数组不是这么申请的，你可以循环创建一些数组，让前面你的int**数组的成员来保存它们的首地址，但这样显然太麻烦了。 申请二维数组最简单的办法就是像申请一位数组那样，int arr[a][b]，a、b是整型变量，这是C99引入的变长数组，即用变量指定申请数组的长度。 如果要用malloc的话，最简单的办法就是申请一个一维数组，因为二维数组本质上就是在一维上顺序排列的，比如int arr[5][4]，那就是每4个元素为一个小组，这四个元素位置是相连的，大数组中一共有5个这样的小组，这5个小组也一样是相连的，你只要确定好位置方位就可以了，比如要使arr[i][j]赋值1，首先申请内存 int *arr = malloc( 5*4*sizeof(int) )，这里malloc返回的是void*指针，不需要强转，接着*( arr+ i*4+j ) = 1，或者 arr[ i*4+j ] =1; 如果一定要用malloc申请二维数组，应该这样申请：int (*arr)[4] = malloc( sizeof(4*5*sizeof(int)) )， 使用时  arr[i][j]=1;

user: user-0
content: 引用 2 楼 六道佩恩的回复:内外循环的递增变量（i）混用了 大佬 我照你的改了 循环是可以了 结果也和要求的一样了 但是提交到平台还是报runtime error 请问是什么问题啊  求告知 非常感谢

user: user-0
content: 引用 2 楼 六道佩恩的回复:内外循环的递增变量（i）混用了 好的 谢谢 我去改了试试

user: user-0
content: 引用 1 楼 user-2的回复:复制粘贴代码不是比截图再上传图片更方便些吗 复制粘贴的代码在这儿看起来很乱  所以我就只有截图了

user: user-1
content: 内外循环的递增变量（i）混用了

user: user-2
content: 复制粘贴代码不是比截图再上传图片更方便些吗
user-0 提问: (!a) || (!b) || (!c)逻辑表达式是否等同于!(a&&b&&c)？

回复:
user: user-1
content: 你先找一个不等的

user: user-2
content: 引用 10 楼 kkuipp 的回复:[quote=引用 9 楼 ggglivw 的回复:] [quote=引用 4 楼 qq_41515678 的回复:] 如果不是宏定义,在逻辑上是等同的(但执行命令不同)  别误导别个，如果执行的是一个函数，差别很大，一个是执行1-3个，一个是一定执行3个，最后看结果。[/quote] 两个逻辑是一样的，执行命令也是一样的，都是执行1-3个，第二个！（a&&b&&c），也是abc有一个为假即退出。[/quote] 。。。我眼花了

user: user-3
content: 引用 9 楼 ggglivw 的回复:[quote=引用 4 楼 qq_41515678 的回复:] 如果不是宏定义,在逻辑上是等同的(但执行命令不同)  别误导别个，如果执行的是一个函数，差别很大，一个是执行1-3个，一个是一定执行3个，最后看结果。[/quote] 两个逻辑是一样的，执行命令也是一样的，都是执行1-3个，第二个！（a&&b&&c），也是abc有一个为假即退出。

user: user-2
content: 引用 4 楼 qq_41515678 的回复:如果不是宏定义,在逻辑上是等同的(但执行命令不同)  别误导别个，如果执行的是一个函数，差别很大，一个是执行1-3个，一个是一定执行3个，最后看结果。

user: user-4
content: 德·摩根定律 编辑 讨论 在命题逻辑和逻辑代数中，德·摩根定律（或称德·摩根定理）是关于命题逻辑规律的一对法则。 [1]  奥古斯都·德·摩根首先发现了在命题逻辑中存在着下面这些关系： 非(P 且 Q) = (非 P) 或 (非 Q) 非(P 或 Q) = (非 P) 且 (非 Q) 德·摩根定律在数理逻辑的定理推演中，在计算机的逻辑设计中以及数学的集合运算中都起着重要的作用。 [1]  他的发现影响了乔治·布尔从事的逻辑问题代数解法的研究。这巩固了德摩根作为该规律的发现者的地位，尽管亚里士多德也曾注意到类似现象，且这也为古希腊与中世纪的逻辑学家熟知。 该定律也被称作反演律。

user: user-2
content: 明显不是，仔细看书上解释。

user: user-5
content: 基础知识，多学习、或者多花点时间思考、甚至试验就能得到结果。并且印象有可能会更深

user: user-4
content: a,b,c三个条件，他们的组合，不过是8种情况，从000到111，分别用程序跑一下就知道了。 结果是一致的

user: user-6
content: 如果不是宏定义,在逻辑上是等同的(但执行命令不同)

user: user-7
content: 自己看逻辑运算的公式吧，以下链接的【二 基本公式】章节 https://wk.baidu.com/view/0a94de232f60ddccda38a0c3?pcf=2

user: user-8
content: 前一个可以退出后一个，但后一个推不出前一个

user: user-7
content: 根据逻辑表达式的关系推导应该是等的。 难道你反现的不等的现象？
user-0 提问: c语言开关

回复:
user: user-0
content: 完了，无迹可寻了    结帖了

user: user-1
content: 再给点提示啊，用于什么用途？是选择了什么东西？

user: user-0
content: 引用 9 楼 與蘤舊縐 的回复:这怕不是你自己取的名字  网上搜C语言开关就看见这俩  好像确实不是什么官方用语

user: user-2
content: 这怕不是你自己取的名字  网上搜C语言开关就看见这俩

user: user-0
content: 引用 6 楼 與蘤舊縐 的回复:你这没例子没提示不好猜啊  不是宏，确实不好猜    引用 7 楼 user-3 的回复:编译开关？ #if 0 #else #endif ？  不是

user: user-3
content: 编译开关？ #if 0 #else #endif ？

user: user-2
content: 你这没例子没提示不好猜啊

user: user-2
content: 宏？？？？？

user: user-0
content: 引用 3 楼 大娱乐家cpy 的回复:难道是三目运算符？   c = a > b ? 1 : 0;  不是呀，有可能需要具体情境 才好说

user: user-1
content: 难道是三目运算符？   c = a > b ? 1 : 0;

user: user-0
content: 引用 1 楼 與蘤舊縐 的回复:你说的是switch？？  不是，就是一种选择语句的设计技巧  可惜我记不住了

user: user-2
content: 你说的是switch？？
user-0 提问: 这是什么东西?

回复:
user: user-1
content: 基本等同于VB中的 For i = a To b Step c  (main函数里,上限低于下限 For i = 100 To 1 Step -1) 即在100到1中每隔1作为一个加数,加到返回值里 即100+99+98+...+1 结果是5050

user: user-2
content: 这是什么编译器，可以支持中文标识符了？ 这个程序就是一个可以根据“起始”和“上限”的值判断是执行递增循环还是递减循环的程序，可以用作练习编写C语言的循环代码的练习题。 给你重新格式化了一下，容易看明白： #include <stdio.h> int 递变(int 起始, int 上限, int 递变量) //自定义递变函数,可以递增,可以递减. {    int 返回值;    if (起始 < 上限)    {       for (; 起始 <= 上限; 起始 = 起始 +递变量)       {          返回值 = 返回值 +起始;           printf("%d    ", 返回值);          printf("%d\n", 起始);           //getchar();       }    }    else if (起始 > 上限)    {       for (; 起始 >= 上限; 起始 = 起始 -递变量)       {          返回值 = 返回值 -起始;           printf("%d    ", 返回值);          printf("%d\n", 起始);           //getchar();       }    }    else if (起始 == 上限)    {       返回值 = 0;    }     return 返回值; }  void main() {    int  起始 = 100, 上限 = 1, 递变量 = 1;    int 结果 = 递变(起始, 上限, 递变量);     printf("%d\n", 结果); }

user: user-3
content: 现在的编译器支持中文变量吧？ 反正我是没用过中文变量名，没试过。。

user: user-4
content: 看着像程序，但是变量名没有是中文的，编译器不支持。
user-0 提问: PTA上的题

回复:
user: user-0
content: 引用 1 楼 user-1的回复:供参考  #include <stdio.h>  void Creat(int a[][5], int m); void Output(int a[][5]);  int main(void) {     int num[5][5], m;     scanf("%d", &m);     Creat(num, m);     Output(num);      return 0; }  void Creat(int a[][5], int m) {     int i, j, n;     n = m;     for (i=0; i<5; i++)     {         for (j=0; j<5; j++)         {             a[i][j] = n+j;         }         n = m+1;         m++;     } }  void Output(int a[][5]) {     int i, j;     for (i=0; i<5; i++)     {         for (j=0; j<5; j++)         {             printf("%5d", a[i][j]);         }         printf("\n");     } }   不管怎么样谢谢你啊啊啊啊

user: user-1
content: 供参考  #include <stdio.h>  void Creat(int a[][5], int m); void Output(int a[][5]);  int main(void) {     int num[5][5], m;     scanf("%d", &m);     Creat(num, m);     Output(num);      return 0; }  void Creat(int a[][5], int m) {     int i, j, n;     n = m;     for (i=0; i<5; i++)     {         for (j=0; j<5; j++)         {             a[i][j] = n+j;         }         n = m+1;         m++;     } }  void Output(int a[][5]) {     int i, j;     for (i=0; i<5; i++)     {         for (j=0; j<5; j++)         {             printf("%5d", a[i][j]);         }         printf("\n");     } }
user-0 提问: vc下c语言的运行

回复:
user: user-0
content: 引用 2 楼 chxchxkkk的回复:scanf除了数组名、函数名、字符串这些，其它的类型都要用 & 嗯呐，scanf接收的是地址，我知道啦，昨晚没注意

user: user-0
content: 引用 1 楼 user-2的回复:地址访问异常,改为scanf_s("%f",&num[i]); 这里需要的是num[i]的地址,而不是值(0),scnaf_s无法访问0x0,故会引发错误 妈呀我昨晚弄了半天，没看到，这么低级的错误谢谢了

user: user-1
content: scanf除了数组名、函数名、字符串这些，其它的类型都要用 &

user: user-2
content: 地址访问异常,改为scanf_s("%f",&num[i]); 这里需要的是num[i]的地址,而不是值(0),scnaf_s无法访问0x0,故会引发错误
user-0 提问: c语言%c输入字符无法执行

回复:
user: user-1
content: 跟%c没关系，主要原因是 scanf("%f%c%f", &a, &po, &b); 在输入了表达式之后，回车按键没有被屏蔽，导致 scanf("%c", &k); 读取的是回车符号。可以在输入了表达式后，使用rewind()函数来清理输入缓冲区中的数据，把回车符清理掉。 scanf("%f%c%f", &a, &po, &b); 		rewind(stdin);//----------清理回车符--------  关于rewind()函数的详细用法，请参考《C++中getchar()的使用方法》 希望能够帮到你！

user: user-2
content: //加减乘除 #include <stdio.h> int main(){  float a,b;char k,po;     do{   printf("请输入执行运算的数（如a+b)\n");   scanf("%f%c%f",&a,&po,&b);    switch(po){   case '+': printf("%.2f+%.2f=%.2f\n",a,b,a+b);break;   case '-': printf("%.2f-%.2f=%.2f\n",a,b,a-b);break;   case '*': printf("%.2f×%.2f=%.2f\n",a,b,a*b);break;   case '/':     if(b==0)      printf("分母为0"); //判断除数是否为0     else      printf("%.2f÷%.2f=%.2f\n",a,b,a/b);     break;  }   printf("是否继续执行：y or n\n");   while ((k = getchar()) != '\n'); //这里换成这个  }while(k=='y');  }  这个考虑到scanf从缓冲区读取时留下的'\n',如果直接用scanf("%c",&k);它直接从缓冲区读取'\n',而scanf("%s",&k)视'\n'为分隔符,但这种做法也不好,你输入字符串"y"是{'k',0},它将把&k视作字符串起始点,就算你只输入"k"并回车,po会被赋值为0
user-0 提问: 怎么定义指向指针数组(malloc的空间)的指针？

回复:
user: user-1
content: int *p[10]; p = (int **)malloc(sizeof(int *) * 10); if (!p) exit(0); for (i = 0; i < 10; i++)     p[i] = (int *)malloc(sizeof(int) * 20);

user: user-2
content: 引用 2 楼 千梦一生 的回复:如楼上。 或者乱来，强转也可以 int **p=(int **)malloc(sizeof(int));//malloc本质仅仅是申请某个大小的空间 并返回该空间第一个字节地址

user: user-2
content: 如楼上。 或者乱来，强转也可以 int **p=(int **)malloc(sizeof(int));//malloc本质仅仅是申请某个大小的空间

user: user-3
content: int **p=(int **)malloc(sizeof(int*));
user-0 提问: C语言 输入正整数将正整数分解质因数。质因数要满足两个条件:1）是这个数的因数;2）是质数（素数）如： 6=2*3 12=2*2*3 课后作业

回复:
user: user-0
content: 15行改为：   printf(" %d 的质因数分解为：%d = ",a,a);
user-0 提问: 打开文件后再写入就不用fprintf了吗

回复:
user: user-0
content: 没有重定向就可以啊乁( ˙ ω˙乁)

user: user-1
content: 引用 2 楼 weixin_45974777 的回复:[quote=引用 1 楼 棉猴的回复:]printf()函数的输出是标准控制台窗口，除非进行了重定向，将其重定向到文件。 那为什么他用的printf[/quote] 所以你要看他有没有重定向

user: user-0
content: 引用 1 楼 棉猴的回复:printf()函数的输出是标准控制台窗口，除非进行了重定向，将其重定向到文件。 那为什么他用的printf

user: user-1
content: printf()函数的输出是标准控制台窗口，除非进行了重定向，将其重定向到文件。
user-0 提问: 算法题！！求教大佬！小白学算法学得有点乱，求指导

回复:
user: user-1
content: 既然是有序，按照时间复杂度要求，可以用折半查找

user: user-0
content: 引用 1 楼 user-2 的回复：algorithm库中有个binary_search函数，够简洁吧，但最好还是自己实现一下我有点搞不懂输出俩位置怎么实现

user: user-2
content: algorithm库中有个binary_search函数，够简洁吧，但最好还是自己实现一下
user-0 提问: VS2019编译器的问题，有哪位大神帮我看看这个是什么情况研究一下午也没整明白，这个警告是怎么回事

回复:
user: user-1
content: fopen_s打开之后没有判断fp是否为NULL吧

user: user-2
content: 点结贴给分啊

user: user-0
content: 引用 4 楼 focuslight的回复:比如把代码放到 if(fp!=NULL)里 我怎么才能把分给你，第一次用这个软件

user: user-2
content: 比如把代码放到 if(fp!=NULL)里

user: user-0
content: 能告诉下怎么保护么， 大神

user: user-3
content: 文件指针可能为空，你在使用指针前做好空指针检测处理就可以了

user: user-2
content: 你打开文件可能失败， fp可能为NULL,  保护一下即可
user-0 提问: c程序设计问题

回复:
user: user-1
content: 谭浩强书有这题

user: user-2
content: 刚才说错了。 逗号不适用于%s的分隔。 因为%s的时候 不识别除了空白字符外的其他分隔符。 只能用空格。

user: user-3
content: 尝试使用scnaf("%s %s",x,y); 因为scanf中的字符串分隔符为空格符(包括' ','\t'等),如果输入"%s,%s" , scanf将会把输入的字符串(如"1,2")统一送给第一个%s(即x),这时的y是未初始化的。 而且 你输入的是"asp asp",不符合"%s,%s"输入规范。

user: user-4
content: 我运行程序时没有问题呀，只是你的scanf的控制符中有“，”，输入数据时有些麻烦。

user: user-2
content: 输入 asf,asf 试试
user-0 提问: 求问关于指针文件的问题

回复:
user: user-1
content: 你在循环中打印一下pay的值看看，是不是都能正确读出pay的值？

user: user-2
content: 在devc++上跑你的代码结果如上

user: user-0
content: 引用 1 楼 qybao 的回复:你在循环中打印一下pay的值看看，是不是都能正确读出pay的值？ 我改了一下，是这个      int i,pay; 	i=1; 	double tax; 	FILE *fp1,*fp2; 	fp1=fopen("salary.txt","r"); 	fp2=fopen("taxes.txt","w"); 	while(!feof(fp1)) 	 { 	 	fscanf(fp1,"%d",&pay);  	 	if(pay<800) 	 	 	tax=0;    	 	else if(pay<2000) 	 	 	tax=(pay-800)*0.1;  	 	else if(pay<5000) 			tax=1200*0.1+(pay-2000)*0.15; 		else if(pay<20000) 			tax=1200*0.1+3000*0.15+(pay-5000)*0.2; 	   		fprintf(fp2,"该人今年第%d个月的所得税为：%lf\n",i,tax); 		i++; 		if(i>12) break;	  	 }  	 fclose(fp1); 	 fclose(fp2); 而且两个文件也在同一个文件夹里，但还是0.0000
user-0 提问: python基础题

回复:
user: user-0
content: 引用 1 楼 ?Victor.?? 的回复：import math n=eval(input()) s=0 i=1 while(i < n+1): 	s=s+(-1)**(i-1)*1/(2*i-1) 	i+=1 s=s*4 print(s-math.pi)  好像是这样感谢！

user: user-1
content: import math n=eval(input()) s=0 i=1 while(i < n+1): 	s=s+(-1)**(i-1)*1/(2*i-1) 	i+=1 s=s*4 print(s-math.pi)  好像是这样
user-0 提问: 程序设计问题

回复:
user: user-1
content: 首先y， z要初始化为0， 假设a[0]就是最大值或者最小值，你这个y，z就是未知的值了  其次最后交换的时候， t = a[n]; a[n] = a[y]; a[y] = t; 这个错了a[n]已经越界了，应该是a[n-1] ~~~~~~~~~~~~~ 顺便提一下 程序中一些细节，值得改进，有些看起来很繁琐，绕人，有时候绕来绕去会把自己绕晕 你最好写得直观易懂些，这样不容易出错，后面自己或者别人再回头看的时候也简单。 比如这个交换，你可以写成宏或者函数调用，代码会明朗一些 还有循环控制，比如逆序的这个 for(i = 0; i < n; i++)     printf("%3d", a[n-i-i); 看起来得小心翼翼，怕怕的 你想，直白来说不就是从最后一个往前打印吗？ 最后一个是什么？ n -1嘛， 第一个呢 0，OK，循环这样写如何? for(i = n-1; i >=0; i--)     printf("%3d", a[i]); 有没有更直白，更简单些呢？（不要被一些说>=比较的效率比> 低一些这种言论所蛊惑，现代计算机不差那点性能）

user: user-0
content: 引用 1 楼 user-2 的回复:在开始的时候给z赋个0试试赋值之前试过了 能出结果但不对

user: user-2
content: 在开始的时候给z赋个0试试
user-0 提问: 便没出错，运行的时候停在while循环前没有进去是什么情况？？？

回复:
user: user-1
content: 一个分号的问题

user: user-0
content: 唉，自己太马虎了

user: user-0
content: #include <stdio.h> int main() { 	int a,b,c,count; 	scanf("%d %d", &a, &b); 	count = a*b;  	while (b != 0) 	{ 		c = a%b; 		a = b; 		b = c; 	} 	 	printf("%d %d", a, count/a);		 	return 0; }
user-0 提问: 请教枚举和结构体在都文件的应用

回复:
user: user-0

user: user-0

user: user-0
content: 不好意思昨天上传错图片了，结构体只能在函数里做声明吗？想作为一个全局变量来使用应该怎么写？

user: user-1
content: #include "你的头文件";
user-0 提问: C语言：求第n个到第m个之间的素数和。求大神解答一下我的代码哪里出错了？

回复:
user: user-1
content: 而且在循环中的时候，其实并不需要判断所有小于sqrt(n）的整数，只需要判断小于sqrt(n）的质数即可

user: user-1
content: 判断一个数n是和数，相当于一定有两个大于1的整数x、y 有：x*y = n。  比如 5(循环中的i)*2 = 10（和数）。其实在i = 2时已经判断过一次了。  换句话说循环到sqrt(10）即可。因为当循环过了这个阈值后，相当于两个乘数颠倒。之前已经做过判断了  如果说要效率的话，网上搜200个质数，代码效率应该不差。运行效率也快，多占点内存，但800B应该不大吧

user: user-2
content: 用到什么推理？当然就是数学推理啊。 你觉得x/3会大于x/2吗？x/1是x本身，按理是最大的除数，除了它，最大的除数会是什么？你再自己好好想想。

user: user-0
content: 还有就是除了2之外所有的偶数都不是素数，因为他们都有2这个因子。也可以根据这个改进一下程序。

user: user-0
content: 引用 2 楼 千梦一生 的回复:判断一个数n是和数，相当于一定有两个大于1的整数x、y 有：x*y = n。  比如 5(循环中的i)*2 = 10（和数）。其实在i = 2时已经判断过一次了。  换句话说循环到sqrt(10）即可。因为当循环过了这个阈值后，相当于两个乘数颠倒。之前已经做过判断了  如果说要效率的话，网上搜200个质数，代码效率应该不差。运行效率也快，多占点内存，但800B应该不大吧 我觉得你这么说更明确，不过你的答案也帮到我了。因为如果它如果是和数，那么它一定可以表示成两个数（除了1和它本身）相乘，这两个数必然有一个小于等于它的平方根。只要找到小于或等于的那个就行了，所以循环到sqrt(x)就行。

user: user-0
content: 引用 1 楼 user-2 的回复:你的代码逻辑上没看出问题，你运行出什么错了？ 至于sqrt(）这个函数，用不用无所谓，用了就是能改善些效率，减少循环次数，也就是for( i=2; i<x; i++){ //没必要循环到x-1，本来循环到sqrt(x）就可以了。当然你也可以用x/2代替sqrt(x），因为一般x/2就是最大的除数了，超过x/2，除了x本身，不可能有被x整除的数了。 能告诉我为什么一般x/2是最大的除数吗？是用到什么推理了吗？

user: user-2
content: 你的代码逻辑上没看出问题，你运行出什么错了？ 至于sqrt(）这个函数，用不用无所谓，用了就是能改善些效率，减少循环次数，也就是for( i=2; i<x; i++){ //没必要循环到x-1，本来循环到sqrt(x）就可以了。当然你也可以用x/2代替sqrt(x），因为一般x/2就是最大的除数了，超过x/2，除了x本身，不可能有被x整除的数了。
user-0 提问: c语言程序问题

回复:
user: user-1
content: 你怎么不缩进

user: user-2
content: 你这个ave加下来是6名学生5门课总成绩，不是某一行的成绩了。 非要用数组的话要不定义6个ave，每一行用一个ave统计，比如 ave1是第一行的，它的平均成绩就是 ave1/5。 还是用结构体方便

user: user-0
content: 引用 4 楼 bug10086 的回复:在J的循环体外面，I的循环体里面加上ave=0,清空后记录下一个学生的成绩懂了 感谢兄弟

user: user-0
content: 引用 4 楼 bug10086 的回复:在J的循环体外面，I的循环体里面加上ave=0,清空后记录下一个学生的成绩懂了 感谢兄弟

user: user-3
content: 在J的循环体外面，I的循环体里面加上ave=0,清空后记录下一个学生的成绩

user: user-4
content: 我是个小白，但我觉得ave应该定义成float类型的，按你写的代码的话ave/5是个int类型的吧，把这个改成float类型的试试
user-0 提问: 递归问题

回复:
user: user-1
content: while(i<=100) while循环的条件是i<=100是true，而结束循环的条件是i<=100是false 而while的循环体中 s = s+i; f(i+1,s); 根本没有修改i的代码，导致i<=100始终是true，所以一直在while循环中，跳不出来

user: user-0
content: 递归问题，他是怎样占用内存的。

user: user-0
content: 但是我把判断条件中的<=100改成<=5他就行，改成小点的数就可以。

user: user-0
content: 递归中我用 while为什么没有输出

user: user-0
content: 引用 8 楼 棉猴 的回复:[quote=引用 6 楼 end245835 的回复:] [quote=引用 4 楼 棉猴 的回复:] while(i<=100) while循环的条件是i<=100是true，而结束循环的条件是i<=100是false 而while的循环体中 s = s+i; f(i+1,s); 根本没有修改i的代码，导致i<=100始终是true，所以一直在while循环中，跳不出来 执行 f(i+1,s);  不会使i+1并且跳回到f函数吗？[/quote] 需要注意的是，while()的条件语句是i<=100，你的代码中，i根本没有变化，就是说没有使得循环结束的迭代语句，所以while循环一直不会结束，也就是死循环。所以不会有输出[/quote]  奥 明白了  以为f(i+1,s)会使while循环结束，谢谢大佬的指教。

user: user-1
content: 引用 6 楼 end245835 的回复:[quote=引用 4 楼 棉猴 的回复:] while(i<=100) while循环的条件是i<=100是true，而结束循环的条件是i<=100是false 而while的循环体中 s = s+i; f(i+1,s); 根本没有修改i的代码，导致i<=100始终是true，所以一直在while循环中，跳不出来 执行 f(i+1,s);  不会使i+1并且跳回到f函数吗？[/quote] 需要注意的是，while()的条件语句是i<=100，你的代码中，i根本没有变化，就是说没有使得循环结束的迭代语句，所以while循环一直不会结束，也就是死循环。所以不会有输出

user: user-2
content: if是判断语句while是循环语句，感觉这两个就不同，而且你可以在while语句中打印一下i的值和s的值，你会发现一些不一样的东西

user: user-0
content: 引用 4 楼 棉猴 的回复:while(i<=100) while循环的条件是i<=100是true，而结束循环的条件是i<=100是false 而while的循环体中 s = s+i; f(i+1,s); 根本没有修改i的代码，导致i<=100始终是true，所以一直在while循环中，跳不出来 执行 f(i+1,s);  不会使i+1并且跳回到f函数吗？

user: user-0
content: 执行 f(i+1,s); 不会跳回到f函数吗？
user-0 提问: C语言函数返回局部变量的地址

回复:
user: user-1
content: VC2010中是这样的：  楼主你自己不看，怪谁？

user: user-1
content: 编译器通常会给警告信息的，比如在mningw中是这样的:

user: user-2
content: 分析内存堆栈:  address()返回时 mian()返回地址      p(int *)            printf;(address()返回地址)    a(int 2)       |未使用 address()返回后 main()返回地址      p(int *指向a)   |未使用                                 a(已弃用 int 2)  可以看到,这时的a并没有被覆盖,它只是被弃用,但值还是2,故输出值还是2,但如果再调用其他函数 a的值就会被覆盖

user: user-3
content: 引用 5 楼 千梦一生 的回复: #include<stdio.h> int* address(); int* address() {         int a=2;         return &a; } void func() { int x = 4; return; } int main() {          int* p=address();          func();          printf("%d\n",*p);//试试这回会打印什么？有可能是4（函数不被优化的情况下，就算是4也是未定义行为。或者说不符合规范的行为）          return 0; }  楼主找个栈什么的讲解的学习下自然就明白是为何了

user: user-3
content: #include<stdio.h> int* address(); int* address() {         int a=2;         return &a; } void func() { int x = 4; return; } int main() {          int* p=address();          func();          printf("%d\n",*p);//试试这回会打印什么？有可能是4（函数不被优化的情况下，就算是4也是未定义行为。或者说不符合规范的行为）          return 0; }

user: user-4
content: 你再加个函数 int address2() {         int a=3;         return a1; } 然后main方法加一句  int* p=address(); address2(); //多调用一个函数试试？因为调用完address后，函数栈释放了，但是栈的内存信息没被更新（也就是垃圾信息），所以你再多调用一个函数，把栈内存刷新，这时你再看看就明白了 printf("%d\n",*p);

user: user-5
content: 返回局部变量的地址是未定义行为，即不能保证每次都能得到局部变量的值。因为局部变量的生命周期就是从定义到函数结束。既然函数调用结束了，它的生命周期也结束了，既然结束了再用就没意义了吧

user: user-6
content: 这东西就像手机丢水里后，拿出来吹干了有可能能用，有可能就费了一样不确定性，但谁会故意把手机扔水里再拿出来用呢。

user: user-7
content: 巧合而已，不建议这样用
user-0 提问: 求助！！！

回复:
user: user-1
content: ？？？？？？？？？？？ 结果是正确的呀！！！

user: user-2
content: math.h

user: user-2
content: math %f%f%f%f AB sqrt %. 3f

user: user-3
content: %f%f%f%f AB sqrt %f  如果基础还行，我想至少能填上2个到3个吧 全让别人帮忙，自己能学到多少？  建议楼主扎扎实实学习吧
user-0 提问: 返回值为数组的时候函数怎么定义

回复:
user: user-1
content: 你好，要实现对数组进行传递，可以借助指针来完成。 在传递过程中，需要将保存结果的数组首地址传入子函数，计算后返回首地址。 因为子函数结束时会将形式参数变量的内存全部释放掉，数据清除。但是地址不会发生改变。  以下为源程序 #include <stdio.h> #include <stdlib.h>  int *fun_sum_order(int a[],int b[],int c[],int *sum,int num)//sum表示求和结果存储的首地址, num 表示数组中元素个数  {	 	int *p = sum;     	for (int i = 0;i < num;i++) //求总分      {         sum[i] = a[i] + b[i] + c[i];     }          /*输出初始的sum求和值 与结果对比*/     printf("初始sum数组值\n");     for (int i = 0;i < num;i++) //数组输出      {         printf("%d ",sum[i]);     }          for (int i=0;i<num;i++)//对数组进行排序      {         int k = i,temp = sum[i];         for(int j = i + 1;j < num;j++)         {	         	if(temp < sum[j] ){temp = sum[j];k = j;}//每次寻找最大值 记录最大值所在数组下标	 		} 		if(k != i){temp = sum[k];sum[k] = sum[i];sum[i] = temp;}//发现最大值，位置替换。      }          return p; }  int main() { 	int a1[15]={72,21,85,23,65, 9,92,48,88,98,20,59,36,36,70};//第一喜欢分数 	int a2[15]={95,38,98,9, 58,78, 7,44,28,46,96,78,34,82,5};//第二喜欢分数 	int a3[15]={99,18,71,20,78,33,79,39,25,7, 61,20,15,31,57};//第三喜欢分数     int sum0[15] = {0}; 	int *str;//定义一个指针,子函数的返回值为指针，需要用一个指针来接收。      str = fun_sum_order(a1,a2,a3,sum0,15);     printf("\n排序后sum数组值\n"); 	for (int i = 0;i < 15;i++) //输出sum数组值      {         printf("%d ",str[i]);     }     return 0; } 测试结果

user: user-2
content: 为什么一定要return 一个返回值呢? 给你个代码体会一下 void func(int* array,int len) {    for(int i=0;i<len;i++)      array[i]=2*array[i]; } int main() {    int arr[10]={1,2,3,4,5,6,7,8,9,10};    func(arr,10);    for（int i=0;i<10;i++)     print("%d ",arr[i]）; }

user: user-3
content: 你返回局部变量（数组），是未定义的行为。 如果把要返回的数组加上static，可以直接返回数组名  int *sort(int s1[],  int s2, s3) {    static int t[15]; xxx  return t; } int main() { int *p = sort(xxxx); }

user: user-4
content: C 做不到

user: user-5
content: 不知道，你是不是这个意思  #include<algorithm> #include<iostream> #include<vector> #include<map> using namespace std;  typedef pair<int, int> PAIR;   bool cmp_by_value(const PAIR& lhs, const PAIR& rhs) {     return lhs.second > rhs.second;   }    void Sum_Sort( 	vector<int>&a2, 	vector<int>&a3, 	vector<int>&a4, 	map<int,int>&a5, 	vector<int>&ans, 	vector<int>&a1) { 	for(int i = 0;i != a2.size(); ++i) 		a5.insert(make_pair(i, (a2[i]+a3[i]+a4[i])));  	vector<PAIR> score(a5.begin(), a5.end());    	sort(score.begin(), score.end(), cmp_by_value);  	for (int i = 0; i != score.size(); ++i){     	ans.push_back(score[i].first);     	a1.push_back(score[i].second);       } } int main(int argc, char const *argv[]) { 	vector<int> a2 = {72,21,85,23,65,9,92,48,88,98,20,59,36,36,70}; 	vector<int> a3 = {95,38,98,9,58,78,7,44,28,46,96,78,34,82,5}; 	vector<int> a4 ={99,18,71,20,78,33,79,39,25,7,61,20,15,31,57}; 	vector<int> ans;//编号排序 	vector<int> a1;//总分数 	map<int,int> a5;//总分 	Sum_Sort(a2,a3,a4,a5,ans,a1); 	 	for(int i = 0;i != ans.size(); ++i) 	{ 		cout<<ans[i]<<" "<<a1[i]<<endl; 	}  	return 0; }
user-0 提问: 构造函数求解一元二次方程，，学弟求帮助，呜呜呜

回复:
user: user-1
content: else if(result=0){ 注意赋值和比较的区别

user: user-0
content: 好嘞，谢谢您

user: user-2
content: 引用 4 楼 weixin_46515136 的回复:再麻烦问一下  ，为啥输入1   -2  1得时候是  无解，是不是我最后一个else错了  改完==就可以了，不然只要result<=0,就直接到else里，输出无解了

user: user-0
content: 好嘞  ，知道了

user: user-0
content: 再麻烦问一下  ，为啥输入1   -2  1得时候是  无解，是不是我最后一个else错了

user: user-2
content: 引用 2 楼 weixin_46515136 的回复:谢谢大哥，马上要交作业，感谢感谢  等一下  else if(result=0){  这个=改==

user: user-0
content: 谢谢大哥，马上要交作业，感谢感谢

user: user-2
content: #include<stdio.h> #include<math.h> void hsz(double a,double b,double c) { double result,root; double x1,x2; result=b*b-4*a*c; if(result>0){ x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); printf("%.3f,%.3f",x1,x2); } else if(result=0){ x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=x1; printf("%.3f,%.3f",x1,x2); } else{     printf("没有解");  }        }     int main(void)  {   double a,b,c;   printf("输入 a b c");   scanf("%lf%lf%lf",&a,&b,&c);   hsz(a,b,c);   return 0;  }  %.3f 改一下就可以了
user-0 提问: 编译结果报错：对'sk_new'未定义

回复:
user: user-1
content: https://blog.csdn.net/dong_beijing/article/details/81455173

user: user-0
content: 问题解决了 ， 我发现是编译的时候 调用的自己的openssl库，但是运行的时候是local的库，没有把 自己的openssl库导入local里。
user-0 提问: 求数组转浮点数（float）的方法。

回复:
user: user-1
content: sscanf(buff, "%f%*c%f", &temp1, &temp2);

user: user-2
content: 引用 楼主 pjzmj2012 的回复:求数组转浮点数（float）的方法。 如 有数组buff[]={3,0,1,7,'.',0,4,3,4,9,5,'N',1,2,0,0,6,'.'7,9,0,5,4,6,'E'} 转换为float temp1=3017.043495 temp2=12006.790546 那位大侠知道啊，在线等 或者有数组直接转经纬度的 时分秒也行。 字符数组格式固定就用sscanf格式化读入去掉特定的标识，再转为float就可以了