实验3
task1
#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(1)); 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(1)); return 0; } long long fac(int n) { static long long p = 1; printf("p = %11d\n",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变量的特性:分配静态内存,当函数调用完成后,内存不回收。
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; } // 函数printSymbol定义 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!=0){ printf("%c",symbol); return printSymbol (n-1,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 ans; if(n==1) ans=1; else ans=(fun(n-1)+1)*2-1; }
task4
#include<stdio.h> #include<math.h> int isPrime(int n){ int i; for(i = 2;i<=sqrt(n);i++) if(n%i==0) return 0; return 1; } int main(){ int i; int num = 0 ; int k =0; for(i=101;i<=200;i++){ if (isPrime(i) == 0){ printf("%d ",i); num++; k++;} if(k==10){ printf("\n"); k = 0; } } printf("\n一共有%d个非素数",num); }
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 i=1; int t; int num=0; while(s!=0){ t = s%10; if (t % 2 ==1){ num = num + t*i; i *=10; } s = s/10; } return num; }
task6
#include <stdio.h> #include <math.h> double fun(int n); int main() { int n; 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 qwq=1; int i; double s =0; for(i=1;i<=n;i++){ qwq = qwq * i; s= s+pow(-1,i-1)*(1/qwq);} return s; }
总结:巩固了关于递归方面的知识