实验4
一、实验结论
任务1:
本程序输出时涉及x1,x2,real,imag多个变量,函数返回值只有一个。
任务2
#define _CRT_SECURE_NO_WARNINGS #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; printf("p = %lld\n", p); return p; }

任务2_2运行结果:8 17
初看似乎p1和p2的值应该一样,但由于i m为static变量,第二次运行函数时i m的值已经改变。
static变量的值在函数运行结束后会被保存。
任务3
#define _CRT_SECURE_NO_WARNINGS #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(i>=j) 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
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> long long fun(int k); 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 k,r; if (n == 0) k=1; else k = 2*(fun(n - 1)+1); return k-1; }

任务5
#define _CRT_SECURE_NO_WARNINGS #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; for(line=1;line<=n;line++) { for (i = 1; i <= ((2*n-1) - (2 * line - 1)) / 2; i++) printf(" "); for (i = 1; i <= 2 * line - 1; i++) printf("%c", symbol); for (i = 1; i <= ((2 * n - 1) - (2 * line - 1)) / 2; i++) printf(" "); printf("\n"); } }

二、实验总结
任务4函数递归设计时对于n>=2时计算2^n未注意到返回值k已经减1;所以结果一直不对。
递归时应该把返回值加1。
浙公网安备 33010602011771号