任务一:
一元二次方程的根不能设计成以函数返回值的方式返回给主调函数,因为函数的返回值至多有一个
任务二:
#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 ", 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 ", 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变量的特性:再次调用函数时会保留上次函数调用结束时的值
任务三:
#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, f); } return 0; } long long fun(int n){ long long s; if(n == 0) s = 0; else{ s = 2*(fun(n-1) + 1) - 1; } return s; }
任务5
#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(" "); } return 0; } void draw(int n, char symbol){ int i, x, y, line; for(line=1; line<=n; line++){ x = n - line; y = 2*line - 1; for(i=1; i<=x; i++) printf(" "); for(i=1; i<=y; i++) printf("%c", symbol); printf(" "); } }