Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于指针的问题想问一下各位大佬

回复:
user: user-0
content: 感谢dalao

user: user-1
content: 第58行  for(i=0;i<k;i++)  printf("%3d",goodstudent[i]);//for(i=0;i<4;i++)printf("%3d",goodstudent[i]);

user: user-1
content: 修改如下，供参考：#include<stdio.h>  void aver(int (*p)[5]); void fail(int (*p)[5],int *pn,int x); void good(int (*p)[5],int *pn,int x);  void aver(int (*p)[5])  //求第一门课的平均分 {   int i,j,sum=0;   for(i=0,j=0;i<20;i++)   {     if(i%5==0)sum+=(*(*p+i)+j);   }   sum=sum/4;   printf("第一门课程的平均分为：%d\n",sum); }   void fail(int (*p)[5],int *pn,int x)  //找两门课不及格的学生，并输出学号、成绩 {   int i,j,flag;   for(i=0;i<x;i++,pn++)   {     flag=0;     for(j=0;j<5;j++)     {       if(*(*(p+i)+j)<60)flag+=1;     }     if(flag>=2)     {       printf("No.%d 不及格,他的全部成绩为：\n",*pn);       for(j=0;j<5;j++)printf("%5d",*(*(p+i)+j));       printf("\n");     }   } }   void good(int (*p)[5],int *pn,int x)//找出平均成绩在90以上或全成绩在85以上的学生 {   int i,j,k=0,flag,sum,goodstudent[5];   //增加一个变量k   printf("成绩优秀学生的学号为：");   for(i=0;i<x;i++,pn++)   {     sum=0;     flag=0;     for(j=0;j<5;j++)      {       sum += *(*(p+i)+j);      //sum+=(*(*p+i)+j);这里好像出了问题，循环一次就多加了数字                                          //printf("\nsumA=%d\n",sum);       if(*(*(p+i)+j)>85) flag += 1;      }     if(flag==5 || sum/5>=90)  goodstudent[k++]= *pn;                                       //else                                      //  if(sum/4>90) goodstudent[i]=*pn;                                     // printf("sumB=%d",sum);   }   for(i=0;i<k;i++)  printf("%3d",goodstudent[i]); }   int main() {    int i,j,score[4][5],num[4];    int *pnum,(*pscore)[5];     printf("请输入学号:\n");    for(i=0;i<4;i++)scanf("%d",&num[i]);     pnum=&num[0];    for(i=0;i<4;i++,pnum++)      {        printf("请输入%d号学生的成绩：",*pnum);        for(j=0;j<5;j++)           {             scanf("%d",&score[i][j]);           }        getchar();      }    for(i=0;i<4;i++)     {       for(j=0;j<5;j++)        {          if(score[i][j]>100||score[i][j]<0)printf("第%d行数据有误！\n",i+1);        }     }     pscore=score;    aver(pscore); //第一门课平均分     pnum=&num[0];    pscore=score;    fail(pscore,pnum,4);//两门课不及格的学生     pscore=score;    pnum=&num[0];    good(pscore,pnum,4);//优秀学生     printf("\n");    system("pause");    return 0; }
user-0 提问: 看看这道题吧

回复:
user: user-0
content: 引用 1 楼 user-3的回复:嗯，C写反了，D是对的 额，谢谢你了。

user: user-0
content: 引用 3 楼 一颗白面馒头的回复:c是反了，第一句a指向c，a的next就是c了，b已经找不回来了，第二句a的next就是c，c再指向自己？ 额额，你说的是对的，互相交流

user: user-0
content: 引用 4 楼 自信男孩的回复:个人的看法和楼主一样的。如果C把这两条语句调换一下，即先执行q->next = p->next;在执行：p->next = &c;这样是没问题的。 所以D选项是正确的。 对的，我也这么认为，谢谢了

user: user-1
content: 个人的看法和楼主一样的。如果C把这两条语句调换一下，即先执行q->next = p->next;在执行：p->next = &c;这样是没问题的。 所以D选项是正确的。

user: user-2
content: c是反了，第一句a指向c，a的next就是c了，b已经找不回来了，第二句a的next就是c，c再指向自己？

user: user-2
content: 谢谢楼主，治好了多年的颈椎问题

user: user-3
content: 嗯，C写反了，D是对的
user-0 提问: 校园oj题疑问

回复:
user: user-0
content: 引用 3 楼 ctrigger 的回复：while(ch=getchar()!='\n')  改为下面的，试试看：  引用while((ch=getchar())!='\n')谢谢

user: user-0
content: 引用 2 楼 qzjhjxj 的回复：输入的是字符串，不是单个字符，修改如下，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int vowel(char ch);     int x,sum=0,i=0;     char ch[80];     gets(ch);     while (ch[i]!='\0'){         if(vowel(ch[i]))            sum += 1;         i++;     }     printf("%d",sum);     system("pause");     return 0; }  int vowel(char ch) {    if(ch=='A'||ch=='a'||ch=='E'||ch=='e'||ch=='i'||ch=='I'||ch=='o'||ch=='O')       return 1;    return 0; }谢谢

user: user-0
content: 引用 1 楼 自信男孩 的回复：改成这样： while ((ch = getchar())  != '\n')  如果用 while (ch = getchar()  != '\n') 这样ch是true和false谢谢

user: user-1
content: 这屏幕碳烤的？

user: user-2
content: while(ch=getchar()!='\n')  改为下面的，试试看：  引用while((ch=getchar())!='\n')

user: user-3
content: 输入的是字符串，不是单个字符，修改如下，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int vowel(char ch);     int x,sum=0,i=0;     char ch[80];     gets(ch);     while (ch[i]!='\0'){         if(vowel(ch[i]))            sum += 1;         i++;     }     printf("%d",sum);     system("pause");     return 0; }  int vowel(char ch) {    if(ch=='A'||ch=='a'||ch=='E'||ch=='e'||ch=='i'||ch=='I'||ch=='o'||ch=='O')       return 1;    return 0; }

user: user-4
content: 改成这样： while ((ch = getchar())  != '\n')  如果用 while (ch = getchar()  != '\n') 这样ch是true和false
user-0 提问: 有人知道这要怎么做吗?大一学c语言不太懂

回复:
user: user-1
content: 引用 3 楼 weixin_53514129 的回复:[quote=引用 1 楼 user-3的回复:]a^(1<<(k-1)) 为什么是这样打?[/quote] 简单的位操作，没理解么？我show个完整代吧。#include <stdio.h>   int main(void) { 	unsigned int a, k; 	scanf("%x%d", &a, &k); 	a ^= (1<<k-1);	 	printf("%x\n", a); 	return 0; }

user: user-0
content: 引用 1 楼 user-3的回复:a^(1<<(k-1)) 为什么是这样打?

user: user-2
content: #include <iostream>  using namespace std;   int main(void) {     unsigned int a, k;      cin>>hex>>a>>dec>>k;      //cout<<hex<<a<<endl;     //cout<<dec<<k<<endl;     k -= 1;     cout<<sizeof(a) * 8<<endl;     if (k >= sizeof(a) * 8)         cout<<hex<<a<<endl;      //cout<<hex<<~(1u<<k)<<endl;     a ^= (1u << k);      cout<<hex<<a<<endl;      return 0; }  供参考～

user: user-3
content: a^(1<<(k-1))

user: user-1
content: 引用 5 楼 weixin_53514129 的回复:[quote=引用 4 楼 ctrigger的回复:][quote=引用 3 楼 weixin_53514129 的回复:][quote=引用 1 楼 user-3的回复:]a^(1<<(k-1)) 为什么是这样打?[/quote] 简单的位操作，没理解么？我show个完整代吧。#include <stdio.h>   int main(void) { 	unsigned int a, k; 	scanf("%x%d", &a, &k); 	a ^= (1<<k-1);	 	printf("%x\n", a); 	return 0; }[/quote] 我是弄不懂1<<(k-1)代表什么[/quote]  C语言位运算，如同汇编语言的左移指令。。

user: user-0
content: 引用 4 楼 ctrigger的回复:[quote=引用 3 楼 weixin_53514129 的回复:][quote=引用 1 楼 user-3的回复:]a^(1<<(k-1)) 为什么是这样打?[/quote] 简单的位操作，没理解么？我show个完整代吧。#include <stdio.h>   int main(void) { 	unsigned int a, k; 	scanf("%x%d", &a, &k); 	a ^= (1<<k-1);	 	printf("%x\n", a); 	return 0; }[/quote] 我是弄不懂1<<(k-1)代表什么
user-0 提问: C语言求助！！！！help！！！！！SOS！！！

回复:
user: user-1
content: 楼主可以用输入的特殊值来判断是否要继续输入，比如'\n'，'0'等等；

user: user-0
content: 谢谢大家(*°∀°)=3

