实验任务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; return p; }
static变量p使p仅在编译时被赋值一次1,在后续运行中用于参与累乘
添加一行打印p的值后
局部static变量的特性:它的数据存储在静态存储区,当再次进入该函数时,将保存上一次的结果
8,17
p1=3+4+1=8
p2=9+3+4+1=17
#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); }
实验任务2
实现方式1:(迭代思维)
#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=1;i<=n;i++) { printf("%c",symbol); } }
实现方式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) { if(n==1) printf("%c",symbol); else { printSymbol(n-1,symbol); printf("%c",symbol); } }
实验任务三
#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) { static int p=1; static long long int m=1; if(n==0) { m=0; } else { m=2*fun(n-1)+1; } return m; }
实验任务四
#include<stdio.h> #include<math.h> int isPrime(int a); int main() { int num; int count=0; for(num=101;num<=200;num++) { while(!isPrime(num)) { printf("%d\t",num); count++; break; } } printf("\n101~200之间一共有%d个非素数",count); } int isPrime(int a) { int i; for(i=sqrt(a);i>=2;i--) { if(a%i==0) { return 0; } } if(i==1) return 1; }
实验任务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 i=10,t,k=0; for(;s!=0;) { t=s%i; s=s/i; if((t%2)!=0) { k=k*10+t; } } s=k; k=0; for(;s!=0;) { t=s%i; s=s/i; k=k*10+t; } return k; }
实验任务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) { int i,k=1,j=1; double result=0; double a; for(i=1;i<=n;i++) { k=k*i; a=1.0/k; result=result+j*a; j*=-1; } return result; }
实验总结
注意输出要求
注意函数声明,函数调用,函数定义的格式
区分迭代和递归
要给递归设计出口
对迭代的使用和理解尚不熟练