为了更好的学习,从程序竞赛类书籍学习一些好的做法,除了上面提到的 time.h 中的 clock( ) 的做法外,还有获取输入 拿到输出的方法,如重定向,文件,标准输入输出等。
0.0 重定向
#include <stdio.h> #include <time.h> #define LOCAL #define INF 1000000 int main(int argc, char *argv[]) { #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif int x,n = 0, s = 0, min = INF, max = -INF; while (scanf("%d",&x)==1) { s += x; if (x < min) min = x; if (x > max) max = x; n++; } printf ("s/n=%f max=%d min=%d ",(double)s/n,max,min); printf("%.4f ",(double)clock() / CLOCKS_PER_SEC); return 0; }
0.1 文件
#include <stdio.h> #include <time.h> /* #define LOCAL */ #define INF 1000000 int main(int argc, char *argv[]) { #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif FILE * fin; FILE * fout; fin = fopen("data.in","rb"); fout = fopen("data.out","rb"); // fin=stdin; // fout= stdou; int x,n = 0, s = 0, min = INF, max = -INF; while (scanf("%d",&x)==1) { s += x; if (x < min) min = x; if (x > max) max = x; n++; } printf ("s/n=%f max=%d min=%d ",(double)s/n,max,min); printf("%.4f ",(double)clock() / CLOCKS_PER_SEC); return 0; } /***************************************************** 这个是是使用文件管理输入输出,使用文件比使用重定向灵活处在于,使用重定向则无法使用标准输入输出,而使用文件输入输出的方法,可以切换到标准输入输出,这个例子中,注释掉上面给 fin,fout 的赋值语句,反注释掉 fin = stdin;fout = stdout,就可以使用标准输入输出 *****************************************************/
1 Function Pointer
//function pointer #include <stdio.h> int sum (int a, int b) { return a+b; } int sum1 (int a,int b) { return a-b; } int sum2 (int a,int b) { return a+b*2; } int cal (int (*f)(int a,int b),int a,int b) { return f(a,b); } int main(int argc, char *argv[]) { int (*f)(int a,int b); f= sum; printf("%d ",f(3,4)); printf("%d ",cal(sum,3,4)); int (*CalGroup[3])(int a,int b) = {sum,sum1,sum2}; printf("Function Group: "); for (int i = 0;i < 3;i++) { printf("%d ",CalGroup[i](3,4)); } return 0; }