user: user-2
content: 文件结尾，EOF即可。 while((c=getchar()) != EOF) ...

user: user-3
content: 某些问题如果能描述清楚那就差不多解决了。 解决不了正是因为说不清楚问题是什么。

user: user-4
content: 没太明白你的意思，你两次while循环是要相同的信息还是不同的信息？ 如果要相同的信息，直接复制第一次读入的信息就好了 如果是继续往后读入（也就是不同信息），那你就重新再做一次while不就好了吗？如果你的输入来自于文件，那就fseek偏移一下第一次读入的长度就可以了
user-0 提问: C语言指针问题

回复:
user: user-1
content: 建议楼主对于p+2的打印用%p，因为%p是专门对指针打印地址用的。  这个程序就是指针和数组的使用，主要是指针的使用，指针偏移和对应的元素值。  建议多加一些打印，结合地址和元素值熟悉指针的了解。另外，如果想更详细的了解，建议int *p和char *q, 交叉使用。

user: user-0
content: 引用 楼主 AruNi° ഒ的回复:刚学到c语言，遇到这道题有点懵，有没有大佬帮我分析分析的？越详细越好，非常感谢！！！ 已经解决了！
user-0 提问: 请教一下C中如何模拟按下鼠标按键

回复:
user: user-1
content: Linux系统，鼠标对应的设备文件目录：/dev/input/下。直接open就行，接下来就是读写操作了。 Windows系统，不清楚，等楼下补充吧。

user: user-2
content: 向指定的窗口发送鼠标点击的消息

user: user-3
content: SendInput、mouse_event

user: user-4
content: windows 有 API，查一下，控制鼠标移动点击都可以的
user-0 提问: C Primer Plus 第六版_C语言基本数据类型&第45页.

回复:
user: user-1
content: 首先，请注意书上说的是“常量”，所以char型变量不会自动变成int型。 32位系统上常量'B'的内存为模式是 00000000 00000000 00000000 01000010 这样32位， 赋值给一个char变量的时候舍弃前24位，把低8位送过去。 为了迁就这种设定，你会发现getchar等字符处理函数是int类型的。 这部分是需要普及的。 ======================================================== 其次， 需要指出的是，K&R时代这样的设计本来是打算用来兼容多字节字符比如汉字的，但后期对非ASCII字符的处理走上了另外的（好几条）路，因此后半部分的描述在现在的编译器上不一定允许，也许是产生warning，所以不必深究。

user: user-2
content: 'FATE' 没见过这样的表示，这是非法的，编译器是编译不过去的。  char是int的子集，用int定义char类型的变量是类型提升，没什么问题。  可以注意下getchar()库函数的返回值：  int getchar(void);  都是int类型，为什么呢，一部分是类型提升，一部分是EOF，这个是int类型，不是char类型。所以为了和EOF比较，会用int类型的变量接收getchar()的返回值。
user-0 提问: 有大佬知道这那错了吗

回复:
user: user-1
content: 二层循环少一个大括号吧，应该把k = pow(10, j-1);和sn = sn+a*k;扩到二层循环里吧。

user: user-2
content: 另外内层的for缺少花括号

user: user-2
content: pow是浮点，赋值给整数会产生截断误差。

user: user-3
content: C++代码，仅供参考：#include <fstream> using namespace std;  int fn(int a, int n) { 	if (n == 1) return a; 	else return a * (10 * fn(1, n - 1) + n); }  int main(void) { 	int a, n; 	ifstream fin("SC3_6C.in"); 	ofstream fout("SC3_6C.out");  	fin >> a >> n; 	fout << fn(a, n);  	return 0; }

user: user-3
content: 靠，看来我眼睛有问题啊。看到这么鲜艳的图片，眼睛特别难受。
user-0 提问: 那位大佬知道这个怎么写吗？

回复:
user: user-1
content: #include <stdio.h> #include <math.h>  int is_prime(int n) {     int i, size;      if (n < 2)         return 0;     size = (int)sqrt(n);      for (i = 2; i < size; i++)         if (n % i == 0)             return 0;      return 1; }  static void swap(int *a, int *b) {     int tmp = *a;     *a = *b;     *b = tmp; }  int check_revesible_prime(int n) {     int tmp;      if (n < 10)         return 1;      tmp = 0;     while (n) {         tmp = (n % 10) + tmp * 10;         n /= 10;     }      if (is_prime(tmp))         return 1;      return 0; }  int main(void) {     int m, n;     int i, cnt = 0;      scanf("%d%d", &m, &n);     if (m > n)         swap(&m, &n);      for (i = m; i <= n; i++) {         if (is_prime(i)) {             if (check_revesible_prime(i)) {                 printf("%d ", i);                 cnt++;             }         if (cnt % 8 == 0)             putchar(10);         }      }     putchar(10);      return 0; } 供参考～  伸手要代码不是好习惯和解决问题的办法。还是希望楼主自己试试写写，起码判断素数的逻辑自己能写写或者起码网上找找学习一下，什么都不干你自己想想能学到什么？有时间还是用功学学，不然大学里你自己能学到什么程度？
user-0 提问: 大佬们，我没明白，为什么要定义area，不定义这个函数这个程序不也能运行吗？（C语言，求矩形面积）

回复:
user: user-1
content: #include <stdio.h>     /*文件包含，标准输入输出函数*/ int area(int a, int b) /*用户定义的函数*/ {     int s;     /*定义s为整型变量*/     s = a * b; /*求a与b的乘积*/     return s;  /*返回s的值*/ } void main() /*主函数*/ {     int x, y;                                       /*定义x,y为整型变量*/     scanf("%d%d", &x, &y);                          /*获取x,y的值*/     printf("\nx=%d,y%d", x, y);                     /*输出x,y的值*/     int z;                                          /*定义z为整型变量*/     z = area(x, y);                                 /*调用函数*/     printf("\nThe area of the rectangle is:%d", z); /*输出z的值*/ }

user: user-0
content: 引用 1 楼 自信男孩的回复:不用也是可以的，把s = a *b;放在main函数是一样的。  但对于模块化，建议用自定义，这样可能可以提到代码的可读性已经清晰度  建议楼主贴代码前，先把格式调好了，另外注释不是越多越好，而是关键地方加注释即可。注释多了反而其副作用，使代码看着臃肿～ 谢谢大佬解答

user: user-2
content: 单行注释//

user: user-3
content: 不用也是可以的，把s = a *b;放在main函数是一样的。  但对于模块化，建议用自定义，这样可能可以提到代码的可读性已经清晰度  建议楼主贴代码前，先把格式调好了，另外注释不是越多越好，而是关键地方加注释即可。注释多了反而其副作用，使代码看着臃肿～
user-0 提问: C语言动态数组

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:[quote=引用 2 楼 linuxusr 的回复:] //diff -memcpy(elem, da->root + da->len - 1, da->size); +memcpy(elem, da->root + --da->len, da->size);  建议用第一个吧，不建议用第二个。  首先+ --连着不利于代码阅读，当然可以考虑加括号； 其次，--具有副作用，因为此处虽然有da->len-1的意思，同时，还会修改da->len的值，这里要看要不要有这一步了，个人感觉没有这一步。[/quote]  感谢回复。  这一行是在remove函数里，因为删除一行后，实际的元素个数也要减一。

user: user-1
content: 引用 2 楼 linuxusr 的回复: //diff -memcpy(elem, da->root + da->len - 1, da->size); +memcpy(elem, da->root + --da->len, da->size);  建议用第一个吧，不建议用第二个。  首先+ --连着不利于代码阅读，当然可以考虑加括号； 其次，--具有副作用，因为此处虽然有da->len-1的意思，同时，还会修改da->len的值，这里要看要不要有这一步了，个人感觉没有这一步。

user: user-0
content: //diff -memcpy(elem, da->root + da->len - 1, da->size); +memcpy(elem, da->root + --da->len, da->size);

user: user-2
content: 挺好的，点赞。希望楼主继续努力，进一步完善完善。。
user-0 提问: 运行窗口没有Press any key to continue!

回复:
user: user-1
content: 引用 4 楼 AruNi° ഒ 的回复:[quote=引用 2 楼 自信男孩的回复:]运行时间长的问题，因为楼主用的是递归，递归函数虽然代码很少，但是运行起来比较耗时，尤其这个n越大，越耗时。可以试着比较一下n为一个小值和一个大值时，运行时间的差别 哦哦，这样啊，那怎么才能又用递归又弹出那个呢[/quote] 我的意思，这个n如果很大，那你就耐心等一会看看有没有输出。另外，Fib(i)不要多次使用，直接用其返回值，然后再比较和输出，比较用其返回值，输出用其返回值。这样似乎可以减少递归的次数吧

user: user-0
content: 引用 1 楼 赵4老师的回复:现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！ 表示有点看不懂你说的，

