实验4 函数和数组
实验一
不能,因为一元二次方程的根有两个,而函数的返回值无法做到返回两个根的值。
实验二
#include<stdio.h> long long fac(int n) { static long long p=1; p=p*n; return p; } int main() { int i,n; printf("enter n:"); scanf("%d",&n); for(i=1;i<=n;++i) printf("%d!=%11d\n",i,fac(i)); return 0; }
一致
总结局部static变量特性:静态局部变量,程序执行期间,一旦存储单元中的值改变,就不会再次执行赋初始值的操作。
实验三
#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; }
实验四
#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 long long a=1; static int i=0; static long long b; if(n) { n--; i++; fun(n); } if(i) { i--; a=a*2; } else{ b=a-1; a=1; return b;}}
实验五
#include <stdio.h> void draw(int n, char symbol); int main() { int n, symbol; while(scanf("%d %c", &n, &symbol) != EOF) { draw(n, symbol); printf("\n"); } return 0; } void draw(int n,char symbol) { int i=1; for(i=1;i<=n;i++) { int j; for(j=n-i;j>0;j--) printf(" "); for(j=1;j<=(2*i-1);j++) printf("%c",symbol); printf("\n"); } return; }
踩了C11标准的坑。。。。