C语言程序设计基础 实验3 函数
一、实验目的
1. 理解函数的本质:模块化,实现代码复用
2. 掌握函数定义、声明、调用的语法
3. 理解并掌握函数的形参、实参,以及函数调用和返回的过程
4. 综合应用分支、循环和函数编程解决常见实际问题
实验一
(1)
#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; return p; }
感悟:这个代码非常的细节,考虑到了同学们可能会输入较大的n从而导致对应的阶乘超出int的范围。已知long long的范围下最大的阶乘表示为26
在line22之后插入打印
#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; printf("p = %lld\n", p); p = p * n; return p; }
(2)
#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); }
实验二
#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) return ; printf("%c",symbol); printSymbol(n-1,symbol); }
递归版
#include <stdio.h> void printSymbol(int n, char symbol); int main() { int n; char symbol; while( scanf("%d %c", &n, &symbol) != EOF ) { for(int i=1;i<=n;++i) printf("%c",symbol); printf("\n"); } return 0; } void printSymbol(int n, char symbol){ if(!n) return ; printf("%c",symbol); printSymbol(n-1,symbol); }
我认为递归好一点,因为代码短
实验三
#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){ if(n==1) return 1ll; return 2ll*fun(n-1)+1; }
实验四
#include <stdio.h> #define true 0 #define false 1 #define bool int bool is_prime(int x) { for(int i=2; i<=x/i; ++i) if(x%i==0) return true; return false; } int main() { int cnt = 0; for(int i=101; i<=200; ++i) { if(!is_prime(i)) { cnt ++; printf("%d ",i); if(cnt%20 == 0) puts(""); } } puts(""); printf("101~200之间一共有%d个非素数\n",cnt); return 0; }
实验五
#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){ long base = 1,ans=0; while(s){ long num = s%10; if(num&1){ ans += base*num; base*=10; } s/=10; } return ans; }
实验六
#include <stdio.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){ if(n==1) return 1; double ans = 1.0; for(int i=1;i<=n;++i) ans*=i; if(n&1) return fun(n-1) + 1.0/ans; else return fun(n-1) - 1.0/ans; }