user: user-0
content: 引用 2 楼 自信男孩的回复:运行时间长的问题，因为楼主用的是递归，递归函数虽然代码很少，但是运行起来比较耗时，尤其这个n越大，越耗时。可以试着比较一下n为一个小值和一个大值时，运行时间的差别 哦哦，这样啊，那怎么才能又用递归又弹出那个呢

user: user-0
content: 引用 1 楼 赵4老师的回复:现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！ 大一，刚学。。。。

user: user-1
content: 运行时间长的问题，因为楼主用的是递归，递归函数虽然代码很少，但是运行起来比较耗时，尤其这个n越大，越耗时。可以试着比较一下n为一个小值和一个大值时，运行时间的差别

user: user-2
content: 现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！
user-0 提问: 一运行就提示停止工作

回复:
user: user-1
content: //这样写，上下对照，就不会%d和变量个数不对应了： scanf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d"        &a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k,&l,&m,&n,&o,&p);  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错（最新的编译器会出错）。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-2
content: 写这样的代码，不如用循环呢。用循环可以避免太多的%d和对应的参数。参数多是不是容易漏了？

user: user-3
content: scanf()函数有16个%d，只有15个对应的变量

user: user-4
content: 你瞅，你仔细瞅，起码有俩错误。

user: user-5
content: 这行
user-0 提问: C语言 利用指针数组排序 要求输出排序结果和排序前的位置

回复:
user: user-1
content: 供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int a[10],*pa[10];     int *temp;     printf("Input tan number:");     for(int i=0;i<10;i++){              scanf("%d",&a[i]);              pa[i] = &a[i];     }      for(int i=0;i<10;i++){         for(int j=0;j<10-1;j++){             if(*pa[j]>*pa[j+1]){                temp = pa[j];                pa[j] = pa[j+1];                pa[j+1] = temp;             }         }     }       for(int i=0;i<10;i++){         printf("%4d",*pa[i]);       }     printf("\n");     for(int i=0;i<10;i++){         printf("%4d",pa[i]-a);     }     printf("\n");      system("pause");     return 0; }

user: user-2
content: 仅供参考： #include <stdio.h> #include <stdlib.h>  int my_cmp(const void *a, const void *b) { 	int *p = *(int **)a; 	int *q = *(int **)b; 	return *p - *q; }  int main(void) { 	int *pa[10], i; 	 	// 数组初始化 	for(i=0; i<10; i++) 	{ 		pa[i] = (int *)malloc(sizeof(int)); 		scanf("%d", pa[i]); 	} 	 	// 快速排序 	qsort(pa, 10, sizeof(int *), my_cmp); 	 	// 输出排序结果 	for(i=0; i<10; i++) 	{ 		printf("%d%c", *pa[i], i!=9 ? '\t' : '\n'); 	} 	 	// 善后处理，销毁 	for(i=0; i<10; i++) 	{ 		free(pa[i]); 	} 	 	return 0; }
user-0 提问: c语言的问题

