白书杂七杂八

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]

原文地址:https://www.cnblogs.com/peccavi/p/4974373.html