C程序设计

gcc、gdb
整数/整数=整数,浮点数/浮点数=浮点数,整数-浮点数=浮点数
变量在未赋值之前的值是不确定的。特别地,它不一定等于0.
n++会使用加1前的值计算表达式,++n会使用加1后的值计算表达式
比较大的数组尽量声明在main函数外,否则程序可能无法运行
fgetc(fin)读取一个打开的文件fin,读取一个字符,返回一个int值,如果要从标准输入读取一个字符,可以用getchar,等价于fgetc(stdin),fgets(buf,maxn,fin)读取完整的一行
调用栈(Call stack)描述 函数之间的调用关系,调用栈由栈帧(Stack Frame)组成,每个栈帧对应着一个未运行完的函数,在gdb中可以用backtrace命令打印所有栈帧信息。若要用p命令打印一个非当前栈帧的局部变量,可以用frame命令选择另一个栈帧
把数组作为参数传递给函数时,实际上只有数组的首地址作为指针传递给了函数,需要另加一个参数表示元素个数
【C程序设计】若p是指针,k是正整数,p+k就是指针p后面第k个元素,p-k是p前面的第k个元素

#include #include #define INF 1000000000 #definr maxn 105 int main() { freopen("data.in","r",stdin); freopen("data.out","w",stdout); int a,b,n=0,m,min=INF,max=-INF,x; FILE *fin,*fout; fin = fopen("data.in","rb"); fout = fopen("data.out","wb"); while(fscanf(fin,"%d",&x)==1 && n) fprintf(fout,"%d %d",min,max); fclose(fin); fclose(fout); scanf("%d%d",&n,&m); a = (4*n-m)/2; b = n-a; if (m%2 ==1 || a<0 ||b<0) printf("No answer\n"); else printf("%d %d\n",a,b); for(int i=1; i<=n; i++) { printf("%d\n",i); if (i<10) continue; if (i>100) break; }long long n1 = n; int count=0 while(n>1) { if (n%2==1) n=n*3+1; else n/= 2; count++; }int f = floor(sqrt(n)+0.5); printf("time used = %.2f\n",(double)clock()/CLOCKS_PER_SEC); int a[maxn]; while(scanf("d",&x)==1) a[n++]=x; int b[maxn][maxm]; tot = b[x=0][y=n-1] =1; char s[20]; scanf("%s",s); if(strchr(s,"a")) sprintf(s[strlen(s)-1]); struct Point{double x,y; }; double dist(struct Point a,struct Point b) { return hypot(a.x-b.x,a.y-b.y); }typedef struct{double x,y; }Point; double dist(Point a,Point b) { return hypot(a.x-b.x,a.y-b.y); }return 0 }#include void swap(int*a,int*b)//用int*a声明的变量a是指向int型变量的指针 { int t =*a; *a=*b; *b=t; } int main() { int a=3,b=4; swap(&a,&b); //变量名前面加&得到的是该变量的地址 printf("%d %d\n",a,b); return 0; }

    推荐阅读