回复:
user: user-1
content: fp得到的是true or false，不是fopen的返回值，修改如下： if ((fp = fopen("xxx", "r")) == NULL) {     printf("%s", strerror(errno));     return -1;   //打开失败直接返回，防止后面的继续使用fp }

user: user-2
content: 牛，都还没有分配空间就使用了。

user: user-3
content: 出错信息说，指针user没有目标，所以不能用。
user-0 提问: C语言 bmp文件压缩(5M压缩500K左右，10ms内完成)

回复:
user: user-1
content: 如果还是不了解，用霍夫曼编码吧，难度较我的方法更大，但网上示例很多

user: user-1
content: 引用 4 楼 litchee1988 的回复:[quote=引用 2 楼 六道佩恩 的回复:]我以前写过一个简单的压缩算法，试过画面较单一的BMP图片，可以压缩的几百甚至几十KB，和7z、ZIP相差不大，但对于画面复杂的，就恐怕没什么效果了（7z、zip效果也不是很好）。 这个算法很简单，就是检测连续重复的部分压缩为 重复的次数+重复的单份，先检测1字节重复的，然后遍历第二遍检测两字节重复的，如此循环，随便你检测到什么程度。至于时间能否控制在10ms以内，不清楚。如果BMP是24位的，你直接检测3字节重复的话，应该能控制在10ms以内吧（毕竟这已经是非常简单的压缩算法了，，且仅需一次遍历，如果这都达不到10ms，不知道还有什么算法可以）。  有没有相关代码供我参考一下呢？[/quote] 抱歉，代码不提供，而且整体思路我觉得我已经讲得挺明白了，就是不断的多字节的对比。比如一个int数组，每个数都是99，有1万个，那么你只需保存10000和99即可，检查该int重复多少次这没问题吧？一个int占4字节，这不就相当于检测了4字节重复了吗？任意字节的可用memcpy。

user: user-0
content: 引用 2 楼 六道佩恩 的回复:我以前写过一个简单的压缩算法，试过画面较单一的BMP图片，可以压缩的几百甚至几十KB，和7z、ZIP相差不大，但对于画面复杂的，就恐怕没什么效果了（7z、zip效果也不是很好）。 这个算法很简单，就是检测连续重复的部分压缩为 重复的次数+重复的单份，先检测1字节重复的，然后遍历第二遍检测两字节重复的，如此循环，随便你检测到什么程度。至于时间能否控制在10ms以内，不清楚。如果BMP是24位的，你直接检测3字节重复的话，应该能控制在10ms以内吧（毕竟这已经是非常简单的压缩算法了，，且仅需一次遍历，如果这都达不到10ms，不知道还有什么算法可以）。  有没有相关代码供我参考一下呢？

user: user-0
content: 引用 1 楼 user-2 的回复:设置压缩参数，使用速度最快的方式，但，结果是，压缩比很低  请问如何设置压缩参数呢？我早Gzip的deflate方法中没看到可是设置压缩参数的地方呀？LZMA也没有看到过

user: user-1
content: 我以前写过一个简单的压缩算法，试过画面较单一的BMP图片，可以压缩的几百甚至几十KB，和7z、ZIP相差不大，但对于画面复杂的，就恐怕没什么效果了（7z、zip效果也不是很好）。 这个算法很简单，就是检测连续重复的部分压缩为 重复的次数+重复的单份，先检测1字节重复的，然后遍历第二遍检测两字节重复的，如此循环，随便你检测到什么程度。至于时间能否控制在10ms以内，不清楚。如果BMP是24位的，你直接检测3字节重复的话，应该能控制在10ms以内吧（毕竟这已经是非常简单的压缩算法了，，且仅需一次遍历，如果这都达不到10ms，不知道还有什么算法可以）。

user: user-2
content: 设置压缩参数，使用速度最快的方式，但，结果是，压缩比很低
user-0 提问: 函数实现交换

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2

user: user-2
content: 引用 2 楼 forever74 的回复:你是main，我是swap 你左口袋装200美刀，右口袋装200人民币， 我仿照你的口袋装了我的口袋， 然后我交换了自己的两个口袋， ----这和你有什么关系？ 有关系，如果实参不传给形参，形参怎么知道是200？而不是其他的值，没关系，不调用传值，形参怎么知道交换的是什么值？不调用函数怎么会交换？

user: user-2
content: 不是没有执行，而是执行的是swap函数里的局部变量，交换的是swap里的两个参数值，没有修改main函数里的两个值。所以感觉是没有执行。  解决办法是传要交换的两个变量的地址，在swap函数里交换引用到的值，就是交换main函数里的两个变量的值了。

user: user-3
content: 函数实参和形参的关系问题， 请参考《C++中函数参数类型为指针的指针》 希望能够帮到您！

user: user-4
content: 你是main，我是swap 你左口袋装200美刀，右口袋装200人民币， 我仿照你的口袋装了我的口袋， 然后我交换了自己的两个口袋， ----这和你有什么关系？

user: user-5
content: C语言之传值的，需要传地址才有效果。仅供参考： #include  <stdio.h> void  Swap(int *x, int *y); int main(void) {     int  a, b;     printf("Please enter a,b:");     scanf_s("%d %d", &a, &b);     printf("Before swap: a = %d, b = %d\n", a, b);     Swap(&a, &b);     printf("After swap: a = %d, b = %d\n", a, b);     return 0; } void Swap(int *x, int *y) {     int temp;     temp = *x;     *x = *y;     *y = temp; }
user-0 提问: 求助括号配对问题（用stack），main.c有一部分代码不会写，请求高手指导

回复:
user: user-1
content: void Test(void) { 	char buf[512]; 	char stack[512];  	bool run = true; 	while (run) 	{ 		buf[0] = 0;  		while (buf[0] == 0) 		{ 			gets_s(buf, 512); 		}  		int stackLen = 0; 		stack[0] = 0;  		bool result = true; 		char* pch = buf; 		while (*pch != 0) 		{ 			if (*pch == '(' 				|| *pch == '[' 				|| *pch == '{') 			{ 				stack[stackLen++] = *pch; 			} 			else if (*pch == ')') 			{ 				if (stackLen > 0 && stack[stackLen - 1] == '(') 				{ 					stack[--stackLen] = 0; 				} 				else 				{ 					result = false; 					break; 				} 			} 			else if (*pch == ']') 			{ 				if (stackLen > 0 && stack[stackLen - 1] == '[') 				{ 					stack[--stackLen] = 0; 				} 				else 				{ 					result = false; 					break; 				} 			} 			else if (*pch == '}') 			{ 				if (stackLen > 0 && stack[stackLen - 1] == '{') 				{ 					stack[--stackLen] = 0; 				} 				else 				{ 					result = false; 					break; 				} 			} 			else 			{ 				result = false; 				break; 			}  			++pch; 		}  		result &= stackLen == 0;  		printf(result ? "yes\r\n" : "no\r\n");  		printf("继续测试吗？输入y/n：");  		char input = 0; 		scanf_s("%c", &input, sizeof(char)); 		run = input == 'y'; 	} }
user-0 提问: 求助如何用C语言编写一个求解定积分的程序

回复:
user: user-1
content: 定积分定义分割、取点、近似、求和、取极限。确实比较烦，但是牛顿-莱布尼茨公式用起来很方便的，用不着程序。

user: user-2
content: 根据定积分定义，不要怕麻烦，自己写就行。
user-0 提问: 萌新求助

回复:
user: user-1
content: 正解。。。。。。。。。。。。。。。

user: user-2
content: 建议用%p输出一下地址，p+1应该是偏移3 * sizeof(int)的字节数 *(p+1)是p[1]，即第二行的首地址

user: user-3
content: 打印第9行修改下：printf("9 *(b+2)+2 = %d, %d\n\n",*(b+2)+2,*(*(b+2)+2));

user: user-3
content: 这段代码上机运行下，你很快就明白了。int main(int argc, char* argv[]) {     int b[3][4] = {{1,3,5,7},                          {9,11,13,15},                          {17,19,21,23}     };      printf("1 b[2][1] =  %d\n\n",b[2][1]);     printf("2 b[1] = %d, %d\n\n",b[1],*b[1]);     printf("3 b = %d, %d\n\n",b,**b);     printf("4 b+1 = %d, %d\n\n",b+1,**(b+1));     printf("5 *b+1 = %d, %d\n\n",*b+1,*(*b+1));     printf("6 *(b+1) = %d, %d\n\n",*(b+1),*(*(b+1)));     printf("7 b[2]+1 = %d, %d\n\n",b[2]+1,*(b[2]+1));     printf("8 *(b+1)+1 = %d, %d\n\n",*(b+1)+1,*(*(b+1)+1));     printf("9 *(*(b+2)+2) = %d, %d\n\n",*(b+2)+2,*(*(b+2)+2));     system("pause");     return 0; }

user: user-0

user: user-4
content: p+1表示次行（即s[1]行）首地址 ×(p+1)表示s[1][0]元素的地址  这俩货的值一致，含义不同。
user-0 提问: C语言 回调函数接口的两个问题？

回复:
user: user-1
content: //char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

user: user-2
content: 对于函数指针的相关内容，请参考 《C++中的函数指针1》 《C++中的函数指针2》 希望能够帮到您！

user: user-0
content: 引用 1 楼 user-3的回复:请问 void* (*函数)是什么意思 和 指针函数 void （*函数）有什么区别？  这两个都是函数指针，第一个返回值是void*，第二个返回值是  它丫的没有返回值  函数调用有三种方式 __cdecl 默认方式 __stdcall winAPI函数都是这个方式 __fastcall 至于三者区别，自己网上找找  https://www.cnblogs.com/yenyuloong/p/9626658.html 牛逼 大神 谢了

user: user-3
content: 请问 void* (*函数)是什么意思 和 指针函数 void （*函数）有什么区别？  这两个都是函数指针，第一个返回值是void*，第二个返回值是  它丫的没有返回值  函数调用有三种方式 __cdecl 默认方式 __stdcall winAPI函数都是这个方式 __fastcall 至于三者区别，自己网上找找  https://www.cnblogs.com/yenyuloong/p/9626658.html
user-0 提问: 哪位大神帮忙简化一下这个代码啊，千恩万谢！！！

回复:
user: user-1
content: 啥叫本事？ //想要实现循环语句来实现每天，每月，每年的累积数 if(\\local\$Day==1) {     if(\\local\$Hour==1  &&  \\local\$Minute==1 ) {\\local\hour.H1 =\\local\FT;}     if(\\local\$Hour==2  &&  \\local\$Minute==1 ) {\\local\hour.H2 =\\local\FT;}     if(\\local\$Hour==3  &&  \\local\$Minute==1 ) {\\local\hour.H3 =\\local\FT;}     if(\\local\$Hour==4  &&  \\local\$Minute==1 ) {\\local\hour.H4 =\\local\FT;}     if(\\local\$Hour==5  &&  \\local\$Minute==1 ) {\\local\hour.H5 =\\local\FT;}     if(\\local\$Hour==6  &&  \\local\$Minute==1 ) {\\local\hour.H6 =\\local\FT;}     if(\\local\$Hour==7  &&  \\local\$Minute==1 ) {\\local\hour.H7 =\\local\FT;}     if(\\local\$Hour==8  &&  \\local\$Minute==1 ) {\\local\hour.H8 =\\local\FT;}     if(\\local\$Hour==9  &&  \\local\$Minute==1 ) {\\local\hour.H9 =\\local\FT;}     if(\\local\$Hour==10 &&  \\local\$Minute==1 ) {\\local\hour.H10=\\local\FT;}     if(\\local\$Hour==11 &&  \\local\$Minute==1 ) {\\local\hour.H11=\\local\FT;}     if(\\local\$Hour==12 &&  \\local\$Minute==1 ) {\\local\hour.H12=\\local\FT;}     if(\\local\$Hour==13 &&  \\local\$Minute==1 ) {\\local\hour.H13=\\local\FT;}     if(\\local\$Hour==14 &&  \\local\$Minute==1 ) {\\local\hour.H14=\\local\FT;}     if(\\local\$Hour==15 &&  \\local\$Minute==1 ) {\\local\hour.H15=\\local\FT;}     if(\\local\$Hour==16 &&  \\local\$Minute==1 ) {\\local\hour.H16=\\local\FT;}     if(\\local\$Hour==17 &&  \\local\$Minute==1 ) {\\local\hour.H17=\\local\FT;}     if(\\local\$Hour==18 &&  \\local\$Minute==1 ) {\\local\hour.H18=\\local\FT;}     if(\\local\$Hour==19 &&  \\local\$Minute==1 ) {\\local\hour.H19=\\local\FT;}     if(\\local\$Hour==20 &&  \\local\$Minute==1 ) {\\local\hour.H20=\\local\FT;}     if(\\local\$Hour==21 &&  \\local\$Minute==1 ) {\\local\hour.H21=\\local\FT;}     if(\\local\$Hour==22 &&  \\local\$Minute==1 ) {\\local\hour.H22=\\local\FT;}     if(\\local\$Hour==23 &&  \\local\$Minute==1 ) {\\local\hour.H23=\\local\FT;}     if(\\local\$Hour==23 &&  \\local\$Minute==59) {\\local\hour.H0 =\\local\FT;         \\local\day.D1=(           \\local\hour.H1 +           \\local\hour.H2 +           \\local\hour.H3 +           \\local\hour.H4 +           \\local\hour.H5 +           \\local\hour.H6 +           \\local\hour.H7 +           \\local\hour.H8 +           \\local\hour.H9 +           \\local\hour.H10+           \\local\hour.H11+           \\local\hour.H12+           \\local\hour.H13+           \\local\hour.H14+           \\local\hour.H15+           \\local\hour.H16+           \\local\hour.H17+           \\local\hour.H18+           \\local\hour.H19+           \\local\hour.H20+           \\local\hour.H21+           \\local\hour.H22+           \\local\hour.H23+           \\local\hour.H0         );     } }

user: user-2
content: 用个指针数组,例如 p[23]，元素分别指向 \\local\hour.H0 ~ \\local\hour.H23， if (\\local\$Minute==1)  {  *p[\\local\$Hour ] = \\local\FT;  }

user: user-0
content: 看来你也没啥本事

user: user-3
content: 靠。你这小子没事。。在闭门造语言哇。。。牛。。。。太牛了。。。。。
user-0 提问: 用DEV C++和VS 2019 编译同样的代码输出结果不一样！！

回复:
user: user-1
content: 你要是坚持用的话，可以把所有中间过程都表达为double，不使用int，避免截断误差循环累积。  仅仅在最后输出前把结果+0.5再取整以四舍五入。

user: user-0
content: 引用 11 楼 forever74的回复:除非必要，这种问题不要使用浮点数，pow库函数是浮点值。不同的编译器引用不同的库。  你以为double的精度足够，但是须知以浮点规范来说0.999999999999999也是整数1的足够精度的近似，但是一旦赋值给整型，它就等同于0了。 但是这个算出来是都整数哇，应该不影响吧

user: user-1
content: 除非必要，这种问题不要使用浮点数，pow库函数是浮点值。不同的编译器引用不同的库。  你以为double的精度足够，但是须知以浮点规范来说0.999999999999999也是整数1的足够精度的近似，但是一旦赋值给整型，它就等同于0了。

user: user-0
content: 引用 8 楼 ctrigger的回复:[quote=引用 7 楼 AruNi° ഒ 的回复:][quote=引用 1 楼 ctrigger的回复:]结果应该是确定的。 不一样，说明代码有问题，需要修改。。 你也不说要完成什么功能，谁也帮不了你。。。 题目已发，帮忙看看吧[/quote]  第5楼，我写的，仅供参考。[/quote] 大佬，你那个递归函数怎么想到的啊？求思路！

user: user-0
content: 大佬，你那个递归函数怎么想出来的啊？

user: user-2
content: 引用 7 楼 AruNi° ഒ 的回复:[quote=引用 1 楼 ctrigger的回复:]结果应该是确定的。 不一样，说明代码有问题，需要修改。。 你也不说要完成什么功能，谁也帮不了你。。。 题目已发，帮忙看看吧[/quote]  第5楼，我写的，仅供参考。

user: user-0
content: 引用 1 楼 ctrigger的回复:结果应该是确定的。 不一样，说明代码有问题，需要修改。。 你也不说要完成什么功能，谁也帮不了你。。。 题目已发，帮忙看看吧

user: user-0
content: 引用 3 楼 user-3的回复:修改如下，供参考：#include<stdio.h> #include<math.h> int fn(int a,int n);//函数声明 int main(int argc, char* argv[]) {     int a,n,sum;     int i;     sum=0;     scanf("%d %d",&a,&n); //输入a，n      for(i=1;i<=n;i++){         sum+=fn(a,i);//循环 完成累加     }     printf("Sum=%d",sum);     system("pause");     return 0;  }  int fn(int a,int n) {     int result=0;     for(int i=0;i<n;i++){          result += a*pow(10,i);//pow(2,3)表示2的3次     }     return result; } 第四行是什么意思啊？

user: user-2
content: Show一个，仅供参考： #include <stdio.h>  int fn(int a, int n) { 	if(n == 1) return a; 	else return a * (10 * fn(1, n-1) + n); }  int main(void) { 	int a, n; 	scanf("%d %d",&a, &n); 	printf("Sum=%d", fn(a, n)); 	return 0; }

user: user-3
content: 前面这个是楼主的代码，是正确的。这个是修改的，另一种写法，供参考：#include<stdio.h>  int fn(int a,int n);//函数声明 int main(int argc, char* argv[]) {     int a,n,sum;     int i;     sum=0;     scanf("%d %d",&a,&n); //输入a，n      for(i=1;i<=n;i++){         sum+=fn(a,i);//循环 完成累加     }     printf("Sum=%d\n",sum);      system("pause");     return 0;  }  int fn(int a,int n) {     int result=0;     for(int i=0;i<n;i++){          //result += a*pow(10,i);//pow(2,3)表示2的3次          result = result * 10 + a;     }     return result; }

user: user-3
content: 修改如下，供参考：#include<stdio.h> #include<math.h> int fn(int a,int n);//函数声明 int main(int argc, char* argv[]) {     int a,n,sum;     int i;     sum=0;     scanf("%d %d",&a,&n); //输入a，n      for(i=1;i<=n;i++){         sum+=fn(a,i);//循环 完成累加     }     printf("Sum=%d",sum);     system("pause");     return 0;  }  int fn(int a,int n) {     int result=0;     for(int i=0;i<n;i++){          result += a*pow(10,i);//pow(2,3)表示2的3次     }     return result; }

user: user-0
content: 题目是这个。

user: user-2
content: 结果应该是确定的。 不一样，说明代码有问题，需要修改。。 你也不说要完成什么功能，谁也帮不了你。。。
user-0 提问: 优秀的人们快来看看，超级简单的问题！！！！但是我不会。。。。。

回复:
user: user-1
content: 代码？错误提示？

user: user-2
content: 这问题简单啊。既然标识符未定义，直接定义一次吧。。你如果不放心，还可以再定义一次，绝对保险。。。

user: user-3
content: 哪有未定义的标识符？
user-0 提问: 新手报道，求关注，每天分享c语言作业

回复:
user: user-1
content: bool IsPrime(int n) {     if (n == 1)         return false;       if (n == 2         || n == 3         || n == 5         || n == 7)     {         return true;     }       if (n % 2 == 0)         return false;       if (n % 3 == 0)         return false;       if (n % 5 == 0)         return false;       if (n % 7 == 0)         return false;       double dn = sqrt(n);     int cnt = (int)dn;     for (int i = 11; i <= cnt; i += 2)  // 继续优化 i += 2     {         if (n % i == 0)             return false;     }       return true; }

user: user-1
content: 引用 1 楼 自信男孩 的回复:题目描述：  一个素数，依次从低位去掉一位，二位，……，若所得的各数仍都是素数，则称超级素数。  例如：7331是个4位超级素数，因为7，73，733，7331均为素数. 试求1000~n之内(1000<n<9999)： (1)超级素数的个数 (2)所有超级素数之和 (3)最大的超级素数。   bool IsPrime(int n) { 	if (n == 1) 		return false;  	if (n == 2 		|| n == 3 		|| n == 5 		|| n == 7) 	{ 		return true; 	}  	if (n % 2 == 0) 		return false;  	if (n % 3 == 0) 		return false;  	if (n % 5 == 0) 		return false;  	if (n % 7 == 0) 		return false;  	double dn = sqrt(n); 	int cnt = (int)dn; 	for (int i = 11; i <= cnt; ++i)  // 优化一下，从11开始 	{ 		if (n % i == 0) 			return false; 	}  	return true; }  void Test(void) { 	int n = 0; 	printf("请输入n(1000<n<9999)："); 	scanf_s("%d", &n); 	if (n <= 1000 || 9999 <= n) 	{ 		printf("输入错误！"); 		return; 	}  	int count = 0; 	int sum = 0; 	int max = 0; 	for (int i = 2001; i <= n; ++i) 	{ 		int test = i; 		if (IsPrime(test)) 		{ 			test /= 10; 			if (IsPrime(test)) 			{ 				test /= 10; 				if (IsPrime(test)) 				{ 					test /= 10; 					if (IsPrime(test)) 					{ 						++count; 						sum += i; 						max = i; 						printf("%d\r\n", i); 					} 				} 			} 		} 	}  	printf("(1)超级素数的个数：%d\r\n(2)所有超级素数之和：%d\r\n(3)最大的超级素数：%d\r\n", count, sum, max); }

user: user-1
content: bool IsPrime(int n) { 	if (n == 1) 		return false;  	if (n == 2 		|| n == 3 		|| n == 5 		|| n == 7) 	{ 		return true; 	}  	if (n % 2 == 0) 		return false;  	if (n % 3 == 0) 		return false;  	if (n % 5 == 0) 		return false;  	if (n % 7 == 0) 		return false;  	double dn = sqrt(n); 	int cnt = (int)dn; 	for (int i = 2; i <= cnt; ++i) 	{ 		if (n % i == 0) 			return false; 	}  	return true; }  void Test(void) { 	int n = 0; 	printf("请输入n(1000<n<9999)："); 	scanf_s("%d", &n); 	if (n <= 1000 || 9999 <= n) 	{ 		printf("输入错误！"); 		return; 	}  	int count = 0; 	int sum = 0; 	int max = 0; 	for (int i = 2001; i <= n; ++i) 	{ 		int test = i; 		if (IsPrime(test)) 		{ 			test /= 10; 			if (IsPrime(test)) 			{ 				test /= 10; 				if (IsPrime(test)) 				{ 					test /= 10; 					if (IsPrime(test)) 					{ 						++count; 						sum += i; 						max = i; 						printf("%d\r\n", i); 					} 				} 			} 		} 	}  	printf("(1)超级素数的个数：%d\r\n(2)所有超级素数之和：%d\r\n(3)最大的超级素数：%d\r\n", count, sum, max); }   请输入n(1000<n<9999)：8000 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393 (1)超级素数的个数：16 (2)所有超级素数之和：68910 (3)最大的超级素数：7393 请按任意键继续. . .

user: user-2
content: 题目描述：  一个素数，依次从低位去掉一位，二位，……，若所得的各数仍都是素数，则称超级素数。  例如：7331是个4位超级素数，因为7，73，733，7331均为素数. 试求1000~n之内(1000<n<9999)： (1)超级素数的个数 (2)所有超级素数之和 (3)最大的超级素数。
user-0 提问: 送分

回复:
user: user-0
content: 我知道了，粘贴在Code之间就可以了，谢谢！！

user: user-1
content: 引用先把源文件截屏成图片再上传吗？但我看别人上传的代码是能在网页上选中复制的。又好象不是图片 2020-12-09 14:35:33#2得分 0 第一张图是怎么上传代码，这个位置选择语言的类型 第二张图是怎么上传图片。

user: user-0
content: 先把源文件截屏成图片再上传吗？但我看别人上传的代码是能在网页上选中复制的。又好象不是图片

user: user-1
user-0 提问: 输入一个数按从大到小的规则插入已排好序的数组中（数组从大到小排序）

回复:
user: user-1
content: #include <stdio.h>  //void main() int main() {     int i, j;     int a[6]={1,3,5,7,9}, n;      printf("请输入插入数组中的数:");     scanf("%d",&n); #if 1     for (i = 0; i < 5; i++)         if (n < a[i])             break;      for (j = 5; j > i ; j--) {         a[j] = a[j-1];     }     a[i] = n; #else      for(i=4;i>=0;i--)                         //从a[4]开始往前和n比叫较     {         if(n<a[i])                            //符合条件将a[i]后移         {             a[i+1]=a[i];             if(i==0)                     //若输入的数小于数组中最小的数，将a[0]赋值为n                 a[0]=n;         }         else         {             a[i+1]=n;                     //此时n介于数组最大最小数之间，a[i]<n,a[i+1]是空出来的，赋值n             break;         }     } #endif     for(i=0;i<6;i++)         printf("%4d",a[i]); } 供参考～

user: user-2
content: 是代码展示还是不啥问题？

user: user-0
user-0 提问: 谁可帮我解决这优美的语言问题

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:输出只看printf就好了，看了printf发现不看上面的代码也是可以的。最终的结果跟上面的定义和计算都没关系；  输出是%d输出，后面对应的是一个7.3浮点数（解析成double类型），前三个选项都没意义。B和C肯定不对，因为%d不会输出浮点数； A和D可能有一个对，但是3怎么来，也看不出来。  这个要熟悉一下，对于浮点数和整型数在内存里的表示是不一样的，结果是0。并且7.3默认是double类型 要更详细的分析这个问题，需要把7.3在内存里的表示，然后这个数再按照整型数输出来就知道为啥是0了。 真专业

user: user-1
content: 输出只看printf就好了，看了printf发现不看上面的代码也是可以的。最终的结果跟上面的定义和计算都没关系；  输出是%d输出，后面对应的是一个7.3浮点数（解析成double类型），前三个选项都没意义。B和C肯定不对，因为%d不会输出浮点数； A和D可能有一个对，但是3怎么来，也看不出来。  这个要熟悉一下，对于浮点数和整型数在内存里的表示是不一样的，结果是0。并且7.3默认是double类型 要更详细的分析这个问题，需要把7.3在内存里的表示，然后这个数再按照整型数输出来就知道为啥是0了。
user-0 提问: 直接插入排序

回复:
user: user-1
content: scanf("%d ",&r[i]); 这是一个结构体呢？直接对结构体赋值怎么理解？

user: user-2
content: 错误的地方：#include<stdio.h> #define list_size 20  typedef int keytype; typedef int othertype;  typedef struct{         keytype   key;         othertype other_data; }recordtype;  void inssort(recordtype r[],int length) //排序操作算法有问题 //对记录数组r做直接插入排序，length为数组中待排序记录的数目 {     int i,j;     for(i=2;i<=length;i++)       {         r[0]=r[i];         j=i-1;         while(r[0].key<r[j].key)           {             r[j+1]=r[j];             j=j-1;          }       r[j+1]=r[0];     } }  int main(int argc, char* argv[]) {     int length=3,i;         // length的值没有     recordtype r[list_size]; // r应是结构体的数组，不是变量定义                               //输入     for (i = 0; i < length; i++)        {           scanf("%d",&r[i]);//r 是变量的话，这里就错了        }     printf("\n");      inssort(r,length);                             //输出     for (i = 0; i < length; i++) {         printf("%d", r[i]);     }     printf("\n");     system("pause");     return 0; }

user: user-0
content: 引用 1 楼 user-3的回复:r[j+1]=r[j];//这里把r[j+1]的值覆盖了，也就是r[j+1]的值丢失了 而且，r[0]是用来辅助的吗？r[0]=r[i]也会造成r[0]丢失。 看你这个插入排序其实就是选择排序的做法，你可以参考一下选择排序怎么做的 这是直接插入排序啊

user: user-3
content: r[j+1]=r[j];//这里把r[j+1]的值覆盖了，也就是r[j+1]的值丢失了 而且，r[0]是用来辅助的吗？r[0]=r[i]也会造成r[0]丢失。 看你这个插入排序其实就是选择排序的做法，你可以参考一下选择排序怎么做的
user-0 提问: 新手求助指点

回复:
user: user-0
content: 修改后成功了，谢谢大神指点！

user: user-1
content: scanf对于F应该用%lf，注意%后面是l（小写字母）不是数字1，另外，是小写的f，不是大写F;  改之后再试试～

user: user-0
content: 好的，我等会试下。请教，26行那里是不是应该是C大于40？

user: user-2
content: 你输入80看看结果
user-0 提问: tooptips控件是如何捕获到鼠标消息的？

回复:
user: user-1
content: CWnd::SetCapture CWnd::GetCapture HWND WINAPI SetCapture(HWND hWnd); HWND WINAPI GetCapture(void); BOOL WINAPI ReleaseCapture(void);

user: user-0
content: 引用 1 楼 user-1 的回复:CWnd::SetCapture CWnd::GetCapture HWND WINAPI SetCapture(HWND hWnd); HWND WINAPI GetCapture(void); BOOL WINAPI ReleaseCapture(void); 应该不是SetCapture吧 如果tooltip一直SetCapture，那么其他窗口连正常的点击都做不到了。。。 根据TTF_SUBCLASS的描述，应该是子类化。。。
user-0 提问: 求蜂考离散数学5小时视频

回复:
user: user-1
content: 需要私聊

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

user: user-3
content: 同求同求。。。

user: user-4
content: 同求，，，，
user-0 提问: 救救孩子

回复:
user: user-1
content: 引用 1 楼 六道佩恩 的回复:在大括号前加一个显示转换——(person)，如果不支持，在工具——编译选项，编译或链接命令中，添加开启C99或C11标准，如-std=c11  对，复合字面值C99开始支持了。        x[0] = (struct person){"Alice", 18};  //or, 指定成员初始化 x[0] = (struct person){.name="Alice", .num=18};

user: user-2
content: 供参考：typedef struct Person{         int  num;         char name[20];         int  sex;         char group;         int  score1;         int  score2;         int  score3; }person;   int main(int argc, char* argv[]) {         person x[3] = {           {1,"Alice",0,'A',90,77,95},           {2,"Tony" ,1,'B',92,78,93},           {3,"Tom"  ,1,'C',87,90,78}         };         int i;         for(i=0;i<3;i++)             printf("%d %s %d %c %d %d %d\n",x[i].num,x[i].name,x[i].sex,x[i].group,x[i].score1,x[i].score2,x[i].score3);         system("pause");         return 0; }

user: user-3
content: 我的映像中赋值不能这样写，初始化的时候才可以这样用吧。 写成  person x[3]={{...},{...},{...}}; ...是x[0],x[1],x[2]的内容。这样试试看

user: user-4
content: 赋值有问题，这样的赋值一般是在初始化的时候，否则需要一个结构体成员一个结构体成员的赋值；  person x[3] = { {}, {}, {}}; 把三个成员的初始化放在一起；  要么就是  x[0].num  = 1; strcpy(x[0].name, "Alice"); ... 下面的一样

user: user-5
content: person x[3] = { {xx,xx,xx,xx},                          {xx,xx,xx,xx},                          {xx,xx,xx,xx}, }; 可以这样初始化

user: user-6
content: 在大括号前加一个显示转换——(person)，如果不支持，在工具——编译选项，编译或链接命令中，添加开启C99或C11标准，如-std=c11
user-0 提问: c语言 bmp文件压缩解压缩

回复:
user: user-0
content: 引用 4 楼 ctrigger 的回复:[quote=引用 2 楼 litchee1988 的回复:]关键是我找了几个，压缩效果均不佳，所以我再问的 大牛们的效果都不佳？还是你自己没弄好？？[/quote]  引用 3 楼 赵4老师 的回复:[quote=引用 2 楼 litchee1988 的回复:]关键是我找了几个，压缩效果均不佳，所以我再问的 压缩效果要好，干脆转jpg或png[/quote]  关键就是不让转成别的格式处理呀，就是bmp格式的

user: user-0
content: 我查了几个，说是对bmp压缩效率一般，所以我就想问问有没有人处理过这种的

user: user-1
content: 引用 2 楼 litchee1988 的回复:关键是我找了几个，压缩效果均不佳，所以我再问的 大牛们的效果都不佳？还是你自己没弄好？？

user: user-2
content: 引用 2 楼 litchee1988 的回复:关键是我找了几个，压缩效果均不佳，所以我再问的 压缩效果要好，干脆转jpg或png

user: user-0
content: 关键是我找了几个，压缩效果均不佳，所以我再问的

user: user-1
content: 找个开源的图像处理库，把这部分代码挖出来不就行了么？
user-0 提问: 关于条件运算符

回复:
user: user-0
content: @user-3，你对的，应该是这个return( a>b ? (a>c? a:c) ：(b>c? b:c))，我的理解出错了，非常感谢二位！

user: user-0
content: temp有没初始化没关系，我可以初下的，这里有二个三目运算，是右结合的，所以先从最右的那个开始算，下标越界啥界？不是己注释掉了嘛，怎么没高人啊？？？？？？？？

user: user-1
content: 需要弄明白三目运算符的逻辑关系；这个三目运算符是结果里还有三目运算符；  另外，楼主没发现数组有越界访问的行为吗？  数组最大是3，那么n-4这样的下表不已经是越界了吗？越界行为是未定义的，结果是未定义的。

user: user-2
content: temp还没初始化就使用了,条件运算符就是if实现,根据左边式子真假来选择执行分支.

user: user-3
content: 引用return( a>b ? (a>c? a:c) ：(b>c? b:c)) 你这个还是有问题，第2个表达式结果一定是a?第3个表达式结果一定是b?我觉得你的式子逻辑有问题，还有我的对，但就不知哪里出错了 你是想偏了，公式里第一步如果a>b条件成立，是不是就进入到 表达式1=(a>c? a:c) 这里去执行了，这里面又是一个条件判断表达式a>c? a:c，如果a>c成立则返回a,如果不成立是不就回c了，怎么会是始终是a呢。

user: user-3
content: 三元表达式多条件判断： 语法： 条件表达式 ？表达式1 ：表达式2 条件表达式是判断的条件，判断结果为bool型，为true时调用表达式1，为false时调用表达式2。 跟后面括不括号没什么关系啊。

user: user-0
content: return( a>b ? (a>c? a:c) ：(b>c? b:c)) 你这个还是有问题，第2个表达式结果一定是a?第3个表达式结果一定是b?我觉得你的式子逻辑有问题，还有我的对，但就不知哪里出错了

user: user-3
content: 简化下，就是这公式：return( a>b ? (a>c? a:c) ：(b>c? b:c))

user: user-0
content: 我只是想知道那个return里的表达式错在哪里，希望高手进来解释一下。谢谢！！！

user: user-0
content: //return(a[n-3]>temp?a[n-3]:(temp=a[n-1]>a[n-2]?a[n-1]:a[n-2]));//一开始tmpe没赋值，先执行判断a[n-3]>temp就出错了。 return(a[n-3]>a[n-2]?a[n-3]:(a[n-2]>a[n-1]?a[n-2]:a[n-1])); 为什么会“先执行判断a[n-3]>temp”，后面有个小括号，应该先算小括号里的啊，怎么会先判断a[n-3]>temp呢？

user: user-0
content: return(a[n-3]>a[n-2]?a[n-3]:(a[n-2]>a[n-1]?a[n-2]:a[n-1])); 你这条语句有问题，你怎么知道右边的条件运算表达式运算的结果一定是a[n-2]呢？也有可能是a[n-1]，二者都有可能的啊

user: user-3
content: 前面还是有漏洞的，修改如下，供参考：#include<stdio.h> int max(int a[],int n) { int temp; //return(a[n-4]>temp?a[n-4]:(temp=a[n-3]>temp?a[n-3]:(temp=a[n-1]>a[n-2]?a[n-1]:a[n-2])));  //return(a[n-3]>temp?a[n-3]:(temp=a[n-1]>a[n-2]?a[n-1]:a[n-2]));//一开始tmpe没赋值，先执行判断a[n-3]>temp就出错了。 return(a[n-3]>a[n-2]?(a[n-3]>a[n-1]?a[n-3]:a[n-1]):(a[n-2]>a[n-1]?a[n-2]:a[n-1])); //printf("%d,%d\n",temp,temp1); //return temp; }  int main(int argc, char* argv[]) {     int m[3],n=0;     printf("请输入3个整数！\n");     while(n<3){         scanf("%d",&m[n++]);     }    printf("最大数为：%d\n",max(m,3));    system("pause");    return 0; }

user: user-3
content: 问题见标注处,供参考：#include<stdio.h> int max(int a[],int n) { int temp; //return(a[n-4]>temp?a[n-4]:(temp=a[n-3]>temp?a[n-3]:(temp=a[n-1]>a[n-2]?a[n-1]:a[n-2])));  //return(a[n-3]>temp?a[n-3]:(temp=a[n-1]>a[n-2]?a[n-1]:a[n-2]));//一开始tmpe没赋值，先执行判断a[n-3]>temp就出错了。 return(a[n-3]>a[n-2]?a[n-3]:(a[n-2]>a[n-1]?a[n-2]:a[n-1]));  //printf("%d,%d\n",temp,temp1); //return temp; }  int main(int argc, char* argv[]) {     int m[3],n=0;     printf("请输入3个整数！\n");     while(n<3){         scanf("%d",&m[n++]);     }    printf("最大数为：%d\n",max(m,3));    system("pause");    return 0; }
user-0 提问: 离散数学实验求解，基础题

回复:
user: user-1
content: int vote(int a, int b, int c, int d, int e) {   return (a && b &&c) || (a && b &&d) ||          (a && b &&e) || (a && c &&d) ||          (a && c &&e) || (a && d &&e) ||          (b && c &&d) || (b && c &&e) ||          (b && d &&e) || (c && d &&e); }
user-0 提问: 求助 怎么链表插入不运行和求表长为0 但不报错

回复:
user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-2
content: #include <stdio.h> #include <malloc.h> #include <stdlib.h>  typedef struct Node{     int data;  //数据域     struct Node *next;  //指针域 }node, *PNODE;  //函数声明 PNODE create_list(); void show_list(PNODE); bool empty_list(PNODE); void length_list(PNODE); bool insert_list(PNODE,int,int);  int main() {     PNODE L = NULL;  //     L = create_list();  //创建非循环单链表，把链表头节点地址赋给head  动态内存分配     show_list(L);     empty_list(L);     insert_list(L,3,5);     show_list(L);     length_list(L);     return 0; }  PNODE create_list()  //创建函数 {     int len,val,i;     PNODE phead =(PNODE)malloc(sizeof(node));     if (phead == NULL)     {         printf("内存分配失败");         exit(-1);     }     PNODE p=phead;     p->next = NULL;     printf("请输入链表个数：");     scanf("%d",&len);     for(i=0;i<len;i++)     {         printf("第%d个结点的值为:",i+1);         scanf("%d",&val);         PNODE pnew =(PNODE)malloc(sizeof(node));         if (pnew == NULL)         {             printf("内存分配失败");             exit(-1);         }         pnew->data = val;         p->next = pnew;         pnew->next = NULL;         p = pnew;     }     return phead; }  void show_list(PNODE phead)   //遍历输出 {     PNODE p = phead->next;     while(p != NULL)     {         printf("%d ",p->data);         p = p->next;     }     printf("\n"); }  bool empty_list(PNODE phead)   //判断链表是否为空 {     //if(phead->next=NULL)     if(phead->next==NULL)         return true;     else         return false; }  void length_list(PNODE phead) {     int i=0;     PNODE p = phead->next;     while(p !=NULL)     {         i++;         p=p->next;     }     printf("链表长度为 %d",i); }  bool insert_list(PNODE phead,int n,int m)   //插入第n个元素m {     int i = 0;     PNODE p = phead,s;     if(n < 1)         return false;     while(i < n-1 && p!= 0)     {         i++;         p = p-> next;     }     //if(p = NULL)     if(p == NULL)         return false;     else{         s=(PNODE)malloc(sizeof(node));         s->data=m;         s->next=p->next;         p->next=s;         return true;     } } 供参考～
user-0 提问: C语言UI设计关于声明ID的问题

回复:
user: user-0
content: 引用 4 楼 ooolinux的回复:个人觉得SDK纯API方式编写Windows程序已经过时了，效率太低，了解一下原理就可以了，主要是消息机制。  图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　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高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  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简单电话簿Demo例子v1.11 多谢大佬

user: user-1
content: 那个是打字错误，你的代码里和我从你那复制下来那行都是错的，重新更正就好。

user: user-2
content: 3楼正解  引用 3 楼 forever74 的回复:#include "resource.h"   DialogBox(hinstCurrent,MAKEINRESOURSE(IDD_DIALOG1),NULL,(DLGPROC)WndProc);

user: user-0
content: 引用 3 楼 forever74的回复:#include "resource.h"   DialogBox(hinstCurrent,MAKEINRESOURSE(IDD_DIALOG1),NULL,(DLGPROC)WndProc); 多谢大佬 原来差在没包含resource头文件 不过还有一个错误是 MAKEINRESOURCE标识符无法识别？ 不过它是啥？ 求教

user: user-3
content: 个人觉得SDK纯API方式编写Windows程序已经过时了，效率太低，了解一下原理就可以了，主要是消息机制。  图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　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高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  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简单电话簿Demo例子v1.11

user: user-4
content: 重新建一个MFC项目吧，还来得快些

user: user-5
content: 用记事本打开.rc文件，对照.h和.cpp文件中的各ID修改为一致。

user: user-1
content: #include "resource.h"   DialogBox(hinstCurrent,MAKEINRESOURSE(IDD_DIALOG1),NULL,(DLGPROC)WndProc);
user-0 提问: C语言求cos的值

回复:
user: user-0
content: 引用 4 楼 棉猴的回复:正像楼上朋友所说的，题目要求是“保持到最后一项的绝对值小于10-6”，也就是说，当小于10-6时，是要加入到算式里的，不能直接break #include <stdlib.h> #include <math.h>  int main() {	 	double x, a, c, b = 1, y = 1; 	int i; 	scanf("%lf", &x); 	for (i = 1; i > 0; i++) 	{ 		a = pow(x, i); 		b *= i; 		if (i % 2 == 0) 		{ 			c = a / b; 		} 		else 		{ 			continue; 		} 		  		if (i % 4 != 0 || i == 2) 		{ 			c = 0 - (a / b); 			y += c; 		} 		else 		{ 			y += (a / b); 		}  		if (fabs(a / b) < pow(10, -6)) 		{ 			break; 		} 	} 	printf("%lf\n", y); 	return 0; } VS2015 C++环境  好的👌🏻，感谢感谢

user: user-0
content: 引用 3 楼 user-2的回复:你还没明白我的意思 最后一项 比如 a/b < 10∧-6，这 a/b 要加还是不加？题目要求是加（保持到最后一项的绝对值小于10∧-6） 但是你的程序 a/b < 10∧-6 就已经 break，后续的加没法处理，所以漏了一项。正确的做法应该把  if(fabs(a/b) < 10∧-6) break 放在for 循环的最后，也就是 y+=执行完后才break 哦哦好的，谢谢哈

user: user-1
content: 正像楼上朋友所说的，题目要求是“保持到最后一项的绝对值小于10-6”，也就是说，当小于10-6时，是要加入到算式里的，不能直接break #include <stdlib.h> #include <math.h>  int main() {	 	double x, a, c, b = 1, y = 1; 	int i; 	scanf("%lf", &x); 	for (i = 1; i > 0; i++) 	{ 		a = pow(x, i); 		b *= i; 		if (i % 2 == 0) 		{ 			c = a / b; 		} 		else 		{ 			continue; 		} 		  		if (i % 4 != 0 || i == 2) 		{ 			c = 0 - (a / b); 			y += c; 		} 		else 		{ 			y += (a / b); 		}  		if (fabs(a / b) < pow(10, -6)) 		{ 			break; 		} 	} 	printf("%lf\n", y); 	return 0; } VS2015 C++环境

user: user-2
content: 你还没明白我的意思 最后一项 比如 a/b < 10∧-6，这 a/b 要加还是不加？题目要求是加（保持到最后一项的绝对值小于10∧-6） 但是你的程序 a/b < 10∧-6 就已经 break，后续的加没法处理，所以漏了一项。正确的做法应该把  if(fabs(a/b) < 10∧-6) break 放在for 循环的最后，也就是 y+=执行完后才break

user: user-0
content: 引用 1 楼 user-2的回复:少加了最后一项，因为最后一项满足if就break了，所以最后一项没加上 可是题目说小于10∧-6，如果改成＜＝，运行其他值的时候不会有误差吗？？

user: user-2
content: 少加了最后一项，因为最后一项满足if就break了，所以最后一项没加上
user-0 提问: 这个链表创建函数哪里错了

回复:
user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-2
content: 思路：C++，创建要给结点类，一个链表类。用结点构造函数创建结点，再插入链表类即可。

user: user-2
content: 感觉不伦不类的，看着眼晕。C++，就要class，用成员函数create即可。

user: user-3
content: 把代码复制粘贴过来不好吗，非得c语句和c++混合用吗？要不单用c要不单用c++，一会cin，一会printf，重新写过吧
user-0 提问: 用指针法在一维有序数组中插入数据，要求在其中插入任意一个整数后数列依然有序。

回复:
user: user-1
content: 首先要先找到对应的位置，然后将该位置和之后的数据都想后移动一个元素的偏移，最后把要插入的数据放入该位置。

user: user-2
content: 凡事说起来容易，做起来难： 有序？从小到大还是从大到小？ 数组？静态数组还是动态数组？静态数组的话，最多几个元素？动态数组的话，malloc？new？vector？ 空数组？申请空间失败咋办？ 小心使得万年船。 百度搜“树上七只鸟 程序员”

user: user-3
content: 用指针依次访问数组数据，当要插入的数据大于当前的数且小于后一个数，将之后所有的数据后移 插入要插入的值

user: user-4
content: 最原始的办法： 先定义一个同类型的指针，判断原指针当前值不为NULL时，与待插入的数据比较，若比待插入的数据大，则先赋值 待插入的数，然后再依次 将余下的数复制到新的指针里，数据依然有序；
user-0 提问: C#程序设计基础上的一道程序设计题

回复:
user: user-0
content: 搞错了搞错了

user: user-1
content: 可怜的孩子，你迷路了吧？这里是C。

user: user-2
content: 界面➕电脑下棋的AI算法。
user-0 提问: 直接插入排序

回复:
user: user-1
content: #include<stdio.h>  #define list_size 20  typedef int keytype; typedef int othertype;  typedef struct {     keytype key;     othertype other_data; }recordtype;  void display(recordtype r[],int length) {     for (int i = 0; i < length; i++) {         printf("%d ", r[i].key);     }     printf("\n"); }  void inssort(recordtype r[],int length)     //对记录数组r做直接插入排序，length为数组中待排序记录的数目 {     int i,j;     for(i=2;i<=length;i++)     {         r[0]=r[i];         j=i-1;         while(r[0].key<r[j].key)         {             r[j+1]=r[j];             j=j-1;         }         r[j+1]=r[0];     } }   //void main() int main(void) {     recordtype r[list_size];         return 0; } 供参考～
user-0 提问: 有5个学生，每个学生包括学号、姓名、三门课的成绩。从键盘输入5个学生数据，1）打印出每门课程的总平均分；2）要求按照总分由高到低的顺序打印出学生的数据（包括学号

回复:
user: user-1
content: 定义个结构体 先自己写这试试  不行了再问

user: user-2
content: 先自己尝试写写，动动手。或者从网上搜一搜，总之，自己要先动手动脑试试。
user-0 提问: C＋＋ 程序题

回复:
user: user-1
content: 有2481215个，仅供参考：#include <stdio.h>  int greatest_common_divisor(int a, int b) { 	if(b == 0) return a; 	else greatest_common_divisor(b, a%b); }  int main(void) { 	int n1, n2, t, count = 0; 	for(n1 = 1; n1 <= 2020; n1++) 	{ 		for(n2 = 1; n2 <= 2020; n2++) 		{ 			t = greatest_common_divisor(n1, n2); 			if(t == 1) 			{ 				printf("%d:\t分子：%d\t分母：%d\n", ++count, n1, n2); 			} 		} 	} 	return 0; }
user-0 提问: C语言读取文件操作后影响结构体变量数据

回复:
user: user-1
content: 引用 2 楼 Ice丨shine 的回复:[quote=引用 1 楼 user-1的回复:]Huffman编码，严蔚敏老师的数据结构上讲得很很清楚。 我知道是这个，我只是想问为什么读取文件前后两次tree的值会发生变化[/quote]  算法你已经知道了，还有问题，那就是C语言问题了。看看K&R C。

user: user-0
content: 引用 1 楼 user-1的回复:Huffman编码，严蔚敏老师的数据结构上讲得很很清楚。 我知道是这个，我只是想问为什么读取文件前后两次tree的值会发生变化

user: user-1
content: Huffman编码，严蔚敏老师的数据结构上讲得很很清楚。