手把手教你搭建集中式版本控制系統SVN伺服器
阿新 • • 發佈:2021-11-19
實驗1.
//利用區域性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; returnp; }
//利用區域性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=%lld\n",p); p=p*n; return p; }
猜測:8,16
#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); }
錯誤原因:i也是靜態變數,第二次為3。
區域性static變數特性:保留每一次的運算結果,而不是重新賦值。
實驗2.
迭代
#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; for(i=0;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); } }
遞迴更好,避免了引入新的變數,減少記憶體佔用。
實驗3.
#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==1) return 1; else { long long result=2*fun(n-1)+1; return result; } }
實驗4.
#include<stdio.h> #include<math.h> int isPrime(int n) { int i; for(i=2;i<=sqrt(n);i++) { if(n%i==0) return 0; } return 1; } int main() { int n,j,count=0; for(n=101;n<=200;n++) { j=isPrime(n); if(j==0) { printf("%5d",n); count++; } } printf("\n101~200之間一共有%d個非素數",count); return 0; }
實驗5.
#include<stdio.h> long fun(long s); int main() { long s,t; printf("Enter a number: "); while(scanf("%ld",&s)!=EOF) { t=fun(s); printf("new number is:%ld\n\n",t); printf("Enter a number: "); } return 0; } long fun(long s) { long sum1=0,sum=0,temp; for(temp=s;temp>0;temp/=10) { if(temp%2==1) sum1=sum1*10+temp%10; } while(sum1) { sum=sum*10+sum1%10; sum1/=10; } return sum; }
實驗6.(注意小數運算至少要有一個小數)
#include<stdio.h> double fun(int n); int fac(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) { double s; if(n==1) s=1; else s=fun(n-1)+1.0/fac(n); return s; } int fac(int n) { if(n==1) return 1; else { int s=(-1)*fac(n-1)*n; return s ; } }