task1
//利用局部static变量的特征,计算阶乘 #include <stdio.h> long long fac(int n); int main() { int i,n; printf("Enter n:"); scanf("%d",&n); for(i = 1;i <= n;++i) printf("%d! =%lld\n",i,fac(i)); return 0; } //函数定义 long long fac(int n) { static long long p = 1; p=p*n; return p; }
增加一行源代码
//利用局部static变量的特征,计算阶乘 #include <stdio.h> long long fac(int n); int main() { int i,n; printf("Enter n:"); scanf("%d",&n); for(i = 1;i <= n;++i) printf("%d! =%lld\n",i,fac(i)); return 0; } //函数定义 long long fac(int n) { static long long p = 1; printf("p=%11d\n",p); p=p*n; return p; }
task1-2
//练习:局部static变量特征 #include <stdio.h> int func(int, int); int main() { int k = 4, m =1, p1, p2; p1 = func(k,m); p2 = func(k,m); printf("%d,%d\n",p1,p2); return 0; } int func(int a,int b) { static int m = 0, i = 2; i +=m +1; m = i + a +b; return (m); }
局部static变量:静态变量,函数调用结束后的值不会变为初始值。
task2
迭代
#include <stdio.h> void printSymbol(int n, char symbol); int main() { int n; char symbol; while(scanf("%d %c",&n,&symbol)!=EOF) { printSymbol(n, symbol); printf("\n"); } return 0; } void printSymbol(int n, char symbol) { int i=0; for(i;i<n;i++) printf ("%c",symbol); }
递归
#include <stdio.h> void printSymbol(int n, char symbol); int main() { int n; char symbol; while(scanf("%d %c",&n,&symbol)!=EOF) { printSymbol(n, symbol); printf("\n"); } return 0; } void printSymbol(int n, char symbol) { if(n==1) printf("%c",symbol); else { printSymbol(n-1,symbol); printf("%c",symbol); } }
我觉得迭代更好,因为更直接。
task3
#include <stdio.h> long long fun(int n); int main() { int n; long long f; while(scanf("%d",&n)!=EOF) { f = fun(n); printf("n = %d,f = %lld\n",n,f); } return 0; } long long fun(int n) { long long result; if(n==0) result=0; else if(n==1) result=1; else if(n>1&&n<=32) result=2*fun(n-1) + 1; return result; }
task 4
#include <stdio.h> #include <math.h> int isPrime(int n); int main() { int i,p=0; for(i=101;i<=200;i++) { if(isPrime(i)==0) { printf("%d ",i); p++; } } printf("\n",i); printf("101~200之间一共有%d个非素数",p); return 0; } int isPrime(int n) { int m; if(n<2) return 0; else { for(m=2;m<=sqrt(n);m++) if(n%m==0) break; if(m>sqrt(n)) return 1; else return 0; } }
task5
#include <stdio.h> long fun(long s); int main() { long s,t; printf("Enter a numble: "); while(scanf("%ld",&s)!=EOF) { t = fun(s); printf("new numble is: %ld\n\n",t); printf("Enter a numble: "); } return 0; } long fun(long s) { long int m; int t=0,p=1; while(s>0) { m=s%10; if(m%2==1) { t=t+m*p; p=p*10; } s=s/10; } return t; }
task6
#include <stdio.h> double fun(int n); int main() { int n; double s; printf("Enter n(1~10): "); while (scanf("%d", &n) != EOF) { s = fun(n); printf("n = %d, s= %f\n\n", n, s); printf("Enter n(1~10): "); } return 0; } double fun(int n) { int m=-1; double s=1.0,t=1,i; if(n==1) return 1; else { for(i=2;i<=n;i++) { t*=i; s+=m/t; m=-m; } return s; } }