实验3
1.
#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; }
#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变量:不用重新赋值
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); } printf("\n"); }
#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{ printf("%c",symbol); printsymbol(n-1,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) { if(n==0) return 0; else if(n==1) return 1; else{ return 2*fun(n-1)+1; } }
4.
#include<stdio.h> int isprime(int n); int main() { int n,num,j=0; //n存放100~200的数, num存放是否素数,j计数 for(n=101;n<=200;n++) { num=isprime(n); if(num==1) continue; else{ printf("%4d",n); j++; } } printf("\n"); printf("101~200之间一共有%d个非素数",j); return 0; } int isprime(int n) { int i,s; for(i=2;i<=n;i++){ s=n%i; if(s==0) break; } if(i==n) return 1; else 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) { int num,result=0,j=1; while(s>0) { num=s%10; if(num%2==1) { result=result+j*num; j=j*10; } s=s/10; } return result; }
6.
#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) { double sum; int i,sign,bottom; sum=0; sign=1; bottom=1; for(i=1;i<=n;i++){ bottom=bottom*i; sum=sum+1.0*1/bottom*sign; sign=sign*(-1); } return sum; }
实验总结:
1.学习使用了函数,static变量,递归
2.注意区分11d和lld,前一个是占11位,后一个是输入输出longlong整型
3.在编写后三个代码是遭遇了不一样的问题,一个小问题会导致运行结果大相径庭:注意括号的位置、优先级;注意行代码在嵌套里的位置等等