实验1
一元二次方程的根不可以设计成函数的返回值返回给主调函数,因为一元二次方程的根可能有两个不同的,而函数的返回值只能是一个。
实验2
#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> long long fac(int n); int main(){ int i,n; printf("Enter n: "); scanf("%d",&n); for(i=1;i<=n;++i){ printf("\n%d!=%lld\n",i,fac(i)); } return 0; } long long fac(int n){ static long long p=1; printf("%lld ",p) ; 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变量将保留上一次的运行结果
实验3
#include<stdio.h> #define N 1000 int fun(int n,int m,int bb[N]) { int i,j,k=0,flag; for(j=n;j<=m;j++){ flag=1; for(i=2;i<j;i++){ if(j%i==0){ flag=0; break; } } if(flag==1){ bb[k++]=j; } } return k; } int main(){ int n=0,m=0,i,k,bb[N]; scanf("%d",&n); scanf("%d",&m); for(i=0;i<m-n;i++){ bb[i]=0; } k=fun(n,m,bb); for(i=0;i<k;i++){ printf("%4d",bb[i]); } return 0; }
实验4
#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 s; if(n==1){ s=1; } else{ s=2*fun(n-1)+1; } return s; }
实验5
#include <stdio.h> void draw(int n,char symbol); #include <stdio.h> int main() { int n; char symbol; while(scanf("%d %c", &n, &symbol) != EOF) { draw(n, symbol); printf("\n"); } return 0; } void draw(int n,char symbol){ int line,i,t; for(line=1;line<=n;line++){ for(i=1;i<=n-line;i++){ printf(" "); } for(t=1;t<=2*line-1;t++){ printf("%c",symbol); } printf("\n"); } }
实验总结:本次实验重点在函数的定义、声明和调用,就不用再相同的操作将代码复制粘贴一遍了,也会使代码更加简洁明了。
这次实验中我踩了不少坑,关于数组的操作中fun=(m,n,bb)我将bb打成了bb[N],尝试过不对后又改成bb[i],都显示错误,最后询问了同学才知道应该是bb,这里应该是数组而不是数字。而实验4中也可以函数定义中用2^n,最后运用+1-1的操作,就不需要再找f(n)和f(n+1)的关系。