实验3
#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! = %11d\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("%d!=%11d\n", i, fac(i));//lld不是11d return 0; } long long fac(int n) { static long long p = 1; printf("p = %lld\n", p); p = p * n; return p; }
#include<stdio.h> int func(int,int);//hanshushengming 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;//static只在第一次运用时取定义值,以后每次都是刷新数据 i += m + 1; m = i + a + b; return (m); }
运行结果一致,static变量所赋的值只用于第一次使用,后续使用会保留上一次的值
task2
迭代
#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); }
递归
#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); } }
递归好一些,能有效锻炼思维
task3
#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) { int p; if(n==1) p=1; else p=(fun(n-1)+1)*2-1;//递归,从第一项开始算,往后推(最后一项不好表示) return p; }
task4
#include<stdio.h> #include<math.h> int isPrime(int);//函数声明 int main() { int i,sum=0; for(i=101;i<=200;i++) { if(isPrime(i)==0) { printf("%4d",i); sum++; } } printf("\n"); printf("101~200之间一共有%d个非素数",sum); return 0; } int isPrime(int n) { int s, m; for(m=2;m<=sqrt(n);++m) { s = n % m; if(s==0) return 0; else if(m>sqrt(n)) return 1; } }
task5
#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 p=0,n=1; long int t; do { t=s%10; if(t%2!=0) { p=p+n*t; n=n*10; } s=s/10; }while(s>0); return p; }
task6
#include <stdio.h> double fun(int n); int main() { int n,t; 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) { double answer,t=0; int sign=1,p=1,i=1; if(n==1) answer = 1; else { for(i=1;i<=n;i++) { p=p*i; t=t+sign*(float)1/p; sign=-sign; answer=t; } } return answer; }
对递归函数的运用更加熟练,对抽象问题的处理能力也有了显著提高