一、实验目的
二、实验准备
三、实验内容
1. 实验任务1
源代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 #include <windows.h> 5 #define N 80 6 7 void print_text(int line, int col, char text[]); // 函数声明 8 void print_spaces(int n); // 函数声明 9 void print_blank_lines(int n); // 函数声明 10 11 int main() { 12 int line, col, i; 13 char text[N] = "hi, November~"; 14 15 srand(time(0)); // 以当前系统时间作为随机种子 16 17 for(i = 1; i <= 10; ++i) { 18 line = rand() % 25; 19 col = rand() % 80; 20 print_text(line, col, text); 21 Sleep(1000); // 暂停1000ms 22 } 23 24 return 0; 25 } 26 27 // 打印n个空格 28 void print_spaces(int n) { 29 int i; 30 31 for(i = 1; i <= n; ++i) 32 printf(" "); 33 } 34 35 // 打印n行空白行 36 void print_blank_lines(int n) { 37 int i; 38 39 for(i = 1; i <= n; ++i) 40 printf("\n"); 41 } 42 43 // 在第line行第col列打印一段文本 44 void print_text(int line, int col, char text[]) { 45 print_blank_lines(line-1); // 打印(line-1)行空行 46 print_spaces(col-1); // 打印(col-1)列空格 47 printf("%s", text); // 在第line行、col列输出text中字符串 48 }
运行结果:
代码实现功能的文字描述:
随机取行,随机取列,然后输出字符串,配合Sleep函数,造成动画效果。
2. 实验任务2
task2_1.c
源代码:
1 // 利用局部static变量的特性,计算阶乘 2 3 #include <stdio.h> 4 long long fac(int n); // 函数声明 5 6 int main() { 7 int i, n; 8 9 printf("Enter n: "); 10 scanf("%d", &n); 11 12 for (i = 1; i <= n; ++i) 13 printf("%d! = %lld\n", i, fac(i)); 14 15 return 0; 16 } 17 18 // 函数定义 19 long long fac(int n) { 20 static long long p = 1; 21 22 p = p * n; 23 24 return p; 25 }
插入一行后的源代码:
1 // 利用局部static变量的特性,计算阶乘 2 3 #include <stdio.h> 4 long long fac(int n); // 函数声明 5 6 int main() { 7 int i, n; 8 9 printf("Enter n: "); 10 scanf("%d", &n); 11 12 for (i = 1; i <= n; ++i) 13 printf("%d! = %lld\n", i, fac(i)); 14 15 return 0; 16 } 17 18 // 函数定义 19 long long fac(int n) { 20 static long long p = 1; 21 printf("p = %lld\n", p); 22 p = p * n; 23 24 return p; 25 }
运行结果:
task2_2.c
源代码:
1 // 练习:局部static变量特性 2 3 #include <stdio.h> 4 int func(int, int); // 函数声明 5 6 int main() { 7 int k = 4, m = 1, p1, p2; 8 9 p1 = func(k, m); // 函数调用 10 p2 = func(k, m); // 函数调用 11 printf("%d, %d\n", p1, p2); 12 13 return 0; 14 } 15 16 // 函数定义 17 int func(int a, int b) { 18 static int m = 0, i = 2; 19 20 i += m + 1; 21 m = i + a + b; 22 23 return m; 24 }
运行结果:
与理论分析一致。
局部static变量的文字理解:
局部static变量恒有CPU为其分配的空间,所以不像别的变量在函数调用完成后存储空间 被删除,数据清零。
局部static变量会保留上一次运行后的结果值。
3. 实验任务3
源代码:
1 #include <stdio.h> 2 long long func(int n); // 函数声明 3 4 int main() { 5 int n; 6 long long f; 7 8 while (scanf("%d", &n) != EOF) { 9 f = func(n); // 函数调用 10 printf("n = %d, f = %lld\n", n, f); 11 } 12 13 return 0; 14 } 15 16 long long func(int n){ 17 if(n == 1){ 18 return 1; 19 } 20 else if(n == 0){ 21 return 0; 22 } 23 else{ 24 return 2*func(n - 1) + 1; 25 } 26 }
运行结果:
4. 实验任务4
task4_1.c
源代码:
1 #include <stdio.h> 2 int func(int n, int m); 3 4 int main() { 5 int n, m; 6 7 while(scanf("%d%d", &n, &m) != EOF) 8 printf("n = %d, m = %d, ans = %d\n", n, m, func(n, m)); 9 10 return 0; 11 } 12 13 int func(int n, int m){ 14 int i,j; 15 int up = 1,down = 1; 16 for(i = n - m + 1; i <= n; i++){ 17 up *= i; 18 } 19 for(j = 1; j <= m; j++){ 20 down *= j; 21 } 22 return up/down; 23 }
运行结果:
task4_2.c
源代码:
1 #include <stdio.h> 2 int func(int n, int m); 3 4 int main() { 5 int n, m; 6 7 while(scanf("%d%d", &n, &m) != EOF) 8 printf("n = %d, m = %d, ans = %d\n", n, m, func(n, m)); 9 10 return 0; 11 } 12 13 int func(int n, int m){ 14 if(m > n){ 15 return 0; 16 } 17 else if(n == m || m == 0){ 18 return 1; 19 } 20 else{ 21 return func(n - 1,m) + func(n - 1, m - 1); 22 } 23 }
运行结果:
5. 实验任务5
源代码:
1 #include<stdio.h> 2 void hanio(int n, char A, char B, char C); 3 void move(int n,char A, char B); 4 5 int main(){ 6 int n,i; 7 int s; 8 while(scanf("%d",&n) != EOF){ 9 hanio(n,'A','B','C'); 10 s = 1; 11 for(i = 1; i <= n; i++){ 12 s *= 2; 13 } 14 printf("一共移动了%d次\n",s - 1); 15 } 16 return 0; 17 } 18 19 void hanio(int n, char A, char B, char C){ 20 if(n == 1){ 21 move(n,A,C); 22 } 23 else{ 24 hanio(n - 1,A,C,B); 25 move(n,A,C); 26 hanio(n - 1,B,A,C); 27 } 28 } 29 30 void move(int n,char A, char B){ 31 printf("%d:%c --> %c\n",n,A,B); 32 }
运行结果:
6. 实验任务6
源代码:
#include <stdio.h> #include <math.h> long func(long s); // 函数声明 int main() { long s, t; printf("Enter a number: "); while (scanf("%ld", &s) != EOF) { t = func(s); // 函数调用 printf("new number is: %ld\n\n", t); printf("Enter a number: "); } return 0; } //123 long func(long s){ int m,n,t = 1,k = 0; while(s/10 != 0 || s%10 != 0){ m = s%10; if(m%2 != 0){ k += m*t; t *= 10; } s = s/10; } return k; }
运行结果:
标签:10,return,函数,int,编程,long,C语言,func,include From: https://www.cnblogs.com/forgiver/p/17798388.html