1. Q:如何引用pi的精确值?
A:
#include <math.h> int main(){ const double pi = acos(-1.0); ... }
2. Q:如何在屏幕上打印出"%d"? What about " "?
A:
printf("%%d");
printf("\n");
3. Q:如何为程序计时?
A:
#include <time.h> int main(){ printf("Time used = %.2f ",(double)clock() / CLOCKS_PER_SEC); }
+ “管道” Windows--> echo 输入数据 | 程序名称
4. Q:如何输出长度为n的数字?
A:
printf("%*d",n,x);
5. Q:如何实现流的加速?
A:
关闭和stdio的同步,即调用ios::sync_with——stdio(false)。
6. Q:gcd(a,b)的最多递归层数?
A:4.7815lgN+1.6723 递归层数最多的是gcd(Fn, Fn-1) 为Fibonacci数列相邻两项
7. Q:结构体的正确用法
A:
typedef struct{ double x, y; }Point; Point a,b; a.x+b.x...
8. Q:如何求nCm?
A:
1)因为有nCm=nC(n-m)
if(m<n-m) m=n-m;
2)factorial(m+1,...,n)/factorial(1,...,n-m)
9. 用int* a 声明的变量 a 是指向 int 型变量的指针。赋值 a = &b 的含义是把变量的地址存放在指针 a 中,表达式 *a 代表 a 指向的变量,既可以放在赋值符号的左边,也可以放在右边
注意:*a 是“a 指向的变量”,而不仅仅是“a 指向的变量所拥有的值”。例如 *a = *a + 1 就是让a 指向的变量自增1。甚至可以把它写成 (*a) ++。注意不要写成 *a ++,因为“++”运算符的优先级高于“取内容”运算符“*”,实际上会被理解为*(a ++)。
char * const *(*next)的含义:
next 是一个指向函数的指针,该函数返回一个指针,该指针指向一个只读的指针,此指针指向一个字符变量。
用指针实现swap():
#include <stdio.h> int swap(int* a, int* b){ int t; t = *a; *a = *b; *b = t; } int main(){ int a,b; scanf("%d %d",&a,&b); swap(&a, &b); printf("%d %d",a,b); return 0; }
10. 把数组作为参数传给一个函数时,只有数字的首地址作为指针传给了函数。
void name(int a[]) <=> void name(int* a)
Link: 这就是为什么在快排中,qsort(a,a+n+1); 虽然写的是a 但真正传给函数的是a 的首地址,指针a + 1 指向a[1]